Message ID | 165271549323.991159.11630344372482125224.stgit@ebuild |
---|---|
State | Superseded |
Headers | show |
Series | netdev-offload-tc: Add support for the check_pkt_len action. | expand |
Context | Check | Description |
---|---|---|
ovsrobot/apply-robot | fail | apply and check: fail |
ovsrobot/intel-ovs-compilation | fail | test: fail |
Bleep bloop. Greetings Eelco Chaudron, I am a robot and I have tried out your patch. Thanks for your contribution. I encountered some error that I wasn't expecting. See the details below. git-am: error: Failed to merge in the changes. hint: Use 'git am --show-current-patch' to see the failed patch Patch failed at 0001 tests: Add check_pkt_len action test to system-offload-traffic. When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". Patch skipped due to previous failure. Please check this out. If you feel there has been an error, please email aconole@redhat.com Thanks, 0-day Robot
On 16 May 2022, at 18:04, 0-day Robot wrote: > Bleep bloop. Greetings Eelco Chaudron, I am a robot and I have tried out your patch. > Thanks for your contribution. > > I encountered some error that I wasn't expecting. See the details below. > > > git-am: > error: Failed to merge in the changes. > hint: Use 'git am --show-current-patch' to see the failed patch > Patch failed at 0001 tests: Add check_pkt_len action test to system-offload-traffic. > When you have resolved this problem, run "git am --continue". > If you prefer to skip this patch, run "git am --skip" instead. > To restore the original branch and stop patching, run "git am --abort". > > > Patch skipped due to previous failure. > > Please check this out. If you feel there has been an error, please email aconole@redhat.com This failure was due to a merge conflict in the NEWS file. I will not send a v4 for now as this will continue to happen. If the maintainers do want a v4, I'll send it. //Eelco
Eelco Chaudron <echaudro@redhat.com> writes: > On 16 May 2022, at 18:04, 0-day Robot wrote: > >> Bleep bloop. Greetings Eelco Chaudron, I am a robot and I have tried out your patch. >> Thanks for your contribution. >> >> I encountered some error that I wasn't expecting. See the details below. >> >> >> git-am: >> error: Failed to merge in the changes. >> hint: Use 'git am --show-current-patch' to see the failed patch >> Patch failed at 0001 tests: Add check_pkt_len action test to system-offload-traffic. >> When you have resolved this problem, run "git am --continue". >> If you prefer to skip this patch, run "git am --skip" instead. >> To restore the original branch and stop patching, run "git am --abort". >> >> >> Patch skipped due to previous failure. >> >> Please check this out. If you feel there has been an error, please email aconole@redhat.com > > > This failure was due to a merge conflict in the NEWS file. I will not > send a v4 for now as this will continue to happen. If the maintainers > do want a v4, I'll send it. Understood that we know where the conflict is. +Michael Phelan Is it possible to get the test results for the previous patches? > //Eelco
> -----Original Message----- > From: Aaron Conole <aconole@redhat.com> > Sent: Tuesday 17 May 2022 15:38 > To: Eelco Chaudron <echaudro@redhat.com> > Cc: 0-day Robot <robot@bytheb.org>; dev@openvswitch.org; Phelan, Michael > <michael.phelan@intel.com> > Subject: Re: [ovs-dev] [PATCH v3 5/5] tests: Add check_pkt_len action test to > system-offload-traffic. > > Eelco Chaudron <echaudro@redhat.com> writes: > > > On 16 May 2022, at 18:04, 0-day Robot wrote: > > > >> Bleep bloop. Greetings Eelco Chaudron, I am a robot and I have tried out > your patch. > >> Thanks for your contribution. > >> > >> I encountered some error that I wasn't expecting. See the details below. > >> > >> > >> git-am: > >> error: Failed to merge in the changes. > >> hint: Use 'git am --show-current-patch' to see the failed patch Patch > >> failed at 0001 tests: Add check_pkt_len action test to system-offload-traffic. > >> When you have resolved this problem, run "git am --continue". > >> If you prefer to skip this patch, run "git am --skip" instead. > >> To restore the original branch and stop patching, run "git am --abort". > >> > >> > >> Patch skipped due to previous failure. > >> > >> Please check this out. If you feel there has been an error, please > >> email aconole@redhat.com > > > > > > This failure was due to a merge conflict in the NEWS file. I will not > > send a v4 for now as this will continue to happen. If the maintainers > > do want a v4, I'll send it. > > Understood that we know where the conflict is. > > +Michael Phelan > > Is it possible to get the test results for the previous patches? Hey Aaron/Eelco, The test was aborted due to the "netdev" in the series name, by trying to filter out OVN patches sometimes other patches give a false positive and get aborted incorrectly. I'll rerun the job and ensure the tests are run correctly and you can expect the results on the Build mailing list. Thanks, Michael. > > > //Eelco
On 17 May 2022, at 17:09, Phelan, Michael wrote: >> -----Original Message----- >> From: Aaron Conole <aconole@redhat.com> >> Sent: Tuesday 17 May 2022 15:38 >> To: Eelco Chaudron <echaudro@redhat.com> >> Cc: 0-day Robot <robot@bytheb.org>; dev@openvswitch.org; Phelan, Michael >> <michael.phelan@intel.com> >> Subject: Re: [ovs-dev] [PATCH v3 5/5] tests: Add check_pkt_len action test to >> system-offload-traffic. >> >> Eelco Chaudron <echaudro@redhat.com> writes: >> >>> On 16 May 2022, at 18:04, 0-day Robot wrote: >>> >>>> Bleep bloop. Greetings Eelco Chaudron, I am a robot and I have tried out >> your patch. >>>> Thanks for your contribution. >>>> >>>> I encountered some error that I wasn't expecting. See the details below. >>>> >>>> >>>> git-am: >>>> error: Failed to merge in the changes. >>>> hint: Use 'git am --show-current-patch' to see the failed patch Patch >>>> failed at 0001 tests: Add check_pkt_len action test to system-offload-traffic. >>>> When you have resolved this problem, run "git am --continue". >>>> If you prefer to skip this patch, run "git am --skip" instead. >>>> To restore the original branch and stop patching, run "git am --abort". >>>> >>>> >>>> Patch skipped due to previous failure. >>>> >>>> Please check this out. If you feel there has been an error, please >>>> email aconole@redhat.com >>> >>> >>> This failure was due to a merge conflict in the NEWS file. I will not >>> send a v4 for now as this will continue to happen. If the maintainers >>> do want a v4, I'll send it. >> >> Understood that we know where the conflict is. >> >> +Michael Phelan >> >> Is it possible to get the test results for the previous patches? > Hey Aaron/Eelco, > > The test was aborted due to the "netdev" in the series name, by trying to filter out OVN patches sometimes other patches give a false positive and get aborted incorrectly. I'll rerun the job and ensure the tests are run correctly and you can expect the results on the Build mailing list. So I guess we are good to go with this patch, no issues introduced due to this change.
Eelco Chaudron <echaudro@redhat.com> writes: > On 17 May 2022, at 17:09, Phelan, Michael wrote: > >>> -----Original Message----- >>> From: Aaron Conole <aconole@redhat.com> >>> Sent: Tuesday 17 May 2022 15:38 >>> To: Eelco Chaudron <echaudro@redhat.com> >>> Cc: 0-day Robot <robot@bytheb.org>; dev@openvswitch.org; Phelan, Michael >>> <michael.phelan@intel.com> >>> Subject: Re: [ovs-dev] [PATCH v3 5/5] tests: Add check_pkt_len action test to >>> system-offload-traffic. >>> >>> Eelco Chaudron <echaudro@redhat.com> writes: >>> >>>> On 16 May 2022, at 18:04, 0-day Robot wrote: >>>> >>>>> Bleep bloop. Greetings Eelco Chaudron, I am a robot and I have tried out >>> your patch. >>>>> Thanks for your contribution. >>>>> >>>>> I encountered some error that I wasn't expecting. See the details below. >>>>> >>>>> >>>>> git-am: >>>>> error: Failed to merge in the changes. >>>>> hint: Use 'git am --show-current-patch' to see the failed patch Patch >>>>> failed at 0001 tests: Add check_pkt_len action test to system-offload-traffic. >>>>> When you have resolved this problem, run "git am --continue". >>>>> If you prefer to skip this patch, run "git am --skip" instead. >>>>> To restore the original branch and stop patching, run "git am --abort". >>>>> >>>>> >>>>> Patch skipped due to previous failure. >>>>> >>>>> Please check this out. If you feel there has been an error, please >>>>> email aconole@redhat.com >>>> >>>> >>>> This failure was due to a merge conflict in the NEWS file. I will not >>>> send a v4 for now as this will continue to happen. If the maintainers >>>> do want a v4, I'll send it. >>> >>> Understood that we know where the conflict is. >>> >>> +Michael Phelan >>> >>> Is it possible to get the test results for the previous patches? >> Hey Aaron/Eelco, >> >> The test was aborted due to the "netdev" in the series name, by >> trying to filter out OVN patches sometimes other patches give a >> false positive and get aborted incorrectly. I'll rerun the job and >> ensure the tests are run correctly and you can expect the results on >> the Build mailing list. > > So I guess we are good to go with this patch, no issues introduced due to this change. Agreed.
On 2022-05-16 6:38 PM, Eelco Chaudron wrote: > Signed-off-by: Eelco Chaudron <echaudro@redhat.com> > Acked-by: Mike Pattrick <mkp@redhat.com> > --- > v2: > - Added section in the NEWS document > > NEWS | 2 > tests/system-offloads-traffic.at | 413 ++++++++++++++++++++++++++++++++++++++ > 2 files changed, 414 insertions(+), 1 deletion(-) > > diff --git a/NEWS b/NEWS > index 5bc8e6566..eeb23a58d 100644 > --- a/NEWS > +++ b/NEWS > @@ -19,6 +19,8 @@ Post-v2.17.0 > - OVSDB: > * 'relay' service model now supports transaction history, i.e. honors the > 'last-txn-id' field in 'monitor_cond_since' requests from clients. > + - Linux datapath: > + * Add support for offloading the check_pkt_len action. > > > v2.17.0 - 17 Feb 2022 > diff --git a/tests/system-offloads-traffic.at b/tests/system-offloads-traffic.at > index 705a50079..4cde53e2e 100644 > --- a/tests/system-offloads-traffic.at > +++ b/tests/system-offloads-traffic.at > @@ -4,7 +4,20 @@ AT_BANNER([datapath offloads]) > # > # Normilizes output ports, recirc_id, packets and macs. > # > -m4_define([DUMP_CLEAN_SORTED], [sed -e 's/used:[[0-9]].[[0-9]]*s/used:0.001s/;s/eth(src=[[a-z0-9:]]*,dst=[[a-z0-9:]]*)/eth(macs)/;s/actions:[[0-9,]]*/actions:output/;s/recirc_id(0),//' | sort]) > +m4_define([DUMP_CLEAN_SORTED], [sed -e 's/used:\([[0-9.]]*s\|never\)/used:0.001s/;s/eth(src=[[a-z0-9:]]*,dst=[[a-z0-9:]]*)/eth(macs)/;s/actions:[[0-9,]]\+/actions:output/;s/recirc_id(0),//' | sort]) > + > + > +# AT_CHECK_ACTIONS([ACTIONS]) > +# > +# This extracts and matches the action for IPv4 rules for ingress port p0 > +# > +m4_define([AT_CHECK_ACTIONS], [ > + AT_CHECK([ovs-appctl dpctl/dump-flows type=tc,offloaded | > + sed -n 's/^.*in_port(2),eth(.*),eth_type(0x0800).*actions:\(.*\)/\1/p' | > + tr -d '\n'], > + [0], [$1]) > +]) > + > > AT_SETUP([offloads - ping between two ports - offloads disabled]) > OVS_TRAFFIC_VSWITCHD_START() > @@ -165,3 +178,401 @@ matchall > ]) > OVS_TRAFFIC_VSWITCHD_STOP > AT_CLEANUP > + > + > +AT_SETUP([offloads - check_pkt_len action - offloads disabled]) > +OVS_TRAFFIC_VSWITCHD_START() > + > +ADD_NAMESPACES(at_ns1, at_ns2, at_ns3, at_ns4) > + > +ADD_VETH(p1, at_ns1, br0, "10.1.1.1/24") > +ADD_VETH(p2, at_ns2, br0, "10.1.1.2/24") > +ADD_VETH(p3, at_ns3, br0, "10.1.1.3/24") > +ADD_VETH(p4, at_ns4, br0, "10.1.1.4/24") > + > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=1,in_port=1,reg1=0x2 actions=output:2 > +table=4,in_port=1,reg0=0x1 actions=output:3 > +table=4,in_port=1,reg0=0x0 actions=output:4 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > + > +NS_CHECK_EXEC([at_ns3], [tcpdump -l -n -U -i p3 dst 10.1.1.2 and icmp > p3.pcap 2>/dev/null &]) > +NS_CHECK_EXEC([at_ns4], [tcpdump -l -n -U -i p4 dst 10.1.1.2 and icmp > p4.pcap 2>/dev/null &]) > +sleep 1 > + > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > + > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > + > +AT_CHECK([ovs-appctl dpctl/dump-flows | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED], [0], [dnl > +in_port(2),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:check_pkt_len(size=200,gt(4),le(5)),3 > +in_port(3),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:output > +]) > + > +AT_CHECK([ovs-appctl dpctl/dump-flows type=ovs | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED], [0], [dnl > +in_port(2),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:check_pkt_len(size=200,gt(4),le(5)),3 > +in_port(3),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:output > +]) > + > +AT_CHECK([ovs-appctl dpctl/dump-flows type=tc,offloaded], [0], []) > + > +AT_CHECK([test $(ovs-appctl upcall/show | grep -c "offloaded flows") -eq 0], [0], [ignore]) > + > +OVS_TRAFFIC_VSWITCHD_STOP > + > +AT_CHECK([cat p3.pcap | awk '{print $NF}' | uniq -c | awk '{$1=$1;print}'], [0], [dnl > +10 1032 > +]) > +AT_CHECK([cat p4.pcap | awk '{print $NF}' | uniq -c | awk '{$1=$1;print}'], [0], [dnl > +10 72 > +]) > + > +AT_CLEANUP > + > + > +AT_SETUP([offloads - check_pkt_len action - offloads enabled]) > +OVS_TRAFFIC_VSWITCHD_START([], [], [ovs-vsctl --no-wait set Open_vSwitch . other_config:hw-offload=true]) > + > +ADD_NAMESPACES(at_ns1, at_ns2, at_ns3, at_ns4) > + > +ADD_VETH(p1, at_ns1, br0, "10.1.1.1/24") > +ADD_VETH(p2, at_ns2, br0, "10.1.1.2/24") > +ADD_VETH(p3, at_ns3, br0, "10.1.1.3/24") > +ADD_VETH(p4, at_ns4, br0, "10.1.1.4/24") > + > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=1,in_port=1,reg1=0x2 actions=output:2 > +table=4,in_port=1,reg0=0x1 actions=output:3 > +table=4,in_port=1,reg0=0x0 actions=output:4 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > + > +NS_CHECK_EXEC([at_ns3], [tcpdump -l -n -U -i p3 dst 10.1.1.2 and icmp > p3.pcap 2>/dev/null &]) > +NS_CHECK_EXEC([at_ns4], [tcpdump -l -n -U -i p4 dst 10.1.1.2 and icmp > p4.pcap 2>/dev/null &]) > +sleep 1 > + > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > + > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > + > +AT_CHECK([ovs-appctl dpctl/dump-flows | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED | sed 's/bytes:11348/bytes:11614/'], [0], [dnl > +in_port(2),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:check_pkt_len(size=200,gt(4),le(5)),3 > +in_port(3),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:output > +]) > + > +AT_CHECK([ovs-appctl dpctl/dump-flows type=ovs | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED], [0], []) > + > +AT_CHECK([ovs-appctl dpctl/dump-flows type=tc,offloaded | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED | sed 's/bytes:11348/bytes:11614/'], [0], [dnl > +in_port(2),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:check_pkt_len(size=200,gt(4),le(5)),3 > +in_port(3),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:output > +]) > + > +AT_CHECK([ovs-appctl upcall/show | grep -E "offloaded flows : [[1-9]]"], [0], [ignore]) > + > +sleep 1 > +AT_CHECK([cat p3.pcap | awk '{print $NF}' | uniq -c | awk '{$1=$1;print}'], [0], [dnl > +10 1032 > +]) > +AT_CHECK([cat p4.pcap | awk '{print $NF}' | uniq -c | awk '{$1=$1;print}'], [0], [dnl > +10 72 > +]) > + > + > +# This test verifies the total packet counters work when individual branches > +# are taken. > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=4,in_port=1,reg0=0x1 actions=output:2 > +table=4,in_port=1,reg0=0x0 actions=output:2 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > + > +sleep 1 > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > + > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > + > +AT_CHECK([ovs-appctl dpctl/dump-flows | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED | sed 's/bytes:11440/bytes:11720/'], [0], [dnl > +in_port(2),eth(),eth_type(0x0800),ipv4(frag=no), packets:20, bytes:11720, used:0.001s, actions:check_pkt_len(size=200,gt(3),le(3)) > +in_port(3),eth(),eth_type(0x0800),ipv4(frag=no), packets:20, bytes:11720, used:0.001s, actions:output > +]) > + > + > +# The remaining tests are just to make sure the datapath flow actions are > +# encoded/decoded the right way. > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=4,in_port=1,reg0=0x1 actions=output:4 > +table=4,in_port=1,reg0=0x0 actions=output:2 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > +sleep 1 > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(5),le(3))]) > + > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=4,in_port=1,reg0=0x0 actions=output:2 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > +sleep 1 > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(drop),le(3))]) > + > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=4,in_port=1,reg0=0x1 actions=output:2 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > +sleep 1 > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(3),le(drop))]) > + > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=4,in_port=1,reg0=0x0 actions=output:2,3 > +table=4,in_port=1,reg0=0x1 actions=output:2,4 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > +sleep 1 > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(3,5),le(3,4))]) > + > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=1,in_port=1,reg1=0x2 actions=output:2 > +table=4,in_port=1,reg0=0x1 actions=mod_nw_tos:4,output:3 > +table=4,in_port=1,reg0=0x0 actions=mod_nw_tos:8,output:4 > +]) > + > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > + > +NS_CHECK_EXEC([at_ns3], [tcpdump -l -n -U -i p3 dst 10.1.1.2 and icmp > p3_2.pcap 2>/dev/null &]) > +NS_CHECK_EXEC([at_ns4], [tcpdump -l -n -U -i p4 dst 10.1.1.2 and icmp > p4_2.pcap 2>/dev/null &]) > +sleep 1 > + > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > + > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > + > +AT_CHECK([ovs-appctl dpctl/dump-flows type=tc,offloaded | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED | sed -e 's/bytes:11348/bytes:11614/' -e 's/bytes:11440/bytes:11720/'], [0], [dnl > +in_port(2),eth(),eth_type(0x0800),ipv4(proto=1,tos=0/0xfc,frag=no), packets:19, bytes:11614, used:0.001s, actions:check_pkt_len(size=200,gt(set(ipv4(tos=0x4/0xfc)),4),le(set(ipv4(tos=0x8/0xfc)),5)),3 > +in_port(3),eth(),eth_type(0x0800),ipv4(frag=no), packets:20, bytes:11720, used:0.001s, actions:output > +]) > + > +sleep 1 > +AT_CHECK([cat p3_2.pcap | awk '{print $NF}' | uniq -c | awk '{$1=$1;print}'], [0], [dnl > +10 1032 > +]) > +AT_CHECK([cat p4_2.pcap | awk '{print $NF}' | uniq -c | awk '{$1=$1;print}'], [0], [dnl > +10 72 > +]) > + > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=1,in_port=1,reg1=0x2 actions=output:2 > +table=4,in_port=1,reg0=0x1 actions=mod_nw_tos:4,output:3 > +table=4,in_port=1,reg0=0x0 actions=mod_dl_src:00:11:11:11:11:11,output:4 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(set(ipv4(tos=0x4/0xfc)),4),le(set(eth(src=00:11:11:11:11:11)),5)),3]) > + > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=1,in_port=1,reg1=0x2 actions=output:2 > +table=4,in_port=1,reg0=0x1 actions=mod_dl_src:00:11:11:11:11:11,output:3 > +table=4,in_port=1,reg0=0x0 actions=mod_nw_tos:8,output:4 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(set(eth(src=00:11:11:11:11:11)),4),le(set(ipv4(tos=0x8/0xfc)),5)),3]) > + > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=1,in_port=1,reg1=0x2 actions=output:2 > +table=4,in_port=1,reg0=0x1 actions=output:br0 > +table=4,in_port=1,reg0=0x0 actions=output:br0 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > +sleep 1 > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(1),le(1)),3]) > + > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=1,in_port=1,reg1=0x2 actions=output:2 > +table=4,in_port=1,reg0=0x1 actions=output:br0 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > +sleep 1 > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(1),le(drop)),3]) > + > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=1,in_port=1,reg1=0x2 actions=output:2 > +table=4,in_port=1,reg0=0x0 actions=output:br0 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > +sleep 1 > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > + > +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(drop),le(1)),3]) > + > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=1,in_port=1,reg1=0x2 actions=output:2 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > +sleep 1 > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(drop),le(drop)),3]) > + > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=1,in_port=1,reg1=0x2 actions=output:2 > +table=4,in_port=1,reg0=0x1 actions=check_pkt_larger(400)->NXM_NX_REG0[[0]],resubmit(,5) > +table=4,in_port=1,reg0=0x0 actions=output:4 > +table=5,in_port=1,reg0=0x1 actions=output:4 > +table=5,in_port=1,reg0=0x0 actions=output:3 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > +sleep 1 > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(check_pkt_len(size=400,gt(5),le(4))),le(5)),3]) > + > + > +AT_CHECK([ovs-appctl revalidator/wait], [0]) > +AT_CHECK([ovs-ofctl del-flows br0]) > +AT_DATA([flows.txt], [dnl > +table=0,in_port=2 actions=output:1 > +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) > +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) > +table=1,in_port=1,reg1=0x2 actions=output:2 > +table=4,in_port=1,reg0=0x0 actions=check_pkt_larger(100)->NXM_NX_REG0[[0]],resubmit(,5) > +table=4,in_port=1,reg0=0x1 actions=output:4 > +table=5,in_port=1,reg0=0x1 actions=output:4 > +table=5,in_port=1,reg0=0x0 actions=output:3 > +]) > +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) > +sleep 1 > +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl > +10 packets transmitted, 10 received, 0% packet loss, time 0ms > +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) > +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(5),le(check_pkt_len(size=100,gt(5),le(4)))),3]) > + > + > +OVS_TRAFFIC_VSWITCHD_STOP > + > +AT_CLEANUP > Acked-by: Roi Dayan <roid@nvidia.com>
diff --git a/NEWS b/NEWS index 5bc8e6566..eeb23a58d 100644 --- a/NEWS +++ b/NEWS @@ -19,6 +19,8 @@ Post-v2.17.0 - OVSDB: * 'relay' service model now supports transaction history, i.e. honors the 'last-txn-id' field in 'monitor_cond_since' requests from clients. + - Linux datapath: + * Add support for offloading the check_pkt_len action. v2.17.0 - 17 Feb 2022 diff --git a/tests/system-offloads-traffic.at b/tests/system-offloads-traffic.at index 705a50079..4cde53e2e 100644 --- a/tests/system-offloads-traffic.at +++ b/tests/system-offloads-traffic.at @@ -4,7 +4,20 @@ AT_BANNER([datapath offloads]) # # Normilizes output ports, recirc_id, packets and macs. # -m4_define([DUMP_CLEAN_SORTED], [sed -e 's/used:[[0-9]].[[0-9]]*s/used:0.001s/;s/eth(src=[[a-z0-9:]]*,dst=[[a-z0-9:]]*)/eth(macs)/;s/actions:[[0-9,]]*/actions:output/;s/recirc_id(0),//' | sort]) +m4_define([DUMP_CLEAN_SORTED], [sed -e 's/used:\([[0-9.]]*s\|never\)/used:0.001s/;s/eth(src=[[a-z0-9:]]*,dst=[[a-z0-9:]]*)/eth(macs)/;s/actions:[[0-9,]]\+/actions:output/;s/recirc_id(0),//' | sort]) + + +# AT_CHECK_ACTIONS([ACTIONS]) +# +# This extracts and matches the action for IPv4 rules for ingress port p0 +# +m4_define([AT_CHECK_ACTIONS], [ + AT_CHECK([ovs-appctl dpctl/dump-flows type=tc,offloaded | + sed -n 's/^.*in_port(2),eth(.*),eth_type(0x0800).*actions:\(.*\)/\1/p' | + tr -d '\n'], + [0], [$1]) +]) + AT_SETUP([offloads - ping between two ports - offloads disabled]) OVS_TRAFFIC_VSWITCHD_START() @@ -165,3 +178,401 @@ matchall ]) OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP + + +AT_SETUP([offloads - check_pkt_len action - offloads disabled]) +OVS_TRAFFIC_VSWITCHD_START() + +ADD_NAMESPACES(at_ns1, at_ns2, at_ns3, at_ns4) + +ADD_VETH(p1, at_ns1, br0, "10.1.1.1/24") +ADD_VETH(p2, at_ns2, br0, "10.1.1.2/24") +ADD_VETH(p3, at_ns3, br0, "10.1.1.3/24") +ADD_VETH(p4, at_ns4, br0, "10.1.1.4/24") + +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=1,in_port=1,reg1=0x2 actions=output:2 +table=4,in_port=1,reg0=0x1 actions=output:3 +table=4,in_port=1,reg0=0x0 actions=output:4 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) + +NS_CHECK_EXEC([at_ns3], [tcpdump -l -n -U -i p3 dst 10.1.1.2 and icmp > p3.pcap 2>/dev/null &]) +NS_CHECK_EXEC([at_ns4], [tcpdump -l -n -U -i p4 dst 10.1.1.2 and icmp > p4.pcap 2>/dev/null &]) +sleep 1 + +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) + +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) + +AT_CHECK([ovs-appctl dpctl/dump-flows | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED], [0], [dnl +in_port(2),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:check_pkt_len(size=200,gt(4),le(5)),3 +in_port(3),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:output +]) + +AT_CHECK([ovs-appctl dpctl/dump-flows type=ovs | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED], [0], [dnl +in_port(2),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:check_pkt_len(size=200,gt(4),le(5)),3 +in_port(3),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:output +]) + +AT_CHECK([ovs-appctl dpctl/dump-flows type=tc,offloaded], [0], []) + +AT_CHECK([test $(ovs-appctl upcall/show | grep -c "offloaded flows") -eq 0], [0], [ignore]) + +OVS_TRAFFIC_VSWITCHD_STOP + +AT_CHECK([cat p3.pcap | awk '{print $NF}' | uniq -c | awk '{$1=$1;print}'], [0], [dnl +10 1032 +]) +AT_CHECK([cat p4.pcap | awk '{print $NF}' | uniq -c | awk '{$1=$1;print}'], [0], [dnl +10 72 +]) + +AT_CLEANUP + + +AT_SETUP([offloads - check_pkt_len action - offloads enabled]) +OVS_TRAFFIC_VSWITCHD_START([], [], [ovs-vsctl --no-wait set Open_vSwitch . other_config:hw-offload=true]) + +ADD_NAMESPACES(at_ns1, at_ns2, at_ns3, at_ns4) + +ADD_VETH(p1, at_ns1, br0, "10.1.1.1/24") +ADD_VETH(p2, at_ns2, br0, "10.1.1.2/24") +ADD_VETH(p3, at_ns3, br0, "10.1.1.3/24") +ADD_VETH(p4, at_ns4, br0, "10.1.1.4/24") + +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=1,in_port=1,reg1=0x2 actions=output:2 +table=4,in_port=1,reg0=0x1 actions=output:3 +table=4,in_port=1,reg0=0x0 actions=output:4 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) + +NS_CHECK_EXEC([at_ns3], [tcpdump -l -n -U -i p3 dst 10.1.1.2 and icmp > p3.pcap 2>/dev/null &]) +NS_CHECK_EXEC([at_ns4], [tcpdump -l -n -U -i p4 dst 10.1.1.2 and icmp > p4.pcap 2>/dev/null &]) +sleep 1 + +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) + +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) + +AT_CHECK([ovs-appctl dpctl/dump-flows | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED | sed 's/bytes:11348/bytes:11614/'], [0], [dnl +in_port(2),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:check_pkt_len(size=200,gt(4),le(5)),3 +in_port(3),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:output +]) + +AT_CHECK([ovs-appctl dpctl/dump-flows type=ovs | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED], [0], []) + +AT_CHECK([ovs-appctl dpctl/dump-flows type=tc,offloaded | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED | sed 's/bytes:11348/bytes:11614/'], [0], [dnl +in_port(2),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:check_pkt_len(size=200,gt(4),le(5)),3 +in_port(3),eth(),eth_type(0x0800),ipv4(frag=no), packets:19, bytes:11614, used:0.001s, actions:output +]) + +AT_CHECK([ovs-appctl upcall/show | grep -E "offloaded flows : [[1-9]]"], [0], [ignore]) + +sleep 1 +AT_CHECK([cat p3.pcap | awk '{print $NF}' | uniq -c | awk '{$1=$1;print}'], [0], [dnl +10 1032 +]) +AT_CHECK([cat p4.pcap | awk '{print $NF}' | uniq -c | awk '{$1=$1;print}'], [0], [dnl +10 72 +]) + + +# This test verifies the total packet counters work when individual branches +# are taken. + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=4,in_port=1,reg0=0x1 actions=output:2 +table=4,in_port=1,reg0=0x0 actions=output:2 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) + +sleep 1 +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) + +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) + +AT_CHECK([ovs-appctl dpctl/dump-flows | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED | sed 's/bytes:11440/bytes:11720/'], [0], [dnl +in_port(2),eth(),eth_type(0x0800),ipv4(frag=no), packets:20, bytes:11720, used:0.001s, actions:check_pkt_len(size=200,gt(3),le(3)) +in_port(3),eth(),eth_type(0x0800),ipv4(frag=no), packets:20, bytes:11720, used:0.001s, actions:output +]) + + +# The remaining tests are just to make sure the datapath flow actions are +# encoded/decoded the right way. + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=4,in_port=1,reg0=0x1 actions=output:4 +table=4,in_port=1,reg0=0x0 actions=output:2 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) +sleep 1 +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(5),le(3))]) + + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=4,in_port=1,reg0=0x0 actions=output:2 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) +sleep 1 +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(drop),le(3))]) + + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=4,in_port=1,reg0=0x1 actions=output:2 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) +sleep 1 +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(3),le(drop))]) + + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=4,in_port=1,reg0=0x0 actions=output:2,3 +table=4,in_port=1,reg0=0x1 actions=output:2,4 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) +sleep 1 +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(3,5),le(3,4))]) + + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=1,in_port=1,reg1=0x2 actions=output:2 +table=4,in_port=1,reg0=0x1 actions=mod_nw_tos:4,output:3 +table=4,in_port=1,reg0=0x0 actions=mod_nw_tos:8,output:4 +]) + +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) + +NS_CHECK_EXEC([at_ns3], [tcpdump -l -n -U -i p3 dst 10.1.1.2 and icmp > p3_2.pcap 2>/dev/null &]) +NS_CHECK_EXEC([at_ns4], [tcpdump -l -n -U -i p4 dst 10.1.1.2 and icmp > p4_2.pcap 2>/dev/null &]) +sleep 1 + +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) + +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) + +AT_CHECK([ovs-appctl dpctl/dump-flows type=tc,offloaded | grep "eth_type(0x0800)" | DUMP_CLEAN_SORTED | sed -e 's/bytes:11348/bytes:11614/' -e 's/bytes:11440/bytes:11720/'], [0], [dnl +in_port(2),eth(),eth_type(0x0800),ipv4(proto=1,tos=0/0xfc,frag=no), packets:19, bytes:11614, used:0.001s, actions:check_pkt_len(size=200,gt(set(ipv4(tos=0x4/0xfc)),4),le(set(ipv4(tos=0x8/0xfc)),5)),3 +in_port(3),eth(),eth_type(0x0800),ipv4(frag=no), packets:20, bytes:11720, used:0.001s, actions:output +]) + +sleep 1 +AT_CHECK([cat p3_2.pcap | awk '{print $NF}' | uniq -c | awk '{$1=$1;print}'], [0], [dnl +10 1032 +]) +AT_CHECK([cat p4_2.pcap | awk '{print $NF}' | uniq -c | awk '{$1=$1;print}'], [0], [dnl +10 72 +]) + + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=1,in_port=1,reg1=0x2 actions=output:2 +table=4,in_port=1,reg0=0x1 actions=mod_nw_tos:4,output:3 +table=4,in_port=1,reg0=0x0 actions=mod_dl_src:00:11:11:11:11:11,output:4 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(set(ipv4(tos=0x4/0xfc)),4),le(set(eth(src=00:11:11:11:11:11)),5)),3]) + + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=1,in_port=1,reg1=0x2 actions=output:2 +table=4,in_port=1,reg0=0x1 actions=mod_dl_src:00:11:11:11:11:11,output:3 +table=4,in_port=1,reg0=0x0 actions=mod_nw_tos:8,output:4 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(set(eth(src=00:11:11:11:11:11)),4),le(set(ipv4(tos=0x8/0xfc)),5)),3]) + + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=1,in_port=1,reg1=0x2 actions=output:2 +table=4,in_port=1,reg0=0x1 actions=output:br0 +table=4,in_port=1,reg0=0x0 actions=output:br0 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) +sleep 1 +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(1),le(1)),3]) + + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=1,in_port=1,reg1=0x2 actions=output:2 +table=4,in_port=1,reg0=0x1 actions=output:br0 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) +sleep 1 +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(1),le(drop)),3]) + + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=1,in_port=1,reg1=0x2 actions=output:2 +table=4,in_port=1,reg0=0x0 actions=output:br0 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) +sleep 1 +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 1024 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) + +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(drop),le(1)),3]) + + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=1,in_port=1,reg1=0x2 actions=output:2 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) +sleep 1 +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(drop),le(drop)),3]) + + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=1,in_port=1,reg1=0x2 actions=output:2 +table=4,in_port=1,reg0=0x1 actions=check_pkt_larger(400)->NXM_NX_REG0[[0]],resubmit(,5) +table=4,in_port=1,reg0=0x0 actions=output:4 +table=5,in_port=1,reg0=0x1 actions=output:4 +table=5,in_port=1,reg0=0x0 actions=output:3 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) +sleep 1 +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(check_pkt_len(size=400,gt(5),le(4))),le(5)),3]) + + +AT_CHECK([ovs-appctl revalidator/wait], [0]) +AT_CHECK([ovs-ofctl del-flows br0]) +AT_DATA([flows.txt], [dnl +table=0,in_port=2 actions=output:1 +table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[[]],resubmit(,1),load:0x2->NXM_NX_REG1[[]],resubmit(,1) +table=1,in_port=1,reg1=0x1 actions=check_pkt_larger(200)->NXM_NX_REG0[[0]],resubmit(,4) +table=1,in_port=1,reg1=0x2 actions=output:2 +table=4,in_port=1,reg0=0x0 actions=check_pkt_larger(100)->NXM_NX_REG0[[0]],resubmit(,5) +table=4,in_port=1,reg0=0x1 actions=output:4 +table=5,in_port=1,reg0=0x1 actions=output:4 +table=5,in_port=1,reg0=0x0 actions=output:3 +]) +AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flows br0 flows.txt]) +sleep 1 +NS_CHECK_EXEC([at_ns1], [ping -q -c 10 -i 0.1 -w 2 -s 64 10.1.1.2 | FORMAT_PING], [0], [dnl +10 packets transmitted, 10 received, 0% packet loss, time 0ms +], [], [ovs-appctl dpctl/dump-flows; ovs-ofctl dump-flows br0]) +AT_CHECK_ACTIONS([check_pkt_len(size=200,gt(5),le(check_pkt_len(size=100,gt(5),le(4)))),3]) + + +OVS_TRAFFIC_VSWITCHD_STOP + +AT_CLEANUP