linux网络设备驱动
【摘要】 3大标准设备类型之一,通常被叫“网卡”。网络设备在/dev下没有入口点。用户在应用层通过套接口API来使用网络设备。网络设备除了响应来自内核的请求外,还需要异步的处理来自外部世界的数据包。在linux内核中,网络设备由数据结构net_device来表示。定义这么庞大的一个结构是个很大的错误,因为结构中各成员间的逻辑关系显得比较混乱。char name[IFNAMESIZ] //16//比如e...
3大标准设备类型之一,通常被叫“网卡”。
网络设备在/dev下没有入口点。用户在应用层通过套接口API来使用网络设备。
网络设备除了响应来自内核的请求外,还需要异步的处理
来自外部世界的数据包。
在linux内核中,网络设备由数据结构net_device
来表示。定义这么庞大的一个结构是个很大的错误,因为结构中各成员间的逻辑关系显得比较混乱。
char name[IFNAMESIZ] //16
//比如ethX
unsigned int mtu //1500
//是针对上一层的payload
unsigned short hard_header_len //14
当前网络设备所处理的网络访问层的硬件协议头的长度。对于以太网设备就是14个字节。
unsigned char addr_len //6字节
//网络访问层的硬件地址长度 就是MAC吧
在驱动程序分配出一个新的net_device对象,并将其初始化之后,接下来就需要把它注册到系统中register_netdev
。(为设备分配一个接口的名称,然后完成设备的注册)
一旦当前的设备被成功注册进系统,就意味着设备所提供的功能已经可由驱动模块所暴露的接口为外部其他模块所调用。(比如网络子系统的高层代码)
至于内核的网络子系统高层在发送一个数据包时,如何确定有哪一个NIC设备来发送?那其实是路由相关的话题。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)