【发布时间】:2018-05-08 13:28:05
【问题描述】:
sk_data_ready 回调是通过函数给出的。通过获取 read_lock(&sk->sk_callback_lock) 处理 skb。 skb->data_len 显示片段大小。但是当我们遵循 skb 共享信息结构 shinfo = skb_shinfo(skb) 时,shinfo->nr_frags 显示为零,nr_frags 值为零。无论如何我们可以从片段中获取数据。
【问题讨论】:
-
请看一下
sk_buff结构。nr_frags显示了分页片段的数量,但这并不是可以将数据放置在线性数据区域之外的 skb 中的唯一位置。在skb_shinfo(skb)->frag_list(参见内核中的skb_walk_frags())还有附加到此skb 的skb 片段列表。也许,您的数据就在那里。如果不是,那么如果不查看内核中从入口到调用sk_data_ready()的整个路径上的代码,就很难说发生了什么。 -
@Aleksey 数据存在于 frag_list 中。谢谢你告诉我这件事。我能够获取数据
标签: tcp linux-kernel network-programming linux-device-driver