日期:2014-05-16  浏览次数:20719 次

【linux驱动分析】之dm9000驱动分析(三):sk_buff结构分析

【linux驱动分析】之dm9000驱动分析(一):dm9000原理及硬件分析 

【linux驱动分析】之dm9000驱动分析(二):定义在板文件中的资源和设备以及几个宏 

【linux驱动分析】之dm9000驱动分析(三):sk_buff结构分析 

【linux驱动分析】之dm9000驱动分析(四):net_device结构体 

【linux驱动分析】之dm9000驱动分析(五):另外几个重要的结构体 

【linux驱动分析】之dm9000驱动分析(六):dm9000_init和dm9000_probe的实现 

【linux驱动分析】之dm9000驱动分析(七):dm9000的卸载挂起和恢复以及打开和停止


源码分析
sk_buff_head和sk_buff定义在include/linux/skbuff.h中,下面是linux-2.6.38中的定义。
1、在内核中sk_buff是一个网络数据包,它是一个双向链表,而链表头就是sk_buff_head。
而sk_buff的内存布局可以分作3个段,第一个就是sk_buff自身,第二个是linear-data buff,第三个是paged-data buff(也就是skb_shared_info)。
先来看一下sk_buff_head:
struct sk_buff_head {
    /* These two members must be first. */
    struct sk_buff    *next;