Currently ipf will inject completed fragments into the first available batch. In almost all cases, this is the batch which contained the last fragment of the packet. However, in cases where the batch is full the packets are added to whatever random subsequent batch arrives to conntrack. This could result in packets being processed incorrectly, for example some completed frags may be inserted into a batch from the interface that they should have been destined for.
This patch verifies the zone matches, and that the batch contains a packet of the same in_port as the completed fragments. Reported-at: https://issues.redhat.com/browse/FDP-1052 Fixes: 4ea96698f667 ("Userspace datapath: Add fragmentation handling.") Signed-off-by: Mike Pattrick <m...@redhat.com> --- lib/conntrack.c | 18 ++++- lib/ipf.c | 21 ++++- lib/ipf.h | 3 +- tests/ofproto-dpif.at | 178 ++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 206 insertions(+), 14 deletions(-) diff --git a/lib/conntrack.c b/lib/conntrack.c index f4b150bee..e769348f6 100644 --- a/lib/conntrack.c +++ b/lib/conntrack.c @@ -22,7 +22,6 @@ #include <netinet/icmp6.h> #include <string.h> -#include "bitmap.h" #include "conntrack.h" #include "conntrack-private.h" #include "conntrack-tp.h" @@ -34,7 +33,9 @@ #include "flow.h" #include "netdev.h" #include "odp-netlink.h" +#include "odp-util.h" #include "openvswitch/hmap.h" +#include "openvswitch/types.h" #include "openvswitch/vlog.h" #include "ovs-rcu.h" #include "ovs-thread.h" @@ -1481,11 +1482,20 @@ conntrack_execute(struct conntrack *ct, struct dp_packet_batch *pkt_batch, const struct nat_action_info_t *nat_action_info, long long now, uint32_t tp_id) { + odp_port_t in_port = ODPP_LOCAL; + struct conn_lookup_ctx ctx; + struct dp_packet *packet; + + DP_PACKET_BATCH_FOR_EACH (i, packet, pkt_batch) { + /* The ipf preprocess function may consume all packets from this batch, + * save an in_port. */ + in_port = packet->md.in_port.odp_port; + break; + } + ipf_preprocess_conntrack(ct->ipf, pkt_batch, now, dl_type, zone, ct->hash_basis); - struct dp_packet *packet; - struct conn_lookup_ctx ctx; DP_PACKET_BATCH_FOR_EACH (i, packet, pkt_batch) { struct conn *conn = packet->md.conn; @@ -1511,7 +1521,7 @@ conntrack_execute(struct conntrack *ct, struct dp_packet_batch *pkt_batch, } } - ipf_postprocess_conntrack(ct->ipf, pkt_batch, now, dl_type); + ipf_postprocess_conntrack(ct->ipf, pkt_batch, now, dl_type, zone, in_port); return 0; } diff --git a/lib/ipf.c b/lib/ipf.c index 53dfe6664..33f1defcd 100644 --- a/lib/ipf.c +++ b/lib/ipf.c @@ -29,6 +29,7 @@ #include "latch.h" #include "openvswitch/hmap.h" #include "openvswitch/poll-loop.h" +#include "openvswitch/types.h" #include "openvswitch/vlog.h" #include "ovs-atomic.h" #include "packets.h" @@ -1062,7 +1063,8 @@ ipf_send_frags_in_list(struct ipf *ipf, struct ipf_list *ipf_list, * cleans up the list context when it is empty.*/ static void ipf_send_completed_frags(struct ipf *ipf, struct dp_packet_batch *pb, - long long now, bool v6) + long long now, bool v6, uint16_t zone, + odp_port_t in_port) { if (ovs_list_is_empty(&ipf->frag_complete_list)) { return; @@ -1072,9 +1074,21 @@ ipf_send_completed_frags(struct ipf *ipf, struct dp_packet_batch *pb, struct ipf_list *ipf_list; LIST_FOR_EACH_SAFE (ipf_list, list_node, &ipf->frag_complete_list) { + if ((ipf_list->key.dl_type == htons(ETH_TYPE_IPV6)) != v6) { continue; } + if (ipf_list->key.zone != zone) { + continue; + } + + /* Check that the batch's in_port matches. */ + struct dp_packet *pkt + = ipf_list->frag_list[ipf_list->last_sent_idx + 1].pkt; + if (in_port != pkt->md.in_port.odp_port) { + continue; + } + if (ipf_send_frags_in_list(ipf, ipf_list, pb, v6, now)) { ipf_completed_list_clean(&ipf->frag_lists, ipf_list); } else { @@ -1262,12 +1276,13 @@ ipf_preprocess_conntrack(struct ipf *ipf, struct dp_packet_batch *pb, * with low priority. Reassembled packets are freed. */ void ipf_postprocess_conntrack(struct ipf *ipf, struct dp_packet_batch *pb, - long long now, ovs_be16 dl_type) + long long now, ovs_be16 dl_type, uint16_t zone, + odp_port_t in_port) { if (ipf_get_enabled(ipf) || atomic_count_get(&ipf->nfrag)) { bool v6 = dl_type == htons(ETH_TYPE_IPV6); ipf_post_execute_reass_pkts(ipf, pb, v6); - ipf_send_completed_frags(ipf, pb, now, v6); + ipf_send_completed_frags(ipf, pb, now, v6, zone, in_port); ipf_delete_expired_frags(ipf, now); } } diff --git a/lib/ipf.h b/lib/ipf.h index 6ac91b270..7324a1704 100644 --- a/lib/ipf.h +++ b/lib/ipf.h @@ -47,7 +47,8 @@ void ipf_preprocess_conntrack(struct ipf *ipf, struct dp_packet_batch *pb, uint32_t hash_basis); void ipf_postprocess_conntrack(struct ipf *ipf, struct dp_packet_batch *pb, - long long now, ovs_be16 dl_type); + long long now, ovs_be16 dl_type, uint16_t zone, + odp_port_t in_port); int ipf_set_enabled(struct ipf *ipf, bool v6, bool enable); int ipf_set_min_frag(struct ipf *ipf, bool v6, uint32_t value); diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at index a35b80077..57e92d6c2 100644 --- a/tests/ofproto-dpif.at +++ b/tests/ofproto-dpif.at @@ -5314,11 +5314,18 @@ AT_CLEANUP AT_SETUP([ofproto-dpif - fragment handling - reassembly]) OVS_VSWITCHD_START -add_of_ports br0 1 2 90 +add_of_ports br0 1 2 3 90 AT_DATA([flows.txt], [dnl -table=0 tcp actions=ct(commit, table=1) +dnl Expand flow mask. +table=0 in_port=90,dl_src=55:55:55:55:55:55, actions=drop +table=0 in_port=90,ip,nw_src=10.0.0.1, actions=drop +table=0 in_port=1,dl_src=55:55:55:55:55:55, actions=drop +table=0 in_port=1,ip,nw_src=10.0.0.2, actions=drop +table=0 in_port=90,ip,tcp actions=ct(commit, table=1, zone=10) +table=0 in_port=1,ip,tcp actions=ct(commit, table=2, zone=20) table=1 tcp actions=2 +table=2 tcp actions=3 ]) AT_CHECK([ovs-ofctl -O OpenFlow11 replace-flows br0 flows.txt]) @@ -5330,7 +5337,7 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 45 dnl Test that no packets flow. AT_CHECK([ovs-appctl dpctl/dump-flows filter=in_port\(90\) | sed s'/recirc(.*)/recirc(X)/'], [0], [dnl flow-dump from the main thread: -recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:ct(commit),recirc(X) +recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth(src=00:26:b9:8c:b0:f9),eth_type(0x0800),ipv4(src=172.17.55.13/128.0.0.0,proto=6,frag=later), packets:0, bytes:0, used:never, actions:ct(commit,zone=10),recirc(X) ]) dnl Expire second frag. @@ -5344,7 +5351,7 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 45 dnl Test that no packets flow. AT_CHECK([ovs-appctl dpctl/dump-flows filter=in_port\(90\) | sed s'/recirc(.*)/recirc(X)/'], [0], [dnl flow-dump from the main thread: -recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:ct(commit),recirc(X) +recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth(src=00:26:b9:8c:b0:f9),eth_type(0x0800),ipv4(src=172.17.55.13/128.0.0.0,proto=6,frag=later), packets:0, bytes:0, used:never, actions:ct(commit,zone=10),recirc(X) ]) dnl Purge second frag @@ -5364,10 +5371,169 @@ $zero1208"]) AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/recirc[[^)]]*)/recirc()/g' | strip_used | sort], [0], [dnl flow-dump from the main thread: +recirc(),in_port(90),packet_type(ns=0,id=0),eth(src=00:26:b9:8c:b0:f9),eth_type(0x0800),ipv4(src=172.17.55.13/128.0.0.0,proto=6,frag=first), packets:0, bytes:0, used:never, actions:ct(commit,zone=10),recirc() +recirc(),in_port(90),packet_type(ns=0,id=0),eth(src=00:26:b9:8c:b0:f9),eth_type(0x0800),ipv4(src=172.17.55.13/128.0.0.0,proto=6,frag=later), packets:0, bytes:0, used:never, actions:ct(commit,zone=10),recirc() recirc(),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first), packets:0, bytes:0, used:never, actions:2 -recirc(),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first), packets:0, bytes:0, used:never, actions:ct(commit),recirc() recirc(),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:2 -recirc(),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:ct(commit),recirc() +]) + +dnl Clear ipf state. +ovs-appctl time/warp 33000 + +dnl Send a lot of small frags to overload the dp packet batch max. +AT_CHECK([ovs-appctl dpctl/ipf-set-min-frag v4 420], [], [dnl +setting minimum fragment size successful +]) + +zero107=$(printf '0%.0s' $(seq 214)) +dnl First zone. +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e120004006423e0202020201010101000200010000000000000000500220001c7a0000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e120384006420602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12070400641ce02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e120a84006419602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e120e04006415e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e121184006412602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12150400640ee02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12188400640b602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e121c04006407e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e121f84006404602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e122304006400e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1226840063fd602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e122a040063f9e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e122d840063f6602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1231040063f2e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1234840063ef602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1238040063ebe02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e123b840063e8602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e123f040063e4e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1242840063e1602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1246040063dde02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1249840063da602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e124d040063d6e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1250840063d3602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1254040063cfe02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1257840063cc602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e125b040063c8e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e125e840063c5602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1262040063c1e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1265840063be602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1269040063bae02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e126c840063b7602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1270040063b3e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1273840063b0602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1277040063ace02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e127a840063a9602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e127e040063a5e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e1281840063a2602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12850400639ee02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12888400639b602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e128c04006397e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e128f84006394602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e129304006390e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12968400638d602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e129a04006389e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e129d84006386602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12a104006382e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12a48400637f602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12a80400637be02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12ab84006378602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12af04006374e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12b284006371602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12b60400636de02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12b98400636a602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12bd04006366e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12c084006363602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12c40400635fe02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12c78400635c602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12cb04006358e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12ce84006355602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12d204006351e02020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "1111111111112222222222220800450001d410e12d58400634e602020202010101010000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "11111111111122222222222208004500010810e10d904006557a0202020201010101000000000000000000000000000000000000000000000000000000000000${zero107}${zero107}"]) + +dnl Second zone. +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d2200040064e4d0101010102020202000100020000000000000000500220001c7a0000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d2203840064e1501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d2207040064ddd01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d220a840064da501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d220e040064d6d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d2211840064d3501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d2215040064cfd01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d2218840064cc501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d221c040064c8d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d221f840064c5501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d2223040064c1d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d2226840064be501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d222a040064bad01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d222d840064b7501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d2231040064b3d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d2234840064b0501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d2238040064acd01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d223b840064a9501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d223f040064a5d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d2242840064a2501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22460400649ed01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22498400649b501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d224d04006497d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d225084006494501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d225404006490d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22578400648d501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d225b04006489d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d225e84006486501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d226204006482d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22658400647f501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22690400647bd01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d226c84006478501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d227004006474d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d227384006471501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22770400646dd01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d227a8400646a501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d227e04006466d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d228184006463501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22850400645fd01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22888400645c501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d228c04006458d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d228f84006455501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d229304006451d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22968400644e501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d229a0400644ad01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d229d84006447501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22a104006443d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22a484006440501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22a80400643cd01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22ab84006439501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22af04006435d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22b284006432501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22b60400642ed01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22b98400642b501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22bd04006427d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22c084006424501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22c404006420d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22c78400641d501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22cb04006419d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22ce84006416501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22d204006412d01010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "2222222222221111111111110800450001d404d22d58400640f501010101020202020000000000000000000000000000000000000000${zero107}${zero107}${zero107}${zero107}"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "22222222222211111111111108004500010804d20d90400661890101010102020202000000000000000000000000000000000000000000000000000000000000${zero107}${zero107}"]) + +dnl Bump the remaining queued packets +AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 04c4 0002 0096 40 06 af61 ac11370d ac11370b dnl +$zero1208"]) +AT_CHECK([ovs-appctl netdev-dummy/receive p1 "0021853763af 0026b98cb0f9 0800 4500 04c4 0002 0096 40 06 af61 ac11370d ac11370b dnl +$zero1208"]) + +AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/recirc[[^)]]*)/recirc()/g' | sed 's/used.*, / /' | sort], [0], [dnl +flow-dump from the main thread: +recirc(),in_port(1),packet_type(ns=0,id=0),eth(src=00:26:b9:8c:b0:f9),eth_type(0x0800),ipv4(src=172.17.55.13/128.0.0.0,proto=6,frag=later), packets:0, bytes:0, actions:ct(commit,zone=20),recirc() +recirc(),in_port(1),packet_type(ns=0,id=0),eth(src=11:11:11:11:11:11),eth_type(0x0800),ipv4(src=1.1.1.1/248.0.0.0,proto=6,frag=first), packets:0, bytes:0, actions:ct(commit,zone=20),recirc() +recirc(),in_port(1),packet_type(ns=0,id=0),eth(src=11:11:11:11:11:11),eth_type(0x0800),ipv4(src=1.1.1.1/248.0.0.0,proto=6,frag=later), packets:61, bytes:29198, actions:ct(commit,zone=20),recirc() +recirc(),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first), packets:0, bytes:0, actions:3 +recirc(),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:61, bytes:29198, actions:3 +recirc(),in_port(90),packet_type(ns=0,id=0),eth(src=00:26:b9:8c:b0:f9),eth_type(0x0800),ipv4(src=172.17.55.13/128.0.0.0,proto=6,frag=later), packets:0, bytes:0, actions:ct(commit,zone=10),recirc() +recirc(),in_port(90),packet_type(ns=0,id=0),eth(src=22:22:22:22:22:22),eth_type(0x0800),ipv4(src=2.2.2.2/248.0.0.0,proto=6,frag=first), packets:0, bytes:0, actions:ct(commit,zone=10),recirc() +recirc(),in_port(90),packet_type(ns=0,id=0),eth(src=22:22:22:22:22:22),eth_type(0x0800),ipv4(src=2.2.2.2/248.0.0.0,proto=6,frag=later), packets:61, bytes:29198, actions:ct(commit,zone=10),recirc() +recirc(),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first), packets:0, bytes:0, actions:2 +recirc(),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:61, bytes:29198, actions:2 ]) OVS_VSWITCHD_STOP -- 2.49.0 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev