On (05/05/16 12:13), Edward Cree wrote: > On 05/05/16 08:40, Ilya Matveychikov wrote: > > > > 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