From 3424da003ff2feb8f327651fc6a86a1afbf1f519 Mon Sep 17 00:00:00 2001 From: Open vSwitch CI Date: Sep 16 2024 20:09:34 +0000 Subject: Import openvswitch3.3-3.3.0-49 from Fast DataPath --- diff --git a/SOURCES/openvswitch-3.3.0.patch b/SOURCES/openvswitch-3.3.0.patch index 2fbc56d..ebd30a0 100644 --- a/SOURCES/openvswitch-3.3.0.patch +++ b/SOURCES/openvswitch-3.3.0.patch @@ -22,7 +22,7 @@ index bf9d6241d5..702feeb3bb 100755 if [ ! -f "${VERSION_FILE}" ]; then echo "Could not find DPDK in $DPDK_INSTALL_DIR" diff --git a/.ci/linux-prepare.sh b/.ci/linux-prepare.sh -index 5028bdc442..2a191b57fb 100755 +index 5028bdc442..5f8a1db6af 100755 --- a/.ci/linux-prepare.sh +++ b/.ci/linux-prepare.sh @@ -23,7 +23,7 @@ cd .. @@ -30,7 +30,7 @@ index 5028bdc442..2a191b57fb 100755 pip3 install --disable-pip-version-check --user wheel pip3 install --disable-pip-version-check --user \ - flake8 'hacking>=3.0' netaddr pyparsing sarif-tools sphinx setuptools -+ flake8 netaddr pyparsing sarif-tools sphinx setuptools ++ flake8 netaddr pyparsing sarif-tools==2.0.0 sphinx setuptools # Install python test dependencies pip3 install -r python/test_requirements.txt @@ -1476,6 +1476,21 @@ index 0b9dc4278c..9b7e06e0c7 100644 if (!wc->masks.vlans[i].tci) { break; +diff --git a/lib/mcast-snooping.c b/lib/mcast-snooping.c +index dc5164b41c..bf25e6f20a 100644 +--- a/lib/mcast-snooping.c ++++ b/lib/mcast-snooping.c +@@ -432,7 +432,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); + } + diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 45f61930d4..d0b14389f2 100644 --- a/lib/netdev-dpdk.c @@ -2420,6 +2435,19 @@ index 9ad42b232d..56512fc28d 100644 if (inner_error) { char *s = ovsdb_error_to_string_free(inner_error); +diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c +index ba720474b6..d92df28d19 100644 +--- a/lib/ovsdb-idl.c ++++ b/lib/ovsdb-idl.c +@@ -3783,6 +3783,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/packets.c b/lib/packets.c index 5803d26f4a..edac30b77b 100644 --- a/lib/packets.c @@ -2769,6 +2797,39 @@ index 3fb3a4b40f..3357717ca7 100644 program_name, version); } } +diff --git a/lib/vconn.c b/lib/vconn.c +index e9603432d2..4b1c262eaa 100644 +--- a/lib/vconn.c ++++ b/lib/vconn.c +@@ -1017,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; + } + } +@@ -1031,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; +@@ -1041,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 b2653142f3..59b524b097 100644 --- a/lib/vlog.c @@ -2831,7 +2892,7 @@ index 281d4dc65e..faa5babde2 100644 else SSL_LIBS="-lssl -lcrypto" diff --git a/ofproto/bond.c b/ofproto/bond.c -index cfdf44f854..c31869a4c7 100644 +index cfdf44f854..0858de3746 100644 --- a/ofproto/bond.c +++ b/ofproto/bond.c @@ -186,7 +186,7 @@ static struct bond_member *choose_output_member(const struct bond *, @@ -2843,6 +2904,15 @@ index cfdf44f854..c31869a4c7 100644 static bool bond_may_recirc(const struct bond *); static void bond_update_post_recirc_rules__(struct bond *, bool force) OVS_REQ_WRLOCK(rwlock); +@@ -246,7 +246,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; + @@ -299,7 +299,10 @@ bond_unref(struct bond *bond) } free(bond->hash); @@ -2974,18 +3044,29 @@ index f579a5ca46..f023b10cdf 100644 /* A node within a next_ct_states list. */ diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c -index b5cbeed878..a046f8a339 100644 +index b5cbeed878..f122b47f1c 100644 --- a/ofproto/ofproto-dpif-upcall.c +++ b/ofproto/ofproto-dpif-upcall.c -@@ -59,6 +59,7 @@ COVERAGE_DEFINE(handler_duplicate_upcall); +@@ -57,8 +57,10 @@ COVERAGE_DEFINE(dumped_inconsistent_flow); + COVERAGE_DEFINE(dumped_new_flow); + COVERAGE_DEFINE(handler_duplicate_upcall); 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); COVERAGE_DEFINE(upcall_flow_limit_grew); COVERAGE_DEFINE(upcall_flow_limit_hit); COVERAGE_DEFINE(upcall_flow_limit_kill); -@@ -1428,8 +1429,6 @@ upcall_cb(const struct dp_packet *packet, const struct flow *flow, ovs_u128 *ufi +@@ -301,6 +303,7 @@ struct udpif_key { + uint64_t dump_seq OVS_GUARDED; /* Tracks udpif->dump_seq. */ + uint64_t reval_seq OVS_GUARDED; /* Tracks udpif->reval_seq. */ + 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. */ +@@ -1428,8 +1431,6 @@ upcall_cb(const struct dp_packet *packet, const struct flow *flow, ovs_u128 *ufi } if (upcall.ukey && !ukey_install(udpif, upcall.ukey)) { @@ -2994,7 +3075,7 @@ index b5cbeed878..a046f8a339 100644 error = ENOSPC; } out: -@@ -1927,15 +1926,15 @@ try_ukey_replace(struct umap *umap, struct udpif_key *old_ukey, +@@ -1927,15 +1928,15 @@ try_ukey_replace(struct umap *umap, struct udpif_key *old_ukey, transition_ukey(old_ukey, UKEY_DELETED); transition_ukey(new_ukey, UKEY_VISIBLE); replaced = true; @@ -3015,7 +3096,7 @@ index b5cbeed878..a046f8a339 100644 return replaced; } -@@ -2973,6 +2972,7 @@ revalidator_sweep__(struct revalidator *revalidator, bool purge) +@@ -2973,6 +2974,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)) { @@ -3023,6 +3104,27 @@ index b5cbeed878..a046f8a339 100644 continue; } ukey_state = ukey->state; +@@ -2995,6 +2997,20 @@ revalidator_sweep__(struct revalidator *revalidator, bool purge) + result = revalidate_ukey(udpif, ukey, &stats, &odp_actions, + 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(). */ + reval_op_init(&ops[n_ops++], result, udpif, ukey, &recircs, diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index 1cf4d5f7c9..fec01aea1f 100644 --- a/ofproto/ofproto-dpif-xlate.c @@ -4569,7 +4671,7 @@ index 55296e5593..0040a50b36 100644 AT_CHECK([ diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at -index e305e7b9cd..0b23fd6c5e 100644 +index e305e7b9cd..8d4403b72a 100644 --- a/tests/ofproto-dpif.at +++ b/tests/ofproto-dpif.at @@ -547,6 +547,23 @@ ovs-appctl time/warp 1000 100 @@ -4596,7 +4698,81 @@ index e305e7b9cd..0b23fd6c5e 100644 OVS_VSWITCHD_STOP() AT_CLEANUP -@@ -930,6 +947,28 @@ AT_CHECK([tail -1 stdout], [0], +@@ -740,6 +757,73 @@ Datapath actions: drop + 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 - bond - allow duplicated frames]) + dnl Receiving of duplicated multicast frames should be allowed with 'all_members_active'. + OVS_VSWITCHD_START([dnl +@@ -930,6 +1014,28 @@ AT_CHECK([tail -1 stdout], [0], OVS_VSWITCHD_STOP AT_CLEANUP @@ -4625,7 +4801,7 @@ index e305e7b9cd..0b23fd6c5e 100644 AT_SETUP([ofproto-dpif - group actions have no effect afterwards]) OVS_VSWITCHD_START add_of_ports br0 1 10 -@@ -6178,6 +6217,57 @@ AT_CHECK([test 1 = `$PYTHON3 "$top_srcdir/utilities/ovs-pcap.in" p2-tx.pcap | wc +@@ -6178,6 +6284,57 @@ AT_CHECK([test 1 = `$PYTHON3 "$top_srcdir/utilities/ovs-pcap.in" p2-tx.pcap | wc OVS_VSWITCHD_STOP AT_CLEANUP @@ -4683,7 +4859,7 @@ index e305e7b9cd..0b23fd6c5e 100644 AT_SETUP([ofproto-dpif - continuation with patch port]) AT_KEYWORDS([continuations pause resume]) OVS_VSWITCHD_START( -@@ -7653,12 +7743,14 @@ dummy@ovs-dummy: hit:0 missed:0 +@@ -7653,12 +7810,14 @@ dummy@ovs-dummy: hit:0 missed:0 vm1 5/3: (dummy: ifindex=2011) ]) @@ -4701,7 +4877,7 @@ index e305e7b9cd..0b23fd6c5e 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)']) -@@ -7669,10 +7761,13 @@ ovs-vsctl \ +@@ -7669,10 +7828,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 @@ -4717,6 +4893,71 @@ index e305e7b9cd..0b23fd6c5e 100644 ]) dnl add rule for int-br to force packet onto tunnel. There is no ifindex +@@ -12041,3 +12203,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 c22fb3c79c..3795ca7149 100644 +--- a/tests/ofproto-macros.at ++++ b/tests/ofproto-macros.at +@@ -169,6 +169,11 @@ strip_recirc() { + 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']) diff --git a/tests/ovsdb-cluster.at b/tests/ovsdb-cluster.at index 481afc08b3..9d8b4d06a4 100644 --- a/tests/ovsdb-cluster.at @@ -4835,7 +5076,7 @@ index 481afc08b3..9d8b4d06a4 100644 OVS_START_SHELL_HELPERS diff --git a/tests/ovsdb-idl.at b/tests/ovsdb-idl.at -index fb568dd823..c1c53cebe2 100644 +index fb568dd823..0f6ebd4d34 100644 --- a/tests/ovsdb-idl.at +++ b/tests/ovsdb-idl.at @@ -167,8 +167,17 @@ m4_define([OVSDB_CHECK_IDL_REGISTER_COLUMNS_PY], @@ -4954,7 +5195,30 @@ index fb568dd823..c1c53cebe2 100644 dnl This test creates database with weak references and checks that orphan dnl rows created for weak references are not available for iteration via dnl list of tracked changes. -@@ -2022,6 +2097,36 @@ OVSDB_CHECK_IDL_NOTIFY([simple idl verify notify], +@@ -1806,7 +1881,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], +@@ -1869,7 +1947,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], +@@ -2022,6 +2102,36 @@ OVSDB_CHECK_IDL_NOTIFY([simple idl verify notify], 015: done ]]) @@ -5977,7 +6241,7 @@ index 98e494abf4..3a33707167 100644 OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP diff --git a/tests/test-ovsdb.c b/tests/test-ovsdb.c -index c4ab899d45..41c1525f45 100644 +index c4ab899d45..710341b655 100644 --- a/tests/test-ovsdb.c +++ b/tests/test-ovsdb.c @@ -2023,6 +2023,24 @@ print_idl_row_updated_link2(const struct idltest_link2 *l2, int step) @@ -6065,6 +6329,58 @@ index c4ab899d45..41c1525f45 100644 if (!n) { print_and_log("%03d: empty", step); +@@ -2977,6 +3020,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); + } +@@ -3075,6 +3141,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 48f8ee2d70..67a45f044b 100644 --- a/tests/test-ovsdb.py diff --git a/SPECS/openvswitch3.3.spec b/SPECS/openvswitch3.3.spec index 3c6f767..67503bb 100644 --- a/SPECS/openvswitch3.3.spec +++ b/SPECS/openvswitch3.3.spec @@ -57,7 +57,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 3.3.0 -Release: 48%{?dist} +Release: 49%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -769,6 +769,17 @@ exit 0 %endif %changelog +* Mon Sep 16 2024 Open vSwitch CI - 3.3.0-49 +- Merging upstream branch-3.3 [RH git: 3713b4e9c9] + Commit list: + bb49e027c1 vconn: Always properly free flow stats reply. + a0e4171bc9 mcast-snooping: Properly check group_get_lru return code. + 58ff239470 ovsdb-idl: Fix IDL memory leak. + 5984640f02 ofproto/bond: Preserve active bond member over restarts. + c64206c6e0 ofproto-dpif-upcall: Avoid stale ukeys leaks. + 823b3dd823 ci: Use previous sarif-tools release due to issue in latest release. + + * Thu Aug 29 2024 Open vSwitch CI - 3.3.0-48 - Merging upstream branch-3.3 [RH git: f9a26721d9] Commit list: