Linux内核基础知识

本文介绍了Linux内核中的sk_buff结构及其链表管理,包括skb_queue_head_init()、skb_queue_head/tail、skb_dequeue等函数。内容涉及skb数据缓存区的添加与删除,以及内核初始化过程,如静态加载和动态加载模块,网络设备驱动的初始化,并提及PCI设备和以太网相关知识。

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宏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值