sk_buff结构
当缓冲区向上传经各个网络分层时,并没有把L2层的抱头从缓冲区删除,而是把指向有效载荷开端的指针向前移动到L3报头的开端。
__u32,说定义在<asm/types.h>头文件,但是没有找到这个文件。在/usr/src/linux-headers-4.15.0-33-generic/include/uapi/asm-generic/int-ll64.h中找到了。
typedef __signed__ char __s8;
typedef unsigned char __u8;
typedef __signed__ short __s16;
typedef unsigned short __u16;
typedef __signed__ int __s32;
typedef unsigned int __u32;
#ifdef __GNUC__
__extension__ typedef __signed__ long long __s64;
__extension__ typedef unsigned long long __u64;
#else
typedef __signed__ long long __s64;
typedef unsigned long long __u64;
#endif
所以填充TCP负载的时候,是通过skb_put调整tail来的?
下面的地址高,上面的地址低。
链表管理函数:
skb_queue_head_init()
初始化SKB链表的头结点,并创建一个空的SKB链表。
skb_queue_head,skb_queue_tail
把一个SBK添加到链表的头或者尾
skb_dequeue和skb_dequeue_tail
删除队列的首或者尾元素
skb_queue_purge
把队列变为空队列
skb_queue_walk宏