diff --git a/SOURCES/openvswitch-2.17.0.patch b/SOURCES/openvswitch-2.17.0.patch index 62da682..e93d328 100644 --- a/SOURCES/openvswitch-2.17.0.patch +++ b/SOURCES/openvswitch-2.17.0.patch @@ -100030,7 +100030,7 @@ index 2ad03e044e..9b7e06e0c7 100644 ds_put_format(s, "%snw_frag=%s%s,", colors.param, colors.end, f->nw_frag & FLOW_NW_FRAG_ANY diff --git a/lib/mcast-snooping.c b/lib/mcast-snooping.c -index 6730301b67..43805ae4d5 100644 +index 6730301b67..98ec67281b 100644 --- a/lib/mcast-snooping.c +++ b/lib/mcast-snooping.c @@ -356,11 +356,11 @@ mcast_snooping_prune_expired(struct mcast_snooping *ms, @@ -100047,7 +100047,18 @@ index 6730301b67..43805ae4d5 100644 /* This list is sorted on expiration time. */ if (b->expires > timenow) { break; -@@ -946,15 +946,16 @@ mcast_snooping_wait(struct mcast_snooping *ms) +@@ -407,7 +407,9 @@ mcast_snooping_add_group(struct mcast_snooping *ms, + uint32_t hash = mcast_table_hash(ms, addr, vlan); + + if (hmap_count(&ms->table) >= ms->max_entries) { +- group_get_lru(ms, &grp); ++ if (!group_get_lru(ms, &grp)) { ++ return false; ++ } + mcast_snooping_flush_group(ms, grp); + } + +@@ -946,15 +948,16 @@ mcast_snooping_wait(struct mcast_snooping *ms) void mcast_snooping_flush_bundle(struct mcast_snooping *ms, void *port) { @@ -100067,7 +100078,7 @@ index 6730301b67..43805ae4d5 100644 if (mcast_group_delete_bundle(ms, g, port)) { ms->need_revalidate = true; -@@ -964,12 +965,26 @@ mcast_snooping_flush_bundle(struct mcast_snooping *ms, void *port) +@@ -964,12 +967,26 @@ mcast_snooping_flush_bundle(struct mcast_snooping *ms, void *port) } } @@ -104467,7 +104478,7 @@ index 47115a7b85..ba5d179a65 100644 /* Transactions with named-uuid row names. */ struct json *ovsdb_datum_to_json_with_row_names(const struct ovsdb_datum *, diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c -index c19128d55c..a06d78c0de 100644 +index c19128d55c..ca0b1c3635 100644 --- a/lib/ovsdb-idl.c +++ b/lib/ovsdb-idl.c @@ -177,6 +177,7 @@ static void ovsdb_idl_row_mark_backrefs_for_reparsing(struct ovsdb_idl_row *); @@ -104679,6 +104690,15 @@ index c19128d55c..a06d78c0de 100644 enum { INSERTED, MODIFIED, DELETED } op = (!row->new_datum ? DELETED : !row->old_datum ? INSERTED +@@ -3691,6 +3702,8 @@ ovsdb_idl_txn_delete(const struct ovsdb_idl_row *row_) + ovsdb_idl_remove_from_indexes(row_); + if (!row->old_datum) { + ovsdb_idl_row_unparse(row); ++ ovsdb_idl_destroy_all_map_op_lists(row); ++ ovsdb_idl_destroy_all_set_op_lists(row); + ovsdb_idl_row_clear_new(row); + ovs_assert(!row->prereqs); + hmap_remove(&row->table->rows, &row->hmap_node); diff --git a/lib/ovsdb-map-op.c b/lib/ovsdb-map-op.c index 7b90ba84f9..795066e8ef 100644 --- a/lib/ovsdb-map-op.c @@ -106853,7 +106873,7 @@ index 1195c79821..4c9d18c4e5 100644 needed = vsnprintf(NULL, 0, format, args); diff --git a/lib/vconn.c b/lib/vconn.c -index 7415e6291f..e9603432d2 100644 +index 7415e6291f..4b1c262eaa 100644 --- a/lib/vconn.c +++ b/lib/vconn.c @@ -682,7 +682,6 @@ do_send(struct vconn *vconn, struct ofpbuf *msg) @@ -106885,6 +106905,35 @@ index 7415e6291f..e9603432d2 100644 ovs_list_remove(&b->list_node); int error = vconn_send_block(vconn, b); if (error) { +@@ -1015,6 +1017,8 @@ recv_flow_stats_reply(struct vconn *vconn, ovs_be32 send_xid, + VLOG_WARN_RL(&rl, "received bad reply: %s", + ofp_to_string(reply->data, reply->size, + NULL, NULL, 1)); ++ ofpbuf_delete(reply); ++ *replyp = NULL; + return EPROTO; + } + } +@@ -1029,9 +1033,9 @@ recv_flow_stats_reply(struct vconn *vconn, ovs_be32 send_xid, + case EOF: + more = ofpmp_more(reply->header); + ofpbuf_delete(reply); ++ *replyp = NULL; + reply = NULL; + if (!more) { +- *replyp = NULL; + return EOF; + } + break; +@@ -1039,6 +1043,8 @@ recv_flow_stats_reply(struct vconn *vconn, ovs_be32 send_xid, + default: + VLOG_WARN_RL(&rl, "parse error in reply (%s)", + ofperr_to_string(retval)); ++ ofpbuf_delete(reply); ++ *replyp = NULL; + return EPROTO; + } + } diff --git a/lib/vlog.c b/lib/vlog.c index 533f937555..1567250c7d 100644 --- a/lib/vlog.c @@ -107043,7 +107092,7 @@ index 4c3bace6ef..09134feca0 100644 AC_DEFINE([HAVE_LD_AVX512_GOOD], [1], [Define to 1 if binutils correctly supports AVX512.]) diff --git a/ofproto/bond.c b/ofproto/bond.c -index cdfdf0b9d8..1f3fd4f7b3 100644 +index cdfdf0b9d8..6b77fb3f07 100644 --- a/ofproto/bond.c +++ b/ofproto/bond.c @@ -184,11 +184,15 @@ static struct bond_member *choose_output_member(const struct bond *, @@ -107063,6 +107112,15 @@ index cdfdf0b9d8..1f3fd4f7b3 100644 /* Attempts to parse 's' as the name of a bond balancing mode. If successful, * stores the mode in '*balance' and returns true. Otherwise returns false * without modifying '*balance'. */ +@@ -240,7 +244,7 @@ bond_create(const struct bond_settings *s, struct ofproto_dpif *ofproto) + ovs_refcount_init(&bond->ref_cnt); + hmap_init(&bond->pr_rule_ops); + +- bond->active_member_mac = eth_addr_zero; ++ bond->active_member_mac = s->active_member_mac; + bond->active_member_changed = false; + bond->primary = NULL; + @@ -293,7 +297,10 @@ bond_unref(struct bond *bond) } free(bond->hash); @@ -108042,10 +108100,10 @@ index 4b04f1756f..f55d054d29 100644 /* A node within a next_ct_states list. */ diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c -index 57f94df544..047f684e1b 100644 +index 57f94df544..5c06beb16a 100644 --- a/ofproto/ofproto-dpif-upcall.c +++ b/ofproto/ofproto-dpif-upcall.c -@@ -47,17 +47,21 @@ +@@ -47,17 +47,22 @@ #define UPCALL_MAX_BATCH 64 #define REVALIDATE_MAX_BATCH 50 @@ -108059,6 +108117,7 @@ index 57f94df544..047f684e1b 100644 -COVERAGE_DEFINE(upcall_ukey_contention); -COVERAGE_DEFINE(upcall_ukey_replace); COVERAGE_DEFINE(revalidate_missed_dp_flow); ++COVERAGE_DEFINE(revalidate_missing_dp_flow); +COVERAGE_DEFINE(ukey_dp_change); +COVERAGE_DEFINE(ukey_invalid_stat_reset); +COVERAGE_DEFINE(ukey_replace_contention); @@ -108069,7 +108128,7 @@ index 57f94df544..047f684e1b 100644 /* A thread that reads upcalls from dpif, forwards each upcall's packet, * and possibly sets up a kernel flow as a cache. */ -@@ -287,6 +291,7 @@ struct udpif_key { +@@ -287,10 +292,12 @@ struct udpif_key { struct ovs_mutex mutex; /* Guards the following. */ struct dpif_flow_stats stats OVS_GUARDED; /* Last known stats.*/ @@ -108077,7 +108136,12 @@ index 57f94df544..047f684e1b 100644 long long int created OVS_GUARDED; /* Estimate of creation time. */ uint64_t dump_seq OVS_GUARDED; /* Tracks udpif->dump_seq. */ uint64_t reval_seq OVS_GUARDED; /* Tracks udpif->reval_seq. */ -@@ -362,6 +367,10 @@ static void upcall_unixctl_dump_wait(struct unixctl_conn *conn, int argc, + enum ukey_state state OVS_GUARDED; /* Tracks ukey lifetime. */ ++ uint32_t missed_dumps OVS_GUARDED; /* Missed consecutive dumps. */ + + /* 'state' debug information. */ + unsigned int state_thread OVS_GUARDED; /* Thread that transitions. */ +@@ -362,6 +369,10 @@ static void upcall_unixctl_dump_wait(struct unixctl_conn *conn, int argc, const char *argv[], void *aux); static void upcall_unixctl_purge(struct unixctl_conn *conn, int argc, const char *argv[], void *aux); @@ -108088,7 +108152,7 @@ index 57f94df544..047f684e1b 100644 static struct udpif_key *ukey_create_from_upcall(struct upcall *, struct flow_wildcards *); -@@ -434,6 +443,10 @@ udpif_init(void) +@@ -434,6 +445,10 @@ udpif_init(void) upcall_unixctl_dump_wait, NULL); unixctl_command_register("revalidator/purge", "", 0, 0, upcall_unixctl_purge, NULL); @@ -108099,7 +108163,7 @@ index 57f94df544..047f684e1b 100644 ovsthread_once_done(&once); } } -@@ -771,6 +784,17 @@ udpif_get_n_flows(struct udpif *udpif) +@@ -771,6 +786,17 @@ udpif_get_n_flows(struct udpif *udpif) atomic_store_relaxed(&udpif->n_flows_timestamp, now); dpif_get_dp_stats(udpif->dpif, &stats); flow_count = stats.n_flows; @@ -108117,7 +108181,7 @@ index 57f94df544..047f684e1b 100644 atomic_store_relaxed(&udpif->n_flows, flow_count); ovs_mutex_unlock(&udpif->n_flows_mutex); } else { -@@ -959,7 +983,7 @@ udpif_revalidator(void *arg) +@@ -959,7 +985,7 @@ udpif_revalidator(void *arg) udpif->reval_exit = latch_is_set(&udpif->exit_latch); start_time = time_msec(); @@ -108126,7 +108190,7 @@ index 57f94df544..047f684e1b 100644 bool terse_dump; terse_dump = udpif_use_ufid(udpif); -@@ -968,10 +992,15 @@ udpif_revalidator(void *arg) +@@ -968,10 +994,15 @@ udpif_revalidator(void *arg) } } @@ -108143,7 +108207,7 @@ index 57f94df544..047f684e1b 100644 } if (udpif->reval_exit) { -@@ -1375,8 +1404,6 @@ upcall_cb(const struct dp_packet *packet, const struct flow *flow, ovs_u128 *ufi +@@ -1375,8 +1406,6 @@ upcall_cb(const struct dp_packet *packet, const struct flow *flow, ovs_u128 *ufi } if (upcall.ukey && !ukey_install(udpif, upcall.ukey)) { @@ -108152,7 +108216,7 @@ index 57f94df544..047f684e1b 100644 error = ENOSPC; } out: -@@ -1746,6 +1773,7 @@ ukey_create__(const struct nlattr *key, size_t key_len, +@@ -1746,6 +1775,7 @@ ukey_create__(const struct nlattr *key, size_t key_len, ukey->created = ukey->flow_time = time_msec(); memset(&ukey->stats, 0, sizeof ukey->stats); ukey->stats.used = used; @@ -108160,7 +108224,7 @@ index 57f94df544..047f684e1b 100644 ukey->xcache = NULL; ukey->offloaded = false; -@@ -1868,19 +1896,20 @@ try_ukey_replace(struct umap *umap, struct udpif_key *old_ukey, +@@ -1868,19 +1898,20 @@ try_ukey_replace(struct umap *umap, struct udpif_key *old_ukey, ovs_mutex_lock(&new_ukey->mutex); cmap_replace(&umap->cmap, &old_ukey->cmap_node, &new_ukey->cmap_node, new_ukey->hash); @@ -108186,7 +108250,7 @@ index 57f94df544..047f684e1b 100644 return replaced; } -@@ -2074,10 +2103,12 @@ ukey_delete(struct umap *umap, struct udpif_key *ukey) +@@ -2074,10 +2105,12 @@ ukey_delete(struct umap *umap, struct udpif_key *ukey) } static bool @@ -108201,7 +108265,7 @@ index 57f94df544..047f684e1b 100644 if (!used) { /* Always revalidate the first time a flow is dumped. */ -@@ -2104,8 +2135,12 @@ should_revalidate(const struct udpif *udpif, uint64_t packets, +@@ -2104,8 +2137,12 @@ should_revalidate(const struct udpif *udpif, uint64_t packets, duration = now - used; metric = duration / packets; @@ -108216,7 +108280,7 @@ index 57f94df544..047f684e1b 100644 return true; } return false; -@@ -2303,7 +2338,7 @@ static enum reval_result +@@ -2303,7 +2340,7 @@ static enum reval_result revalidate_ukey(struct udpif *udpif, struct udpif_key *ukey, const struct dpif_flow_stats *stats, struct ofpbuf *odp_actions, uint64_t reval_seq, @@ -108225,7 +108289,7 @@ index 57f94df544..047f684e1b 100644 OVS_REQUIRES(ukey->mutex) { bool need_revalidate = ukey->reval_seq != reval_seq; -@@ -2321,8 +2356,15 @@ revalidate_ukey(struct udpif *udpif, struct udpif_key *ukey, +@@ -2321,8 +2358,15 @@ revalidate_ukey(struct udpif *udpif, struct udpif_key *ukey, ? stats->n_bytes - ukey->stats.n_bytes : 0); @@ -108242,7 +108306,7 @@ index 57f94df544..047f684e1b 100644 if (!ukey->xcache) { ukey->xcache = xlate_cache_new(); } else { -@@ -2338,7 +2380,7 @@ revalidate_ukey(struct udpif *udpif, struct udpif_key *ukey, +@@ -2338,7 +2382,7 @@ revalidate_ukey(struct udpif *udpif, struct udpif_key *ukey, /* Stats for deleted flows will be attributed upon flow deletion. Skip. */ if (result != UKEY_DELETE) { @@ -108251,7 +108315,7 @@ index 57f94df544..047f684e1b 100644 ukey->stats = *stats; ukey->reval_seq = reval_seq; } -@@ -2434,6 +2476,15 @@ push_dp_ops(struct udpif *udpif, struct ukey_op *ops, size_t n_ops) +@@ -2434,6 +2478,15 @@ push_dp_ops(struct udpif *udpif, struct ukey_op *ops, size_t n_ops) push->tcp_flags = stats->tcp_flags | op->ukey->stats.tcp_flags; push->n_packets = stats->n_packets - op->ukey->stats.n_packets; push->n_bytes = stats->n_bytes - op->ukey->stats.n_bytes; @@ -108267,7 +108331,7 @@ index 57f94df544..047f684e1b 100644 ovs_mutex_unlock(&op->ukey->mutex); } else { push = stats; -@@ -2738,6 +2789,22 @@ revalidate(struct revalidator *revalidator) +@@ -2738,6 +2791,22 @@ revalidate(struct revalidator *revalidator) continue; } @@ -108290,7 +108354,7 @@ index 57f94df544..047f684e1b 100644 already_dumped = ukey->dump_seq == dump_seq; if (already_dumped) { /* The flow has already been handled during this flow dump -@@ -2769,8 +2836,7 @@ revalidate(struct revalidator *revalidator) +@@ -2769,8 +2838,7 @@ revalidate(struct revalidator *revalidator) result = UKEY_DELETE; } else { result = revalidate_ukey(udpif, ukey, &stats, &odp_actions, @@ -108300,7 +108364,7 @@ index 57f94df544..047f684e1b 100644 } ukey->dump_seq = dump_seq; -@@ -2836,6 +2902,7 @@ revalidator_sweep__(struct revalidator *revalidator, bool purge) +@@ -2836,6 +2904,7 @@ revalidator_sweep__(struct revalidator *revalidator, bool purge) /* Handler threads could be holding a ukey lock while it installs a * new flow, so don't hang around waiting for access to it. */ if (ovs_mutex_trylock(&ukey->mutex)) { @@ -108308,7 +108372,7 @@ index 57f94df544..047f684e1b 100644 continue; } ukey_state = ukey->state; -@@ -2853,9 +2920,9 @@ revalidator_sweep__(struct revalidator *revalidator, bool purge) +@@ -2853,10 +2922,24 @@ revalidator_sweep__(struct revalidator *revalidator, bool purge) } else { struct dpif_flow_stats stats; COVERAGE_INC(revalidate_missed_dp_flow); @@ -108318,9 +108382,24 @@ index 57f94df544..047f684e1b 100644 - reval_seq, &recircs, false); + reval_seq, &recircs); } ++ ++ if (ukey->dump_seq != dump_seq) { ++ ukey->missed_dumps++; ++ if (ukey->missed_dumps >= 4) { ++ /* If the flow was not dumped for 4 revalidator rounds, ++ * we can assume the datapath flow no longer exists ++ * and the ukey should be deleted. */ ++ COVERAGE_INC(revalidate_missing_dp_flow); ++ result = UKEY_DELETE; ++ } ++ } else { ++ ukey->missed_dumps = 0; ++ } ++ if (result != UKEY_KEEP) { /* Clears 'recircs' if filled by revalidate_ukey(). */ -@@ -3090,15 +3157,48 @@ upcall_unixctl_purge(struct unixctl_conn *conn, int argc OVS_UNUSED, + reval_op_init(&ops[n_ops++], result, udpif, ukey, &recircs, +@@ -3090,15 +3173,48 @@ upcall_unixctl_purge(struct unixctl_conn *conn, int argc OVS_UNUSED, struct udpif *udpif; LIST_FOR_EACH (udpif, list_node, &all_udpifs) { @@ -115755,7 +115834,7 @@ index 2c7e163bd6..7be6628c34 100644 AT_CLEANUP diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at -index 7c2edeb9d4..bbe69c1c37 100644 +index 7c2edeb9d4..54f144468f 100644 --- a/tests/ofproto-dpif.at +++ b/tests/ofproto-dpif.at @@ -29,6 +29,58 @@ AT_CHECK([ovs-appctl revalidator/wait]) @@ -116059,7 +116138,81 @@ index 7c2edeb9d4..bbe69c1c37 100644 # Makes sure recirculation does not change the way packet is handled. AT_SETUP([ofproto-dpif - balance-tcp bonding, different recirc flow ]) -@@ -570,7 +705,7 @@ table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2) +@@ -558,6 +693,73 @@ NXST_FLOW reply: + OVS_VSWITCHD_STOP() + AT_CLEANUP + ++AT_SETUP([ofproto-dpif - active bond member survives restart]) ++dnl Create bond0 with members p1, p2 and p3. Initially, set p2 as active. ++dnl Restart ovs-vswitchd. Check that p2 is still active. ++OVS_VSWITCHD_START( ++ [add-bond br0 bond0 p1 p2 p3 bond_mode=active-backup -- \ ++ set interface p1 type=dummy ofport_request=1 -- \ ++ set interface p2 type=dummy ofport_request=2 -- \ ++ set interface p3 type=dummy ofport_request=3 --]) ++AT_CHECK([ovs-appctl bond/set-active-member bond0 p2], [0], [ignore]) ++OVS_WAIT_UNTIL_EQUAL([ovs-appctl bond/show | STRIP_RECIRC_ID | STRIP_ACTIVE_MEMBER_MAC], [dnl ++---- bond0 ---- ++bond_mode: active-backup ++bond may use recirculation: no, ++bond-hash-basis: 0 ++lb_output action: disabled, bond-id: -1 ++updelay: 0 ms ++downdelay: 0 ms ++lacp_status: off ++lacp_fallback_ab: false ++active-backup primary: ++ ++ ++member p1: enabled ++ may_enable: true ++ ++member p2: enabled ++ active member ++ may_enable: true ++ ++member p3: enabled ++ may_enable: true ++]) ++ ++dnl Restart ovs-vswitchd with an empty ovs-vswitchd log file. ++OVS_APP_EXIT_AND_WAIT([ovs-vswitchd]) ++mv ovs-vswitchd.log ovs-vswitchd_1.log ++AT_CHECK([ovs-vswitchd --enable-dummy --disable-system --disable-system-route --detach \ ++ --no-chdir --pidfile --log-file -vfile:rconn:dbg -vvconn -vofproto_dpif -vunixctl], ++ [0], [], [stderr]) ++ ++OVS_WAIT_UNTIL_EQUAL([ovs-appctl bond/show | STRIP_RECIRC_ID | STRIP_ACTIVE_MEMBER_MAC], [dnl ++---- bond0 ---- ++bond_mode: active-backup ++bond may use recirculation: no, ++bond-hash-basis: 0 ++lb_output action: disabled, bond-id: -1 ++updelay: 0 ms ++downdelay: 0 ms ++lacp_status: off ++lacp_fallback_ab: false ++active-backup primary: ++ ++ ++member p1: enabled ++ may_enable: true ++ ++member p2: enabled ++ active member ++ may_enable: true ++ ++member p3: enabled ++ may_enable: true ++]) ++ ++OVS_VSWITCHD_STOP ++AT_CLEANUP ++ + AT_SETUP([ofproto-dpif - resubmit]) + OVS_VSWITCHD_START + add_of_ports br0 1 10 11 12 13 14 15 16 17 18 19 20 21 +@@ -570,7 +772,7 @@ table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2) table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2) ]) AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) @@ -116068,7 +116221,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21 ]) -@@ -584,7 +719,7 @@ echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt +@@ -584,7 +786,7 @@ echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt echo "table=64 actions=output(11)" >> flows.txt AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt]) @@ -116077,7 +116230,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 10,11 ]) -@@ -600,9 +735,9 @@ table=1 ip actions=write_actions(output(13)),goto_table(2) +@@ -600,9 +802,9 @@ table=1 ip actions=write_actions(output(13)),goto_table(2) table=2 ip actions=set_field:192.168.3.91->ip_src,output(11) ]) AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt]) @@ -116089,7 +116242,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 Datapath actions: 10,set(ipv4(src=192.168.3.91)),11,set(ipv4(src=192.168.3.90)),13 ]) OVS_VSWITCHD_STOP -@@ -617,7 +752,7 @@ table=1 icmp6 actions=write_actions(output(13)),goto_table(2) +@@ -617,7 +819,7 @@ table=1 icmp6 actions=write_actions(output(13)),goto_table(2) table=2 in_port=1,icmp6,icmpv6_type=135 actions=set_field:fe80::4->nd_target,set_field:cc:cc:cc:cc:cc:cc->nd_sll,output(11) ]) AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt]) @@ -116098,7 +116251,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_CHECK([tail -4 stdout], [0], [Megaflow: recirc_id=0,eth,icmp6,in_port=1,nw_frag=no,icmp_type=0x87/0xff,icmp_code=0x0/0xff,nd_target=fe80::2020,nd_sll=66:55:44:33:22:11 Datapath actions: 10,set(nd(target=fe80::4,sll=cc:cc:cc:cc:cc:cc)),11,set(nd(target=fe80::3,sll=aa:aa:aa:aa:aa:aa)),13 -@@ -635,7 +770,7 @@ table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip +@@ -635,7 +837,7 @@ table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions ]) AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt]) @@ -116107,7 +116260,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_CHECK([tail -2 stdout], [0], [Megaflow: recirc_id=0,eth,tcp,in_port=1,nw_frag=no,tp_src=8 Datapath actions: 10,set(tcp(src=91)),11 -@@ -649,7 +784,7 @@ add_of_ports br0 1 10 11 +@@ -649,7 +851,7 @@ add_of_ports br0 1 10 11 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=set_field:192.168.3.90->ip_src,group:123,bucket=output:11']) AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=123,type=all,bucket=output:10']) AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234']) @@ -116116,7 +116269,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_CHECK([tail -1 stdout], [0], [Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11 ]) -@@ -661,11 +796,11 @@ OVS_VSWITCHD_START +@@ -661,11 +863,11 @@ OVS_VSWITCHD_START add_of_ports br0 1 10 11 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11']) AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234']) @@ -116130,7 +116283,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11 ]) OVS_VSWITCHD_STOP -@@ -676,13 +811,35 @@ OVS_VSWITCHD_START +@@ -676,13 +878,35 @@ OVS_VSWITCHD_START add_of_ports br0 1 10 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10]) AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234']) @@ -116167,7 +116320,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_SETUP([ofproto-dpif - group actions have no effect afterwards]) OVS_VSWITCHD_START add_of_ports br0 1 10 -@@ -697,7 +854,7 @@ done +@@ -697,7 +921,7 @@ done AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/dp_hash(.*\/0xf)/dp_hash(0xXXXX\/0xf)/' | sed 's/packets.*actions:/actions:/' | strip_ufid | strip_used | sort], [0], [dnl flow-dump from the main thread: recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:hash(sym_l4(0)),recirc(0x1) @@ -116176,7 +116329,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -708,11 +865,11 @@ OVS_VSWITCHD_START +@@ -708,11 +932,11 @@ OVS_VSWITCHD_START add_of_ports br0 1 10 11 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11']) AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)']) @@ -116190,7 +116343,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11 ]) OVS_VSWITCHD_STOP -@@ -723,7 +880,7 @@ OVS_VSWITCHD_START +@@ -723,7 +947,7 @@ OVS_VSWITCHD_START add_of_ports br0 1 10 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10]) AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)']) @@ -116199,7 +116352,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 10 ]) -@@ -743,11 +900,11 @@ add_of_ports br0 1 +@@ -743,11 +967,11 @@ add_of_ports br0 1 add_of_ports br1 2 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br1 'ip actions=write_actions(pop_vlan,output:2)']) AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=output:10']) @@ -116213,7 +116366,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_CHECK([tail -1 stdout], [0], [Datapath actions: pop_vlan,2 ]) -@@ -1011,7 +1168,7 @@ OVS_VSWITCHD_START +@@ -1011,7 +1235,7 @@ OVS_VSWITCHD_START add_of_ports br0 1 10 11 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=ff,bucket=watch_port:10,output:10,bucket=watch_port:11,output:11']) AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)']) @@ -116222,7 +116375,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 10 ]) -@@ -1142,7 +1299,7 @@ OVS_VSWITCHD_START +@@ -1142,7 +1366,7 @@ OVS_VSWITCHD_START add_of_ports br0 1 10 11 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,move:NXM_NX_REG1[[]]->NXM_OF_IP_SRC[[]],bucket=output:11']) AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(load:0xffffffff->NXM_NX_REG1[[]],move:NXM_NX_REG1[[]]->NXM_NX_REG2[[]],group:1234)']) @@ -116231,7 +116384,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_CHECK([tail -2 stdout], [0], [Megaflow: recirc_id=0,eth,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no Datapath actions: set(ipv4(src=255.255.255.255)),10,set(ipv4(src=192.168.0.1)),11 -@@ -1288,18 +1445,18 @@ table=1 in_port=1 action=dec_ttl,output:3 +@@ -1288,18 +1512,18 @@ table=1 in_port=1 action=dec_ttl,output:3 AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout]) AT_CHECK([tail -4 stdout], [0], [ @@ -116254,7 +116407,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 Datapath actions: set(ipv6(hlimit=127)),2,set(ipv6(hlimit=126)),3,4 ]) -@@ -1311,7 +1468,7 @@ ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50: +@@ -1311,7 +1535,7 @@ ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50: OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered) @@ -116263,7 +116416,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP AT_CLEANUP -@@ -1409,7 +1566,7 @@ AT_CHECK([ovs-vsctl -- \ +@@ -1409,7 +1633,7 @@ AT_CHECK([ovs-vsctl -- \ --id=@q2 create Queue dscp=2], [0], [ignore]) AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout]) AT_CHECK([tail -2 stdout], [0], @@ -116272,7 +116425,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 Datapath actions: dnl 100,dnl set(ipv4(tos=0x4/0xfc)),set(skb_priority(0x1)),1,dnl -@@ -1497,13 +1654,13 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6]) +@@ -1497,13 +1721,13 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6]) OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered) @@ -116289,7 +116442,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -1560,13 +1717,13 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6]) +@@ -1560,13 +1784,13 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6]) OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered) @@ -116306,7 +116459,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl revalidator/purge], [0]) -@@ -1627,13 +1784,13 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) +@@ -1627,13 +1851,13 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=118 in_port=1 (via action) data_len=118 (unbuffered) @@ -116323,7 +116476,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) dnl Hit table 0, Miss all other tables, sent to controller -@@ -1647,13 +1804,13 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) +@@ -1647,13 +1871,13 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1 (via no_match) data_len=118 (unbuffered) @@ -116340,7 +116493,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl revalidator/purge], [0]) -@@ -1690,13 +1847,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -1690,13 +1914,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=118 in_port=1 (via action) data_len=118 (unbuffered) @@ -116357,7 +116510,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) dnl Hit table 1, Miss all other tables, sent to controller -@@ -1710,13 +1867,13 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) +@@ -1710,13 +1934,13 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=118 in_port=1 (via no_match) data_len=118 (unbuffered) @@ -116374,7 +116527,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl revalidator/purge], [0]) -@@ -1900,13 +2057,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -1900,13 +2124,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([cat ofctl_monitor.log], [0], [dnl OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via no_match) data_len=118 (unbuffered) @@ -116391,7 +116544,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) dnl Singleton controller action. -@@ -1920,11 +2077,11 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -1920,11 +2144,11 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([cat ofctl_monitor.log], [0], [dnl OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered) @@ -116406,7 +116559,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) dnl Modified controller action. -@@ -1938,13 +2095,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -1938,13 +2162,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([cat ofctl_monitor.log], [0], [dnl OFPT_PACKET_IN (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116423,7 +116576,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) dnl Modified VLAN controller action. -@@ -1958,13 +2115,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -1958,13 +2182,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered) @@ -116440,7 +116593,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) dnl Checksum TCP. -@@ -1978,31 +2135,31 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) +@@ -1978,31 +2202,31 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=54 in_port=1 (via action) data_len=54 (unbuffered) @@ -116481,7 +116634,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) dnl Checksum UDP. -@@ -2016,31 +2173,31 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) +@@ -2016,31 +2240,31 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered) @@ -116522,7 +116675,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) dnl Modified ARP controller action. -@@ -2087,31 +2244,31 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18]) +@@ -2087,31 +2311,31 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18]) OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered) @@ -116563,7 +116716,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl -@@ -2151,13 +2308,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2151,13 +2375,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([cat ofctl_monitor.log], [0], [dnl OFPT_PACKET_IN (xid=0x0): total_len=118 in_port=1 (via action) data_len=118 (unbuffered) @@ -116580,7 +116733,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -2325,13 +2482,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2325,13 +2549,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=34 in_port=1 (via action) data_len=34 (unbuffered) @@ -116597,7 +116750,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) dnl Modified MPLS controller action. -@@ -2539,13 +2696,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2539,13 +2763,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116614,7 +116767,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -2565,13 +2722,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2565,13 +2789,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116631,7 +116784,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -2591,13 +2748,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2591,13 +2815,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116648,7 +116801,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -2617,13 +2774,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2617,13 +2841,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116665,7 +116818,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -2643,13 +2800,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2643,13 +2867,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116682,7 +116835,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -2669,13 +2826,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2669,13 +2893,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116699,7 +116852,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -2695,13 +2852,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2695,13 +2919,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116716,7 +116869,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -2721,13 +2878,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2721,13 +2945,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116733,7 +116886,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -2771,13 +2928,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2771,13 +2995,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116750,7 +116903,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -2797,13 +2954,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2797,13 +3021,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116767,7 +116920,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -2823,13 +2980,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2823,13 +3047,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116784,7 +116937,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -2931,13 +3088,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2931,13 +3155,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116801,7 +116954,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -2959,13 +3116,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2959,13 +3183,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116818,7 +116971,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -2986,13 +3143,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -2986,13 +3210,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116835,7 +116988,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -3314,13 +3471,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -3314,13 +3538,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116852,7 +117005,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl revalidator/purge], [0]) -@@ -3363,13 +3520,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -3363,13 +3587,13 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered) @@ -116869,7 +117022,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl revalidator/purge], [0]) -@@ -3402,13 +3559,13 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) +@@ -3402,13 +3626,13 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered) @@ -116886,7 +117039,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl revalidator/purge], [0]) -@@ -3444,13 +3601,13 @@ AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) +@@ -3444,13 +3668,13 @@ AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered) @@ -116903,7 +117056,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl revalidator/purge], [0]) -@@ -3516,13 +3673,13 @@ send: OFPT_SET_ASYNC (OF1.3) (xid=0x2): +@@ -3516,13 +3740,13 @@ send: OFPT_SET_ASYNC (OF1.3) (xid=0x2): REQUESTFORWARD: (off) dnl OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered) @@ -116920,7 +117073,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -3558,13 +3715,13 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) +@@ -3558,13 +3782,13 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) AT_CHECK([ovs-appctl revalidator/purge], [0]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered) @@ -116937,7 +117090,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -3607,34 +3764,34 @@ AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) +@@ -3607,34 +3831,34 @@ AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered) @@ -116982,7 +117135,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -3679,34 +3836,34 @@ AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) +@@ -3679,34 +3903,34 @@ AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered) @@ -117027,7 +117180,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore]) -@@ -3751,10 +3908,10 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) +@@ -3751,10 +3975,10 @@ OVS_APP_EXIT_AND_WAIT(ovs-ofctl) AT_CHECK([cat ofctl_monitor.log], [0], [dnl OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=43 cookie=0x0 total_len=98 metadata=0x67871d4d000000,in_port=1 (via action) data_len=98 (unbuffered) @@ -117040,7 +117193,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -5007,7 +5164,7 @@ ovs-vsctl \ +@@ -5007,7 +5231,7 @@ ovs-vsctl \ AT_CHECK([ovs-ofctl add-flow br0 action=output:1]) # "in_port" defaults to OFPP_NONE if it's not specified. @@ -117049,7 +117202,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout]) AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 1,2 -@@ -5102,7 +5259,7 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) +@@ -5102,7 +5326,7 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)" AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout]) AT_CHECK_UNQUOTED([tail -1 stdout], [0], @@ -117058,7 +117211,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)" -@@ -5141,7 +5298,7 @@ flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x080 +@@ -5141,7 +5365,7 @@ flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x080 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout]) actual=`tail -1 stdout | sed 's/Datapath actions: //'` @@ -117067,7 +117220,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout]) mv stdout expout AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout]) -@@ -5317,7 +5474,7 @@ ovs-vsctl \ +@@ -5317,7 +5541,7 @@ ovs-vsctl \ AT_CHECK([ovs-ofctl add-flow br0 action=output:1]) # "in_port" defaults to OFPP_NONE if it's not specified. @@ -117076,7 +117229,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout]) AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 1,trunc(100),2 -@@ -5409,7 +5566,7 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) +@@ -5409,7 +5633,7 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)" AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout]) AT_CHECK_UNQUOTED([tail -1 stdout], [0], @@ -117085,7 +117238,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)" -@@ -5464,7 +5621,7 @@ ovs-vsctl \ +@@ -5464,7 +5688,7 @@ ovs-vsctl \ flow="in_port=1" AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout]) @@ -117094,7 +117247,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 OVS_VSWITCHD_STOP AT_CLEANUP -@@ -5512,11 +5669,11 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) +@@ -5512,11 +5736,11 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)" AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow" -generate], [0], [stdout]) @@ -117108,7 +117261,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -5573,7 +5730,70 @@ check_flows () { +@@ -5573,7 +5797,70 @@ check_flows () { echo "n_packets=$n" test "$n" = 1 } @@ -117180,7 +117333,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 OVS_VSWITCHD_STOP AT_CLEANUP -@@ -5868,6 +6088,57 @@ AT_CHECK([test 1 = `$PYTHON3 "$top_srcdir/utilities/ovs-pcap.in" p2-tx.pcap | wc +@@ -5868,6 +6155,57 @@ AT_CHECK([test 1 = `$PYTHON3 "$top_srcdir/utilities/ovs-pcap.in" p2-tx.pcap | wc OVS_VSWITCHD_STOP AT_CLEANUP @@ -117238,7 +117391,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_SETUP([ofproto-dpif - continuation with patch port]) AT_KEYWORDS([continuations pause resume]) OVS_VSWITCHD_START( -@@ -6202,6 +6473,20 @@ AT_CHECK([tail -2 stderr], [0], [dnl +@@ -6202,6 +6540,20 @@ AT_CHECK([tail -2 stderr], [0], [dnl ovs-appctl: ovs-vswitchd: server returned an error ]) @@ -117259,7 +117412,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 OVS_VSWITCHD_STOP AT_CLEANUP -@@ -7004,6 +7289,29 @@ AT_CHECK([ovs-appctl coverage/read-counter mac_learning_static_none_move], [0], +@@ -7004,6 +7356,29 @@ AT_CHECK([ovs-appctl coverage/read-counter mac_learning_static_none_move], [0], OVS_VSWITCHD_STOP AT_CLEANUP @@ -117289,7 +117442,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 AT_SETUP([ofproto-dpif - basic truncate action]) OVS_VSWITCHD_START add_of_ports br0 1 2 3 4 5 -@@ -7031,7 +7339,7 @@ dnl An 170 byte packet +@@ -7031,7 +7406,7 @@ dnl An 170 byte packet AT_CHECK([ovs-appctl netdev-dummy/receive p1 '000c29c8a0a4005056c0000808004500009cb4a6000040019003c0a8da01c0a8da640800cb5fa762000556f431ad0009388e08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f']) AT_CHECK([ovs-ofctl parse-pcap p1.pcap], [0], [dnl @@ -117298,7 +117451,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-appctl revalidator/purge], [0]) -@@ -7294,12 +7602,14 @@ dummy@ovs-dummy: hit:0 missed:0 +@@ -7294,12 +7669,14 @@ dummy@ovs-dummy: hit:0 missed:0 vm1 5/3: (dummy: ifindex=2011) ]) @@ -117316,7 +117469,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 dnl Prime ARP Cache for 1.1.2.92 AT_CHECK([ovs-appctl netdev-dummy/receive p0 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:b6,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b6,tha=00:00:00:00:00:00)']) -@@ -7310,10 +7620,13 @@ ovs-vsctl \ +@@ -7310,10 +7687,13 @@ ovs-vsctl \ --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" agent=127.0.0.1 \ header=128 sampling=1 polling=0 @@ -117332,7 +117485,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) dnl add rule for int-br to force packet onto tunnel. There is no ifindex -@@ -7600,13 +7913,28 @@ dnl configure bridge IPFIX and ensure that sample action generation works at the +@@ -7600,13 +7980,28 @@ dnl configure bridge IPFIX and ensure that sample action generation works at the dnl datapath level. AT_SETUP([ofproto-dpif - Bridge IPFIX sanity check]) OVS_VSWITCHD_START @@ -117362,7 +117515,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 dnl Send some packets that should be sampled. for i in `seq 1 3`; do AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800)']) -@@ -8666,7 +8994,7 @@ recirc_id(0),in_port(100),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=192.1 +@@ -8666,7 +9061,7 @@ recirc_id(0),in_port(100),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=192.1 ]) AT_CHECK([grep -e '|ofproto_dpif_xlate|WARN|' ovs-vswitchd.log | sed "s/^.*|WARN|//"], [0], [dnl @@ -117371,7 +117524,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP(["/stack underflow/d"]) -@@ -8717,6 +9045,40 @@ AT_CHECK([tail -1 stdout], [0], +@@ -8717,6 +9112,40 @@ AT_CHECK([tail -1 stdout], [0], OVS_VSWITCHD_STOP AT_CLEANUP @@ -117412,7 +117565,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 dnl ---------------------------------------------------------------------- AT_BANNER([ofproto-dpif -- megaflows]) -@@ -9855,7 +10217,7 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) +@@ -9855,7 +10284,7 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered) @@ -117421,7 +117574,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -9906,7 +10268,7 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) +@@ -9906,7 +10335,7 @@ OVS_APP_EXIT_AND_WAIT([ovs-ofctl]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via action) data_len=86 (unbuffered) @@ -117430,7 +117583,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -10166,10 +10528,10 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) +@@ -10166,10 +10595,10 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) dnl Check this output. We only see the latter two packets, not the first. AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=106 reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x1,reg4=0x1,in_port=1 (via action) data_len=106 (unbuffered) @@ -117443,7 +117596,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log]) -@@ -10187,10 +10549,10 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) +@@ -10187,10 +10616,10 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) dnl Check this output. We should see both packets AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=106 reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x1,reg4=0x1,in_port=1 (via action) data_len=106 (unbuffered) @@ -117456,7 +117609,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -10239,10 +10601,10 @@ dnl Note that the first packet doesn't have the ct_state bits set. This +@@ -10239,10 +10668,10 @@ dnl Note that the first packet doesn't have the ct_state bits set. This dnl happens because the ct_state field is available only after recirc. AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) @@ -117469,7 +117622,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log]) -@@ -10261,10 +10623,10 @@ dnl Note that the first packet doesn't have the ct_state bits set. This +@@ -10261,10 +10690,10 @@ dnl Note that the first packet doesn't have the ct_state bits set. This dnl happens because the ct_state field is available only after recirc. AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) @@ -117482,7 +117635,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) dnl -@@ -10320,9 +10682,9 @@ dnl Note that the first packet doesn't have the ct_state bits set. This +@@ -10320,9 +10749,9 @@ dnl Note that the first packet doesn't have the ct_state bits set. This dnl happens because the ct_state field is available only after recirc. AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=126 in_port=1 (via action) data_len=126 (unbuffered) @@ -117494,7 +117647,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -10433,7 +10795,7 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) +@@ -10433,7 +10862,7 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) dnl Check this output. Only one reply must be there AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=106 (unbuffered) @@ -117503,7 +117656,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 dnl OFPT_ECHO_REQUEST (xid=0x0): 0 bytes of payload ]) -@@ -10467,7 +10829,7 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) +@@ -10467,7 +10896,7 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 ct_state=inv|trk,ipv6,in_port=2 (via action) data_len=86 (unbuffered) @@ -117512,7 +117665,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -10523,16 +10885,16 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) +@@ -10523,16 +10952,16 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) dnl Check this output. We only see the latter two packets (for each zone), not the first. AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) @@ -117533,7 +117686,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -10579,10 +10941,10 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) +@@ -10579,10 +11008,10 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) dnl Check this output. We only see the latter two packets, not the first. AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) @@ -117546,7 +117699,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -10629,10 +10991,10 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) +@@ -10629,10 +11058,10 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) dnl Check this output. We only see the first and the last packet AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=47 ct_state=new|trk,ct_nw_src=172.16.0.1,ct_nw_dst=172.16.0.2,ct_nw_proto=17,ct_tp_src=41614,ct_tp_dst=5555,ip,in_port=1 (via action) data_len=47 (unbuffered) @@ -117559,7 +117712,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -10681,19 +11043,19 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) +@@ -10681,19 +11110,19 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) dnl Check this output. AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) @@ -117584,7 +117737,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -10738,10 +11100,10 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) +@@ -10738,10 +11167,10 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) dnl Check this output. AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_label=0x1,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=106 (unbuffered) @@ -117597,7 +117750,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -11152,16 +11514,16 @@ dnl Note that the first packet doesn't have the ct_state bits set. This +@@ -11152,16 +11581,16 @@ dnl Note that the first packet doesn't have the ct_state bits set. This dnl happens because the ct_state field is available only after recirc. AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=106 in_port=1 (via action) data_len=106 (unbuffered) @@ -117618,7 +117771,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) dnl The next test verifies that ct_clear at the datapath only gets executed -@@ -11235,13 +11597,13 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) +@@ -11235,13 +11664,13 @@ OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) dnl Check this output. AT_CHECK([cat ofctl_monitor.log], [0], [dnl NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=106 ct_state=est|rpl|trk,ct_nw_src=10.1.2.100,ct_nw_dst=10.1.2.200,ct_nw_proto=17,ct_tp_src=6,ct_tp_dst=6,ip,in_port=2 (via action) data_len=106 (unbuffered) @@ -117635,7 +117788,7 @@ index 7c2edeb9d4..bbe69c1c37 100644 ]) OVS_VSWITCHD_STOP -@@ -11504,7 +11866,7 @@ ovs-ofctl dump-flows br0 +@@ -11504,7 +11933,7 @@ ovs-ofctl dump-flows br0 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.10.10.2,dst=10.10.10.1,proto=1,tos=1,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout]) AT_CHECK([tail -3 stdout], [0], [dnl @@ -117644,11 +117797,60 @@ index 7c2edeb9d4..bbe69c1c37 100644 Datapath actions: drop Translation failed (Recursion too deep), packet is dropped. ]) +@@ -11605,3 +12034,48 @@ AT_CHECK([test 1 = `ovs-ofctl parse-pcap p2-tx.pcap | wc -l`]) + + OVS_VSWITCHD_STOP + AT_CLEANUP ++ ++AT_SETUP([ofproto-dpif - Cleanup missing datapath flows]) ++ ++OVS_VSWITCHD_START ++add_of_ports br0 1 2 ++ ++m4_define([ICMP_PKT], [m4_join([,], ++ [eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800)], ++ [ipv4(src=10.10.10.2,dst=10.10.10.1,proto=1,tos=1,ttl=128,frag=no)], ++ [icmp(type=8,code=0)])]) ++ ++AT_CHECK([ovs-ofctl del-flows br0]) ++AT_CHECK([ovs-ofctl add-flow br0 'actions=normal' ]) ++ ++AT_CHECK([ovs-appctl netdev-dummy/receive p1 'ICMP_PKT']) ++ ++AT_CHECK([ovs-appctl dpctl/dump-flows --names | strip_used | strip_stats | dnl ++ strip_duration | strip_dp_hash | sort], [0], [dnl ++flow-dump from the main thread: ++recirc_id(0),in_port(p1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:br0,p2 ++]) ++ ++dnl Make sure the ukey exists. ++AT_CHECK([ovs-appctl upcall/show | grep '(keys' | awk '{print $3}' | \ ++ grep -q '1)'], [0]) ++ ++dnl Delete all datapath flows, and make sure they are gone. ++AT_CHECK([ovs-appctl dpctl/del-flows]) ++AT_CHECK([ovs-appctl dpctl/dump-flows --names ], [0], []) ++ ++dnl Move forward in time and make sure we have at least 4 * 500ms. ++AT_CHECK([ovs-appctl time/warp 3000 300], [0], [ignore]) ++ ++dnl Make sure no more ukeys exists. ++AT_CHECK([ovs-appctl upcall/show | grep '(keys' | awk '{print $3}' | \ ++ grep -qv '0)'], [1]) ++ ++dnl Verify coverage counter was hit. ++AT_CHECK([ovs-appctl coverage/read-counter revalidate_missing_dp_flow], [0], ++ [dnl ++1 ++]) ++ ++OVS_VSWITCHD_STOP(["/failed to flow_del (No such file or directory)/d"]) ++AT_CLEANUP diff --git a/tests/ofproto-macros.at b/tests/ofproto-macros.at -index 736d9809cb..9e32f53c0c 100644 +index 736d9809cb..00dbd07d80 100644 --- a/tests/ofproto-macros.at +++ b/tests/ofproto-macros.at -@@ -134,6 +134,36 @@ strip_ufid () { +@@ -134,6 +134,41 @@ strip_ufid () { sed 's/mega_ufid:[[-0-9a-f]]* // s/ufid:[[-0-9a-f]]* //' } @@ -117682,10 +117884,15 @@ index 736d9809cb..9e32f53c0c 100644 + s/recirc_id=[[x0-9]]*/recirc_id=/ + s/recirc([[x0-9]]*)/recirc()/' +} ++ ++# Strips dp_hash from output. ++strip_dp_hash() { ++ sed 's/dp_hash([[0-9a-fx/]]*),//' ++} m4_divert_pop([PREPARE_TESTS]) m4_define([TESTABLE_LOG], [-vPATTERN:ANY:'%c|%p|%m']) -@@ -175,6 +205,7 @@ m4_define([_OVS_VSWITCHD_START], +@@ -175,6 +210,7 @@ m4_define([_OVS_VSWITCHD_START], /dpdk|INFO|DPDK Disabled - Use other_config:dpdk-init to enable/d /netlink_socket|INFO|netlink: could not enable listening to all nsid/d /probe tc:/d @@ -117693,7 +117900,7 @@ index 736d9809cb..9e32f53c0c 100644 /tc: Using policy/d']]) ]) -@@ -239,6 +270,7 @@ check_logs () { +@@ -239,6 +275,7 @@ check_logs () { /timeval.*context switches: [[0-9]]* voluntary, [[0-9]]* involuntary/d /ovs_rcu.*blocked [[0-9]]* ms waiting for .* to quiesce/d /Dropped [[0-9]]* log messages/d @@ -118558,7 +118765,7 @@ index e72bf06069..fd1c7a2395 100644 [{"count":1},{"details":"cannot delete b row <0> because of 2 remaining reference(s)","error":"referential integrity violation"}] [{"count":1}] diff --git a/tests/ovsdb-idl.at b/tests/ovsdb-idl.at -index 62e2b63832..ae46786ece 100644 +index 62e2b63832..1a80972472 100644 --- a/tests/ovsdb-idl.at +++ b/tests/ovsdb-idl.at @@ -1,17 +1,6 @@ @@ -119139,7 +119346,19 @@ index 62e2b63832..ae46786ece 100644 m4_if([$2], [], [], [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl-partial-update-map-column unix:socket $3], -@@ -1711,7 +1866,7 @@ OVSDB_CHECK_IDL_PY([partial-map update set refmap idl], +@@ -1675,7 +1830,10 @@ OVSDB_CHECK_IDL_PARTIAL_UPDATE_MAP_COLUMN([map, simple2 idl-partial-update-map-c + 007: name=String2 smap=[[key2 : value2]] imap=[[3 : myids2]] + 008: After trying to delete a deleted element + 009: name=String2 smap=[[key2 : value2]] imap=[[3 : myids2]] +-010: End test ++010: After Create element, update smap and Delete element ++011: name=String2 smap=[[key2 : value2]] imap=[[3 : myids2]] ++012: After update smap and Delete element ++014: End test + ]]) + + OVSDB_CHECK_IDL_PY([partial-map idl], +@@ -1711,7 +1869,7 @@ OVSDB_CHECK_IDL_PY([partial-map update set refmap idl], m4_define([OVSDB_CHECK_IDL_PARTIAL_UPDATE_SET_COLUMN], [AT_SETUP([$1 - C]) AT_KEYWORDS([ovsdb server idl partial update set column positive $5]) @@ -119148,7 +119367,18 @@ index 62e2b63832..ae46786ece 100644 m4_if([$2], [], [], [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl-partial-update-set-column unix:socket $3], -@@ -1891,6 +2046,36 @@ OVSDB_CHECK_IDL_NOTIFY([simple idl verify notify], +@@ -1738,7 +1896,9 @@ OVSDB_CHECK_IDL_PARTIAL_UPDATE_SET_COLUMN([set, simple3 idl-partial-update-set-c + 009: table simple3: name=String2 uset=[<0>,<1>,<4>] uref=[] uuid=<2> + 010: After add to other table + set of strong ref + 011: table simple3: name=String2 uset=[<0>,<1>,<4>] uref=[<5>] uuid=<2> +-012: End test ++012: After Create element, update set and Delete element ++013: table simple3: name=String2 uset=[<0>,<1>,<4>] uref=[<5>] uuid=<2> ++014: End test + ]]) + + OVSDB_CHECK_IDL_PY([partial-set idl], +@@ -1891,6 +2051,36 @@ OVSDB_CHECK_IDL_NOTIFY([simple idl verify notify], 015: done ]]) @@ -119185,7 +119415,7 @@ index 62e2b63832..ae46786ece 100644 # Tests to verify the functionality of the one column compound index. # It tests index for one column string and integer indexes. # The run of test-ovsdb generates the output of the display of data using the different indexes defined in -@@ -1900,7 +2085,7 @@ OVSDB_CHECK_IDL_NOTIFY([simple idl verify notify], +@@ -1900,7 +2090,7 @@ OVSDB_CHECK_IDL_NOTIFY([simple idl verify notify], m4_define([OVSDB_CHECK_IDL_COMPOUND_INDEX_SINGLE_COLUMN_C], [AT_SETUP([$1 - C]) AT_KEYWORDS([ovsdb server idl compound_index_single_column compound_index positive $5]) @@ -119194,7 +119424,7 @@ index 62e2b63832..ae46786ece 100644 m4_if([$2], [], [], [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) # Generate the data to be tested. -@@ -2047,7 +2232,7 @@ OVSDB_CHECK_IDL_COMPOUND_INDEX_SINGLE_COLUMN_C([Compound_index, single column te +@@ -2047,7 +2237,7 @@ OVSDB_CHECK_IDL_COMPOUND_INDEX_SINGLE_COLUMN_C([Compound_index, single column te m4_define([OVSDB_CHECK_IDL_COMPOUND_INDEX_DOUBLE_COLUMN_C], [AT_SETUP([$1 - C]) AT_KEYWORDS([ovsdb server idl compound_index_double_column compound_index positive $5]) @@ -119203,7 +119433,7 @@ index 62e2b63832..ae46786ece 100644 m4_if([$2], [], [], [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) # Generate the data to be tested. -@@ -2186,7 +2371,7 @@ OVSDB_CHECK_IDL_COMPOUND_INDEX_DOUBLE_COLUMN_C([Compound_index, double column te +@@ -2186,7 +2376,7 @@ OVSDB_CHECK_IDL_COMPOUND_INDEX_DOUBLE_COLUMN_C([Compound_index, double column te m4_define([OVSDB_CHECK_IDL_COMPOUND_INDEX_WITH_REF], [AT_SETUP([$1 - C]) AT_KEYWORDS([ovsdb server idl compound_index compound_index_with_ref positive $5]) @@ -119212,7 +119442,7 @@ index 62e2b63832..ae46786ece 100644 m4_if([$2], [], [], [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl-compound-index-with-ref unix:socket $3], -@@ -2214,7 +2399,7 @@ m4_define([CHECK_STREAM_OPEN_BLOCK], +@@ -2214,7 +2404,7 @@ m4_define([CHECK_STREAM_OPEN_BLOCK], AT_SKIP_IF([test "$3" = "tcp6" && test "$IS_WIN32" = "yes"]) AT_SKIP_IF([test "$3" = "tcp6" && test "$HAVE_IPV6" = "no"]) AT_KEYWORDS([ovsdb server stream open_block $3]) @@ -119221,7 +119451,7 @@ index 62e2b63832..ae46786ece 100644 PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) WRONG_PORT=$(($TCP_PORT + 101)) AT_CHECK([$2 tcp:$4:$TCP_PORT], [0], [ignore]) -@@ -2230,6 +2415,23 @@ CHECK_STREAM_OPEN_BLOCK([Python3], [$PYTHON3 $srcdir/test-stream.py], +@@ -2230,6 +2420,23 @@ CHECK_STREAM_OPEN_BLOCK([Python3], [$PYTHON3 $srcdir/test-stream.py], CHECK_STREAM_OPEN_BLOCK([Python3], [$PYTHON3 $srcdir/test-stream.py], [tcp6], [[[::1]]]) @@ -119245,7 +119475,7 @@ index 62e2b63832..ae46786ece 100644 # same as OVSDB_CHECK_IDL but uses Python IDL implementation with tcp # with multiple remotes to assert the idl connects to the leader of the Raft cluster m4_define([OVSDB_CHECK_IDL_LEADER_ONLY_PY], -@@ -2245,10 +2447,11 @@ m4_define([OVSDB_CHECK_IDL_LEADER_ONLY_PY], +@@ -2245,10 +2452,11 @@ m4_define([OVSDB_CHECK_IDL_LEADER_ONLY_PY], pids=$(cat s2.pid s3.pid s1.pid | tr '\n' ',') echo $pids AT_CHECK([$PYTHON3 $srcdir/test-ovsdb.py -t30 idl-cluster $srcdir/idltest.ovsschema $remotes $pids $3], @@ -119258,7 +119488,7 @@ index 62e2b63832..ae46786ece 100644 AT_CLEANUP]) OVSDB_CHECK_IDL_LEADER_ONLY_PY([Check Python IDL connects to leader], 3, ['remote']) -@@ -2291,6 +2494,7 @@ m4_define([OVSDB_CHECK_CLUSTER_IDL_C], +@@ -2291,6 +2499,7 @@ m4_define([OVSDB_CHECK_CLUSTER_IDL_C], AT_CHECK([sort stdout | uuidfilt]m4_if([$7],,, [[| $7]]), [0], [$5]) m4_ifval([$8], [AT_CHECK([grep '$8' stderr], [1])], [], []) @@ -119266,7 +119496,7 @@ index 62e2b63832..ae46786ece 100644 AT_CLEANUP]) # Same as OVSDB_CHECK_CLUSTER_IDL_C but uses the Python IDL implementation. -@@ -2311,6 +2515,7 @@ m4_define([OVSDB_CHECK_CLUSTER_IDL_PY], +@@ -2311,6 +2520,7 @@ m4_define([OVSDB_CHECK_CLUSTER_IDL_PY], AT_CHECK([sort stdout | uuidfilt]m4_if([$7],,, [[| $7]]), [0], [$5]) m4_if([$8], [AT_CHECK([grep '$8' stderr], [1])], [], []) @@ -119274,7 +119504,7 @@ index 62e2b63832..ae46786ece 100644 AT_CLEANUP]) m4_define([OVSDB_CHECK_CLUSTER_IDL], -@@ -2341,11 +2546,11 @@ OVSDB_CHECK_CLUSTER_IDL([simple idl, monitor_cond_since, cluster disconnect], +@@ -2341,11 +2551,11 @@ OVSDB_CHECK_CLUSTER_IDL([simple idl, monitor_cond_since, cluster disconnect], "table": "simple", "where": [["i", "==", 1]], "row": {"r": 2.0 }}]']], @@ -119289,7 +119519,7 @@ index 62e2b63832..ae46786ece 100644 005: reconnect 006: table simple 007: {"error":null,"result":[{"count":1}]} -@@ -2402,7 +2607,7 @@ reconnect.*waiting .* seconds before reconnect) +@@ -2402,7 +2612,7 @@ reconnect.*waiting .* seconds before reconnect) AT_SETUP([idl table and column presence check]) AT_KEYWORDS([ovsdb server idl table column check]) @@ -119298,7 +119528,7 @@ index 62e2b63832..ae46786ece 100644 AT_CHECK(ovsdb-tool create db2 $abs_srcdir/idltest.ovsschema) AT_CHECK(ovsdb-server -vconsole:warn --log-file=ovsdb-server2.log --detach dnl -@@ -2437,3 +2642,182 @@ unix:socket2 remote has col id in table simple7 +@@ -2437,3 +2647,182 @@ unix:socket2 remote has col id in table simple7 OVSDB_SERVER_SHUTDOWN AT_CLEANUP @@ -124609,7 +124839,7 @@ index a38bf9e6df..86a223caff 100644 for (i = 0; i < n_threads; i++) { printf(" %6" PRIu64, thread_working_ms[i]); diff --git a/tests/test-ovsdb.c b/tests/test-ovsdb.c -index ca4e87b811..1369071868 100644 +index ca4e87b811..ab3662f238 100644 --- a/tests/test-ovsdb.c +++ b/tests/test-ovsdb.c @@ -294,11 +294,24 @@ print_and_free_ovsdb_error(struct ovsdb_error *error) @@ -125117,6 +125347,58 @@ index ca4e87b811..1369071868 100644 } else if (arg[0] != '[') { idl_set(idl, arg, step++); } else { +@@ -2852,6 +2989,29 @@ do_idl_partial_update_map_column(struct ovs_cmdl_context *ctx) + printf("%03d: After trying to delete a deleted element\n", step++); + dump_simple2(idl, myRow, step++); + ++ myTxn = ovsdb_idl_txn_create(idl); ++ myRow = idltest_simple2_insert(myTxn); ++ idltest_simple2_update_smap_setkey(myRow, "key3", "myList3"); ++ idltest_simple2_set_name(myRow, "String2"); ++ idltest_simple2_delete(myRow); ++ ovsdb_idl_txn_commit_block(myTxn); ++ ovsdb_idl_txn_destroy(myTxn); ++ ovsdb_idl_get_initial_snapshot(idl); ++ printf("%03d: After Create element, update smap and Delete element\n", ++ step++); ++ dump_simple2(idl, myRow, step++); ++ ++ myTxn = ovsdb_idl_txn_create(idl); ++ myRow = idltest_simple2_first(idl); ++ idltest_simple2_update_smap_setkey(myRow, "key4", "myList4"); ++ idltest_simple2_set_name(myRow, "String3"); ++ idltest_simple2_delete(myRow); ++ ovsdb_idl_txn_commit_block(myTxn); ++ ovsdb_idl_txn_destroy(myTxn); ++ ovsdb_idl_get_initial_snapshot(idl); ++ printf("%03d: After update smap and Delete element\n", step++); ++ dump_simple2(idl, myRow, step++); ++ + ovsdb_idl_destroy(idl); + printf("%03d: End test\n", step); + } +@@ -2950,6 +3110,21 @@ do_idl_partial_update_set_column(struct ovs_cmdl_context *ctx) + ovsdb_idl_get_initial_snapshot(idl); + printf("%03d: After add to other table + set of strong ref\n", step++); + dump_simple3(idl, myRow, step++); ++ ++ /* create row, insert key, delete row */ ++ myTxn = ovsdb_idl_txn_create(idl); ++ myRow = idltest_simple3_insert(myTxn); ++ uuid_from_string(&uuid_to_add, "12345678-dd3f-4616-ab6a-83a490bb0991"); ++ idltest_simple3_update_uset_addvalue(myRow, uuid_to_add); ++ idltest_simple3_set_name(myRow, "String2"); ++ idltest_simple3_delete(myRow); ++ ovsdb_idl_txn_commit_block(myTxn); ++ ovsdb_idl_txn_destroy(myTxn); ++ ovsdb_idl_get_initial_snapshot(idl); ++ printf("%03d: After Create element, update set and Delete element\n", ++ step++); ++ dump_simple3(idl, myRow, step++); ++ + ovsdb_idl_destroy(idl); + printf("%03d: End test\n", step); + } diff --git a/tests/test-ovsdb.py b/tests/test-ovsdb.py index 853264f22b..956fe376d4 100644 --- a/tests/test-ovsdb.py diff --git a/SPECS/openvswitch2.17.spec b/SPECS/openvswitch2.17.spec index 073f3a0..a164e04 100644 --- a/SPECS/openvswitch2.17.spec +++ b/SPECS/openvswitch2.17.spec @@ -57,7 +57,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 2.17.0 -Release: 166%{?dist} +Release: 167%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -751,6 +751,16 @@ exit 0 %endif %changelog +* Mon Sep 16 2024 Open vSwitch CI - 2.17.0-167 +- Merging upstream branch-2.17 [RH git: 74a1b04bfd] + Commit list: + 07889466b9 vconn: Always properly free flow stats reply. + f0676dbf46 mcast-snooping: Properly check group_get_lru return code. + c70944c770 ovsdb-idl: Fix IDL memory leak. + d7cbc67deb ofproto/bond: Preserve active bond member over restarts. + ce789d991f ofproto-dpif-upcall: Avoid stale ukeys leaks. + + * Tue Aug 27 2024 Open vSwitch CI - 2.17.0-166 - Merging upstream branch-2.17 [RH git: 5b1cb9f5a6] Commit list: