In order to test upgrades from 26.03 -> main we need to make sure
that the evpn/vtep-fdb-list is backward compatible. Change it
so the old format is used when there is only one path for given FDB.
Fixes: bd06abf880bb ("controller: Generate OpenFlow select groups for ECMP FDB
entries.")
Signed-off-by: Ales Musil <[email protected]>
---
controller/evpn-fdb.c | 32 ++++++++++++++-----------
tests/system-ovn.at | 54 +++++++++++++++++++++----------------------
2 files changed, 46 insertions(+), 40 deletions(-)
diff --git a/controller/evpn-fdb.c b/controller/evpn-fdb.c
index 9da3e86e5..76ab816f3 100644
--- a/controller/evpn-fdb.c
+++ b/controller/evpn-fdb.c
@@ -235,21 +235,27 @@ evpn_fdb_list(struct unixctl_conn *conn, int argc
OVS_UNUSED,
const struct evpn_fdb *fdb;
HMAP_FOR_EACH (fdb, hmap_node, fdbs) {
ds_put_format(&ds, "UUID: "UUID_FMT", MAC: "ETH_ADDR_FMT", "
- "vni: %"PRIu32", dp_key: %"PRIu32
- ", paths: [",
- UUID_ARGS(&fdb->flow_uuid), ETH_ADDR_ARGS(fdb->mac),
- fdb->vni, fdb->dp_key);
-
- for (size_t i = 0; i < vector_len(&fdb->paths); i++) {
- if (i) {
- ds_put_cstr(&ds, ", ");
- }
+ "vni: %"PRIu32", ", UUID_ARGS(&fdb->flow_uuid),
+ ETH_ADDR_ARGS(fdb->mac), fdb->vni);
+
+ if (vector_len(&fdb->paths) == 1) {
struct evpn_fdb_path path =
- vector_get(&fdb->paths, i, struct evpn_fdb_path);
- ds_put_format(&ds, "{key=%#"PRIx32", weight=%"PRIu16"}",
- path.binding_key, path.weight);
+ vector_get(&fdb->paths, 0, struct evpn_fdb_path);
+ ds_put_format(&ds, "binding_key: %#"PRIx32", dp_key: %"PRIu32"\n",
+ path.binding_key, fdb->dp_key);
+ } else {
+ ds_put_format(&ds, "dp_key: %"PRIu32", paths: [", fdb->dp_key);
+ for (size_t i = 0; i < vector_len(&fdb->paths); i++) {
+ if (i) {
+ ds_put_cstr(&ds, ", ");
+ }
+ struct evpn_fdb_path path =
+ vector_get(&fdb->paths, i, struct evpn_fdb_path);
+ ds_put_format(&ds, "{key=%#"PRIx32", weight=%"PRIu16"}",
+ path.binding_key, path.weight);
+ }
+ ds_put_cstr(&ds, "]\n");
}
- ds_put_cstr(&ds, "]\n");
}
unixctl_command_reply(conn, ds_cstr_ro(&ds));
diff --git a/tests/system-ovn.at b/tests/system-ovn.at
index a4afab4e5..dc3c7e979 100644
--- a/tests/system-ovn.at
+++ b/tests/system-ovn.at
@@ -18207,10 +18207,10 @@ check bridge fdb add f0:00:0f:16:10:60 dev
$VXLAN_NAME dst 169.0.0.20 static ext
check bridge fdb add f0:00:0f:16:10:70 dev $VXLAN_NAME dst 169.0.0.30 static
extern_learn
OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-fdb-list | cut -d',' -f2- |
sort], [0], [dnl
- MAC: 00:00:00:00:00:01, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000003,
weight=0}]]
- MAC: f0:00:0f:16:10:50, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000001,
weight=0}]]
- MAC: f0:00:0f:16:10:60, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000002,
weight=0}]]
- MAC: f0:00:0f:16:10:70, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000003,
weight=0}]]
+ MAC: 00:00:00:00:00:01, vni: $vni, binding_key: 0x80000003, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:50, vni: $vni, binding_key: 0x80000001, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:60, vni: $vni, binding_key: 0x80000002, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:70, vni: $vni, binding_key: 0x80000003, dp_key: $dp_key
])
AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_GET_REMOTE_FDB |
grep priority | \
@@ -18269,10 +18269,10 @@ check bridge fdb add f0:00:0f:16:10:90 dev
$VXLAN_NAME nhid $nh_grp_id extern_le
# Verify the ECMP FDB entry has multiple paths with weights.
OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-fdb-list | cut -d',' -f2- |
sort], [0], [dnl
- MAC: 00:00:00:00:00:01, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000003,
weight=0}]]
- MAC: f0:00:0f:16:10:50, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000001,
weight=0}]]
- MAC: f0:00:0f:16:10:60, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000002,
weight=0}]]
- MAC: f0:00:0f:16:10:70, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000003,
weight=0}]]
+ MAC: 00:00:00:00:00:01, vni: $vni, binding_key: 0x80000003, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:50, vni: $vni, binding_key: 0x80000001, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:60, vni: $vni, binding_key: 0x80000002, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:70, vni: $vni, binding_key: 0x80000003, dp_key: $dp_key
MAC: f0:00:0f:16:10:90, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000001,
weight=100}, {key=0x80000002, weight=200}]]
])
@@ -18316,11 +18316,11 @@ check ip nexthop replace id $nh_grp_id group
$nh_id1,100 fdb
# Verify the entry reverts to single path.
OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-fdb-list | cut -d',' -f2- |
sort], [0], [dnl
- MAC: 00:00:00:00:00:01, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000003,
weight=0}]]
- MAC: f0:00:0f:16:10:50, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000001,
weight=0}]]
- MAC: f0:00:0f:16:10:60, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000002,
weight=0}]]
- MAC: f0:00:0f:16:10:70, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000003,
weight=0}]]
- MAC: f0:00:0f:16:10:90, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000001,
weight=100}]]
+ MAC: 00:00:00:00:00:01, vni: $vni, binding_key: 0x80000003, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:50, vni: $vni, binding_key: 0x80000001, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:60, vni: $vni, binding_key: 0x80000002, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:70, vni: $vni, binding_key: 0x80000003, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:90, vni: $vni, binding_key: 0x80000001, dp_key: $dp_key
])
AT_CHECK_UNQUOTED(
@@ -18359,10 +18359,10 @@ check bridge fdb del f0:00:0f:16:10:90 dev
$VXLAN_NAME nhid $nh_grp_id
# Verify the FDB entry is cleaned up.
OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-fdb-list | cut -d',' -f2- |
sort], [0], [dnl
- MAC: 00:00:00:00:00:01, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000003,
weight=0}]]
- MAC: f0:00:0f:16:10:50, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000001,
weight=0}]]
- MAC: f0:00:0f:16:10:60, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000002,
weight=0}]]
- MAC: f0:00:0f:16:10:70, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000003,
weight=0}]]
+ MAC: 00:00:00:00:00:01, vni: $vni, binding_key: 0x80000003, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:50, vni: $vni, binding_key: 0x80000001, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:60, vni: $vni, binding_key: 0x80000002, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:70, vni: $vni, binding_key: 0x80000003, dp_key: $dp_key
])
AS_BOX([L2 EVPN FDB advertising])
@@ -19025,10 +19025,10 @@ check bridge fdb add f0:00:0f:16:10:60 dev
$VXLAN_NAME dst 169::20 static extern
check bridge fdb add f0:00:0f:16:10:70 dev $VXLAN_NAME dst 169::30 static
extern_learn
OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-fdb-list | cut -d',' -f2- |
sort], [0], [dnl
- MAC: 00:00:00:00:00:01, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000003,
weight=0}]]
- MAC: f0:00:0f:16:10:50, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000001,
weight=0}]]
- MAC: f0:00:0f:16:10:60, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000002,
weight=0}]]
- MAC: f0:00:0f:16:10:70, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000003,
weight=0}]]
+ MAC: 00:00:00:00:00:01, vni: $vni, binding_key: 0x80000003, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:50, vni: $vni, binding_key: 0x80000001, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:60, vni: $vni, binding_key: 0x80000002, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:70, vni: $vni, binding_key: 0x80000003, dp_key: $dp_key
])
AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_GET_REMOTE_FDB |
grep priority | \
@@ -19592,12 +19592,12 @@ check bridge fdb add f0:00:0f:16:10:70 dev
$VXLAN_NAME dst 169.0.0.30 static ext
check bridge fdb add f0:00:0f:16:10:80 dev $VXLAN_V6_NAME dst 169::30 static
extern_learn
OVS_WAIT_FOR_OUTPUT_UNQUOTED([ovn-appctl evpn/vtep-fdb-list | cut -d',' -f2- |
sort], [0], [dnl
- MAC: 00:00:00:00:00:01, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000004,
weight=0}]]
- MAC: 00:00:00:00:00:10, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000005,
weight=0}]]
- MAC: f0:00:0f:16:10:50, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000001,
weight=0}]]
- MAC: f0:00:0f:16:10:60, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000003,
weight=0}]]
- MAC: f0:00:0f:16:10:70, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000004,
weight=0}]]
- MAC: f0:00:0f:16:10:80, vni: $vni, dp_key: $dp_key, paths: [[{key=0x80000005,
weight=0}]]
+ MAC: 00:00:00:00:00:01, vni: $vni, binding_key: 0x80000004, dp_key: $dp_key
+ MAC: 00:00:00:00:00:10, vni: $vni, binding_key: 0x80000005, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:50, vni: $vni, binding_key: 0x80000001, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:60, vni: $vni, binding_key: 0x80000003, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:70, vni: $vni, binding_key: 0x80000004, dp_key: $dp_key
+ MAC: f0:00:0f:16:10:80, vni: $vni, binding_key: 0x80000005, dp_key: $dp_key
])
AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_GET_REMOTE_FDB |
grep priority | \
--
2.54.0
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev