sk_data_ready回调是通过函数给出的。通过获取read_lock来处理skb(& sk-> sk_callback_lock)。 skb-> data_len显示片段大小。但是当我们deference skb共享信息结构shinfo = skb_shinfo(skb)时,shinfo-> nr_frags显示零,nr_frags值为零。无论如何我们可以从片段中获取数据。
答案 0 :(得分:0)
skb_shinfo(skb)->nr_frags
显示分页片段的数量,但这不是唯一可以将数据放置在线性数据区域之外的skb中的位置。还有一个skb片段列表附加到这个skb skb_shinfo(skb)->frag_list
(参见内核中的skb_walk_frags())。你的数据可能在那里。如果没有,那么很难说如果没有在内核的整个路径上看到代码从入口到sk_data_ready()
的调用,那么会发生什么。它可能只是某个地方的错误。