我正在阅读网络设备驱动程序代码。我的驱动程序遵循driver-model.REF:kernel / Documentation / driver-model。 通过interface.txt阅读: { 设备接口是相关设备类的逻辑接口 直接到用户空间接口,如设备节点。 每个接口都有一个设备目录中的目录 它属于哪个类。 }
还没有能够精确定位确切的界面。所以通过struct net_device和interface.txt文件中的Programming接口(kernel./Documentation/driver-model) 我再次得出这些人正在谈论的net_device的结论。 现在我想知道的是TCP / IP堆栈物理和链路层是网络驱动程序。我想给我的网络驱动程序提供给我的tcp / ip堆栈的接口。问题是如何?如何将net_device结构提供给TCP / ip堆栈。有谁知道这件事。 问候 Sraddha
答案 0 :(得分:5)
层次结构如下
struct inet_protosw(internet protocols)有一个指向struct member proto(protocol)的指针
struct sock有一个指向struct member proto(protocol)的指针
struct sock具有结构成员sk_buff_head
的成员struct sk_buff_head有两个指向sk_buff结构成员的指针(一个名为next,一个名为prev)
struct sk_buff有一个指向struct member net_device的指针。
我不相信你直接用inet_protosw注册net_device。
首先inet_init
通过调用proto_register
来注册内置网络协议,然后调用inet_register_protosw
来初始化协议,然后初始化各种inet模块(ip,tcp,icmp,等)。
负责将协议和设备链接起来的接口具有register_netdevice
和unregister_netdevice
,它们可以完成声音,并使用内核注册和注销网络设备。要通过设备从协议发送数据包,请使用dev_queue_xmit
和netif_rx
接收数据包从设备层传递到网络层,然后调用netif_rx_schedule
来调度数据包以进行进一步处理
有关组织/工作流程的资源和文档包括: