修改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,可以根据实际需求进行修改。
- 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、编码,抓包,投入实际环境测试使用,验收。
五、累了,休息去了.....。