Networking 在linux中,tcp/ip堆栈如何获得net_设备接口

Networking 在linux中,tcp/ip堆栈如何获得net_设备接口,networking,network-protocols,linux-device-driver,Networking,Network Protocols,Linux Device Driver,我正在阅读网络设备驱动程序代码。我的驱动程序遵循驱动程序模型。参考:内核/文档/驱动程序模型。 通过interface.txt读取: { 设备接口是相关设备类的逻辑接口 直接连接到用户空间接口,如设备节点。 每个接口在设备目录中都有一个目录 它所属的阶级。 } 我们还不能确定确切的接口。所以在浏览了interface.txt文件kernel./Documentation/driver model中的struct net_设备和编程接口之后 我再次得出结论,这就是人们所谈论的网络设备。 现在我想知

我正在阅读网络设备驱动程序代码。我的驱动程序遵循驱动程序模型。参考:内核/文档/驱动程序模型。 通过interface.txt读取: { 设备接口是相关设备类的逻辑接口 直接连接到用户空间接口,如设备节点。 每个接口在设备目录中都有一个目录 它所属的阶级。 }

我们还不能确定确切的接口。所以在浏览了interface.txt文件kernel./Documentation/driver model中的struct net_设备和编程接口之后 我再次得出结论,这就是人们所谈论的网络设备。 现在我想知道的是TCP/IP堆栈,物理层和链路层是网络驱动程序。我想给我的网络驱动程序提供给我的TCP/IP堆栈的接口。问题是如何?如何将网络设备结构赋予TCP/ip堆栈。有人知道这件事吗。 当做 斯拉德哈


.

层次结构如下

struct inet_protosw internet protocols具有指向结构成员协议的指针

结构sock有一个指向结构成员协议的指针

结构sock有一个成员到一个结构成员sk_buff_head

结构sk_buff_head有两个指向sk_buff的结构成员的指针,一个叫做next,一个叫做prev

struct sk_buff有一个指向结构成员net_设备的指针

我相信您不会直接向inet_protosw注册net_设备

首先inet_init通过调用proto_register注册内置网络协议,然后调用inet_register_protosw初始化协议,然后初始化各种inet模块ip、tcp、icmp等

负责链接协议和设备的接口后来有register_netdevice和unregister_netdevice,它们执行与内核类似的操作,并使用内核注册和注销网络设备。要通过设备使用dev_queue_xmit从协议发送数据包,netif_rx接收从设备层到网络层的数据包,然后调用netif_rx_schedule来调度数据包以进行进一步处理

有关组织/工作流程的资源和文件包括:


层次结构如下所示

struct inet_protosw internet protocols具有指向结构成员协议的指针

结构sock有一个指向结构成员协议的指针

结构sock有一个成员到一个结构成员sk_buff_head

结构sk_buff_head有两个指向sk_buff的结构成员的指针,一个叫做next,一个叫做prev

struct sk_buff有一个指向结构成员net_设备的指针

我相信您不会直接向inet_protosw注册net_设备

首先inet_init通过调用proto_register注册内置网络协议,然后调用inet_register_protosw初始化协议,然后初始化各种inet模块ip、tcp、icmp等

负责链接协议和设备的接口后来有register_netdevice和unregister_netdevice,它们执行与内核类似的操作,并使用内核注册和注销网络设备。要通过设备使用dev_queue_xmit从协议发送数据包,netif_rx接收从设备层到网络层的数据包,然后调用netif_rx_schedule来调度数据包以进行进一步处理

有关组织/工作流程的资源和文件包括: