controller/patch.c | 36 ++++++++++++++++++++++++++++++++----
controller/patch.h | 2 ++
3 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c
index c0a97a265..11fa2840d 100644
--- a/controller/ovn-controller.c
+++ b/controller/ovn-controller.c
@@ -1760,6 +1760,7 @@ main(int argc, char *argv[])
daemonize_complete();
+ patch_init();
pinctrl_init();
lflow_init();
@@ -2271,6 +2272,7 @@ main(int argc, char *argv[])
lflow_destroy();
ofctrl_destroy();
pinctrl_destroy();
+ patch_destroy();
ovsdb_idl_loop_destroy(&ovs_idl_loop);
ovsdb_idl_loop_destroy(&ovnsb_idl_loop);
diff --git a/controller/patch.c b/controller/patch.c
index 7ad30d9cc..a2a7bcd79 100644
--- a/controller/patch.c
+++ b/controller/patch.c
@@ -24,9 +24,25 @@
#include "openvswitch/hmap.h"
#include "openvswitch/vlog.h"
#include "ovn-controller.h"
+#include "sset.h"
VLOG_DEFINE_THIS_MODULE(patch);
+/* Contains list of physical bridges that were missing. */
+static struct sset missed_bridges;
+
+void
+patch_init(void)
+{
+ sset_init(&missed_bridges);
+}
+
+void
+patch_destroy(void)
+{
+ sset_destroy(&missed_bridges);
+}
+
static char *
patch_port_name(const char *src, const char *dst)
{
@@ -223,20 +239,32 @@ add_bridge_mappings(struct ovsdb_idl_txn
*ovs_idl_txn,
binding->type, binding->logical_port);
continue;
}
+ char *msg_key = xasprintf("%s;%s", binding->logical_port,
network);
struct ovsrec_bridge *br_ln = shash_find_data(&bridge_mappings,
network);
if (!br_ln) {
- static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1);
if (!is_localnet) {
+ static struct vlog_rate_limit rl =
VLOG_RATE_LIMIT_INIT(5, 1);
VLOG_ERR_RL(&rl, "bridge not found for %s port '%s' "
"with network name '%s'",
binding->type, binding->logical_port, network);
} else {
- VLOG_INFO_RL(&rl, "bridge not found for localnet port
'%s' "
- "with network name '%s'; skipping",
- binding->logical_port, network);
+ /* Since having localnet ports that are not mapped on some
+ * chassis is a supported configuration used to implement
+ * multisegment switches with fabric L3 routing between
+ * segments, log the following message once per run but
don't
+ * unnecessarily pollute the log file. */
+ if (!sset_contains(&missed_bridges, msg_key)) {
+ VLOG_INFO("bridge not found for localnet port '%s'
with "
+ "network name '%s'; skipping",
+ binding->logical_port, network);
+ sset_add(&missed_bridges, msg_key);
+ }
}
+ free(msg_key);
continue;
}
+ sset_find_and_delete(&missed_bridges, msg_key);
+ free(msg_key);
char *name1 = patch_port_name(br_int->name,
binding->logical_port);
char *name2 = patch_port_name(binding->logical_port,
br_int->name);
diff --git a/controller/patch.h b/controller/patch.h
index 81a43bc2d..e470d502c 100644
--- a/controller/patch.h
+++ b/controller/patch.h
@@ -43,5 +43,7 @@ void patch_run(struct ovsdb_idl_txn *ovs_idl_txn,
const struct ovsrec_bridge *br_int,
const struct sbrec_chassis *,
const struct hmap *local_datapaths);
+void patch_init(void);
+void patch_destroy(void);
#endif /* controller/patch.h */
--
2.26.2
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev