diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/core/pktgen.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 261357a66300..a797fff7f222 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
| @@ -2527,6 +2527,8 @@ static int process_ipsec(struct pktgen_dev *pkt_dev, | |||
| 2527 | if (x) { | 2527 | if (x) { |
| 2528 | int ret; | 2528 | int ret; |
| 2529 | __u8 *eth; | 2529 | __u8 *eth; |
| 2530 | struct iphdr *iph; | ||
| 2531 | |||
| 2530 | nhead = x->props.header_len - skb_headroom(skb); | 2532 | nhead = x->props.header_len - skb_headroom(skb); |
| 2531 | if (nhead > 0) { | 2533 | if (nhead > 0) { |
| 2532 | ret = pskb_expand_head(skb, nhead, 0, GFP_ATOMIC); | 2534 | ret = pskb_expand_head(skb, nhead, 0, GFP_ATOMIC); |
| @@ -2548,6 +2550,11 @@ static int process_ipsec(struct pktgen_dev *pkt_dev, | |||
| 2548 | eth = (__u8 *) skb_push(skb, ETH_HLEN); | 2550 | eth = (__u8 *) skb_push(skb, ETH_HLEN); |
| 2549 | memcpy(eth, pkt_dev->hh, 12); | 2551 | memcpy(eth, pkt_dev->hh, 12); |
| 2550 | *(u16 *) ð[12] = protocol; | 2552 | *(u16 *) ð[12] = protocol; |
| 2553 | |||
| 2554 | /* Update IPv4 header len as well as checksum value */ | ||
| 2555 | iph = ip_hdr(skb); | ||
| 2556 | iph->tot_len = htons(skb->len - ETH_HLEN); | ||
| 2557 | ip_send_check(iph); | ||
| 2551 | } | 2558 | } |
| 2552 | } | 2559 | } |
| 2553 | return 1; | 2560 | return 1; |
