@@ -4367,6 +4367,91 @@ OVS_CHECK_FRAG_LARGE()
4367
4367
OVS_TRAFFIC_VSWITCHD_STOP(["/Unsupported big reassembled v4 packet/d"])
4368
4368
AT_CLEANUP
4369
4369
4370
+ AT_SETUP([conntrack - IPv4 fragmentation with ct orig match])
4371
+ CHECK_CONNTRACK()
4372
+ OVS_TRAFFIC_VSWITCHD_START()
4373
+
4374
+ ADD_NAMESPACES(at_ns0, at_ns1)
4375
+
4376
+ ADD_VETH(p0, at_ns0, br0, "10.1.1.1/24")
4377
+ ADD_VETH(p1, at_ns1, br0, "10.1.1.2/24")
4378
+
4379
+ AT_DATA([flows.txt], [dnl
4380
+ priority=1,action=drop
4381
+ priority=10,arp,action=normal
4382
+ priority=100,ip,ct_state=-trk,action=ct(table=0)
4383
+ priority=100,in_port=2,icmp,ct_state=+rpl,action=1
4384
+ priority=100,in_port=1,ip,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ct_state=+new+trk,action=ct(commit)
4385
+ priority=100,in_port=1,ip,ct_nw_proto=1,ct_tp_src=8,ct_tp_dst=0,ct_state=+new+trk,action=ct(commit),2
4386
+ ])
4387
+
4388
+ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt])
4389
+
4390
+ dnl Packet content:
4391
+ dnl Ethernet II, Src: 50:54:00:00:00:0a, Dst: 50:54:00:00:00:09
4392
+ dnl Type: IPv4 (0x0800)
4393
+ dnl Internet Protocol Version 4, Src: 10.1.1.1, Dst: 10.1.1.2
4394
+ dnl Total Length: 1420
4395
+ dnl Identification: 0x0001 (1)
4396
+ dnl 001. .... = Flags: 0x1, More fragments
4397
+ dnl 0... .... = Reserved bit: Not set
4398
+ dnl .0.. .... = Don't fragment: Not set
4399
+ dnl ..1. .... = More fragments: Set
4400
+ dnl ...0 0000 0000 0000 = Fragment Offset: 0
4401
+ dnl Time to Live: 64
4402
+ dnl Protocol: UDP (17)
4403
+ dnl User Datagram Protocol, Src Port: 1, Dst Port: 2
4404
+ dnl Source Port: 1
4405
+ dnl Destination Port: 2
4406
+ dnl Length: 1608
4407
+ dnl UDP payload (1392 bytes)
4408
+ dnl Data (1392 bytes)
4409
+ eth="50 54 00 00 00 09 50 54 00 00 00 0a 08 00"
4410
+ ip="45 00 05 8c 00 01 20 00 40 11 3f 5c 0a 01 01 01 0a 01 01 02"
4411
+ udp="00 01 00 02 06 48 dd 56"
4412
+ data_len=$(seq 1392)
4413
+ data=$(printf '00 %.0s' ${data_len})
4414
+ packet="${eth} ${ip} ${udp} ${data}"
4415
+ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 ${packet} > /dev/null])
4416
+
4417
+ dnl Packet content:
4418
+ dnl Ethernet II, Src: 50:54:00:00:00:0a, Dst: 50:54:00:00:00:09
4419
+ dnl Type: IPv4 (0x0800)
4420
+ dnl Internet Protocol Version 4, Src: 10.1.1.1, Dst: 10.1.1.2
4421
+ dnl 0100 .... = Version: 4
4422
+ dnl .... 0101 = Header Length: 20 bytes (5)
4423
+ dnl Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
4424
+ dnl 0000 00.. = Differentiated Services Codepoint: Default (0)
4425
+ dnl .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
4426
+ dnl Total Length: 228
4427
+ dnl Identification: 0x0001 (1)
4428
+ dnl 000. .... = Flags: 0x0
4429
+ dnl 0... .... = Reserved bit: Not set
4430
+ dnl .0.. .... = Don't fragment: Not set
4431
+ dnl ..0. .... = More fragments: Not set
4432
+ dnl ...0 0000 1010 1111 = Fragment Offset: 1400
4433
+ dnl Time to Live: 64
4434
+ dnl Protocol: UDP (17)
4435
+ dnl Data (208 bytes)
4436
+ eth="50 54 00 00 00 09 50 54 00 00 00 0a 08 00"
4437
+ ip="45 00 00 e4 00 01 00 af 40 11 63 55 0a 01 01 01 0a 01 01 02"
4438
+ data_len=$(seq 208)
4439
+ data=$(printf '00 %.0s' ${data_len})
4440
+ packet="${eth} ${ip} ${data}"
4441
+ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 ${packet} > /dev/null])
4442
+
4443
+ NS_CHECK_EXEC([at_ns0], [ping -s 1600 -q -c 1 -W 1 10.1.1.2 | FORMAT_PING], [0], [dnl
4444
+ 1 packets transmitted, 1 received, 0% packet loss, time 0ms
4445
+ ])
4446
+
4447
+ AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2) | sort], [0], [dnl
4448
+ icmp,orig=(src=10.1.1.1,dst=10.1.1.2,id=<cleared>,type=8,code=0),reply=(src=10.1.1.2,dst=10.1.1.1,id=<cleared>,type=0,code=0)
4449
+ udp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=<cleared>,dport=<cleared>),reply=(src=10.1.1.2,dst=10.1.1.1,sport=<cleared>,dport=<cleared>)
4450
+ ])
4451
+
4452
+ OVS_TRAFFIC_VSWITCHD_STOP
4453
+ AT_CLEANUP
4454
+
4370
4455
AT_SETUP([conntrack - IPv4 fragmentation expiry])
4371
4456
CHECK_CONNTRACK()
4372
4457
OVS_TRAFFIC_VSWITCHD_START()
@@ -4665,6 +4750,92 @@ OVS_CHECK_FRAG_LARGE()
4665
4750
OVS_TRAFFIC_VSWITCHD_STOP(["/Unsupported big reassembled v6 packet/d"])
4666
4751
AT_CLEANUP
4667
4752
4753
+ AT_SETUP([conntrack - IPv6 fragmentation with ct orig match])
4754
+ CHECK_CONNTRACK()
4755
+ OVS_TRAFFIC_VSWITCHD_START()
4756
+
4757
+ ADD_NAMESPACES(at_ns0, at_ns1)
4758
+
4759
+ ADD_VETH(p0, at_ns0, br0, "fc00::1/96", "50:54:00:00:00:09", [], "nodad")
4760
+ ADD_VETH(p1, at_ns1, br0, "fc00::2/96", "50:54:00:00:00:0a", [], "nodad")
4761
+
4762
+ AT_DATA([flows.txt], [dnl
4763
+ priority=1,action=drop
4764
+ priority=10,ipv6,ct_state=-trk,action=ct(table=0)
4765
+ priority=10,in_port=2,ipv6,ct_tp_src=128,ct_state=+trk+est+rpl,action=1
4766
+ priority=10,in_port=1,ipv6,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ct_state=+new+trk,action=ct(commit)
4767
+ priority=10,in_port=1,ipv6,ct_nw_proto=58,ct_tp_src=128,ct_tp_dst=0,ct_state=+new+trk,action=ct(commit),2
4768
+ priority=100,icmp6,icmp_type=135,action=normal
4769
+ priority=100,icmp6,icmp_type=136,action=normal
4770
+ ])
4771
+
4772
+ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt])
4773
+
4774
+ dnl Packet content:
4775
+ dnl Ethernet II, Src: 50:54:00:00:00:0a, Dst: 50:54:00:00:00:09
4776
+ dnl Type: IPv6 (0x86dd)
4777
+ dnl Internet Protocol Version 6, Src: fc00::1, Dst: fc00::2
4778
+ dnl Payload Length: 1344
4779
+ dnl Next Header: Fragment Header for IPv6 (44)
4780
+ dnl Hop Limit: 64
4781
+ dnl Fragment Header for IPv6
4782
+ dnl Next header: UDP (17)
4783
+ dnl Reserved octet: 0x00
4784
+ dnl 0000 0000 0000 0... = Offset: 0 (0 bytes)
4785
+ dnl .... .... .... .00. = Reserved bits: 0
4786
+ dnl .... .... .... ...1 = More Fragments: Yes
4787
+ dnl Identification: 0x9bdb1fa7
4788
+ dnl User Datagram Protocol, Src Port: 1, Dst Port: 2
4789
+ dnl Source Port: 1
4790
+ dnl Destination Port: 2
4791
+ dnl Length: 1608
4792
+ dnl UDP payload (1328 bytes)
4793
+ dnl Data (1328 bytes)
4794
+ eth="50 54 00 00 00 09 50 54 00 00 00 0a 86 dd"
4795
+ ipv6="60 00 00 00 05 40 2c 40 fc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 \
4796
+ fc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 11 00 00 01 9b db 1f a7"
4797
+ udp="00 01 00 02 06 48 fb 56"
4798
+ data_len=$(seq 1328)
4799
+ data=$(printf '00 %.0s' ${data_len})
4800
+ packet="${eth} ${ipv6} ${udp} ${data}"
4801
+ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 ${packet} > /dev/null])
4802
+
4803
+ dnl IPv6 Packet content
4804
+ dnl Ethernet II, Src: 50:54:00:00:00:0a, Dst: 50:54:00:00:00:09
4805
+ dnl Type: IPv6 (0x86dd)
4806
+ dnl Internet Protocol Version 6, Src: fc00::1, Dst: fc00::2
4807
+ dnl Payload Length: 280
4808
+ dnl Next Header: Fragment Header for IPv6 (44)
4809
+ dnl Hop Limit: 64
4810
+ dnl Fragment Header for IPv6
4811
+ dnl Next header: UDP (17)
4812
+ dnl Reserved octet: 0x00
4813
+ dnl 0000 0101 0011 1... = Offset: 167 (1336 bytes)
4814
+ dnl .... .... .... .00. = Reserved bits: 0
4815
+ dnl .... .... .... ...0 = More Fragments: No
4816
+ dnl Identification: 0x9bdb1fa7
4817
+ dnl Data (272 bytes)
4818
+ eth="50 54 00 00 00 09 50 54 00 00 00 0a 86 dd"
4819
+ ipv6="60 00 00 00 01 18 2c 40 fc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 \
4820
+ fc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 11 00 05 38 9b db 1f a7"
4821
+ data_len=$(seq 272)
4822
+ data=$(printf '00 %.0s' ${data_len})
4823
+ packet="${eth} ${ipv6} ${data}"
4824
+ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 ${packet} > /dev/null])
4825
+
4826
+ dnl Send also fragmented ICMPv6.
4827
+ NS_CHECK_EXEC([at_ns0], [ping6 -s 1600 -q -c 1 -W 1 fc00::2 | FORMAT_PING], [0], [dnl
4828
+ 1 packets transmitted, 1 received, 0% packet loss, time 0ms
4829
+ ])
4830
+
4831
+ AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fc00::2) | sort], [0], [dnl
4832
+ icmpv6,orig=(src=fc00::1,dst=fc00::2,id=<cleared>,type=128,code=0),reply=(src=fc00::2,dst=fc00::1,id=<cleared>,type=129,code=0)
4833
+ udp,orig=(src=fc00::1,dst=fc00::2,sport=<cleared>,dport=<cleared>),reply=(src=fc00::2,dst=fc00::1,sport=<cleared>,dport=<cleared>)
4834
+ ])
4835
+
4836
+ OVS_TRAFFIC_VSWITCHD_STOP
4837
+ AT_CLEANUP
4838
+
4668
4839
AT_SETUP([conntrack - IPv6 fragmentation expiry])
4669
4840
CHECK_CONNTRACK()
4670
4841
OVS_TRAFFIC_VSWITCHD_START()
0 commit comments