Linux kernel 在TCP堆栈的哪一点上,各种信息被添加到skbuff中?

Linux kernel 在TCP堆栈的哪一点上,各种信息被添加到skbuff中?,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,我正在为一个定制的片上分组交换机编写一个定制的设备驱动程序 试图找出skbuff数据结构的用法。主要是在堆栈中的什么位置添加特定的信息 以下是我对堆栈的理解: 应用程序创建一个套接字 这将创建一个套接字数据结构,并向其中添加IP地址 应用程序调用套接字上的函数来发送消息 切换到内核 内核创建skbuff数据结构,作为进入网络堆栈的准备 内核向skbuff添加了一些东西——添加指向用户空间的指针,消息的开头、长度和目标的IP地址(从 套接字(数据结构) 内核将skbuff传递给TCP内核模块

我正在为一个定制的片上分组交换机编写一个定制的设备驱动程序

试图找出skbuff数据结构的用法。主要是在堆栈中的什么位置添加特定的信息

以下是我对堆栈的理解:

  • 应用程序创建一个套接字
    • 这将创建一个套接字数据结构,并向其中添加IP地址
  • 应用程序调用套接字上的函数来发送消息
    • 切换到内核
    • 内核创建skbuff数据结构,作为进入网络堆栈的准备
    • 内核向skbuff添加了一些东西——添加指向用户空间的指针,消息的开头、长度和目标的IP地址(从 套接字(数据结构)
    • 内核将skbuff传递给TCP内核模块
    • TCP模块要求操作系统提供每个64KB的缓冲区,将消息中的数据复制到缓冲区,调整skbuff中的指针以指向操作系统 提供的缓冲区
      • 缓冲区位于内核地址空间中
      • 对于每个缓冲区,将创建一个新的skbuff并将其添加到列表中
    • TCP将skbuff结构的列表交给交换机驱动程序
      • 此时,交换机设备驱动程序有:skbuff结构的链表,每个结构都有一个指向TCP头的指针、一个指向TCP尾的指针和一个指向保存数据包有效负载的OS缓冲区的指针
  • 对吗?主要是堆栈中创建skbuff的点,以及将每条信息添加到skbuff的点

    谢谢你的帮助,清理这将是巨大的