sra*_*haj 1 networking network-protocols linux-device-driver
我正在阅读网络设备驱动程序代码.我的驱动程序遵循driver-model.REF:kernel/Documentation/driver-model.通过interface.txt读取:{Device interfaces是设备类的逻辑接口,直接与用户空间接口相关,如设备节点.每个接口都在其所属的设备类的目录中被赋予一个目录.}
还没有能够确切地确定接口.所以在通过struct net_device和interface.txt文件中的Programming接口(kernel./Documentation/driver-model)后,我再次得出结论,这些人的net_device是谈论.现在我想知道的是TCP/IP堆栈物理和链路层是网络驱动程序.我想给我的网络驱动程序提供给我的tcp/ip堆栈的接口.问题是如何?如何将net_device结构提供给TCP/ip堆栈.有谁知道这件事.关心Sraddha
.
层次结构如下
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该数据包进行进一步处理.
有关组织/工作流程的资源和文档包括: