网络子系统-2.6.26

网络子系统-2.6.26

作者:guolele 

         首先讲这问题就要先了解几个网络子系统比较重要的数据结构和函数。Struct net_device ,register_netdev()unregister_netdev()struct sk_buff

还有一个,就是网卡驱动是工作在数据链路层的。

Linux设备驱动模型,每一个驱动硬件都是以一个数据结构表示,网卡就是以struct net_device这个结构表示。

而收发的数据就是通过struct sk_buff结构传递到上一层,上一层是协议层。

这里内核描述说这个结构是个错误,因为它把IO数据混淆为高级数据,所以它必须知道每个数据结构被用在INET模块

  

驱动的任务就是在模块加载时先填充完这个数据结构,然后在最后调用register_netdev函数时会调用struct net_device 里的init函数指针,而这个init函数就是完成最后的初始化工作,网卡驱动就结束了。

         Init主要做几个工作,就是注册中断,设置芯片工作模式, 通知协层,可以开始传输数据包了。

         等有数据传来就会产生中断,中断处理函数里会先把数据整理到struct sk_buff,再交给协议层去处理,具体操作就是调用netif_rx

         要传送数据时,也类似,只是不用最后交给协议层。

 

 

下面再讲讲struct sk_buff 这个数据结构,

 

 

  

 

大概就这样传给协议层了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值