日期:2014-05-16  浏览次数:20869 次

linux网卡驱动层,如何直接调用hard_start_xmit发二层包
我现在可以在Linux的网卡驱动层直接改代码。
要发的二层包内容已经获得了,如何构造skb,然后网卡名已知,第二个参数odev如何赋值呢?
hard_start_xmit(skb, odev);
--------------------------------
本人初学Linux,望各位高手指导?

------解决方案--------------------
提问也不说下内核版本,硬件平台,哪个文件,函数原型。
请注意提问的技巧。
【版务贴】在"Linux/Unix社区内核及驱动程序研究区"发贴,请留意。
------解决方案--------------------
与平台有关的,内核之间在网络这块改动很大,有些数据结构甚至已经消失或改名了。
------解决方案--------------------
要发的二层包内容已经获得了,如何构造skb,然后网卡名已知,第二个参数odev如何赋值呢? 
hard_start_xmit(skb, odev); 
------------------------------------------------
说得再详细点吧
odev就是你当前要修改的网卡驱动注册的struct net_device *,一般是驱动里的全局变量不用构造

要发的二层包内容已经获得了,那就直接创建一个skb发就行了


首先要告诉我你要改的驱动原文件名,这样我就可以借助那个驱动的实现帮你把skb填充好
------解决方案--------------------
已知网卡设备名,比如eth0,可以调用get_dev_by_name获得对应的net_device对象作为hard_start_xmit的odev参数。
------解决方案--------------------
memcpy就可以了,填充skb的data区