Tcp sk_data_ready回调无法获取片段数据

Tcp sk_data_ready回调无法获取片段数据,tcp,linux-kernel,network-programming,linux-device-driver,Tcp,Linux Kernel,Network Programming,Linux Device Driver,sk_data_ready回调是通过函数给出的。通过获取读取锁定(&sk->sk回调锁定)来处理skb。skb->data\u len显示碎片大小。但当我们遵循skb共享信息结构shinfo=skb_shinfo(skb),shinfo->nr_frags显示为零,nr_frags值为零。我们可以从碎片中获取数据吗 skb_shinfo(skb)->nr_frags显示分页片段的数量,但这不是唯一可以将数据放置在线性数据区域之外的skb中的位置。在skb_shinfo(skb)->frag_li

sk_data_ready回调是通过函数给出的。通过获取读取锁定(&sk->sk回调锁定)来处理skb。skb->data\u len显示碎片大小。但当我们遵循skb共享信息结构shinfo=skb_shinfo(skb),shinfo->nr_frags显示为零,nr_frags值为零。我们可以从碎片中获取数据吗

skb_shinfo(skb)->nr_frags
显示分页片段的数量,但这不是唯一可以将数据放置在线性数据区域之外的skb中的位置。在
skb_shinfo(skb)->frag_list
(请参阅内核中的skb_walk_frags())中还有附加到此skb的skb片段列表。你的数据可能在那里。如果没有,那么很难说在内核中从入口到调用
sk\u data\u ready()
的整个路径上都有代码。它可能只是某个地方的一个bug。

请看一下
sk_buff
结构
nr_frags
显示分页片段的数量,但这并不是将数据放置在线性数据区域之外的skb中的唯一位置。在
skb_shinfo(skb)->frag_list
(请参阅内核中的
skb_walk_frags()
)中,还有附加到此skb的skb片段列表。也许,你的数据就在那里。如果没有,那么很难说在内核中从入口到调用
sk\u data\u ready()
@Aleksey data出现在frag\u列表中的整个路径上都有您的代码。谢谢你提供的信息。我能够得到数据