Remove last vestigies of auto-ip-table create
[vpp.git] / src / vnet / ip / ip_api.c
index 2ea1e41..c0889eb 100644 (file)
@@ -273,14 +273,14 @@ typedef struct vl_api_ip_fib_dump_walk_ctx_t_
   fib_node_index_t *feis;
 } vl_api_ip_fib_dump_walk_ctx_t;
 
-static int
+static fib_table_walk_rc_t
 vl_api_ip_fib_dump_walk (fib_node_index_t fei, void *arg)
 {
   vl_api_ip_fib_dump_walk_ctx_t *ctx = arg;
 
   vec_add1 (ctx->feis, fei);
 
-  return (1);
+  return (FIB_TABLE_WALK_CONTINUE);
 }
 
 static void
@@ -1022,23 +1022,11 @@ add_del_route_check (fib_protocol_t table_proto,
 {
   vnet_main_t *vnm = vnet_get_main ();
 
-  /* Temporaray whilst I do the CSIT dance */
-  u8 create_missing_tables = 1;
-
   *fib_index = fib_table_find (table_proto, ntohl (table_id));
   if (~0 == *fib_index)
     {
-      if (create_missing_tables)
-       {
-         *fib_index = fib_table_find_or_create_and_lock (table_proto,
-                                                         ntohl (table_id),
-                                                         FIB_SOURCE_API);
-       }
-      else
-       {
-         /* No such VRF, and we weren't asked to create one */
-         return VNET_API_ERROR_NO_SUCH_FIB;
-       }
+      /* No such VRF, and we weren't asked to create one */
+      return VNET_API_ERROR_NO_SUCH_FIB;
     }
 
   if (!is_rpf_id && ~0 != ntohl (next_hop_sw_if_index))
@@ -1067,26 +1055,8 @@ add_del_route_check (fib_protocol_t table_proto,
 
       if (~0 == *next_hop_fib_index)
        {
-         if (create_missing_tables)
-           {
-             if (is_rpf_id)
-               *next_hop_fib_index =
-                 mfib_table_find_or_create_and_lock (fib_nh_proto,
-                                                     ntohl
-                                                     (next_hop_table_id),
-                                                     MFIB_SOURCE_API);
-             else
-               *next_hop_fib_index =
-                 fib_table_find_or_create_and_lock (fib_nh_proto,
-                                                    ntohl
-                                                    (next_hop_table_id),
-                                                    FIB_SOURCE_API);
-           }
-         else
-           {
-             /* No such VRF, and we weren't asked to create one */
-             return VNET_API_ERROR_NO_SUCH_FIB;
-           }
+         /* No such VRF, and we weren't asked to create one */
+         return VNET_API_ERROR_NO_SUCH_FIB;
        }
     }
 
@@ -1688,7 +1658,7 @@ typedef struct api_ip6nd_proxy_fib_table_walk_ctx_t_
   u32 *indices;
 } api_ip6nd_proxy_fib_table_walk_ctx_t;
 
-static int
+static fib_table_walk_rc_t
 api_ip6nd_proxy_fib_table_walk (fib_node_index_t fei, void *arg)
 {
   api_ip6nd_proxy_fib_table_walk_ctx_t *ctx = arg;
@@ -1698,7 +1668,7 @@ api_ip6nd_proxy_fib_table_walk (fib_node_index_t fei, void *arg)
       vec_add1 (ctx->indices, fei);
     }
 
-  return (1);
+  return (FIB_TABLE_WALK_CONTINUE);
 }
 
 static void
@@ -1824,7 +1794,7 @@ static void
 }
 
 void
-vl_mfib_signal_send_one (svm_queue_t * q,
+vl_mfib_signal_send_one (vl_api_registration_t * reg,
                         u32 context, const mfib_signal_t * mfs)
 {
   vl_api_mfib_signal_details_t *mp;
@@ -1873,21 +1843,19 @@ vl_mfib_signal_send_one (svm_queue_t * q,
       mp->ip_packet_len = 0;
     }
 
-  vl_msg_api_send_shmem (q, (u8 *) & mp);
+  vl_api_send_msg (reg, (u8 *) mp);
 }
 
 static void
 vl_api_mfib_signal_dump_t_handler (vl_api_mfib_signal_dump_t * mp)
 {
-  svm_queue_t *q;
+  vl_api_registration_t *reg;
 
-  q = vl_api_client_index_to_input_queue (mp->client_index);
-  if (q == 0)
-    {
-      return;
-    }
+  reg = vl_api_client_index_to_registration (mp->client_index);
+  if (!reg)
+    return;
 
-  while (q->cursize < q->maxsize && mfib_signal_send_one (q, mp->context))
+  while (vl_api_can_send_msg (reg) && mfib_signal_send_one (reg, mp->context))
     ;
 }
 
@@ -2107,7 +2075,7 @@ handle_ip4_arp_event (u32 pool_index)
   vlib_main_t *vm = vam->vlib_main;
   vl_api_ip4_arp_event_t *event;
   vl_api_ip4_arp_event_t *mp;
-  svm_queue_t *q;
+  vl_api_registration_t *reg;
 
   /* Client can cancel, die, etc. */
   if (pool_is_free_index (vam->arp_events, pool_index))
@@ -2115,8 +2083,8 @@ handle_ip4_arp_event (u32 pool_index)
 
   event = pool_elt_at_index (vam->arp_events, pool_index);
 
-  q = vl_api_client_index_to_input_queue (event->client_index);
-  if (!q)
+  reg = vl_api_client_index_to_registration (event->client_index);
+  if (!reg)
     {
       (void) vnet_add_del_ip4_arp_change_event
        (vnm, arp_change_delete_callback,
@@ -2126,11 +2094,11 @@ handle_ip4_arp_event (u32 pool_index)
       return;
     }
 
-  if (q->cursize < q->maxsize)
+  if (vl_api_can_send_msg (reg))
     {
       mp = vl_msg_api_alloc (sizeof (*mp));
       clib_memcpy (mp, event, sizeof (*mp));
-      vl_msg_api_send_shmem (q, (u8 *) & mp);
+      vl_api_send_msg (reg, (u8 *) mp);
     }
   else
     {
@@ -2156,7 +2124,7 @@ handle_ip6_nd_event (u32 pool_index)
   vlib_main_t *vm = vam->vlib_main;
   vl_api_ip6_nd_event_t *event;
   vl_api_ip6_nd_event_t *mp;
-  svm_queue_t *q;
+  vl_api_registration_t *reg;
 
   /* Client can cancel, die, etc. */
   if (pool_is_free_index (vam->nd_events, pool_index))
@@ -2164,8 +2132,8 @@ handle_ip6_nd_event (u32 pool_index)
 
   event = pool_elt_at_index (vam->nd_events, pool_index);
 
-  q = vl_api_client_index_to_input_queue (event->client_index);
-  if (!q)
+  reg = vl_api_client_index_to_registration (event->client_index);
+  if (!reg)
     {
       (void) vnet_add_del_ip6_nd_change_event
        (vnm, nd_change_delete_callback,
@@ -2175,11 +2143,11 @@ handle_ip6_nd_event (u32 pool_index)
       return;
     }
 
-  if (q->cursize < q->maxsize)
+  if (vl_api_can_send_msg (reg))
     {
       mp = vl_msg_api_alloc (sizeof (*mp));
       clib_memcpy (mp, event, sizeof (*mp));
-      vl_msg_api_send_shmem (q, (u8 *) & mp);
+      vl_api_send_msg (reg, (u8 *) mp);
     }
   else
     {
@@ -2331,9 +2299,9 @@ wc_arp_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
             /* *INDENT-OFF* */
             pool_foreach(reg, vpe_api_main.wc_ip4_arp_events_registrations,
             ({
-             svm_queue_t *q;
-              q = vl_api_client_index_to_input_queue (reg->client_index);
-             if (q && q->cursize < q->maxsize)
+             vl_api_registration_t *vl_reg;
+              vl_reg = vl_api_client_index_to_registration (reg->client_index);
+             if (reg && vl_api_can_send_msg (vl_reg))
                {
                  vl_api_ip4_arp_event_t * event = vl_msg_api_alloc (sizeof *event);
                  memset (event, 0, sizeof *event);
@@ -2344,7 +2312,7 @@ wc_arp_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
                  event->address = arp_events[i].ip4;
                  event->sw_if_index = htonl(arp_events[i].sw_if_index);
                  memcpy(event->new_mac, arp_events[i].mac, sizeof event->new_mac);
-                 vl_msg_api_send_shmem (q, (u8 *) &event);
+                 vl_api_send_msg (vl_reg, (u8 *) event);
                }
             }));
             /* *INDENT-ON* */
@@ -2370,9 +2338,9 @@ wc_arp_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
               /* *INDENT-OFF* */
               pool_foreach(reg, vpe_api_main.wc_ip6_nd_events_registrations,
               ({
-               svm_queue_t *q;
-                q = vl_api_client_index_to_input_queue (reg->client_index);
-               if (q && q->cursize < q->maxsize)
+               vl_api_registration_t *vl_reg;
+                vl_reg = vl_api_client_index_to_registration (reg->client_index);
+               if (vl_reg && vl_api_can_send_msg (vl_reg))
                  {
                    vl_api_ip6_nd_event_t * event = vl_msg_api_alloc (sizeof *event);
                    memset (event, 0, sizeof *event);
@@ -2383,7 +2351,7 @@ wc_arp_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
                    memcpy(event->address, nd_events[i].ip6.as_u8, sizeof event->address);
                    event->sw_if_index = htonl(nd_events[i].sw_if_index);
                    memcpy(event->new_mac, nd_events[i].mac, sizeof event->new_mac);
-                   vl_msg_api_send_shmem (q, (u8 *) &event);
+                   vl_api_send_msg (vl_reg, (u8 *) event);
                  }
               }));
             /* *INDENT-ON* */