Re: A couple of questions about the SKB fragments
From: Sowmini Varadhan <hidden>
Date: 2016-05-05 12:58:45
On (05/05/16 12:13), Edward Cree wrote:
On 05/05/16 08:40, Ilya Matveychikov wrote:quoted
While working with fragmented SKBs we've got stuck with the following: - is it possible for an SKB fragment in skb_shinfo(skb)->frag_list to be fragmented too (i.e. to have SKBs in frag_list)? - do skb->len and skb->data_len contain the whole SKB length, including the length of all fragments (not only the paged parts)? Is there any docs except the kernel sources itself to refer to?davem has some docs up at http://vger.kernel.org/~davem/skb.html and http://vger.kernel.org/~davem/skb_data.html In particular note the following: "The frag_list is used to maintain a chain of SKBs organized for fragmentation purposes, it is _not_ used for maintaining paged data." So my reading would suggest there is no way to multiple-layer-fragment an SKB; the frags are page pointers and offsets, not entire sk_buff structs in their own right.
Actually (and perhaps I am mixing up skb_frag_t with the sk_buff in skb_shinfo(skb)->frag_list) I think it is entirely possible in theory for the frag_list to itself both skb_frag_t's as well as more sk_buffs in the ->frag_list- at least that's why I understand fromcode that recurses using skb_walk_frags(), such as tcp_md5_hash_skb_data(). AIUI, the statement about page pointers and offsets applies to the skb_frag_t's in the skb_shared_info. The len and data_len should be the sum-total for the whole skb, including skb_frag_t's and ->frag_list. --Sowmini