diff --git a/SOURCES/ovn23.09.patch b/SOURCES/ovn23.09.patch
index a3b70e1..13513a8 100644
--- a/SOURCES/ovn23.09.patch
+++ b/SOURCES/ovn23.09.patch
@@ -49,6 +49,105 @@ index 65c8761f4..351523fd1 100644
zhaojingjing zhao.jingjing1@zte.com.cn
zhongbaisong zhongbaisong@huawei.com
zhaozhanxu zhaozhanxu@163.com
+diff --git a/Documentation/automake.mk b/Documentation/automake.mk
+index 7fcd186ca..6628bd3e0 100644
+--- a/Documentation/automake.mk
++++ b/Documentation/automake.mk
+@@ -59,6 +59,7 @@ DOC_SOURCE = \
+ Documentation/internals/security.rst \
+ Documentation/internals/contributing/index.rst \
+ Documentation/internals/contributing/backporting-patches.rst \
++ Documentation/internals/contributing/inclusive-language.rst \
+ Documentation/internals/contributing/coding-style.rst \
+ Documentation/internals/contributing/documentation-style.rst \
+ Documentation/internals/contributing/libopenvswitch-abi.rst \
+diff --git a/Documentation/index.rst b/Documentation/index.rst
+index 730595c05..6dabd8a28 100644
+--- a/Documentation/index.rst
++++ b/Documentation/index.rst
+@@ -82,6 +82,7 @@ Learn more about the Open Virtual Network (OVN) project and about how you can co
+
+ - **Contributing:** :doc:`internals/contributing/submitting-patches` |
+ :doc:`internals/contributing/backporting-patches` |
++ :doc:`internals/contributing/inclusive-language` |
+ :doc:`internals/contributing/coding-style`
+
+ - **Maintaining:** :doc:`internals/maintainers` |
+diff --git a/Documentation/internals/contributing/inclusive-language.rst b/Documentation/internals/contributing/inclusive-language.rst
+new file mode 100644
+index 000000000..65e9c4fbd
+--- /dev/null
++++ b/Documentation/internals/contributing/inclusive-language.rst
+@@ -0,0 +1,57 @@
++..
++ Licensed under the Apache License, Version 2.0 (the "License"); you may
++ not use this file except in compliance with the License. You may obtain
++ a copy of the License at
++
++ http://www.apache.org/licenses/LICENSE-2.0
++
++ Unless required by applicable law or agreed to in writing, software
++ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
++ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
++ License for the specific language governing permissions and limitations
++ under the License.
++
++ Convention for heading levels in OVN documentation:
++
++ ======= Heading 0 (reserved for the title in a document)
++ ------- Heading 1
++ ~~~~~~~ Heading 2
++ +++++++ Heading 3
++ ''''''' Heading 4
++
++ Avoid deeper levels because they do not render well.
++
++==================
++Inclusive Language
++==================
++
++In order to help facilitate an inclusive environment in the OVN
++community we recognise the role of language in framing our
++communication with each other. It is important that terms that
++may exclude people through racial, cultural or other bias, are avoided
++as they may make people feel excluded.
++
++We recognise that this is subjective, and to some extent is a journey.
++But we also recognise that we cannot begin that journey without taking
++positive action. To this end OVN is adopting the practice of an
++inclusive word list, which helps to guide the use of language within
++the project.
++
++.. _word list:
++
++Word List
++---------
++
++The intent of this document is to formally document the acceptance of a
++inclusive word list by OVN. Accordingly, this document specifies
++use of the use the `Inclusive Naming Word List
++`__ v1.0 (the word list) for
++OVN.
++
++The adoption of the word list intended that this act as a guide for
++developers creating patches to the OVN repository, including both
++source code and documentation. And to aid maintainers in their role of
++shepherding changes into the repository.
++
++Further steps to align usage of language in OVN, including clarification
++of application of the word list, to new and existing work, may follow.
+diff --git a/Documentation/internals/contributing/index.rst b/Documentation/internals/contributing/index.rst
+index 77b52964b..4f09ad473 100644
+--- a/Documentation/internals/contributing/index.rst
++++ b/Documentation/internals/contributing/index.rst
+@@ -31,6 +31,7 @@ The below guides provide information on contributing to OVN itself.
+ :maxdepth: 2
+
+ submitting-patches
++ inclusive-language
+ backporting-patches
+ coding-style
+ documentation-style
diff --git a/NEWS b/NEWS
index 5c80fa482..9265e0836 100644
--- a/NEWS
@@ -77,6 +176,56 @@ index c71ade236..055d339e3 100644
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([config.h])
+diff --git a/controller/if-status.c b/controller/if-status.c
+index 6e8aa1f7e..2d6d06d9b 100644
+--- a/controller/if-status.c
++++ b/controller/if-status.c
+@@ -219,7 +219,8 @@ ovs_iface_create(struct if_status_mgr *, const char *iface_id,
+ static void add_to_ovn_uninstall_hash(struct if_status_mgr *, const char *,
+ const struct uuid *);
+ static void ovs_iface_destroy(struct if_status_mgr *, struct ovs_iface *);
+-static void ovn_uninstall_hash_destroy(struct if_status_mgr *mgr, char *name);
++static void ovn_uninstall_hash_destroy(struct if_status_mgr *mgr,
++ struct shash_node *node);
+ static void ovs_iface_set_state(struct if_status_mgr *, struct ovs_iface *,
+ enum if_state);
+
+@@ -256,7 +257,7 @@ if_status_mgr_clear(struct if_status_mgr *mgr)
+ ovs_assert(shash_is_empty(&mgr->ifaces));
+
+ SHASH_FOR_EACH_SAFE (node, &mgr->ovn_uninstall_hash) {
+- ovn_uninstall_hash_destroy(mgr, node->data);
++ ovn_uninstall_hash_destroy(mgr, node);
+ }
+ ovs_assert(shash_is_empty(&mgr->ovn_uninstall_hash));
+
+@@ -789,20 +790,13 @@ ovs_iface_destroy(struct if_status_mgr *mgr, struct ovs_iface *iface)
+ }
+
+ static void
+-ovn_uninstall_hash_destroy(struct if_status_mgr *mgr, char *name)
++ovn_uninstall_hash_destroy(struct if_status_mgr *mgr, struct shash_node *node)
+ {
+- struct shash_node *node = shash_find(&mgr->ovn_uninstall_hash, name);
+- char *node_name = NULL;
+- if (node) {
+- free(node->data);
+- VLOG_DBG("Interface name %s destroy", name);
+- node_name = shash_steal(&mgr->ovn_uninstall_hash, node);
+- ovn_uninstall_hash_account_mem(name, true);
+- free(node_name);
+- } else {
+- static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1);
+- VLOG_WARN_RL(&rl, "Interface name %s not found", name);
+- }
++ free(node->data);
++ VLOG_DBG("Interface name %s destroy", node->name);
++ char *node_name = shash_steal(&mgr->ovn_uninstall_hash, node);
++ ovn_uninstall_hash_account_mem(node_name, true);
++ free(node_name);
+ }
+
+ static void
diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c
index e8e7ac6bd..66b656044 100644
--- a/controller/ovn-controller.c
@@ -216,6 +365,23 @@ index e8e7ac6bd..66b656044 100644
}
if (br_int) {
+diff --git a/controller/physical.c b/controller/physical.c
+index c93fe9aa6..54bae81d1 100644
+--- a/controller/physical.c
++++ b/controller/physical.c
+@@ -1212,6 +1212,12 @@ reply_imcp_error_if_pkt_too_big(struct ovn_desired_flow_table *flow_table,
+ ofpact_put_set_field(
+ &inner_ofpacts, mf_from_id(MFF_LOG_FLAGS), &value, &mask);
+
++ /* inport <-> outport */
++ put_stack(MFF_LOG_INPORT, ofpact_put_STACK_PUSH(&inner_ofpacts));
++ put_stack(MFF_LOG_OUTPORT, ofpact_put_STACK_PUSH(&inner_ofpacts));
++ put_stack(MFF_LOG_INPORT, ofpact_put_STACK_POP(&inner_ofpacts));
++ put_stack(MFF_LOG_OUTPORT, ofpact_put_STACK_POP(&inner_ofpacts));
++
+ /* eth.src <-> eth.dst */
+ put_stack(MFF_ETH_DST, ofpact_put_STACK_PUSH(&inner_ofpacts));
+ put_stack(MFF_ETH_SRC, ofpact_put_STACK_PUSH(&inner_ofpacts));
diff --git a/controller/pinctrl.c b/controller/pinctrl.c
index 98821d275..9e80556ef 100644
--- a/controller/pinctrl.c
@@ -441,7 +607,7 @@ index 68892dba5..d84528ef5 100644
expr_symtab_add_predicate(symtab, "tcp", "ip.proto == 6");
expr_symtab_add_field(symtab, "tcp.src", MFF_TCP_SRC, "tcp", false);
diff --git a/northd/northd.c b/northd/northd.c
-index 32240b856..d3ff7629d 100644
+index 32240b856..6a4f8f222 100644
--- a/northd/northd.c
+++ b/northd/northd.c
@@ -119,6 +119,7 @@ static bool default_acl_drop;
@@ -651,7 +817,19 @@ index 32240b856..d3ff7629d 100644
ds_put_cstr(actions,
"clone { "
"outport = \""MC_MROUTER_FLOOD "\"; "
-@@ -17618,7 +17614,8 @@ build_static_mac_binding_table(
+@@ -10779,8 +10775,9 @@ build_bfd_table(struct ovsdb_idl_txn *ovnsb_txn,
+ }
+ build_bfd_update_sb_conf(nb_bt, bfd_e->sb_bt);
+ if (op && op->sb && op->sb->chassis &&
+- strcmp(op->sb->chassis->name, sb_bt->chassis_name)) {
+- sbrec_bfd_set_chassis_name(sb_bt, op->sb->chassis->name);
++ strcmp(op->sb->chassis->name, bfd_e->sb_bt->chassis_name)) {
++ sbrec_bfd_set_chassis_name(bfd_e->sb_bt,
++ op->sb->chassis->name);
+ }
+
+ hmap_remove(&sb_only, &bfd_e->hmap_node);
+@@ -17618,7 +17615,8 @@ build_static_mac_binding_table(
struct hmap *lr_ports)
{
/* Cleanup SB Static_MAC_Binding entries which do not have corresponding
@@ -661,7 +839,7 @@ index 32240b856..d3ff7629d 100644
const struct nbrec_static_mac_binding *nb_smb;
const struct sbrec_static_mac_binding *sb_smb;
SBREC_STATIC_MAC_BINDING_TABLE_FOR_EACH_SAFE (sb_smb,
-@@ -17628,6 +17625,12 @@ build_static_mac_binding_table(
+@@ -17628,6 +17626,12 @@ build_static_mac_binding_table(
sb_smb->ip);
if (!nb_smb) {
sbrec_static_mac_binding_delete(sb_smb);
@@ -833,7 +1011,7 @@ index 4bebb2673..22c881d6a 100644
AT_SETUP([LR neighbor lookup and learning flows])
ovn_start
diff --git a/tests/ovn.at b/tests/ovn.at
-index ffd9f653e..a5b8f91b8 100644
+index ffd9f653e..d44a36be9 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -1304,6 +1304,9 @@ ct_commit { ct_label=0x181716151413121110090807060504030201; };
@@ -904,7 +1082,60 @@ index ffd9f653e..a5b8f91b8 100644
ICMPv6MLQuery2()
")
as hv1 ovs-appctl netdev-dummy/receive vif${inport} $packet
-@@ -26674,20 +26688,10 @@ wait_row_count IGMP_Group 2 address=239.0.1.68
+@@ -15451,14 +15465,17 @@ m4_define([MULTICHASSIS_PATH_MTU_DISCOVERY_TEST],
+ second_mac=00:00:00:00:00:02
+ multi1_mac=00:00:00:00:00:f0
+ multi2_mac=00:00:00:00:00:f1
++ external_mac=00:00:00:00:ee:ff
+ first_ip=10.0.0.1
+ second_ip=10.0.0.2
+ multi1_ip=10.0.0.10
+ multi2_ip=10.0.0.20
++ external_ip=10.0.0.30
+ first_ip6=abcd::1
+ second_ip6=abcd::2
+ multi1_ip6=abcd::f0
+ multi2_ip6=abcd::f1
++ external_ip6=abcd::eeff
+
+ check ovn-nbctl ls-add ls0
+ check ovn-nbctl lsp-add ls0 first
+@@ -15577,6 +15594,24 @@ m4_define([MULTICHASSIS_PATH_MTU_DISCOVERY_TEST],
+
+ reset_env
+
++ AS_BOX([Multi with "unknown" to external doesn't produce wrong FDB])
++ len=3000
++ check ovn-nbctl --wait=hv lsp-set-addresses multi1 unknown
++
++ packet=$(send_ip_packet multi1 1 $multi1_mac $external_mac $multi1_ip $external_ip $(payload $len) 1 ${expected_ip_mtu})
++ echo $packet >> hv1/multi1.expected
++
++ packet=$(send_ip6_packet multi1 1 $multi1_mac $external_mac $multi1_ip6 $external_ip6 $(payload $len) 1 ${expected_ip_mtu})
++ echo $packet >> hv1/multi1.expected
++
++ check_pkts
++ reset_env
++
++ check_row_count fdb 0 mac="$external_mac"
++ ovn-sbctl --all destroy fdb
++
++ check ovn-nbctl --wait=hv lsp-set-addresses multi1 "${multi1_mac} ${multi1_ip} ${multi1_ip6}"
++
+ AS_BOX([Packets of proper size are delivered from multichassis to regular ports])
+
+ len=1000
+@@ -15676,9 +15711,6 @@ m4_define([MULTICHASSIS_PATH_MTU_DISCOVERY_TEST],
+ packet=$(send_ip6_packet multi1 1 $multi1_mac $multi2_mac $multi1_ip6 $multi2_ip6 $(payload $len) 1)
+ echo $packet >> hv1/multi1.expected
+
+- check_pkts
+- reset_env
+-
+ AS_BOX([MTU updates are honored in ICMP Path MTU calculation])
+
+ set_mtu() {
+@@ -26674,20 +26706,10 @@ wait_row_count IGMP_Group 2 address=239.0.1.68
wait_row_count IGMP_Group 2 address='"ff0a:dead:beef::1"'
check ovn-nbctl --wait=hv sync
@@ -925,7 +1156,7 @@ index ffd9f653e..a5b8f91b8 100644
# Send an IP multicast packet from LSP2, it should be forwarded
# to lsp1 and lsp3.
-@@ -27428,7 +27432,14 @@ check ovs-vsctl add-port br-int vif3 -- set Interface vif3 external-ids:iface-id
+@@ -27428,7 +27450,14 @@ check ovs-vsctl add-port br-int vif3 -- set Interface vif3 external-ids:iface-id
# Add a forwarding group on ls2 with lsp21 and lsp22 as child ports
# virtual IP - 172.16.1.11, virtual MAC - 00:11:de:ad:be:ef
check ovn-nbctl --wait=hv fwd-group-add fwd_grp1 ls2 172.16.1.11 00:11:de:ad:be:ef lsp21 lsp22
@@ -940,7 +1171,7 @@ index ffd9f653e..a5b8f91b8 100644
# Check logical flow
AT_CAPTURE_FILE([sbflows])
ovn-sbctl dump-flows > sbflows
-@@ -32805,7 +32816,7 @@ AT_CHECK([ovn-sbctl dump-flows |
+@@ -32805,7 +32834,7 @@ AT_CHECK([ovn-sbctl dump-flows |
grep ls_in_arp_rsp |
grep "${arp_proxy_ls1[[1]]}" |
sed 's/table=../table=??/'], [0], [dnl
@@ -949,7 +1180,7 @@ index ffd9f653e..a5b8f91b8 100644
arp.tpa == {169.254.238.0/24,169.254.239.2/32}), dnl
action=(eth.dst = eth.src; eth.src = 00:00:00:01:02:f1; arp.op = 2; dnl
/* ARP reply */ arp.tha = arp.sha; arp.sha = 00:00:00:01:02:f1; dnl
-@@ -32818,7 +32829,7 @@ AT_CHECK([ovn-sbctl dump-flows |
+@@ -32818,7 +32847,7 @@ AT_CHECK([ovn-sbctl dump-flows |
grep "${arp_proxy_ls1[[3]]}" |
sed 's/table=../table=??/'], [0], [dnl
table=??(ls_in_arp_rsp ), priority=30 , dnl
@@ -958,7 +1189,7 @@ index ffd9f653e..a5b8f91b8 100644
fd7b:6b4d:7b25:d22f::1/128, ff02::1:ff00:1/128 } && dnl
nd.target == { fd7b:6b4d:7b25:d22d::/64, fd7b:6b4d:7b25:d22f::1/128 }), dnl
action=(nd_na_router { eth.src = 00:00:00:01:02:f1; ip6.src = nd.target; dnl
-@@ -32832,7 +32843,7 @@ AT_CHECK([ovn-sbctl dump-flows |
+@@ -32832,7 +32861,7 @@ AT_CHECK([ovn-sbctl dump-flows |
grep "${arp_proxy_ls2[[2]]}" |
sed 's/table=../table=??/'], [0], [dnl
table=??(ls_in_arp_rsp ), priority=30 , dnl
@@ -967,7 +1198,7 @@ index ffd9f653e..a5b8f91b8 100644
action=(eth.dst = eth.src; eth.src = 00:00:00:02:02:f1; arp.op = 2; dnl
/* ARP reply */ arp.tha = arp.sha; arp.sha = 00:00:00:02:02:f1; dnl
arp.tpa <-> arp.spa; outport = inport; flags.loopback = 1; output;)
-@@ -32844,7 +32855,7 @@ AT_CHECK([ovn-sbctl dump-flows |
+@@ -32844,7 +32873,7 @@ AT_CHECK([ovn-sbctl dump-flows |
grep "${arp_proxy_ls2[[4]]}" |
sed 's/table=../table=??/'], [0], [dnl
table=??(ls_in_arp_rsp ), priority=30 , dnl
@@ -976,7 +1207,7 @@ index ffd9f653e..a5b8f91b8 100644
fd7b:6b4d:7b25:d22c::1/128, ff02::1:ff00:1/128 } && dnl
nd.target == { fd7b:6b4d:7b25:d22b::/64, fd7b:6b4d:7b25:d22c::1/128 }), dnl
action=(nd_na_router { eth.src = 00:00:00:02:02:f1; ip6.src = nd.target; dnl
-@@ -35202,7 +35213,10 @@ check_default_flows() {
+@@ -35202,7 +35231,10 @@ check_default_flows() {
# Check that every drop flow gets sampled.
check_sample_drops() {
@@ -988,7 +1219,7 @@ index ffd9f653e..a5b8f91b8 100644
check ovn-nbctl -- remove NB_Global . options debug_drop_collector_set \
-- remove NB_Global . options debug_drop_domain_id
check ovn-nbctl --wait=hv sync
-@@ -35212,14 +35226,52 @@ check_sample_drops() {
+@@ -35212,14 +35244,52 @@ check_sample_drops() {
# Take match part of flows that contain "drop".
drop_matches="$(grep 'drop' oflows_nosample | grep -oP 'table=\d*, priority=.* ')"
@@ -1042,7 +1273,7 @@ index ffd9f653e..a5b8f91b8 100644
ovs-ofctl dump-flows --no-stats br-int > oflows_sample
AT_CAPTURE_FILE([oflows_sample])
-@@ -35227,6 +35279,8 @@ check_sample_drops() {
+@@ -35227,6 +35297,8 @@ check_sample_drops() {
save_IFS=$IFS
IFS=$'\n'
for flow in $drop_matches; do
@@ -1051,7 +1282,7 @@ index ffd9f653e..a5b8f91b8 100644
AT_CHECK([grep "${flow}actions=.*sample.*" oflows_sample], [0], [ignore], [ignore], [echo "Flow $flow has a drop and did not get sampled"])
done
IFS=$save_IFS
-@@ -35239,9 +35293,9 @@ check_drops() {
+@@ -35239,9 +35311,9 @@ check_drops() {
check_default_flows
as hv1
@@ -1063,7 +1294,7 @@ index ffd9f653e..a5b8f91b8 100644
}
# Logical network:
-@@ -35309,7 +35363,8 @@ ovs-vsctl -- add-port br-int hv2-vif1 -- \
+@@ -35309,7 +35381,8 @@ ovs-vsctl -- add-port br-int hv2-vif1 -- \
wait_for_ports_up
check ovn-nbctl --wait=hv sync
@@ -1073,7 +1304,7 @@ index ffd9f653e..a5b8f91b8 100644
# Add stateless ACL
check ovn-nbctl --wait=sb \
-@@ -35317,7 +35372,7 @@ check ovn-nbctl --wait=sb \
+@@ -35317,7 +35390,7 @@ check ovn-nbctl --wait=sb \
check ovn-nbctl --wait=sb \
-- acl-add ls2 from-lport 100 'ip4' allow-stateless
@@ -1082,7 +1313,7 @@ index ffd9f653e..a5b8f91b8 100644
check ovn-nbctl --wait=sb acl-del ls1
check ovn-nbctl --wait=sb acl-del ls2
-@@ -35328,7 +35383,7 @@ check ovn-nbctl --wait=sb \
+@@ -35328,7 +35401,7 @@ check ovn-nbctl --wait=sb \
check ovn-nbctl --wait=sb \
-- acl-add ls2 from-lport 100 "udp" allow-related
@@ -1091,7 +1322,7 @@ index ffd9f653e..a5b8f91b8 100644
check ovn-nbctl --wait=sb acl-del ls1
check ovn-nbctl --wait=sb acl-del ls2
-@@ -37663,9 +37718,9 @@ AT_CHECK([ovn-sbctl --db=ssl:127.0.0.1:$TCP_PORT \
+@@ -37663,9 +37736,9 @@ AT_CHECK([ovn-sbctl --db=ssl:127.0.0.1:$TCP_PORT \
--ca-cert=$PKIDIR/testpki-cacert.pem \
--ssl-ciphers='HIGH:!aNULL:!MD5:@SECLEVEL=1' \
--ssl-protocols='TLSv1,TLSv1.1,TLSv1.2' \
@@ -1104,7 +1335,7 @@ index ffd9f653e..a5b8f91b8 100644
OVS_APP_EXIT_AND_WAIT([ovsdb-server])
AT_CLEANUP
-@@ -37840,3 +37895,170 @@ OVS_WAIT_FOR_OUTPUT([as hv1 ovs-ofctl dump-flows br-int table=0 |grep priority=1
+@@ -37840,3 +37913,171 @@ OVS_WAIT_FOR_OUTPUT([as hv1 ovs-ofctl dump-flows br-int table=0 |grep priority=1
OVN_CLEANUP([hv1])
AT_CLEANUP
])
@@ -1114,6 +1345,7 @@ index ffd9f653e..a5b8f91b8 100644
+dnl simple switching.
+OVN_FOR_EACH_NORTHD([
+AT_SETUP([IPv6 switching - megaflow check for IPv6 src/dst matches])
++AT_SKIP_IF([test $HAVE_SCAPY = no])
+ovn_start
+
+check ovn-nbctl ls-add sw0
@@ -1276,7 +1508,7 @@ index ffd9f653e..a5b8f91b8 100644
+AT_CLEANUP
+])
diff --git a/tests/system-ovn.at b/tests/system-ovn.at
-index 463075ac0..45e9ac94f 100644
+index 463075ac0..28474ed66 100644
--- a/tests/system-ovn.at
+++ b/tests/system-ovn.at
@@ -10628,7 +10628,7 @@ check ovn-nbctl ls-add bar
@@ -1329,6 +1561,43 @@ index 463075ac0..45e9ac94f 100644
OVS_APP_EXIT_AND_WAIT([ovn-controller])
+@@ -11183,7 +11203,25 @@ check_ovn_installed
+ check_ports_up
+ check_ports_bound
+
+-OVS_APP_EXIT_AND_WAIT([ovn-controller])
++AS_BOX(["Leave some ovn-installed while closing ovn-controller"])
++# Block IDL from ovn-controller to OVSDB
++stop_ovsdb_controller_updates $TCP_PORT
++remove_iface_id vif2
++ensure_controller_run
++
++# OVSDB should now be seen as read-only by ovn-controller
++remove_iface_id vif1
++check ovn-nbctl --wait=hv sync
++
++# Stop ovsdb before ovn-controller to ensure it's not updated
++as
++OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port patch-.*/d
++/connection dropped.*/d"])
++
++# Don't use OVS_APP_EXIT... to use --restart to avoid cleaning up the databases.
++TMPPID=$(cat $OVS_RUNDIR/ovn-controller.pid)
++check ovs-appctl -t ovn-controller exit --restart
++OVS_WAIT_WHILE([kill -0 $TMPPID 2>/dev/null])
+
+ as ovn-sb
+ OVS_APP_EXIT_AND_WAIT([ovsdb-server])
+@@ -11194,9 +11232,6 @@ OVS_APP_EXIT_AND_WAIT([ovsdb-server])
+ as northd
+ OVS_APP_EXIT_AND_WAIT([NORTHD_TYPE])
+
+-as
+-OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port patch-.*/d
+-/connection dropped.*/d"])
+ AT_CLEANUP
+ ])
+
diff --git a/utilities/automake.mk b/utilities/automake.mk
index 6a2b96e66..b7d2ebeef 100644
--- a/utilities/automake.mk
diff --git a/SPECS/ovn23.09.spec b/SPECS/ovn23.09.spec
index 2e7dec9..8e3164d 100644
--- a/SPECS/ovn23.09.spec
+++ b/SPECS/ovn23.09.spec
@@ -51,7 +51,7 @@ Summary: Open Virtual Network support
Group: System Environment/Daemons
URL: http://www.ovn.org/
Version: 23.09.4
-Release: 28%{?commit0:.%{date}git%{shortcommit0}}%{?dist}
+Release: 33%{?commit0:.%{date}git%{shortcommit0}}%{?dist}
Provides: openvswitch%{pkgver}-ovn-common = %{?epoch:%{epoch}:}%{version}-%{release}
Obsoletes: openvswitch%{pkgver}-ovn-common < 2.11.0-1
@@ -127,7 +127,7 @@ BuildRequires: tcpdump
BuildRequires: libcap-ng libcap-ng-devel
%endif
-%if 0%{?rhel} == 9
+%if 0%{?rhel} >= 9
BuildRequires: python3-scapy
%endif
@@ -532,8 +532,28 @@ fi
%{_unitdir}/ovn-controller-vtep.service
%changelog
+* Tue Sep 24 2024 Ales Musil - 23.09.4-33
+- northd: Fix NULL pointer deref within build_bfd_table.
+[Upstream: 8e97c06742cebac4c9bec1f95bda627aa468a2cb]
+
+* Fri Sep 20 2024 Ales Musil - 23.09.4-32
+- physical: Prevent wrong FDB to be learned with multichassis port. (#FDP-620)
+[Upstream: db7c577eca3ac0a030f4a9d626935cc2fc68da07]
+
+* Thu Sep 19 2024 Xavier Simonart - 23.09.4-31
+- ovn-controller: Fix potential assert when exiting.
+[Upstream: fa8e36f5a519b76642df1843aafb1c0852c2211b]
+
+* Tue Aug 27 2024 Mark Michelson - 23.09.4-30
+- Documentation: Add inclusive-language documentation.
+[Upstream: ec2ade138a11f9438dcf8b2e47a98045b41b5585]
+
+* Mon Aug 19 2024 Numan Siddique - 23.09.4-29
+- tests: Skip "IPv6 switching - megaflow check" if scapy is not installed.
+[Upstream: caa6dc96d8addd7dfb89ff0def1f7c04e69beb50]
+
* Fri Aug 16 2024 Numan Siddique - 23.09.4-28
-- Reply only for the multicast ND solicitations.
+- Reply only for the multicast ND solicitations. (#FDP-728)
[Upstream: 6b6bfd53dd10fff1925c7f5b3658b689794c8ab9]
* Fri Aug 16 2024 Mark Michelson - 23.09.4-27
@@ -553,7 +573,7 @@ fi
[Upstream: e43b9140e5f8f02cf86e06d69ed9c0df5d01989a]
* Mon Aug 12 2024 Rosemarie O'Riorden - 23.09.4-23
-- northd: Clean up SB MAC bindings for deleted ports.
+- northd: Clean up SB MAC bindings for deleted ports. (#FDP-723)
[Upstream: 4a98b76fe4dec6029002b7c67c91a8120583006d]
* Mon Aug 12 2024 Ales Musil - 23.09.4-22
@@ -561,11 +581,11 @@ fi
[Upstream: 563f0b7d2a70f903f43679b18b025e10572c3332]
* Fri Aug 09 2024 Dumitru Ceara - 23.09.4-21
-- ci: ovn-kubernetes: Move to stable release-1.0 branch.
+- ci: ovn-kubernetes: Move to stable release-1.0 branch. (#FDP-61)
[Upstream: 8e4f3ff204db3a577306f0455e2de99662d284b0]
* Fri Aug 09 2024 Ilya Maximets - 23.09.4-20
-- logical-fields: Add missing multicast matches for MLD and IGMP.
+- logical-fields: Add missing multicast matches for MLD and IGMP. (#FDP-728)
[Upstream: ea584fd60936997cd15f2d9d3340d62c1f3b5ace]
* Mon Jul 22 2024 zhangqiang45 - 23.09.4-19
@@ -585,7 +605,7 @@ fi
[Upstream: 83c2238cbf41f6600fe024ce1df58c9800299bd6]
* Tue Jun 18 2024 Dumitru Ceara - 23.09.4-15
-- Revert "northd: Don't skip transit switch LSP when creating mcast groups."
+- Revert "northd: Don't skip transit switch LSP when creating mcast groups." (#FDP-656)
[Upstream: 5f0809be565713d3634a6c663e122c0bfb5dff92]
* Tue Jun 18 2024 Dumitru Ceara - 23.09.4-14
@@ -609,7 +629,7 @@ fi
[Upstream: 24e0e2dc3bcac752480c958afd0d23420be3b5d4]
* Fri Jun 07 2024 Lorenzo Bianconi - 23.09.4-9
-- northd: Skip arp-proxy flows if the lsp is a router port.
+- northd: Skip arp-proxy flows if the lsp is a router port. (#FDP-96)
[Upstream: cf6cd0f579495906ac189b4b054eb5d5276eda20]
* Wed Jun 05 2024 Ales Musil - 23.09.4-8
@@ -621,7 +641,7 @@ fi
[Upstream: fb8b58913f5275563d8f80ea3658d8c5dfe55d03]
* Wed May 15 2024 Ales Musil - 23.09.4-6
-- controller: Avoid use after free in LB I-P.
+- controller: Avoid use after free in LB I-P. (#FDP-610)
[Upstream: a8b1a53244ef885f840be848ae99bf4e406a96ff]
* Tue May 14 2024 Xavier Simonart - 23.09.4-5