电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

linux数据栈的关键数据结构skb_buf

linux数据栈的关键数据结构skb_buf_第1页
1/35
linux数据栈的关键数据结构skb_buf_第2页
2/35
linux数据栈的关键数据结构skb_buf_第3页
3/35
下载后可任意编辑sk_buff 结构可能是 linux 网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。它在中定义,并包含很多成员变量供网络代码中的各子系统使用。这个结构在 linux 内核的进展过程中改动过很多次,或者是增加新的选项,或者是重新组织已存在的成员变量以使得成员变量的布局更加清楚。它的成员变量可以大致分为以下几类:Layout 布局General 通用Feature-specific 功能相关Management functions 管理函数这个结构被不同的网络层(MAC 或者其他二层链路协议,三层的 IP,四层的 TCP 或 UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。L4 向 L3 传递前会添加一个 L4 的头部,同样,L3 向 L2 传递前,会添加一个 L3 的头部。添加头部比在不同层之间拷贝数据的效率更高。由于在缓冲区的头部添加数据意味着要修改指向缓冲区的指针,这是个复杂的操作,所以内核提供了一个函数 skb_reserve(在后面的章节中描述)来完成这个功能。协议栈中的每一层在往下一层传递缓冲区前,第一件事就是调用skb_reserve 在缓冲区的头部给协议头预留一定的空间。skb_reserve 同样被设备驱动使用来对齐接收到包的包头。假如缓冲区向上层协议传递,旧的协议层的头部信息就没什么用了。例如,L2 的头部只有在网络驱动处理 L2 的协议时有用,L3 是不会关怀它的信息的。但是,内核并没有把 L2 的头部从缓冲区中删除,而是把有效荷载的指针指向 L3 的头部,这样做,可以节约 CPU 时间。1. 网络参数和内核数据结构就像你在浏览 TCP/IP 法律规范或者配置内核时所看到的一样,网络代码提供了很多有用的功能,但是这些功能并不是必须的,比如说,防火墙,多播,还有其他一些功能。大部分的功能都需要在内核数据结构中添加自己的成员变量。因此,sk_buff 里面包含了很多像#ifdef 这样的预编译指令。例如,在 sk_buff 结构的最后,你可以找到:struct sk_buff { ... ... ...#ifdef CONFIG_NET_SCHED _ _u32 tc_index;#ifdef CONFIG_NET_CLS_ACT _ _u32 tc_verd; _ _u32 tc_classid;#endif#endif}它表明,tc_index 只有在编译时定义了 CONFIG_NET_SCHED 符号才有效。这个符号可以通过选择特定的编译选项来定义(例如:"Device Drivers Networking supportNetworking options QoS and/or fair queueing")。这些编译选项可以由管理员通过 ...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

linux数据栈的关键数据结构skb_buf

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部