以下记录一下在做零拷贝驱动的时候一些困扰我的问题
1、将获得的包存储下来后,用wireshark打开显示包不对。
查找原因,是由于 #define BNX2_RX_OFFSET (sizeof(struct l2_fhdr) + 2), 在bnx2中,真实的数据是放在偏移了这个宏长度的位置。(注:e1000驱动没有这个偏移量)
因此,在取出来数据的时候需要加上18开始取包
2、数据取出来一部分后就收不到数据了
查找原因,发现了是网卡link down了,在所有调用netif_carrier_off函数的地方加上log,最后发现是在bnx2_tx_timeout函数中调用了schedule_work函数,最后调用netif_carrier_off了。
由于本次修改的零拷贝驱动只需要抓包,所以将bnx2_tx_timeout重写即可。
3、在2.6.39的内核版本上发现struct file结构里面的private_data会有初始值。这个需要注意一下。
记得不是特别清楚了,以后犹记得的再补充
阅读(835) | 评论(0) | 转发(0) |