diff mbox series

[ovs-dev,v5,1/5] northd, controller: Add timestamp column to MAC_Binding table

Message ID 20220811142001.106287-2-amusil@redhat.com
State Superseded
Headers show
Series MAC binding aging mechanism | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/github-robot-_ovn-kubernetes fail github build: failed

Commit Message

Ales Musil Aug. 11, 2022, 2:19 p.m. UTC
The new timestamp column in MAC_Binding is
populated with current time whenever the row is
created or the MAC address is updated.
This can be utilized by MAC binding aging mechanism,
when we can check if enough time has passed since the
creation/update.

Reported-at: https://bugzilla.redhat.com/2084668
Acked-By: Ihar Hrachyshka <ihrachys@redhat.com>
Acked-by: Dumitru Ceara <dceara@redhat.com>
Signed-off-by: Ales Musil <amusil@redhat.com>
---
v4: Rebase on top of current main.
    Add ack from Ihar.
v5: Rebase on top of current main.
---
 controller/pinctrl.c | 2 ++
 northd/ovn-northd.c  | 2 +-
 ovn-sb.ovsschema     | 5 +++--
 ovn-sb.xml           | 6 ++++++
 4 files changed, 12 insertions(+), 3 deletions(-)

Comments

Mark Michelson Aug. 11, 2022, 7:08 p.m. UTC | #1
Acked-by: Mark Michelson <mmichels@redhat.com>

On 8/11/22 10:19, Ales Musil wrote:
> The new timestamp column in MAC_Binding is
> populated with current time whenever the row is
> created or the MAC address is updated.
> This can be utilized by MAC binding aging mechanism,
> when we can check if enough time has passed since the
> creation/update.
> 
> Reported-at: https://bugzilla.redhat.com/2084668
> Acked-By: Ihar Hrachyshka <ihrachys@redhat.com>
> Acked-by: Dumitru Ceara <dceara@redhat.com>
> Signed-off-by: Ales Musil <amusil@redhat.com>
> ---
> v4: Rebase on top of current main.
>      Add ack from Ihar.
> v5: Rebase on top of current main.
> ---
>   controller/pinctrl.c | 2 ++
>   northd/ovn-northd.c  | 2 +-
>   ovn-sb.ovsschema     | 5 +++--
>   ovn-sb.xml           | 6 ++++++
>   4 files changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/controller/pinctrl.c b/controller/pinctrl.c
> index e3ac829ce..eeb6f7527 100644
> --- a/controller/pinctrl.c
> +++ b/controller/pinctrl.c
> @@ -4245,8 +4245,10 @@ mac_binding_add_to_sb(struct ovsdb_idl_txn *ovnsb_idl_txn,
>           sbrec_mac_binding_set_ip(b, ip);
>           sbrec_mac_binding_set_mac(b, mac_string);
>           sbrec_mac_binding_set_datapath(b, dp);
> +        sbrec_mac_binding_set_timestamp(b, time_wall_msec());
>       } else if (strcmp(b->mac, mac_string)) {
>           sbrec_mac_binding_set_mac(b, mac_string);
> +        sbrec_mac_binding_set_timestamp(b, time_wall_msec());
>       }
>   }
>   
> diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
> index ab28756af..bd35802ed 100644
> --- a/northd/ovn-northd.c
> +++ b/northd/ovn-northd.c
> @@ -115,7 +115,7 @@ static const char *rbac_port_binding_update[] =
>   static const char *rbac_mac_binding_auth[] =
>       {""};
>   static const char *rbac_mac_binding_update[] =
> -    {"logical_port", "ip", "mac", "datapath"};
> +    {"logical_port", "ip", "mac", "datapath", "timestamp"};
>   
>   static const char *rbac_svc_monitor_auth[] =
>       {""};
> diff --git a/ovn-sb.ovsschema b/ovn-sb.ovsschema
> index 3b78ea6f6..bca552b5e 100644
> --- a/ovn-sb.ovsschema
> +++ b/ovn-sb.ovsschema
> @@ -1,7 +1,7 @@
>   {
>       "name": "OVN_Southbound",
> -    "version": "20.23.0",
> -    "cksum": "4045988377 28575",
> +    "version": "20.24.0",
> +    "cksum": "4165157445 28634",
>       "tables": {
>           "SB_Global": {
>               "columns": {
> @@ -260,6 +260,7 @@
>                   "logical_port": {"type": "string"},
>                   "ip": {"type": "string"},
>                   "mac": {"type": "string"},
> +                "timestamp": {"type": {"key": "integer"}},
>                   "datapath": {"type": {"key": {"type": "uuid",
>                                                 "refTable": "Datapath_Binding"}}}},
>               "indexes": [["logical_port", "ip"]],
> diff --git a/ovn-sb.xml b/ovn-sb.xml
> index 59ad3aa2d..c5e6c9cc1 100644
> --- a/ovn-sb.xml
> +++ b/ovn-sb.xml
> @@ -3621,6 +3621,12 @@ tcp.flags = RST;
>       <column name="mac">
>         The Ethernet address to which the IP is bound.
>       </column>
> +
> +    <column name="timestamp">
> +      The timestamp in msec when the MAC binding was added or updated.
> +      Records that existed before this column will have 0.
> +    </column>
> +
>       <column name="datapath">
>         The logical datapath to which the logical port belongs.
>       </column>
diff mbox series

Patch

diff --git a/controller/pinctrl.c b/controller/pinctrl.c
index e3ac829ce..eeb6f7527 100644
--- a/controller/pinctrl.c
+++ b/controller/pinctrl.c
@@ -4245,8 +4245,10 @@  mac_binding_add_to_sb(struct ovsdb_idl_txn *ovnsb_idl_txn,
         sbrec_mac_binding_set_ip(b, ip);
         sbrec_mac_binding_set_mac(b, mac_string);
         sbrec_mac_binding_set_datapath(b, dp);
+        sbrec_mac_binding_set_timestamp(b, time_wall_msec());
     } else if (strcmp(b->mac, mac_string)) {
         sbrec_mac_binding_set_mac(b, mac_string);
+        sbrec_mac_binding_set_timestamp(b, time_wall_msec());
     }
 }
 
diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
index ab28756af..bd35802ed 100644
--- a/northd/ovn-northd.c
+++ b/northd/ovn-northd.c
@@ -115,7 +115,7 @@  static const char *rbac_port_binding_update[] =
 static const char *rbac_mac_binding_auth[] =
     {""};
 static const char *rbac_mac_binding_update[] =
-    {"logical_port", "ip", "mac", "datapath"};
+    {"logical_port", "ip", "mac", "datapath", "timestamp"};
 
 static const char *rbac_svc_monitor_auth[] =
     {""};
diff --git a/ovn-sb.ovsschema b/ovn-sb.ovsschema
index 3b78ea6f6..bca552b5e 100644
--- a/ovn-sb.ovsschema
+++ b/ovn-sb.ovsschema
@@ -1,7 +1,7 @@ 
 {
     "name": "OVN_Southbound",
-    "version": "20.23.0",
-    "cksum": "4045988377 28575",
+    "version": "20.24.0",
+    "cksum": "4165157445 28634",
     "tables": {
         "SB_Global": {
             "columns": {
@@ -260,6 +260,7 @@ 
                 "logical_port": {"type": "string"},
                 "ip": {"type": "string"},
                 "mac": {"type": "string"},
+                "timestamp": {"type": {"key": "integer"}},
                 "datapath": {"type": {"key": {"type": "uuid",
                                               "refTable": "Datapath_Binding"}}}},
             "indexes": [["logical_port", "ip"]],
diff --git a/ovn-sb.xml b/ovn-sb.xml
index 59ad3aa2d..c5e6c9cc1 100644
--- a/ovn-sb.xml
+++ b/ovn-sb.xml
@@ -3621,6 +3621,12 @@  tcp.flags = RST;
     <column name="mac">
       The Ethernet address to which the IP is bound.
     </column>
+
+    <column name="timestamp">
+      The timestamp in msec when the MAC binding was added or updated.
+      Records that existed before this column will have 0.
+    </column>
+
     <column name="datapath">
       The logical datapath to which the logical port belongs.
     </column>