使用sk_buff从内核中的char*buf向网络设备发送数据包

使用sk_buff从内核中的char*buf向网络设备发送数据包,c,linux,networking,kernel,C,Linux,Networking,Kernel,我已经从sk_buff(hook packet,通过skb->head到skb_u>end)收集了char*buffer,并将该缓冲区传输到另一台电脑。现在我想从一台新电脑将该数据包重新发送到网络。我如何发送它?使用dev_queue_xmit()时,我必须从char*和数据长度重建sk_buff结构。有可能吗?或者我可以使用原始套接字重新发送数据吗 我相信你必须构建sk_buff,而不是重构。另外,我认为从中收集char*是不合理的 sk_buff的sk_buff只是表示由单独的片段组成的字节

我已经从sk_buff(hook packet,通过skb->head到skb_u>end)收集了char*buffer,并将该缓冲区传输到另一台电脑。现在我想从一台新电脑将该数据包重新发送到网络。我如何发送它?使用dev_queue_xmit()时,我必须从char*和数据长度重建sk_buff结构。有可能吗?或者我可以使用原始套接字重新发送数据吗

我相信你必须构建
sk_buff
,而不是重构。另外,我认为从中收集
char*
是不合理的

sk_buff的
sk_buff
只是表示由单独的片段组成的字节流,这样在编写数据包时就不必到处复制它们。您不应该从
sk_buff
收集单个缓冲区,但是如果您有单个缓冲区,只需在新的
sk_buff
中填充一个指向缓冲区的部分,您就完成了。

我相信您必须构建
sk_buff
,而不是重构。另外,我认为从中收集
char*
是不合理的


sk_buff的
sk_buff
只是表示由单独的片段组成的字节流,这样在编写数据包时就不必到处复制它们。你不应该从
sk_buff
收集一个缓冲区,但是如果你有一个缓冲区,只要在新的
sk_buff
中用一个部分指向缓冲区,你就完成了。

我必须在新的一端重新发送我的数据包,这就是为什么我要传输数据+头…现在我想我该怎么做,我是否需要一个缓冲区或不同的字符*缓冲区用于有效负载和标头我必须在新的一端重新发送数据包,这就是为什么我传输数据+标头…现在我想我该怎么做,我是否需要一个缓冲区或不同的字符*缓冲区用于有效负载和标头