Skip to content

Commit fed66e4

Browse files
committed
ipv6: Support new TSO without HBH
Currently, BIG TCP IPv6 inserts a hop-by-hop extension header with a jumbo payload option to reflect the real length of the packet bigger than 65535 bytes. New kernels will drop this extension header and just calculate the packet length from skb->len, like it's currently done for BIG TCP IPv4. Reflect the future kernel change in tcpdump and support parsing such packets. Signed-off-by: Maxim Mikityanskiy <[email protected]>
1 parent d5f000d commit fed66e4

File tree

4 files changed

+27
-28
lines changed

4 files changed

+27
-28
lines changed

print-ip6.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -466,14 +466,13 @@ ip6_print(netdissect_options *ndo, const u_char *bp, u_int length)
466466

467467
/*
468468
* OK, we didn't see any extension
469-
* header, but that means we have
470-
* no payload, so set the length
471-
* to the IPv6 header length,
472-
* and change the snapshot length
473-
* accordingly.
469+
* header - presume TSO without a
470+
* Jumbo Payload option.
474471
*/
475-
len = sizeof(struct ip6_hdr);
476-
nd_change_snaplen(ndo, bp, len);
472+
len = length;
473+
if (ndo->ndo_vflag)
474+
ND_PRINT("[real length %u, presumed TSO] ",
475+
len);
477476

478477
/*
479478
* Now subtract the length of

tests/icmpv6-length-zero.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1 2010-05-20 04:24:49.656077 IP6 fe80::25a:28ff:fe08:f150 > 6e02::41: ICMP6, length 0 (invalid)
1+
1 2010-05-20 04:24:49.656077 IP6 fe80::25a:28ff:fe08:f150 > 6e02::41: ICMP6, neighbor advertisement, tgt is fe80:0:aa:aaaa:aaaa:aaaa:aaaa:aaaa, length 32

tests/pim-packet-assortment-v.out

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1583,16 +1583,16 @@
15831583
Assert, cksum 0xd7b4 (correct) group=ff02::6 src=1::7 pref=0 metric=0
15841584
178 2019-07-05 17:27:40.810753 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > 10::1: PIMv2, length 48
15851585
Register, cksum 0xcc3c (correct), Flags [ Null ]
1586-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [|pim]
1586+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [real length 40, presumed TSO] [|pim]
15871587
179 2019-07-05 17:27:40.827314 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > 10::1: PIMv2, length 48
15881588
Register, cksum 0xcc3c (correct), Flags [ Null ]
1589-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [|pim]
1589+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [real length 40, presumed TSO] [|pim]
15901590
180 2019-07-05 17:27:40.843664 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > 10::1: PIMv2, length 48
15911591
Register, cksum 0xcc3c (correct), Flags [ Null ]
1592-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [|pim]
1592+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [real length 40, presumed TSO] [|pim]
15931593
181 2019-07-05 17:27:40.860071 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > 10::1: PIMv2, length 48
15941594
Register, cksum 0xcc3c (correct), Flags [ Null ]
1595-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [|pim]
1595+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [real length 40, presumed TSO] [|pim]
15961596
182 2019-07-05 17:27:40.879398 IP6 (hlim 64, next-header PIM (103), payload length 1400) 10::2 > 10::1: PIMv2, length 1400
15971597
Register, cksum 0x67ce (correct), Flags [ none ]
15981598
IP6 (hlim 64, next-header UDP (17), payload length 1352) 1::3.2468 > ff02::2.2468: [udp sum ok] UDP, length 1344
@@ -1607,16 +1607,16 @@
16071607
IP6 (hlim 64, next-header UDP (17), payload length 65487) 1::6.2468 > ff02::5.2468: UDP, length 65479
16081608
186 2019-07-05 17:27:40.957722 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > 10::1: PIMv2, length 48
16091609
Register, cksum 0xcc32 (correct), Flags [ Null ]
1610-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::7 > ff02::6: [|pim]
1610+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::7 > ff02::6: [real length 40, presumed TSO] [|pim]
16111611
187 2019-07-05 17:27:40.975732 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > 10::1: PIMv2, length 48
16121612
Register, cksum 0xcc32 (correct), Flags [ Null ]
1613-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::7 > ff02::6: [|pim]
1613+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::7 > ff02::6: [real length 40, presumed TSO] [|pim]
16141614
188 2019-07-05 17:27:40.993200 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > ff02::d: PIMv2, length 48
16151615
Register, cksum 0xcd31 (correct), Flags [ Null ]
1616-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::8 > ff02::7: [|pim]
1616+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::8 > ff02::7: [real length 40, presumed TSO] [|pim]
16171617
189 2019-07-05 17:27:56.005578 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > ff02::d: PIMv2, length 48
16181618
Register, cksum 0xcd2f (correct), Flags [ Null ]
1619-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::9 > ff02::8: [|pim]
1619+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::9 > ff02::8: [real length 40, presumed TSO] [|pim]
16201620
190 2019-07-05 17:28:11.113454 IP6 (class 0xc0, flowlabel 0xe75c5, hlim 255, next-header PIM (103), payload length 156) 1::b > 10::2: PIMv2, length 156
16211621
Register, cksum 0xde72 (correct), Flags [ none ]
16221622
IP6 (hlim 64, next-header UDP (17), payload length 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
@@ -1634,10 +1634,10 @@
16341634
IP6 (hlim 64, next-header UDP (17), payload length 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
16351635
195 2019-07-05 17:28:11.213700 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103), payload length 48) 10::1 > 10::2: PIMv2, length 48
16361636
Register, cksum 0x9e6d (correct), Flags [ Null ]
1637-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::c > ff02::a: [|pim]
1637+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::c > ff02::a: [real length 40, presumed TSO] [|pim]
16381638
196 2019-07-05 17:28:11.228981 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103), payload length 48) 10::1 > 10::2: PIMv2, length 48
16391639
Register, cksum 0x9e7e (incorrect), Flags [ Null ]
1640-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::d > ff02::b: [|pim]
1640+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::d > ff02::b: [real length 40, presumed TSO] [|pim]
16411641
197 2019-07-05 17:28:18.502726 IP6 (hlim 64, next-header PIM (103), payload length 42) 10::2 > 10::1: PIMv2, length 42
16421642
Register Stop, cksum 0xd9c4 (correct) group=ff02::1 source=1::2
16431643
198 2019-07-05 17:28:18.517840 IP6 (hlim 64, next-header PIM (103), payload length 42) 10::2 > 10::1: PIMv2, length 42

tests/pim-packet-assortment-vv.out

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1703,16 +1703,16 @@
17031703
Assert, cksum 0xd7b4 (correct) group=ff02::6 src=1::7 pref=0 metric=0
17041704
178 2019-07-05 17:27:40.810753 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > 10::1: PIMv2, length 48
17051705
Register, cksum 0xcc3c (correct), Flags [ Null ]
1706-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [|pim]
1706+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [real length 40, presumed TSO] [|pim]
17071707
179 2019-07-05 17:27:40.827314 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > 10::1: PIMv2, length 48
17081708
Register, cksum 0xcc3c (correct), Flags [ Null ]
1709-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [|pim]
1709+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [real length 40, presumed TSO] [|pim]
17101710
180 2019-07-05 17:27:40.843664 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > 10::1: PIMv2, length 48
17111711
Register, cksum 0xcc3c (correct), Flags [ Null ]
1712-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [|pim]
1712+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [real length 40, presumed TSO] [|pim]
17131713
181 2019-07-05 17:27:40.860071 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > 10::1: PIMv2, length 48
17141714
Register, cksum 0xcc3c (correct), Flags [ Null ]
1715-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [|pim]
1715+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::2 > ff02::1: [real length 40, presumed TSO] [|pim]
17161716
182 2019-07-05 17:27:40.879398 IP6 (hlim 64, next-header PIM (103), payload length 1400) 10::2 > 10::1: PIMv2, length 1400
17171717
Register, cksum 0x67ce (correct), Flags [ none ]
17181718
IP6 (hlim 64, next-header UDP (17), payload length 1352) 1::3.2468 > ff02::2.2468: [udp sum ok] UDP, length 1344
@@ -1727,16 +1727,16 @@
17271727
IP6 (hlim 64, next-header UDP (17), payload length 65487) 1::6.2468 > ff02::5.2468: UDP, length 65479
17281728
186 2019-07-05 17:27:40.957722 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > 10::1: PIMv2, length 48
17291729
Register, cksum 0xcc32 (correct), Flags [ Null ]
1730-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::7 > ff02::6: [|pim]
1730+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::7 > ff02::6: [real length 40, presumed TSO] [|pim]
17311731
187 2019-07-05 17:27:40.975732 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > 10::1: PIMv2, length 48
17321732
Register, cksum 0xcc32 (correct), Flags [ Null ]
1733-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::7 > ff02::6: [|pim]
1733+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::7 > ff02::6: [real length 40, presumed TSO] [|pim]
17341734
188 2019-07-05 17:27:40.993200 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > ff02::d: PIMv2, length 48
17351735
Register, cksum 0xcd31 (correct), Flags [ Null ]
1736-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::8 > ff02::7: [|pim]
1736+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::8 > ff02::7: [real length 40, presumed TSO] [|pim]
17371737
189 2019-07-05 17:27:56.005578 IP6 (hlim 64, next-header PIM (103), payload length 48) 10::2 > ff02::d: PIMv2, length 48
17381738
Register, cksum 0xcd2f (correct), Flags [ Null ]
1739-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::9 > ff02::8: [|pim]
1739+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::9 > ff02::8: [real length 40, presumed TSO] [|pim]
17401740
190 2019-07-05 17:28:11.113454 IP6 (class 0xc0, flowlabel 0xe75c5, hlim 255, next-header PIM (103), payload length 156) 1::b > 10::2: PIMv2, length 156
17411741
Register, cksum 0xde72 (correct), Flags [ none ]
17421742
IP6 (hlim 64, next-header UDP (17), payload length 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
@@ -1754,10 +1754,10 @@
17541754
IP6 (hlim 64, next-header UDP (17), payload length 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
17551755
195 2019-07-05 17:28:11.213700 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103), payload length 48) 10::1 > 10::2: PIMv2, length 48
17561756
Register, cksum 0x9e6d (correct), Flags [ Null ]
1757-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::c > ff02::a: [|pim]
1757+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::c > ff02::a: [real length 40, presumed TSO] [|pim]
17581758
196 2019-07-05 17:28:11.228981 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103), payload length 48) 10::1 > 10::2: PIMv2, length 48
17591759
Register, cksum 0x9e7e (incorrect), Flags [ Null ]
1760-
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::d > ff02::b: [|pim]
1760+
IP6 (class 0xc0, hlim 1, next-header PIM (103), payload length 0) 1::d > ff02::b: [real length 40, presumed TSO] [|pim]
17611761
197 2019-07-05 17:28:18.502726 IP6 (hlim 64, next-header PIM (103), payload length 42) 10::2 > 10::1: PIMv2, length 42
17621762
Register Stop, cksum 0xd9c4 (correct) group=ff02::1 source=1::2
17631763
198 2019-07-05 17:28:18.517840 IP6 (hlim 64, next-header PIM (103), payload length 42) 10::2 > 10::1: PIMv2, length 42

0 commit comments

Comments
 (0)