修改linux网卡驱动,终于成功通过重构skb实现vlan功能
linux vlan 设置
Linux VlanAdd two vlan scopes on switchVlan 1 port 1-12 untag (13-24 port set no)Vlan 2 port 13-24 tagClient settingFor File transfer1. mdkir /mgdisk2. #vi /etc/exports/mgdisk (rw,no_root_squash,no_subtree_check)Vlan1. don’t set ip address for the nic to run vlan2. #modprobe 8021q#vconfig add ethx z(x eth # , z vlan id)#ls /proc/net/vlan (check if vlan ethx.z be created )#ifconfig –a (check if vlan ethx.z be created )#ifconfig ethx.z 192.168.100.100 netmast 255.255.255.0 upUse the vlan ip address to do relative testRestart nfs server#/etc/init.d/nfserver restart (sles need to install file server have this service) #/etc/init.d/nfs restart (for rhel)SUT settingBondingSLES1. set down for each bonding slave eth device#yast2 lanUnder address set no ip addressUnder general activate: never2. add new bond device nextUnder bond slave check the eth device and set bond driver option RHEL#ifconfig down#modprobe bonding mode=x miimon=100(x the bond mode you want to run ) #cat /proc/net/bonding/bond0(check if bond vlan is set)#ifconfig bond0 up#ifenslave bond0 eth0 eth1 eth2 eth3(select the eth you wanna join the bond)Create vlan#modprobe 8021q#vconfig add bondx z(x bond# , z vlan id)#ls /proc/net/vlan (check if vlan bondx.z be created )#ifconfig –a (check if vlan bondx.z be created )#ifconfig bondx up#ifconfig bondx.z 192.168.100.200 netmast 255.255.255.0Use the vlan ip address to do relative testPing client to make sure the connect is setup without error Mount client nfs folder#mkdir /nfs (create nfs folder for mg test use)#mount –t nfs 192.168.100.100:/mgdisk /nfs –o nolockFile testInstall MGExecute MGUnder test ,uncheck all test and select network file test.Click net fileScan for test path and found /nfs →activate the pathChange thread # →6Then apply the settingAfter test#umount –l /nfs (-l lazy mount for file system)。
linux vlan 配置
Linux vlan 配置第一步:安装vlan(vconfig)和加载8021q模块具体命令如下:yum install vconfigmodprobe 8021qlsmod | grep –i 8021q第二步:使用Linux vconfig 命令配置vlan ,以eth0为例具体命令如下:(1)vconfig add eth0 100执行后,出现如下结果:Added VLAN with VID == 100 to IF -:eth0:-(2)vconfig add eth0 200执行后,出现如下结果:Added VLAN with VID == 200 to IF -:eth0:-第三步:在eth0接口上配置两个VLAN具体命令如下:(1)v iconfig set_flag eth0.100 1 1执行后,出现如下结果:Set flag on device -:eth0.100:- Should be visible in/proc/net/vlan/eth0.100(2)v iconfig set_flag eth0.200 1 1执行后,出现如下结果:Set flag on device -:eth0.200:- Should be visible in/proc/net/vlan/eth0.200第四步:配置eth0口的ip及两个vlan口的ip和子网掩码具体命令如下:(1)ifconfig eth0 0.0.0.0(2)ifconfig eth0.100 172.16.1.8 netmask 255.255.255.0 (3)ifconfig eth0.200 172.16.2.8 netmask 255.255.255.0注意:(1)由于我们使用vlan,所以eth0不设置IP,设置后会报错(2)可以用命令cat /proc/net/vlan/eth0.100查看eth0.100的参数(3)可以用命令cat /proc/net/vlan/eth0.200查看eth0.200的参数第五步:配置两个vlan口的网络信息具体命令如下:(1)v iconfig rem eth0.100执行后,出现如下结果:Removed VLAN -:eth0.100:-(2)v iconfig rem eth0.100执行后,出现如下结果:Removed VLAN -:eth0.200:-。
Linux下修改网卡IP和网关
Linux下修改网卡IP和网关Linux下修改网卡IP和网关修改ip地址即时生效:# ifconfig eth0 192.168.0.20 netmask 255.255.255.0启动生效:修改/etc/sysconfig/network-scripts/ifcfg-eth0修改default gateway即时生效:# route add default gw 192.168.0.254启动生效:修改/etc/sysconfig/network-scripts/ifcfg-eth0修改dns修改/etc/resolv.conf修改后可即时生效,启动同样有效修改host name即时生效:# hostname fc2启动生效:修改/etc/sysconfig/networketc/sysconfig/network-scripts/ifcfg-ethN 文件在RedHat中,系统网络设备的配置文件保存在“/etc/sysconfig/network-scripts”目录下,ifcfg-eth0包含第一块网卡的配置信息,ifcfg-eth1包含第二块网卡的配置信息。
下面是“/etc/sysconfig/network-scripts/ifcfg-eth0”文件的示例:DEVICE=eth0IPADDR=x.x.x.xNETMASK=255.255.255.0NETWORK=x.x.x.xBROADCAST=x.x.x.xONBOOT=yesBOOTPROTO=noneUSERCTL=no若希望手工修改网络地址或在新的接口上增加新的网络界面,可以通过修改对应的文件(ifcfg-ethN)或创建新的文件来实现。
DEVICE=name name表示物理设备的名字IPADDR=addr addr表示赋给该卡的IP地址NETMASK=mask mask表示网络掩码NETWORK=addr addr表示网络地址BROADCAST=addr addr表示广播地址ONBOOT=yes/no启动时是否激活该卡none:无须启动协议bootp:使用bootp协议dhcp:使用dhcp协议USERCTL=yes/no是否允许非root用户控制该设备手工使用命令法是基于以太网卡已装入的情况下,编辑配置文件来配置网络的方法。
linux下双网卡绑定配置
在linux下如何做双网卡绑定实现冗余?一、Linux Channel Bonding目前在各个发行版本的 Linux 中,使用最普遍的内核版本应该就是 2.4.x的版本了,而Linux Channel Bonding,在 Linux 2.4 的内核中,就提供了 bonding 的驱动,可以支持把多个网络适配器集合在一起,当作一个网络适配器来使用。
在 Linux 下,网卡的高可用性是通过 MII 或者 ETHTOOL 的状态监测来实现的,所以,需要检查系统中的网络适配器是否支持 MII 或者 ETHTOOL 的连状态监测。
可以用命令 "ethtool eth0" 来检查,如果显示的 "Link detected:" 信息与实现的连接状态一致,就没有问题。
如果系统中的网络适配器不支持 MII 或者 ETHTOOL 状态监测,当连接失效时,系统就不能检测到,同时,在 bonding 驱动加载时,会记录一条不支持 MII 和 ETHTOOL 的警告信息。
下面简单介绍一下实现的基本方法:首先,我们需要打开内核对 bonding 支持。
设置内核 "make menuconfig/xconfig/config",在"Network device support"区段中选择"Bonding driver support",建议设置该驱动程序为模块,这样才能支持给驱动传递参数和设置多个bonding设备。
生成并安装新的内核和模块。
Bonding 的设置我们需要在 /etc/modules.conf 中加入两行,这样才可以在设置了 bond 设置后,系统启动的时候自动加载 bonding 的驱动程序alias bond0 bondingoptions bond0 miimon=100 mode=1当mode=1时为主备模式,mode=0时为负载均衡模式。
Linux高级网络配置VLAN路由和VPN的实践
Linux高级网络配置VLAN路由和VPN的实践在网络技术的发展中,Linux已经成为了广泛应用的操作系统之一。
它强大的自由开源特性,使得用户可以灵活地进行高级网络配置,包括VLAN路由和VPN的实践。
本文将详细介绍Linux下如何进行高级网络配置,以实现VLAN路由和VPN的应用。
一、VLAN路由的实践VLAN(Virtual Local Area Network)是虚拟局域网的缩写,是一种将一个局域网划分为多个虚拟的局域网的技术。
在Linux中,我们可以通过配置VLAN路由,实现不同虚拟局域网之间的互通。
要实现VLAN路由,首先需要确保硬件设备支持802.1Q协议。
在Linux中,可以使用Vconfig命令创建和配置VLAN接口。
首先,我们需要加载8021q内核模块,执行以下命令:```modprobe 8021q```接下来,我们可以使用Vconfig命令创建一个VLAN接口,例如创建一个ID为10的VLAN接口eth0.10:```vconfig add eth0 10```然后,配置VLAN接口的IP地址和子网掩码:```ifconfig eth0.10 192.168.0.1 netmask 255.255.255.0 up```通过以上步骤,我们成功地创建了一个VLAN接口,并为其配置了IP地址和子网掩码。
接下来,我们需要进行路由配置,以实现不同VLAN之间的通信。
可以使用route或者ip命令进行路由配置。
例如,我们可以添加一条路由表项,将VLAN接口eth0.10与其他VLAN接口连接起来:```route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0.10```通过以上配置,我们就成功地实现了VLAN路由。
不同VLAN之间的主机可以通过配置的路由表项进行通信,实现网络互通。
二、VPN的实践VPN(Virtual Private Network)是虚拟专用网络的缩写,它通过加密和隧道技术,在公共网络上建立一个安全的通信通道。
Linux、Windows下更换网卡后的网络重配置
Linux、windows 下更换网卡后的网络重配置我们在为安装了Redhat 的服务器更换网卡、主板或SPI板(集成网卡在主板或SPI 上)时,系统的网络配置信息有变,需要重新配置信息才能正常连通网络,因为redhat5 与redhat6的情况不一样,下面分别以这两种系统来举例说明:Redhat5:网卡更换前,只存在eth0:我们点击进入eth0可以看到eth0的网络配置信息如下:当我们更换网卡后,再进入网络可以看到已生成了一个eth0.bak文件:我们再点击进入eth0可以看到,原本的网络信息已不存在:点击eth0.bak可以看到,原本的网络信息在eth0.bak内:若想让网卡恢复原先配置,需要把eth0.bak内的信息重新写回eth0中并激活,重启网络即可:Redhat6:网卡更换前,只存在eth0:点击进入eth0,可以看到网络配置信息如下:更换网卡后,通过setup图开化界面还是只能看到存在eth0:点击进入eth0可以看到,原本的网络配置信息存在,但需要注意的是,现在网络不能连通,因为新加入的网卡已不是原本的eth0,我们通过ifconfig–a 验证如下,新加入的网卡为eth3:所以我们需要把原本eth0的信息写入eth3的配置文件ifcfg-eth3(需要自己创建),可以用下面两种方法操作:1.通过修改/etc/sysconfig/network-scripts/ifcfg-eth0文件:把ifcfg-eth0改名为ifcfg-eth3:并修改里面DEVICE名称为eth3:保存退出重启网络即可。
2.通过setup工具:在命令行输入setup,弹出图形化工具:选择Network configuration并选择New Device:选择Ethernet:新建网卡如下,其中的网络信息为更换网卡前的网络信息:保存并重启网络即可。
Windows下,更换网卡后,系统会自动将新的网卡信息重写到网络配置文件,并不需要我们做任何操作。
内核构造skb数据包的实现总结
/macrossdzh/article/details/5438306一、IPv4、TCP和UDP的校验和计算校验和是网络协议用来识别传输错误的冗余域。
有些校验和不但能检测错误,还能自动修正某些类型的错误。
校验和的想法很简单。
在传输一个数据包之前,发送方计算出一个很小的、固定长度的域(校验和)包含数据的某种散列。
如果在传输过程中某几位数据被改变,很可能损坏的数据会产生一个不同的校验和。
取决于你用来产生校验和使用的函数,校验和提供不同级别的可靠性。
IP协议采用的校验和是简单的一个包括求和取反码,这个方法太弱了,不能被认为是可靠的。
对于更可靠的完整性检查,你必须依赖于L2 CRC或者SSL/IPSec消息认证码。
不同的协议可以使用不同的校验和算法。
IP协议校验和只覆盖IP头。
大多数L4协议的校验和均覆盖头和数据。
看起来在L2(比如,以太网)有校验和,L3(比如,IP)有另一个,L4(比如,TCP)还有一个的做法是冗余的,因为它们全都应用于数据的重叠部分,但是检查是有价值的。
错误不只在传输过程中发生,也会在层之间移动中发生。
而且,每个协议负责保证他自己的正确传输,不能假设高或低的层完成这个任务。
举一个可能发生的复杂情况的例子,想象LAN1上的PC A通过Internet发送数据给LAN2上的PC B。
假设LAN1中使用的L2协议使用校验和而LAN2上的不使用。
那么最少一个高层提供某种形式的校验和来减小接受损坏数据的可能性是很重要的。
每个协议的定义中都建议使用校验和,虽然它不是必须的。
然而,必须承认的是一个好的相关协议的设计可以去掉一些不同层协议之间的重叠特性带来的开销。
因为大多数L2和L4协议提供校验和,在L3中也有校验和就不是严格必须的。
正是由于这个原因,IPv6中去掉了这个校验和。
在IPv4中,IP校验和是一个16位域覆盖整个IP头,包括选项。
校验和最初由数据包源来计算,并在整个到目标的过程中一个跳跃一个跳跃的被更新以反映每个路由器带来的头部变化。
linux 划分vlan的方法及配置
linux 划分vlan的方法及配置以Linux划分VLAN的方法及配置一、什么是VLAN虚拟局域网(Virtual Local Area Network,简称VLAN)是一种将物理上分散的设备虚拟化成逻辑上的局域网的技术。
通过VLAN,可以将不同的设备逻辑上划分到不同的虚拟局域网中,实现网络资源的隔离和管理。
二、VLAN的划分方法在Linux系统中,可以使用多种方法来划分VLAN,以下是其中两种常用的方法:1. 使用VLAN子接口划分这种方法是通过创建VLAN子接口来实现VLAN的划分。
具体步骤如下:步骤一:编辑网络配置文件使用命令`vi /etc/sysconfig/network-scripts/ifcfg-eth0`打开网络配置文件,其中eth0为物理网卡的名称。
步骤二:添加VLAN子接口配置在文件末尾添加以下配置信息:```VLAN=yesTYPE=EthernetDEVICE=eth0.100 # 100为VLAN ID,可以根据实际需求进行修改BOOTPROTO=noneONBOOT=yes```步骤三:重启网络服务使用命令`service network restart`重启网络服务使配置生效。
2. 使用Bridge桥接划分这种方法是通过创建Bridge桥接来实现VLAN的划分。
具体步骤如下:步骤一:安装Bridge工具包使用命令`yum install bridge-utils`安装Bridge工具包。
步骤二:创建Bridge桥接使用命令`brctl addbr br0`创建一个名为br0的Bridge桥接。
步骤三:编辑网络配置文件使用命令`vi /etc/sysconfig/network-scripts/ifcfg-eth0`打开网络配置文件,其中eth0为物理网卡的名称。
步骤四:将物理网卡添加到Bridge桥接在文件末尾添加以下配置信息:```BRIDGE=br0```步骤五:配置VLAN子接口使用命令`vconfig add eth0 100`添加一个名为eth0.100的VLAN 子接口,其中100为VLAN ID,可以根据实际需求进行修改。
网卡设置之Centos7单网卡多VLAN
网卡设置之Centos7单网卡多VLAN前记:1.此场景是基于单网卡配置两个VLAN的IP(可更多)2.交换机端口正常设置放行VLAN一、首先为了方便查看,我们复制多两份网卡文件出来(VLAN号命名方便查找),对应的vlan配置对应的IP,配置完成后重启网络,带网关设置的IP会通。
网卡网卡内容(注意网关的设置,只设置一个网关)二、添加路由表并指定优先级(数值越小,优先级越高,上面3个是linux系统默认自带)Vi /etc/iproute2/rt_tables保存后退出三、给开机启动文件添加执行权限。
chmod +x /etc/rc.local四、将路由设置添加进开机启动命令。
vi /etc/rc.local新增以下启动项(以免重启失效,温馨提示:先复制一下内容,保存后要运行的)范文:ip route flush table e0ip route add default via 网关 dev 网卡名 src 公网IP table e0ip route add 127.0.0.0/8 dev lo table e0ip rule add from 公网ip table e0ip route flush table e1ip route add default via 网关 dev 网卡名 src 公网IP table e1ip route add 127.0.0.0/8 dev lo table e1ip rule add from 公网IP table e1五、将刚才添加进开机启动的路由命令复制出来,然后直接运行,这个时候IP就都通了。
注意!:可以重启服务器测试下开机启动命令有没有运行,如果没有运行,就只有单个VLAN 的IP会通。
(重启网络将会导致路由命令失效,重新跑一遍步骤四的路由命令即可)已路由测试(多VLAN单网卡设置的机器之间、多VLAN单网卡设置的机器与其他普通网卡设置的机器之间,互相通信均可正常通过内网互访)。
使用ifconfig命令在Linux中配置和管理VLAN接口
使用ifconfig命令在Linux中配置和管理VLAN接口使用ifconfig命令配置和管理VLAN接口在Linux中,ifconfig命令是一个常用的网络配置工具,可以用于配置和管理网络接口。
在本文中,我们将介绍如何使用ifconfig命令来配置和管理VLAN(Virtual LAN,虚拟局域网)接口。
1. 确认VLAN接口支持首先,在使用ifconfig命令配置和管理VLAN接口之前,我们需要确认当前系统的网卡驱动是否支持VLAN接口。
可以通过执行以下命令来检查:$ ifconfig -a如果输出中存在类似"eth0.10"的接口,则表示当前的网卡驱动支持VLAN接口。
如果没有相关输出,您可能需要更新或替换您的网卡驱动。
2. 创建VLAN接口接下来,我们可以使用ifconfig命令来创建一个VLAN接口。
首先,执行以下命令创建一个VLAN ID为10的VLAN接口:$ sudo ifconfig eth0.10 up这里的"eth0"是您主机上的物理接口名称,您可以根据实际情况进行替换。
"10"是您想要创建的VLAN ID,可以根据您的需求进行调整。
3. 配置VLAN接口IP地址一旦创建了VLAN接口,我们可以使用ifconfig命令为该接口分配IP地址。
执行以下命令配置一个IP地址:$ sudo ifconfig eth0.10 192.168.0.1 netmask 255.255.255.0这里的"eth0.10"是您创建的VLAN接口名称,"192.168.0.1"是您想要为该接口设置的IP地址,"255.255.255.0"是子网掩码。
4. 启用VLAN接口在进行配置之后,我们需要启用VLAN接口以确保其正常工作。
可以使用以下命令来启用接口:$ sudo ifconfig eth0.10 up这将使VLAN接口处于活动状态,并准备好和其他网络设备进行通信。
Linux中vlan的网卡教程
Linux中vlan的网卡教程关于Linux中vlan的网卡教程1.需要使用到vconfig软件。
首先yum安装vconfigyum install vconfig2.查看核心是否提供VLAN 功能,執行dmesg | grep -i 802查看是否支持,如下图表示支持[root@CactiServ]# dmesg | grep -i 802802.1Q VLAN Support v1.8 Ben Greear3.检查「/proc/net/vlan」档案是否存在:ls /proc/net/vlan如果沒有提供VLAN 功能,「/proc/net/vlan」目錄是不存在的`。
如果存在如下所示:[root@CactiServ]# ls /proc/net/vlanconfig eth1.100 eth1.254.使用「m o d p ro b e 」模组命令载入「802.1q.o」模组,而且利用「lsmod」命令确认模組是否已经载入到核心內。
[root@CactiServ]# modprobe 8021q[root@CactiServ]# lsmod | grep 8021q8021q 25493 0garp 7152 1 8021q5.使用vconfig命令增加子接口:增加vlan为25和vlan为100的子接口vconfig add eth1 25vconfig add eth1 100然后,利用ls 指令查看「/proc/net/vlan」目录下有何变化,发现多了一哥名为「eth1.25」的档案,而且可使用「ifconfig eth1.25」命令來确定VLAN 介面是否存在。
注意增加vlan,增加子接口时,首先确保eth1端口无ipadd。
6.增加好以后,利用cp命令复制接口的ip地址配置。
cp ifcfg-eth1 ifcfg-eth1.25cp ifcfg-eth1 ifcfg-eth1.100再vi修改ifcfg-eth1.25 ifcfg-eth1.100文件,设置IP地址等信息。
在Linux接口层实现VLAN和STACKING VLAN混合过滤软件
在Linux接口层实现VLAN和STACKINGVLAN混合过滤软件作者:张建辉杨翠环张宝成来源:《职业时空》2007年第20期1.引言VLAN(802.1Q协议)是一种通过将局域网内的设备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组的技术。
它的实现方式是在原有以太网帧的头部添加4字节的VLAN 标签,用其中的12位TCI数据段来标记VLAN号,使得VLAN号相同的计算机被划为一个虚拟子网。
但是,VLAN技术在传统的以太网帧格式中只定义了4096个VLAN号,限制了其在更大规模的网络中的应用。
解决以太网大规模应用如何突破VLAN划分瓶颈的一种方案是STACKING VLAN,又名QinQ或Double VLAN。
它在原有VLAN标签的基础上,再添加4字节的VLAN标签。
这样将VLAN号数量扩充至4096*4096=16000000以上,可以满足大规模的城域网的要求(为了描述方便,下面称VLAN为称单VLAN,STACKING VLAN为双VLAN)。
目前实现单双VLAN技术的主要方法是为现有网络增加各种支持单双VLAN功能的交换机。
对于一个典型的支持VLAN的交换机而言,它可以在不同端口上指定不同的VLAN号,在收发用户数据包时,自动将VLAN号加入或剥离出用户数据包。
但单双VLAN在广域网和局域网中的广泛应用,也会带来一些不同网络的兼容性问题。
两种典型的问题如图1所示。
在图1左侧可以看到,当运营商想把一台原来在普通广域网中部署的服务器接入到应用双VLAN的广域网中时,如果想保持服务器上的原有配置不变,并且不再重新开发已有的网络应用程序,则必须增加一台或多台支持双VLAN功能的交换机,来实现从普通网络到双VLAN 网络的转换。
在图1右侧可以看到,当运营商自己的服务器同时部署在双VLAN的广域网中和单VLAN的公司局域网中时,如果保持服务器上的原有配置不变,并且不再重新开发已有的网络应用程序,则必须增加一台或多台支持单双VLAN功能的交换机,来实现单双VLAN网络到普通网络的转换。
修改linux网卡驱动,终于成功通过重构skb实现vlan功能
修改linux网卡驱动,终于成功通过重构skb实现vlan功能(原创)测试环境:mips核cpu,linux-2.4测试工具:用wrieshark抓包看现在的ip包格式一、思路:1.先能进行编译、烧写内核2.打开现有的debug开关,看有关的打印信息3.烧录bin文件到/dev/mtd14.用wrieshark抓包看现在的ip包格式5.开始修改包6.另外,需要学习skbuff二、了解802.1Q TAG1、802.1Q:目标MAC 源MAC 802.1Q 协议类型/长度数据 FCS 6字节 6字节 4字节 2字节未知 4字节802.1Q报头中有以下字段:Protocol Type:指明该数据包是一个802.1Q数据包,取值0x8100;Priority:指明该数据包的优先级,一般情况下置0;CFI:此位一般忽略,置0;VLAN ID:这是一个12位的域,指明VLAN的ID,一共4096个;三、学习skbuff:unsigned char *headunsigned char *endunsigned char *dataunsigned char *taila)skb_put;b)skb_push;c)skb_pull;d)skb_reserve四、设计软件,实现其所想1、设计打印函数,便于调试:-----------------------1----------------------------data-tail=0,skb->date_len=0,skb->len=0;skb.data=-2128687502;skb.tail= -2128687502;akb.protocol=1544---------------------------------------------------------------------------2----------------------------[0]-[66]-[88]-[15]-[0]-[da]-[0]-[23]-[89]-[e3]-[d8]-[33]-[8]-[6]-[0]-[1]-[8]-[0]-[6]-[4]-[0]-[2]-[0]-[23]-[89]-[e3]-[d8]-[33]-[c0]-[a8]-[2 ]-[fe]-[0]-[66]-[88]-[15]-[0]-[da]-[c0]-[a8]-[2]-[6e]-[0]-[0]-[0]-[0] -[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-data-tail=60,skb->date_len=0,skb->len=60;skb.data=-2128687442;skb.tai l=-2128687442;akb.protocol=1544---------------------------------------------------------------------------3----------------------------data-tail=-14,skb->date_len=0,skb->len=46;skb.data=-2128687428;skb.ta il=-2128687442;akb.protocol=29499----------------------------------------------------2、设计几个重要函数:static int print_skb(struct sk_buff *skb)static int detect_vlanframe_and_killvlanflag(struct sk_buff *skb) static int add_vlan_flag(struct sk_buff *skb,unsigned short vlanid) static int au1000_tx(struct sk_buff *skb, struct net_device *dev) static int au1000_rx(struct net_device *dev)3、编码,抓包,投入实际环境测试使用,验收。
linux下vlan功能实现
linux下vlan功能实现1.Linux网络栈下两层实现1.1简介VLAN是网络栈的一个附加功能,且位于下两层。
首先来学习Linux中网络栈下两层的实现,再去看如何把VLAN这个功能附加上去。
下两层涉及到具体的硬件设备,日趋完善的Linux内核已经做到了很好的代码隔离,对网络设备驱动也是如此,如下图所示:这里要注意的是,Linux下的网络设备net_dev并不一定都对应实际的硬件设备,只要注册一个struct net_device{}结构体(netdevice.h)到内核中,那么这个网络设备就存在了。
该结构体很庞大,其中包含设备的协议地址(对于IP即IP地址),这样它就能被网络层识别,并参与路由系统,最有名的当数loopback设备。
不同的设备(包括硬件和非硬件)的ops操作方法各不相同,由驱动自己实现。
一些通用性的、与设备无关的操作流程(如设备锁定等)则被Linux提炼出来,我们称为驱动框架。
1.2代码框架就是对于上图的扩展,从代码的角度看网络栈的实现。
这里主要是学习的过程,一方面算是赏析Linux优美的代码结构,另一方面只有了解这些,才能更好地写网络设备的驱动,或者做平台移植。
与网络相关的代码主要在~/net,框架性的代码在~/net/core 中,另外很多结构定义、宏、简单内联函数在~/include/net、~/include/linux中,具体设备的驱动在~/driver/net中。
代码量很大,这里仅给出一些关键的代码流程,且有些流程比较复杂,放到下一节描述。
如下图所示:网络层的代码比较清晰,实际上还有一个forward流程(即路过主机,传向他处),这里没画出,其中NF_函数就是Netfilter框架的钩子函数。
这里以IP协议为例,发送流程的代码大多在ip_input.c文件中,接收流程的代码大多在ip_output.c文件中。
其它网络层协议如IPv6、X25等,流程大致相同。
各种协议在发送流程的最后,都会主动调用dev_queue_xmit()函数;而设备接收到数据包后,会根据包的类型,传送给相应的协议函数,如ip_rcv(),当然这里的实现还是比较复杂的,设计到一些全局的数据结构,不是重点,没看。
linux vlan口工作原理
linux vlan口工作原理Linux中的VLAN(Virtual Local Area Network)口是一种虚拟局域网接口,它通过在物理网络接口上创建虚拟接口,实现将一个物理网络划分为多个逻辑网络的功能。
本文将介绍Linux VLAN口的工作原理。
在Linux中,VLAN口是通过Linux内核的虚拟化技术来实现的。
它通过在物理网络接口上添加虚拟接口(也称为VLAN子接口),并为每个虚拟接口分配一个唯一的VLAN标识符(VLAN ID),从而实现将物理网络划分为多个逻辑网络。
VLAN ID是一个12位的数字,取值范围为1-4094。
它用于标识不同的VLAN,不同的VLAN ID代表不同的逻辑网络。
当数据包从物理网络接口进入VLAN口时,内核会根据数据包的VLAN ID来判断应该将数据包发送到哪个VLAN子接口。
VLAN口的工作原理如下:1. 配置物理网络接口:首先,需要将物理网络接口(如eth0)配置为VLAN支持模式。
可以使用命令"vconfig"来创建一个虚拟接口,并将其与物理接口绑定。
例如,使用命令"vconfig add eth0 10"可以创建一个名称为eth0.10的虚拟接口,并将其与物理接口eth0绑定。
这样,eth0.10就成为了一个VLAN口。
2. 配置VLAN子接口:在VLAN口上创建虚拟接口,即VLAN子接口。
可以使用命令"ifconfig"来配置VLAN子接口的IP地址、子网掩码等网络参数。
例如,可以使用命令"ifconfig eth0.10 192.168.1.1 netmask 255.255.255.0 up"来配置VLAN子接口eth0.10的IP地址为192.168.1.1,子网掩码为255.255.255.0,并启用该接口。
3. 数据包的处理:当数据包从物理网络接口进入VLAN口时,内核会根据数据包的VLAN ID来判断应该将数据包发送到哪个VLAN 子接口。
LinuxVLAN配置
Linux系统VLAN配置什么是VLAN?VLAN(Virtual Local Area Network)又称虚拟局域网,是指在交换局域网的基础上,采用网络管理软件构建的可跨越不同网段、不同网络的端到端的逻辑网络。
一个VLAN组成一个逻辑子网,即一个逻辑广播域,它可以覆盖多个网络设备,允许处于不同地理位置的网络用户加入到一个逻辑子网中。
使用VLAN优点?1、控制广播风暴一个VLAN就是一个逻辑广播域,通过对VLAN的创建,隔离了广播,缩小了广播范围,可以控制广播风暴的产生。
2、提高网络整体安全性通过路由访问列表和MAC地址分配等VLAN划分原则,可以控制用户访问权限和逻辑网段大小,将不同用户群划分在不同VLAN,从而提高交换式网络的整体性能和安全性。
3、网络管理简单、直观对于交换式以太网,如果对某些用户重新进行网段分配,需要网络管理员对网络系统的物理结构重新进行调整,甚至需要追加网络设备,增大网络管理的工作量。
而对于采用VLAN 技术的网络来说,一个VLAN可以根据部门职能、对象组或者应用将不同地理位置的网络用户划分为一个逻辑网段。
在不改动网络物理连接的情况下可以任意地将工作站在工作组或子网之间移动。
利用虚拟网络技术,大大减轻了网络管理和维护工作的负担,降低了网络维护费用。
在一个交换网络中,VLAN提供了网段和机构的弹性组合机制。
广东新支点技术服务有限公司的Linux专家们总结了在Linux上配置VLAN的步骤和注意事项。
一、前提首先要确认Linux系统内核是否已经支持VLAN功能:二、物理网卡、子网卡、虚拟VLAN网卡的关系:1.物理网卡:服务器上物理网络接口设备,也就是要配置trunk的具体接口。
2. 子网卡:子网卡并不是网络接口设备,但是可以作为网络接口在系统中出现,如eth0:1、eth1:2这种网络接口。
必须要依赖于物理网卡,可以与物理网卡同时在系统中存在并使用不同的IP地址,而且也拥有它们自己的网络接口配置文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
修改linux网卡驱动,终于成功通过重构skb实现vlan功能(原创)
测试环境:mips核cpu,linux-2.4
测试工具:用wrieshark抓包看现在的ip包格式
一、思路:
1.先能进行编译、烧写内核
2.打开现有的debug开关,看有关的打印信息
3.烧录bin文件到/dev/mtd1
4.用wrieshark抓包看现在的ip包格式
5.开始修改包
6.另外,需要学习skbuff
二、了解802.1Q TAG
1、802.1Q:
目标MAC 源MAC 802.1Q 协议类型/长度数据 FCS 6字节 6字节 4字节 2字节未知 4字节
802.1Q报头中有以下字段:
Protocol Type:指明该数据包是一个802.1Q数据包,取值0x8100;
Priority:指明该数据包的优先级,一般情况下置0;
CFI:此位一般忽略,置0;
VLAN ID:这是一个12位的域,指明VLAN的ID,一共4096个;
三、学习skbuff:
unsigned char *head
unsigned char *end
unsigned char *data
unsigned char *tail
a)skb_put;b)skb_push;c)skb_pull;d)skb_reserve
四、设计软件,实现其所想
1、设计打印函数,便于调试:
-----------------------1----------------------------
data-tail=0,skb->date_len=0,skb->len=0;skb.data=-2128687502;skb.tail= -2128687502;akb.protocol=1544
----------------------------------------------------
-----------------------2----------------------------
[0]-[66]-[88]-[15]-[0]-[da]-[0]-[23]-[89]-[e3]-[d8]-[33]-[8]-[6]-[0]-
[1]-[8]-[0]-[6]-[4]-[0]-[2]-[0]-[23]-[89]-[e3]-[d8]-[33]-[c0]-[a8]-[2 ]-[fe]-[0]-[66]-[88]-[15]-[0]-[da]-[c0]-[a8]-[2]-[6e]-[0]-[0]-[0]-[0] -[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-[0]-
data-tail=60,skb->date_len=0,skb->len=60;skb.data=-2128687442;skb.tai l=-2128687442;akb.protocol=1544
----------------------------------------------------
-----------------------3----------------------------
data-tail=-14,skb->date_len=0,skb->len=46;skb.data=-2128687428;skb.ta il=-2128687442;akb.protocol=29499
----------------------------------------------------
2、设计几个重要函数:
static int print_skb(struct sk_buff *skb)
static int detect_vlanframe_and_killvlanflag(struct sk_buff *skb) static int add_vlan_flag(struct sk_buff *skb,unsigned short vlanid) static int au1000_tx(struct sk_buff *skb, struct net_device *dev) static int au1000_rx(struct net_device *dev)
3、编码,抓包,投入实际环境测试使用,验收。
五、累了,休息去了.....。