![](https://csdnimg.cn/release/download_crawler_static/4995948/bg4.jpg)
以在 linux/net/core/dev.c 中找到 dev_queue_xmit 和 netif_rx 函数。
5 )设备驱动程序
网络栈底部是负责管理物理网络设备的设备驱动程序 。 例如 , 包串口使用的 SLIP 驱动
程序以及以太网设备使用的以太网驱动程序都是这一层的设备。
在进行初始化时,设备驱动程序会分配一个 net_device 结构,然后使用必须的程序对其进
行初始化。这些程序中有一个是 dev->hard_start_xmit ,它定义了上层应该如何对 sk_buff
排队进行传输。这个程序的参数为 sk_buff 。这个函数的操作取决于底层硬件,但是通常
sk_buff 所描述的报文都会被移动到硬件环或队列中。就像是设备无关层中所描述的一样,
对于 NAPI 兼容的网络驱动程序来说,帧的接收使用了 netif_rx 和 netif_receive_skb 接
口。 NAPI 驱动程序会对底层硬件的能力进行一些限制。
三 核心数据结构
网络体系结构中有几个核心数据结构
1)sk_buf
网络层的数据都是通过 sk_buf 来传递的。
与 sk_buf 相关的一些数据结构有 :socket sock proto proto_ops;
2)net_device
设备无关层的统一接口 .
与 net_device 相关的一些数据结构有 device ...
先来看一下 sk_buf 的数据结构:
view plain copy to clipboard print ?
1 struct
struct
struct
struct sk_buff
2 {
3 struct
struct
struct
struct sk_buff *next,*prev;
4 struct
struct
struct
struct sk_buff_head *list;
5 struct
struct
struct
struct sock *sk; //sock 结构指针
6 struct
struct
struct
struct timeval stamp;
7 struct
struct
struct
struct net_device *dev, *rx_dev;
8
9 union
union
union
union /* Transport layer header */
10 {
11 struct
struct
struct
struct tcphdr *th;
12 struct
struct
struct
struct udphdr *uh;
13 struct
struct
struct
struct icmphdr *icmph;
14 struct
struct
struct
struct igmphdr *igmph;