linux网卡驱动的关键就是处理两个问题
1。如何发送数据
也就是ndev->hard_start_xmit 函数的实现啦。
从上层扔下来的sk_buff中拿到数据,放到网卡的缓冲区里面。
2。如何接收数据
数据的接收是不用提供驱动接口的。
目前多采用中断接收,然后将网卡缓冲区的数据重新打包为sk_buff,扔给上层即可。
netif_rx(skb);
既然接收程序不是驱动提供的接口,可以很灵活的实现。
我们可以另外写个驱动,启动个定时器,周期构造sk_buff,扔给上层即可。
这样做没有什么意义,但可以更好的理解接收是怎么回事。
3。对于多个网卡共用一个驱动,处理起来可能要小心了
系统有2个PCI网卡,使用一个linux RTL8139驱动。
从上层扔下来的sk_buff中拿到数据,这时该怎么办呢???
扔到哪个网卡的缓冲区里面呢?
网卡驱动是看不到IP的,如何做到正确处理的呢?
这点留给今后吧。当然,内核早已经很好的解决这个问题,不用担心。