api: multiple connections per process
[vpp.git] / src / vnet / interface_api.c
index 5e9561f..fe3426c 100644 (file)
@@ -272,26 +272,26 @@ send_sw_interface_details (vpe_api_main_t * am,
       mp->sub_inner_vlan_id = ntohs (sub->eth.inner_vlan_id);
       mp->sub_if_flags =
        ntohl (sub->eth.raw_flags & SUB_IF_API_FLAG_MASK_VNET);
+    }
 
-      /* vlan tag rewrite data */
-      u32 vtr_op = L2_VTR_DISABLED;
-      u32 vtr_push_dot1q = 0, vtr_tag1 = 0, vtr_tag2 = 0;
+  /* vlan tag rewrite data */
+  u32 vtr_op = L2_VTR_DISABLED;
+  u32 vtr_push_dot1q = 0, vtr_tag1 = 0, vtr_tag2 = 0;
 
-      if (l2vtr_get (am->vlib_main, am->vnet_main, swif->sw_if_index,
-                    &vtr_op, &vtr_push_dot1q, &vtr_tag1, &vtr_tag2) != 0)
-       {
-         // error - default to disabled
-         mp->vtr_op = ntohl (L2_VTR_DISABLED);
-         clib_warning ("cannot get vlan tag rewrite for sw_if_index %d",
-                       swif->sw_if_index);
-       }
-      else
-       {
-         mp->vtr_op = ntohl (vtr_op);
-         mp->vtr_push_dot1q = ntohl (vtr_push_dot1q);
-         mp->vtr_tag1 = ntohl (vtr_tag1);
-         mp->vtr_tag2 = ntohl (vtr_tag2);
-       }
+  if (l2vtr_get (am->vlib_main, am->vnet_main, swif->sw_if_index,
+                &vtr_op, &vtr_push_dot1q, &vtr_tag1, &vtr_tag2) != 0)
+    {
+      // error - default to disabled
+      mp->vtr_op = ntohl (L2_VTR_DISABLED);
+      clib_warning ("cannot get vlan tag rewrite for sw_if_index %d",
+                   swif->sw_if_index);
+    }
+  else
+    {
+      mp->vtr_op = ntohl (vtr_op);
+      mp->vtr_push_dot1q = ntohl (vtr_push_dot1q);
+      mp->vtr_tag1 = ntohl (vtr_tag1);
+      mp->vtr_tag2 = ntohl (vtr_tag2);
     }
 
   /* pbb tag rewrite data */
@@ -358,9 +358,8 @@ vl_api_sw_interface_dump_t_handler (vl_api_sw_interface_dump_t * mp)
 
   if (mp->name_filter_valid)
     {
-      filter =
-       format (0, ".*%s", vl_api_string_len (&mp->name_filter),
-               vl_api_from_api_string (&mp->name_filter), 0);
+      filter = vl_api_from_api_to_vec (&mp->name_filter);
+      vec_add1 (filter, 0);    /* Ensure it's a C string for strcasecmp() */
     }
 
   char *strcasestr (char *, char *);   /* lnx hdr file botch */
@@ -829,8 +828,9 @@ link_up_down_function (vnet_main_t * vm, u32 hw_if_index, u32 flags)
 
   if (vam->link_state_process_up)
     {
-      enum api_events event =
-       flags ? API_LINK_STATE_UP_EVENT : API_LINK_STATE_DOWN_EVENT;
+      enum api_events event = ((flags & VNET_HW_INTERFACE_FLAG_LINK_UP) ?
+                              API_LINK_STATE_UP_EVENT :
+                              API_LINK_STATE_DOWN_EVENT);
       vlib_process_signal_event (vam->vlib_main,
                                 link_state_process_node.index, event,
                                 hi->sw_if_index);
@@ -850,8 +850,8 @@ admin_up_down_function (vnet_main_t * vm, u32 sw_if_index, u32 flags)
    */
   if (vam->link_state_process_up)
     {
-      enum api_events event =
-       flags ? API_ADMIN_UP_EVENT : API_ADMIN_DOWN_EVENT;
+      enum api_events event = ((flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) ?
+                              API_ADMIN_UP_EVENT : API_ADMIN_DOWN_EVENT);
       vlib_process_signal_event (vam->vlib_main,
                                 link_state_process_node.index, event,
                                 sw_if_index);
@@ -1391,7 +1391,7 @@ pub_sub_handler (interface_events, INTERFACE_EVENTS);
 static clib_error_t *
 interface_api_hookup (vlib_main_t * vm)
 {
-  api_main_t *am = &api_main;
+  api_main_t *am = vlibapi_get_main ();
 
 #define _(N,n)                                                  \
     vl_msg_api_set_handlers(VL_API_##N, #n,                     \