@@ -3861,6 +3861,91 @@ OVS_CHECK_FRAG_LARGE()
3861
3861
OVS_TRAFFIC_VSWITCHD_STOP(["/Unsupported big reassembled v4 packet/d"])
3862
3862
AT_CLEANUP
3863
3863
3864
+ AT_SETUP([conntrack - IPv4 fragmentation with ct orig match])
3865
+ CHECK_CONNTRACK()
3866
+ OVS_TRAFFIC_VSWITCHD_START()
3867
+
3868
+ ADD_NAMESPACES(at_ns0, at_ns1)
3869
+
3870
+ ADD_VETH(p0, at_ns0, br0, "10.1.1.1/24")
3871
+ ADD_VETH(p1, at_ns1, br0, "10.1.1.2/24")
3872
+
3873
+ AT_DATA([flows.txt], [dnl
3874
+ priority=1,action=drop
3875
+ priority=10,arp,action=normal
3876
+ priority=100,ip,ct_state=-trk,action=ct(table=0)
3877
+ priority=100,in_port=2,icmp,ct_state=+rpl,action=1
3878
+ 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)
3879
+ 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
3880
+ ])
3881
+
3882
+ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt])
3883
+
3884
+ dnl Packet content:
3885
+ dnl Ethernet II, Src: 50:54:00:00:00:0a, Dst: 50:54:00:00:00:09
3886
+ dnl Type: IPv4 (0x0800)
3887
+ dnl Internet Protocol Version 4, Src: 10.1.1.1, Dst: 10.1.1.2
3888
+ dnl Total Length: 1420
3889
+ dnl Identification: 0x0001 (1)
3890
+ dnl 001. .... = Flags: 0x1, More fragments
3891
+ dnl 0... .... = Reserved bit: Not set
3892
+ dnl .0.. .... = Don't fragment: Not set
3893
+ dnl ..1. .... = More fragments: Set
3894
+ dnl ...0 0000 0000 0000 = Fragment Offset: 0
3895
+ dnl Time to Live: 64
3896
+ dnl Protocol: UDP (17)
3897
+ dnl User Datagram Protocol, Src Port: 1, Dst Port: 2
3898
+ dnl Source Port: 1
3899
+ dnl Destination Port: 2
3900
+ dnl Length: 1608
3901
+ dnl UDP payload (1392 bytes)
3902
+ dnl Data (1392 bytes)
3903
+ eth="50 54 00 00 00 09 50 54 00 00 00 0a 08 00"
3904
+ ip="45 00 05 8c 00 01 20 00 40 11 3f 5c 0a 01 01 01 0a 01 01 02"
3905
+ udp="00 01 00 02 06 48 dd 56"
3906
+ data_len=$(seq 1392)
3907
+ data=$(printf '00 %.0s' ${data_len})
3908
+ packet="${eth} ${ip} ${udp} ${data}"
3909
+ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 ${packet} > /dev/null])
3910
+
3911
+ dnl Packet content:
3912
+ dnl Ethernet II, Src: 50:54:00:00:00:0a, Dst: 50:54:00:00:00:09
3913
+ dnl Type: IPv4 (0x0800)
3914
+ dnl Internet Protocol Version 4, Src: 10.1.1.1, Dst: 10.1.1.2
3915
+ dnl 0100 .... = Version: 4
3916
+ dnl .... 0101 = Header Length: 20 bytes (5)
3917
+ dnl Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
3918
+ dnl 0000 00.. = Differentiated Services Codepoint: Default (0)
3919
+ dnl .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
3920
+ dnl Total Length: 228
3921
+ dnl Identification: 0x0001 (1)
3922
+ dnl 000. .... = Flags: 0x0
3923
+ dnl 0... .... = Reserved bit: Not set
3924
+ dnl .0.. .... = Don't fragment: Not set
3925
+ dnl ..0. .... = More fragments: Not set
3926
+ dnl ...0 0000 1010 1111 = Fragment Offset: 1400
3927
+ dnl Time to Live: 64
3928
+ dnl Protocol: UDP (17)
3929
+ dnl Data (208 bytes)
3930
+ eth="50 54 00 00 00 09 50 54 00 00 00 0a 08 00"
3931
+ ip="45 00 00 e4 00 01 00 af 40 11 63 55 0a 01 01 01 0a 01 01 02"
3932
+ data_len=$(seq 208)
3933
+ data=$(printf '00 %.0s' ${data_len})
3934
+ packet="${eth} ${ip} ${data}"
3935
+ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 ${packet} > /dev/null])
3936
+
3937
+ NS_CHECK_EXEC([at_ns0], [ping -s 1600 -q -c 1 -W 1 10.1.1.2 | FORMAT_PING], [0], [dnl
3938
+ 1 packets transmitted, 1 received, 0% packet loss, time 0ms
3939
+ ])
3940
+
3941
+ AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2) | sort], [0], [dnl
3942
+ 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)
3943
+ 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>)
3944
+ ])
3945
+
3946
+ OVS_TRAFFIC_VSWITCHD_STOP
3947
+ AT_CLEANUP
3948
+
3864
3949
AT_SETUP([conntrack - IPv4 fragmentation expiry])
3865
3950
CHECK_CONNTRACK()
3866
3951
OVS_TRAFFIC_VSWITCHD_START()
@@ -4158,6 +4243,92 @@ OVS_CHECK_FRAG_LARGE()
4158
4243
OVS_TRAFFIC_VSWITCHD_STOP(["/Unsupported big reassembled v6 packet/d"])
4159
4244
AT_CLEANUP
4160
4245
4246
+ AT_SETUP([conntrack - IPv6 fragmentation with ct orig match])
4247
+ CHECK_CONNTRACK()
4248
+ OVS_TRAFFIC_VSWITCHD_START()
4249
+
4250
+ ADD_NAMESPACES(at_ns0, at_ns1)
4251
+
4252
+ ADD_VETH(p0, at_ns0, br0, "fc00::1/96", "50:54:00:00:00:09", [], "nodad")
4253
+ ADD_VETH(p1, at_ns1, br0, "fc00::2/96", "50:54:00:00:00:0a", [], "nodad")
4254
+
4255
+ AT_DATA([flows.txt], [dnl
4256
+ priority=1,action=drop
4257
+ priority=10,ipv6,ct_state=-trk,action=ct(table=0)
4258
+ priority=10,in_port=2,ipv6,ct_tp_src=128,ct_state=+trk+est+rpl,action=1
4259
+ 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)
4260
+ 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
4261
+ priority=100,icmp6,icmp_type=135,action=normal
4262
+ priority=100,icmp6,icmp_type=136,action=normal
4263
+ ])
4264
+
4265
+ AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt])
4266
+
4267
+ dnl Packet content:
4268
+ dnl Ethernet II, Src: 50:54:00:00:00:0a, Dst: 50:54:00:00:00:09
4269
+ dnl Type: IPv6 (0x86dd)
4270
+ dnl Internet Protocol Version 6, Src: fc00::1, Dst: fc00::2
4271
+ dnl Payload Length: 1344
4272
+ dnl Next Header: Fragment Header for IPv6 (44)
4273
+ dnl Hop Limit: 64
4274
+ dnl Fragment Header for IPv6
4275
+ dnl Next header: UDP (17)
4276
+ dnl Reserved octet: 0x00
4277
+ dnl 0000 0000 0000 0... = Offset: 0 (0 bytes)
4278
+ dnl .... .... .... .00. = Reserved bits: 0
4279
+ dnl .... .... .... ...1 = More Fragments: Yes
4280
+ dnl Identification: 0x9bdb1fa7
4281
+ dnl User Datagram Protocol, Src Port: 1, Dst Port: 2
4282
+ dnl Source Port: 1
4283
+ dnl Destination Port: 2
4284
+ dnl Length: 1608
4285
+ dnl UDP payload (1328 bytes)
4286
+ dnl Data (1328 bytes)
4287
+ eth="50 54 00 00 00 09 50 54 00 00 00 0a 86 dd"
4288
+ 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 \
4289
+ fc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 11 00 00 01 9b db 1f a7"
4290
+ udp="00 01 00 02 06 48 fb 56"
4291
+ data_len=$(seq 1328)
4292
+ data=$(printf '00 %.0s' ${data_len})
4293
+ packet="${eth} ${ipv6} ${udp} ${data}"
4294
+ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 ${packet} > /dev/null])
4295
+
4296
+ dnl IPv6 Packet content
4297
+ dnl Ethernet II, Src: 50:54:00:00:00:0a, Dst: 50:54:00:00:00:09
4298
+ dnl Type: IPv6 (0x86dd)
4299
+ dnl Internet Protocol Version 6, Src: fc00::1, Dst: fc00::2
4300
+ dnl Payload Length: 280
4301
+ dnl Next Header: Fragment Header for IPv6 (44)
4302
+ dnl Hop Limit: 64
4303
+ dnl Fragment Header for IPv6
4304
+ dnl Next header: UDP (17)
4305
+ dnl Reserved octet: 0x00
4306
+ dnl 0000 0101 0011 1... = Offset: 167 (1336 bytes)
4307
+ dnl .... .... .... .00. = Reserved bits: 0
4308
+ dnl .... .... .... ...0 = More Fragments: No
4309
+ dnl Identification: 0x9bdb1fa7
4310
+ dnl Data (272 bytes)
4311
+ eth="50 54 00 00 00 09 50 54 00 00 00 0a 86 dd"
4312
+ 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 \
4313
+ fc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 11 00 05 38 9b db 1f a7"
4314
+ data_len=$(seq 272)
4315
+ data=$(printf '00 %.0s' ${data_len})
4316
+ packet="${eth} ${ipv6} ${data}"
4317
+ NS_CHECK_EXEC([at_ns0], [$PYTHON3 $srcdir/sendpkt.py p0 ${packet} > /dev/null])
4318
+
4319
+ dnl Send also fragmented ICMPv6.
4320
+ NS_CHECK_EXEC([at_ns0], [ping6 -s 1600 -q -c 1 -W 1 fc00::2 | FORMAT_PING], [0], [dnl
4321
+ 1 packets transmitted, 1 received, 0% packet loss, time 0ms
4322
+ ])
4323
+
4324
+ AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fc00::2) | sort], [0], [dnl
4325
+ 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)
4326
+ udp,orig=(src=fc00::1,dst=fc00::2,sport=<cleared>,dport=<cleared>),reply=(src=fc00::2,dst=fc00::1,sport=<cleared>,dport=<cleared>)
4327
+ ])
4328
+
4329
+ OVS_TRAFFIC_VSWITCHD_STOP
4330
+ AT_CLEANUP
4331
+
4161
4332
AT_SETUP([conntrack - IPv6 fragmentation expiry])
4162
4333
CHECK_CONNTRACK()
4163
4334
OVS_TRAFFIC_VSWITCHD_START()
0 commit comments