我正在为自定义片上数据包交换机编写自定义设备驱动程序。
试图弄清楚skbuff数据结构的用法。主要是在堆栈中的特定位置添加特定信息?
这是我对堆栈的理解:
- 应用创建套接字
- 应用在套接字上调用函数以发送消息
- 切换到内核
- 内核创建skbuff数据结构,作为进入网络堆栈的准备
- 内核将内容添加到skbuff中-添加指向消息的用户空间开头,目标的长度和IP地址的指针(从中获取)
套接字数据结构)
- 内核将skbuff传递给TCP内核模块
- TCP模块向操作系统请求每个64KB的缓冲区,将消息中的数据复制到缓冲区中,调整skbuff中的指针以指向操作系统
提供的缓冲区
- 缓冲区在内核地址空间中
- 对于每个缓冲区,都会创建一个新的skbuff并将其添加到列表中
- skbuff结构的TCP手列表到交换机驱动程序
- 此时,交换设备驱动程序具有:skbuff结构的链接列表,每个结构都有一个指向TCP标头的指针,一个TCP页脚的指针以及一个指向保存数据包有效负载的OS缓冲区的指针
这一切正确吗?主要是在堆栈中创建skbuff的点,以及将每条信息添加到skbuff的点
感谢您的帮助,清除此漏洞将是巨大的。