修改linux网卡驱动,终于成功通过重构skb实现vlan功能
- 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、编码,抓包,投入实际环境测试使用,验收。
五、累了,休息去了.....