【问题标题】:sk_data_ready callback not able to get fragment datask_data_ready 回调无法获取片段数据
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-04-04
    • 2018-11-30
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多