Skip to content

Commit 3953c46

Browse files
marceloleitnerdavem330
authored andcommitted
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 <[email protected]> Tested-by: Xin Long <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 57c0565 commit 3953c46

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

include/linux/skbuff.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,11 @@ struct sk_buff;
301301
#endif
302302
extern int sysctl_max_skb_frags;
303303

304+
/* Set skb_shinfo(skb)->gso_size to this in case you want skb_segment to
305+
* segment using its current segmentation instead.
306+
*/
307+
#define GSO_BY_FRAGS 0xFFFF
308+
304309
typedef struct skb_frag_struct skb_frag_t;
305310

306311
struct skb_frag_struct {

net/core/skbuff.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3116,9 +3116,13 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb,
31163116
int hsize;
31173117
int size;
31183118

3119-
len = head_skb->len - offset;
3120-
if (len > mss)
3121-
len = mss;
3119+
if (unlikely(mss == GSO_BY_FRAGS)) {
3120+
len = list_skb->len;
3121+
} else {
3122+
len = head_skb->len - offset;
3123+
if (len > mss)
3124+
len = mss;
3125+
}
31223126

31233127
hsize = skb_headlen(head_skb) - offset;
31243128
if (hsize < 0)

0 commit comments

Comments
 (0)