linux网络设备驱动

举报
黄生 发表于 2022/10/16 22:11:03 2022/10/16
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。