在TCP堆栈的哪一点上将各种信息添加到skbuff?

时间:2019-02-07 18:14:21

标签: linux-kernel linux-device-driver

我正在为自定义片上数据包交换机编写自定义设备驱动程序。

试图弄清楚skbuff数据结构的用法。主要是在堆栈中的特定位置添加特定信息?

这是我对堆栈的理解:

  1. 应用创建套接字
    • 这将创建一个套接字数据结构,并向其添加IP地址
  2. 应用在套接字上调用函数以发送消息
    • 切换到内核
    • 内核创建skbuff数据结构,作为进入网络堆栈的准备
    • 内核将内容添加到skbuff中-添加指向消息的用户空间开头,目标的长度和IP地址的指针(从中获取) 套接字数据结构)
    • 内核将skbuff传递给TCP内核模块
    • TCP模块向操作系统请求每个64KB的缓冲区,将消息中的数据复制到缓冲区中,调整skbuff中的指针以指向操作系统 提供的缓冲区
      • 缓冲区在内核地址空间中
      • 对于每个缓冲区,都会创建一个新的skbuff并将其添加到列表中
    • skbuff结构的TCP手列表到交换机驱动程序
      • 此时,交换设备驱动程序具有:skbuff结构的链接列表,每个结构都有一个指向TCP标头的指针,一个TCP页脚的指针以及一个指向保存数据包有效负载的OS缓冲区的指针

这一切正确吗?主要是在堆栈中创建skbuff的点,以及将每条信息添加到skbuff的点

感谢您的帮助,清除此漏洞将是巨大的。

0 个答案:

没有答案