sk_buff: allow segmenting based on frag sizes
This patch allows segmenting a skb based on its frags sizes instead of based on a fixed value. Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Tested-by: Xin Long <lucien.xin@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
57c0565039
commit
3953c46c3a
|
@ -301,6 +301,11 @@ struct sk_buff;
|
|||
#endif
|
||||
extern int sysctl_max_skb_frags;
|
||||
|
||||
/* Set skb_shinfo(skb)->gso_size to this in case you want skb_segment to
|
||||
* segment using its current segmentation instead.
|
||||
*/
|
||||
#define GSO_BY_FRAGS 0xFFFF
|
||||
|
||||
typedef struct skb_frag_struct skb_frag_t;
|
||||
|
||||
struct skb_frag_struct {
|
||||
|
|
|
@ -3116,9 +3116,13 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb,
|
|||
int hsize;
|
||||
int size;
|
||||
|
||||
len = head_skb->len - offset;
|
||||
if (len > mss)
|
||||
len = mss;
|
||||
if (unlikely(mss == GSO_BY_FRAGS)) {
|
||||
len = list_skb->len;
|
||||
} else {
|
||||
len = head_skb->len - offset;
|
||||
if (len > mss)
|
||||
len = mss;
|
||||
}
|
||||
|
||||
hsize = skb_headlen(head_skb) - offset;
|
||||
if (hsize < 0)
|
||||
|
|
Loading…
Reference in New Issue