session: add flag to disable session lookup 03/20503/5
authorNathan Skrzypczak <nathan.skrzypczak@gmail.com>
Thu, 4 Jul 2019 12:26:21 +0000 (14:26 +0200)
committerNathan Skrzypczak <nathan.skrzypczak@gmail.com>
Mon, 8 Jul 2019 16:25:33 +0000 (18:25 +0200)
Type: feature

Change-Id: I1369859be0a722ea37e5d3ecb35dee5684fc69f8
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
src/vnet/session/application.c
src/vnet/session/session.c
src/vnet/session/session_api.c
src/vnet/session/session_lookup.c
src/vnet/session/transport_types.h

index 0b8c8d4..ab67888 100644 (file)
@@ -212,7 +212,8 @@ app_listener_alloc_and_init (application_t * app,
        * are not related to network fibs, i.e., cannot be added as
        * connections */
       tc = session_get_transport (ls);
-      session_lookup_add_connection (tc, lh);
+      if (!(tc->flags & TRANSPORT_CONNECTION_F_NO_LOOKUP))
+       session_lookup_add_connection (tc, lh);
     }
 
   if (!ls)
index faaaad4..d378d6d 100644 (file)
@@ -946,7 +946,6 @@ session_open_cl (u32 app_wrk_index, session_endpoint_t * rmt, u32 opaque)
 
   sh = session_handle (s);
   session_lookup_add_connection (tc, sh);
-
   return app_worker_connect_notify (app_wrk, s, opaque);
 }
 
@@ -1079,7 +1078,8 @@ session_stop_listen (session_t * s)
   if (!tc)
     return VNET_API_ERROR_ADDRESS_NOT_IN_USE;
 
-  session_lookup_del_connection (tc);
+  if (!(tc->flags & TRANSPORT_CONNECTION_F_NO_LOOKUP))
+    session_lookup_del_connection (tc);
   transport_stop_listen (tp, s->connection_index);
   return 0;
 }
index 9e7a42d..e8550d6 100755 (executable)
@@ -640,6 +640,7 @@ vl_api_unbind_uri_t_handler (vl_api_unbind_uri_t * mp)
     {
       a->uri = (char *) mp->uri;
       a->app_index = app->app_index;
+      a->wrk_map_index = 0;
       rv = vnet_unbind_uri (a);
     }
   else
index b74973d..f1e715e 100644 (file)
@@ -338,6 +338,8 @@ session_lookup_del_session (session_t * s)
   transport_connection_t *ts;
   ts = transport_get_connection (session_get_transport_proto (s),
                                 s->connection_index, s->thread_index);
+  if (ts->flags & TRANSPORT_CONNECTION_F_NO_LOOKUP)
+    return 0;
   return session_lookup_del_connection (ts);
 }
 
index 87daa76..e15c6bb 100644 (file)
@@ -39,6 +39,14 @@ typedef enum transport_service_type_
   TRANSPORT_N_SERVICES
 } transport_service_type_t;
 
+typedef enum transport_connection_flags_
+{
+  TRANSPORT_CONNECTION_F_IS_TX_PACED = 1 << 0,
+  TRANSPORT_CONNECTION_F_NO_LOOKUP = 1 << 1, /**< Don't register connection in lookup
+                                                 Does not apply to local apps and
+                                                 transports using the network layer (udp/tcp) */
+} transport_connection_flags_t;
+
 typedef struct _transport_stats
 {
   u64 tx_bytes;
@@ -120,8 +128,6 @@ typedef struct _transport_connection
 #define c_flags connection.flags
 } transport_connection_t;
 
-#define TRANSPORT_CONNECTION_F_IS_TX_PACED     1 << 0
-
 typedef enum _transport_proto
 {
   TRANSPORT_PROTO_TCP,