session: clean up session table when re-adding an existing application namespace 37/41837/2
authorSteven Luong <[email protected]>
Thu, 14 Nov 2024 22:28:34 +0000 (14:28 -0800)
committerFlorin Coras <[email protected]>
Fri, 6 Dec 2024 16:59:10 +0000 (16:59 +0000)
The app ns semantics allows the same app ns to be re-added with different
interface. For example,

app ns add id blue secret 1 if tap0
app ns add id blue secret 1 if tap1

If tap0 is bound to table 0 and tap1 is bound to tap1, we need to clean
up the existing session table and possibly allocate a new session table
for the app ns.

Type: fix

Change-Id: I566d621081b7cdbd7d0c481fda53953b39c26001
Signed-off-by: Steven Luong <[email protected]>
src/vnet/session/application_namespace.c

index f5b70a9..5930c34 100644 (file)
@@ -152,6 +152,19 @@ vnet_app_namespace_add_del (vnet_app_namespace_add_del_args_t *a)
                return rv;
            }
        }
+      else
+       {
+         /*
+          * Not creating a new app_ns. We are just changing the binding of an
+          * existing app_ns to different fib tables. Clean up the old session
+          * table that was bound to these fib indices.
+          */
+         ns_index = app_namespace_index (app_ns);
+         session_lookup_table_cleanup (FIB_PROTOCOL_IP4,
+                                       app_ns->ip4_fib_index, ns_index);
+         session_lookup_table_cleanup (FIB_PROTOCOL_IP6,
+                                       app_ns->ip6_fib_index, ns_index);
+       }
 
       app_ns->ns_secret = a->secret;
       app_ns->sw_if_index = a->sw_if_index;