tcp / ip堆栈如何在linux中获取net_device接口

时间:2012-02-16 13:59:43

标签: networking network-protocols linux-device-driver

我正在阅读网络设备驱动程序代码。我的驱动程序遵循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

1 个答案:

答案 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_netdeviceunregister_netdevice,它们可以完成声音,并使用内核注册和注销网络设备。要通过设备从协议发送数据包,请使用dev_queue_xmitnetif_rx接收数据包从设备层传递到网络层,然后调用netif_rx_schedule来调度数据包以进行进一步处理

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