Add timestamp column which will store timestamp when the FDB row is created or updated. This can be utilized by FDB aging mechanism.
Signed-off-by: Ales Musil <[email protected]> --- controller/pinctrl.c | 23 ++++++++++++++++++++--- northd/ovn-northd.c | 2 +- ovn-sb.ovsschema | 7 ++++--- ovn-sb.xml | 5 +++++ 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/controller/pinctrl.c b/controller/pinctrl.c index b5df8b1eb..13efe4e8b 100644 --- a/controller/pinctrl.c +++ b/controller/pinctrl.c @@ -174,6 +174,7 @@ struct pinctrl { /* Latch to destroy the 'pinctrl_thread' */ struct latch pinctrl_thread_exit; bool mac_binding_can_timestamp; + bool fdb_can_timestamp; }; static struct pinctrl pinctrl; @@ -3448,15 +3449,25 @@ pinctrl_update(const struct ovsdb_idl *idl, const char *br_int_name) ovs_mutex_lock(&pinctrl_mutex); pinctrl_set_br_int_name_(br_int_name); - bool can_timestamp = sbrec_server_has_mac_binding_table_col_timestamp(idl); - if (can_timestamp != pinctrl.mac_binding_can_timestamp) { - pinctrl.mac_binding_can_timestamp = can_timestamp; + bool can_mb_timestamp = + sbrec_server_has_mac_binding_table_col_timestamp(idl); + if (can_mb_timestamp != pinctrl.mac_binding_can_timestamp) { + pinctrl.mac_binding_can_timestamp = can_mb_timestamp; /* Notify pinctrl_handler that mac binding timestamp column * availability has changed. */ notify_pinctrl_handler(); } + bool can_fdb_timestamp = sbrec_server_has_fdb_table_col_timestamp(idl); + if (can_fdb_timestamp != pinctrl.fdb_can_timestamp) { + pinctrl.fdb_can_timestamp = can_fdb_timestamp; + + /* Notify pinctrl_handler that fdb timestamp column + * availability has changed. */ + notify_pinctrl_handler(); + } + ovs_mutex_unlock(&pinctrl_mutex); } @@ -8102,6 +8113,12 @@ run_put_fdb(struct ovsdb_idl_txn *ovnsb_idl_txn, sbrec_fdb_set_mac(sb_fdb, mac_string); } sbrec_fdb_set_port_key(sb_fdb, fdb_e->port_key); + + /* For backward compatibility check if timestamp column is available + * in SB DB. */ + if (pinctrl.fdb_can_timestamp) { + sbrec_fdb_set_timestamp(sb_fdb, time_wall_msec()); + } } static void diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c index 3515b68a2..f66d8f81a 100644 --- a/northd/ovn-northd.c +++ b/northd/ovn-northd.c @@ -96,7 +96,7 @@ static const char *rbac_controller_event_update[] = static const char *rbac_fdb_auth[] = {""}; static const char *rbac_fdb_update[] = - {"dp_key", "mac", "port_key"}; + {"dp_key", "mac", "port_key", "timestamp"}; static const char *rbac_port_binding_auth[] = {""}; diff --git a/ovn-sb.ovsschema b/ovn-sb.ovsschema index f59af8cc5..16c6b3b80 100644 --- a/ovn-sb.ovsschema +++ b/ovn-sb.ovsschema @@ -1,7 +1,7 @@ { "name": "OVN_Southbound", - "version": "20.27.2", - "cksum": "1291808617 30462", + "version": "20.27.3", + "cksum": "800899756 30521", "tables": { "SB_Global": { "columns": { @@ -576,7 +576,8 @@ "port_key": { "type": {"key": {"type": "integer", "minInteger": 1, - "maxInteger": 16777215}}}}, + "maxInteger": 16777215}}}, + "timestamp": {"type": {"key": "integer"}}}, "indexes": [["mac", "dp_key"]], "isRoot": true}, "Static_MAC_Binding": { diff --git a/ovn-sb.xml b/ovn-sb.xml index ead9efcab..49fbce3d4 100644 --- a/ovn-sb.xml +++ b/ovn-sb.xml @@ -5001,6 +5001,11 @@ tcp.flags = RST; <column name="port_key"> The key of the port binding on which this FDB was learnt. </column> + + <column name="timestamp"> + The timestamp in msec when the FDB was added or updated. + Records that existed before this column will have 0. + </column> </table> <table name="Static_MAC_Binding" title="IP to MAC bindings"> -- 2.40.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
