@@ -4129,6 +4129,91 @@ OVS_CHECK_FRAG_LARGE()
4129
4129
OVS_TRAFFIC_VSWITCHD_STOP(["/Unsupported big reassembled v4 packet/d"])
4130
4130
AT_CLEANUP
4131
4131
4132
+ AT_SETUP([conntrack - IPv4 fragmentation with ct orig match])
4133
+ CHECK_CONNTRACK()
4134
+ OVS_TRAFFIC_VSWITCHD_START()
4135
+
4136
+ ADD_NAMESPACES(at_ns0, at_ns1)
4137
+
4138
+ ADD_VETH(p0, at_ns0, br0, "10.1.1.1/24")
4139
+ ADD_VETH(p1, at_ns1, br0, "10.1.1.2/24")
4140
+
4141
+ AT_DATA([flows.txt], [dnl
4142
+ priority=1,action=drop
4143
+ priority=10,arp,action=normal
4144
+ priority=100,ip,ct_state=-trk,action=ct(table=0)
4145
+ priority=100,in_port=2,icmp,ct_state=+rpl,action=1
4146
+ 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)
4147
+ 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
4148
+ ])
4149
+
4150
+ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt])
4151
+
4152
+ dnl Packet content:
4153
+ dnl Ethernet II, Src: 50:54:00:00:00:0a, Dst: 50:54:00:00:00:09
4154
+ dnl Type: IPv4 (0x0800)
4155
+ dnl Internet Protocol Version 4, Src: 10.1.1.1, Dst: 10.1.1.2
4156
+ dnl Total Length: 1420
4157
+ dnl Identification: 0x0001 (1)
4158
+ dnl 001. .... = Flags: 0x1, More fragments
4159
+ dnl 0... .... = Reserved bit: Not set
4160
+ dnl .0.. .... = Don't fragment: Not set
4161
+ dnl ..1. .... = More fragments: Set
4162
+ dnl ...0 0000 0000 0000 = Fragment Offset: 0
4163
+ dnl Time to Live: 64
4164
+ dnl Protocol: UDP (17)
4165
+ dnl User Datagram Protocol, Src Port: 1, Dst Port: 2
4166
+ dnl Source Port: 1
4167
+ dnl Destination Port: 2
4168
+ dnl Length: 1608
4169
+ dnl UDP payload (1392 bytes)
4170
+ dnl Data (1392 bytes)
4171
+ eth="50 54 00 00 00 09 50 54 00 00 00 0a 08 00"
4172
+ ip="45 00 05 8c 00 01 20 00 40 11 3f 5c 0a 01 01 01 0a 01 01 02"
4173
+ udp="00 01 00 02 06 48 dd 56"
4174
+ data_len=$(seq 1392)
4175
+ data=$(printf '00 %.0s' ${data_len})
4176
+ packet="${eth} ${ip} ${udp} ${data}"
4177
+ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 ${packet} > /dev/null])
4178
+
4179
+ dnl Packet content:
4180
+ dnl Ethernet II, Src: 50:54:00:00:00:0a, Dst: 50:54:00:00:00:09
4181
+ dnl Type: IPv4 (0x0800)
4182
+ dnl Internet Protocol Version 4, Src: 10.1.1.1, Dst: 10.1.1.2
4183
+ dnl 0100 .... = Version: 4
4184
+ dnl .... 0101 = Header Length: 20 bytes (5)
4185
+ dnl Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
4186
+ dnl 0000 00.. = Differentiated Services Codepoint: Default (0)
4187
+ dnl .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
4188
+ dnl Total Length: 228
4189
+ dnl Identification: 0x0001 (1)
4190
+ dnl 000. .... = Flags: 0x0
4191
+ dnl 0... .... = Reserved bit: Not set
4192
+ dnl .0.. .... = Don't fragment: Not set
4193
+ dnl ..0. .... = More fragments: Not set
4194
+ dnl ...0 0000 1010 1111 = Fragment Offset: 1400
4195
+ dnl Time to Live: 64
4196
+ dnl Protocol: UDP (17)
4197
+ dnl Data (208 bytes)
4198
+ eth="50 54 00 00 00 09 50 54 00 00 00 0a 08 00"
4199
+ ip="45 00 00 e4 00 01 00 af 40 11 63 55 0a 01 01 01 0a 01 01 02"
4200
+ data_len=$(seq 208)
4201
+ data=$(printf '00 %.0s' ${data_len})
4202
+ packet="${eth} ${ip} ${data}"
4203
+ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 ${packet} > /dev/null])
4204
+
4205
+ NS_CHECK_EXEC([at_ns0], [ping -s 1600 -q -c 1 -W 1 10.1.1.2 | FORMAT_PING], [0], [dnl
4206
+ 1 packets transmitted, 1 received, 0% packet loss, time 0ms
4207
+ ])
4208
+
4209
+ AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2) | sort], [0], [dnl
4210
+ 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)
4211
+ 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>)
4212
+ ])
4213
+
4214
+ OVS_TRAFFIC_VSWITCHD_STOP
4215
+ AT_CLEANUP
4216
+
4132
4217
AT_SETUP([conntrack - IPv4 fragmentation expiry])
4133
4218
CHECK_CONNTRACK()
4134
4219
OVS_TRAFFIC_VSWITCHD_START()
@@ -4427,6 +4512,92 @@ OVS_CHECK_FRAG_LARGE()
4427
4512
OVS_TRAFFIC_VSWITCHD_STOP(["/Unsupported big reassembled v6 packet/d"])
4428
4513
AT_CLEANUP
4429
4514
4515
+ AT_SETUP([conntrack - IPv6 fragmentation with ct orig match])
4516
+ CHECK_CONNTRACK()
4517
+ OVS_TRAFFIC_VSWITCHD_START()
4518
+
4519
+ ADD_NAMESPACES(at_ns0, at_ns1)
4520
+
4521
+ ADD_VETH(p0, at_ns0, br0, "fc00::1/96", "50:54:00:00:00:09", [], "nodad")
4522
+ ADD_VETH(p1, at_ns1, br0, "fc00::2/96", "50:54:00:00:00:0a", [], "nodad")
4523
+
4524
+ AT_DATA([flows.txt], [dnl
4525
+ priority=1,action=drop
4526
+ priority=10,ipv6,ct_state=-trk,action=ct(table=0)
4527
+ priority=10,in_port=2,ipv6,ct_tp_src=128,ct_state=+trk+est+rpl,action=1
4528
+ 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)
4529
+ 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
4530
+ priority=100,icmp6,icmp_type=135,action=normal
4531
+ priority=100,icmp6,icmp_type=136,action=normal
4532
+ ])
4533
+
4534
+ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt])
4535
+
4536
+ dnl Packet content:
4537
+ dnl Ethernet II, Src: 50:54:00:00:00:0a, Dst: 50:54:00:00:00:09
4538
+ dnl Type: IPv6 (0x86dd)
4539
+ dnl Internet Protocol Version 6, Src: fc00::1, Dst: fc00::2
4540
+ dnl Payload Length: 1344
4541
+ dnl Next Header: Fragment Header for IPv6 (44)
4542
+ dnl Hop Limit: 64
4543
+ dnl Fragment Header for IPv6
4544
+ dnl Next header: UDP (17)
4545
+ dnl Reserved octet: 0x00
4546
+ dnl 0000 0000 0000 0... = Offset: 0 (0 bytes)
4547
+ dnl .... .... .... .00. = Reserved bits: 0
4548
+ dnl .... .... .... ...1 = More Fragments: Yes
4549
+ dnl Identification: 0x9bdb1fa7
4550
+ dnl User Datagram Protocol, Src Port: 1, Dst Port: 2
4551
+ dnl Source Port: 1
4552
+ dnl Destination Port: 2
4553
+ dnl Length: 1608
4554
+ dnl UDP payload (1328 bytes)
4555
+ dnl Data (1328 bytes)
4556
+ eth="50 54 00 00 00 09 50 54 00 00 00 0a 86 dd"
4557
+ 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 \
4558
+ fc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 11 00 00 01 9b db 1f a7"
4559
+ udp="00 01 00 02 06 48 fb 56"
4560
+ data_len=$(seq 1328)
4561
+ data=$(printf '00 %.0s' ${data_len})
4562
+ packet="${eth} ${ipv6} ${udp} ${data}"
4563
+ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 ${packet} > /dev/null])
4564
+
4565
+ dnl IPv6 Packet content
4566
+ dnl Ethernet II, Src: 50:54:00:00:00:0a, Dst: 50:54:00:00:00:09
4567
+ dnl Type: IPv6 (0x86dd)
4568
+ dnl Internet Protocol Version 6, Src: fc00::1, Dst: fc00::2
4569
+ dnl Payload Length: 280
4570
+ dnl Next Header: Fragment Header for IPv6 (44)
4571
+ dnl Hop Limit: 64
4572
+ dnl Fragment Header for IPv6
4573
+ dnl Next header: UDP (17)
4574
+ dnl Reserved octet: 0x00
4575
+ dnl 0000 0101 0011 1... = Offset: 167 (1336 bytes)
4576
+ dnl .... .... .... .00. = Reserved bits: 0
4577
+ dnl .... .... .... ...0 = More Fragments: No
4578
+ dnl Identification: 0x9bdb1fa7
4579
+ dnl Data (272 bytes)
4580
+ eth="50 54 00 00 00 09 50 54 00 00 00 0a 86 dd"
4581
+ 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 \
4582
+ fc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 11 00 05 38 9b db 1f a7"
4583
+ data_len=$(seq 272)
4584
+ data=$(printf '00 %.0s' ${data_len})
4585
+ packet="${eth} ${ipv6} ${data}"
4586
+ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 ${packet} > /dev/null])
4587
+
4588
+ dnl Send also fragmented ICMPv6.
4589
+ NS_CHECK_EXEC([at_ns0], [ping6 -s 1600 -q -c 1 -W 1 fc00::2 | FORMAT_PING], [0], [dnl
4590
+ 1 packets transmitted, 1 received, 0% packet loss, time 0ms
4591
+ ])
4592
+
4593
+ AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fc00::2) | sort], [0], [dnl
4594
+ 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)
4595
+ udp,orig=(src=fc00::1,dst=fc00::2,sport=<cleared>,dport=<cleared>),reply=(src=fc00::2,dst=fc00::1,sport=<cleared>,dport=<cleared>)
4596
+ ])
4597
+
4598
+ OVS_TRAFFIC_VSWITCHD_STOP
4599
+ AT_CLEANUP
4600
+
4430
4601
AT_SETUP([conntrack - IPv6 fragmentation expiry])
4431
4602
CHECK_CONNTRACK()
4432
4603
OVS_TRAFFIC_VSWITCHD_START()
0 commit comments