Update L2 header offset after VLAN tag rewrite
[vpp.git] / src / uri / vppcom.c
index 5d1373f..24475b4 100644 (file)
@@ -1014,7 +1014,7 @@ vl_api_accept_session_t_handler (vl_api_accept_session_t * mp)
   session->state = STATE_ACCEPT;
   session->is_cut_thru = 0;
   session->is_server = 1;
-  session->port = ntohs (mp->port);
+  session->port = mp->port;
   session->peer_addr.is_ip4 = mp->is_ip4;
   clib_memcpy (&session->peer_addr.ip46, mp->ip,
               sizeof (session->peer_addr.ip46));
@@ -2198,9 +2198,10 @@ vppcom_session_connect (uint32_t session_index, vppcom_endpt_t * server_ep)
       u8 *ip_str = format (0, "%U", format_ip46_address,
                           &session->peer_addr.ip46,
                           session->peer_addr.is_ip4);
-      clib_warning ("[%d] connect sid %d to %s server port %d",
+      clib_warning ("[%d] connect sid %d to %s server port %d proto %s",
                    vcm->my_pid, session_index, ip_str,
-                   clib_net_to_host_u16 (session->port));
+                   clib_net_to_host_u16 (session->port),
+                   session->proto ? "UDP" : "TCP");
       vec_free (ip_str);
     }
 
@@ -2215,6 +2216,9 @@ vppcom_session_connect (uint32_t session_index, vppcom_endpt_t * server_ep)
                      vcm->my_pid, vppcom_retval_str (rv), rv);
       return rv;
     }
+  if (VPPCOM_DEBUG > 0)
+    clib_warning ("[%d] sid %d connected!", vcm->my_pid, session_index);
+
   return VPPCOM_OK;
 }
 
@@ -2487,19 +2491,19 @@ vppcom_select (unsigned long n_bits, unsigned long *read_map,
 
   ASSERT (sizeof (clib_bitmap_t) == sizeof (long int));
 
-  if (read_map)
+  if (n_bits && read_map)
     {
       clib_bitmap_validate (vcm->rd_bitmap, minbits);
       clib_memcpy (vcm->rd_bitmap, read_map, vec_len (vcm->rd_bitmap));
       memset (read_map, 0, vec_len (vcm->rd_bitmap));
     }
-  if (write_map)
+  if (n_bits && write_map)
     {
       clib_bitmap_validate (vcm->wr_bitmap, minbits);
       clib_memcpy (vcm->wr_bitmap, write_map, vec_len (vcm->wr_bitmap));
       memset (write_map, 0, vec_len (vcm->wr_bitmap));
     }
-  if (except_map)
+  if (n_bits && except_map)
     {
       clib_bitmap_validate (vcm->ex_bitmap, minbits);
       clib_memcpy (vcm->ex_bitmap, except_map, vec_len (vcm->ex_bitmap));
@@ -2509,91 +2513,100 @@ vppcom_select (unsigned long n_bits, unsigned long *read_map,
   do
     {
       /* *INDENT-OFF* */
-      clib_bitmap_foreach (session_index, vcm->rd_bitmap,
-        ({
-          clib_spinlock_lock (&vcm->sessions_lockp);
-          rv = vppcom_session_at_index (session_index, &session);
-          if (rv < 0)
-            {
-              clib_spinlock_unlock (&vcm->sessions_lockp);
-              if (VPPCOM_DEBUG > 1)
-                clib_warning ("[%d] session %d specified in "
-                              "read_map is closed.", vcm->my_pid,
-                              session_index);
-              bits_set = VPPCOM_EBADFD;
-              goto select_done;
-            }
-
-          rv = vppcom_session_read_ready (session, session_index);
-          clib_spinlock_unlock (&vcm->sessions_lockp);
-          if (vcm->ex_bitmap &&
-              clib_bitmap_get (vcm->ex_bitmap, session_index) && (rv < 0))
-            {
-              // TBD: clib_warning
-              /* coverity[FORWARD_NULL] */
-              clib_bitmap_set_no_check (except_map, session_index, 1);
-              bits_set++;
-            }
-          else if (rv > 0)
-            {
-              // TBD: clib_warning
-              /* coverity[FORWARD_NULL] */
-              clib_bitmap_set_no_check (read_map, session_index, 1);
-              bits_set++;
-            }
-        }));
-
-      clib_bitmap_foreach (session_index, vcm->wr_bitmap,
-        ({
-          clib_spinlock_lock (&vcm->sessions_lockp);
-          rv = vppcom_session_at_index (session_index, &session);
-          if (rv < 0)
-            {
-              clib_spinlock_unlock (&vcm->sessions_lockp);
-              if (VPPCOM_DEBUG > 0)
-                clib_warning ("[%d] session %d specified in "
-                              "write_map is closed.", vcm->my_pid,
-                              session_index);
-              bits_set = VPPCOM_EBADFD;
-              goto select_done;
-            }
-
-          rv = vppcom_session_write_ready (session, session_index);
-          clib_spinlock_unlock (&vcm->sessions_lockp);
-          if (rv > 0 )
+      if (n_bits)
+        {
+          if (read_map)
             {
-              // TBD: clib_warning
-              /* coverity[FORWARD_NULL] */
-              clib_bitmap_set_no_check (write_map, session_index, 1);
-              bits_set++;
+              clib_bitmap_foreach (session_index, vcm->rd_bitmap,
+                ({
+                  clib_spinlock_lock (&vcm->sessions_lockp);
+                  rv = vppcom_session_at_index (session_index, &session);
+                  if (rv < 0)
+                    {
+                      clib_spinlock_unlock (&vcm->sessions_lockp);
+                      if (VPPCOM_DEBUG > 1)
+                        clib_warning ("[%d] session %d specified in "
+                                      "read_map is closed.", vcm->my_pid,
+                                      session_index);
+                      bits_set = VPPCOM_EBADFD;
+                      goto select_done;
+                    }
+
+                  rv = vppcom_session_read_ready (session, session_index);
+                  clib_spinlock_unlock (&vcm->sessions_lockp);
+                  if (except_map && vcm->ex_bitmap &&
+                      clib_bitmap_get (vcm->ex_bitmap, session_index) &&
+                      (rv < 0))
+                    {
+                      // TBD: clib_warning
+                      clib_bitmap_set_no_check (except_map, session_index, 1);
+                      bits_set++;
+                    }
+                  else if (rv > 0)
+                    {
+                      // TBD: clib_warning
+                      clib_bitmap_set_no_check (read_map, session_index, 1);
+                      bits_set++;
+                    }
+                }));
             }
-        }));
 
-      clib_bitmap_foreach (session_index, vcm->ex_bitmap,
-        ({
-          clib_spinlock_lock (&vcm->sessions_lockp);
-          rv = vppcom_session_at_index (session_index, &session);
-          if (rv < 0)
+          if (write_map)
             {
-              clib_spinlock_unlock (&vcm->sessions_lockp);
-              if (VPPCOM_DEBUG > 1)
-                clib_warning ("[%d] session %d specified in "
-                              "except_map is closed.", vcm->my_pid,
-                              session_index);
-              bits_set = VPPCOM_EBADFD;
-              goto select_done;
+              clib_bitmap_foreach (session_index, vcm->wr_bitmap,
+                ({
+                  clib_spinlock_lock (&vcm->sessions_lockp);
+                  rv = vppcom_session_at_index (session_index, &session);
+                  if (rv < 0)
+                    {
+                      clib_spinlock_unlock (&vcm->sessions_lockp);
+                      if (VPPCOM_DEBUG > 0)
+                        clib_warning ("[%d] session %d specified in "
+                                      "write_map is closed.", vcm->my_pid,
+                                      session_index);
+                      bits_set = VPPCOM_EBADFD;
+                      goto select_done;
+                    }
+
+                  rv = vppcom_session_write_ready (session, session_index);
+                  clib_spinlock_unlock (&vcm->sessions_lockp);
+                  if (write_map && (rv > 0))
+                    {
+                      // TBD: clib_warning
+                      clib_bitmap_set_no_check (write_map, session_index, 1);
+                      bits_set++;
+                    }
+                }));
             }
 
-          rv = vppcom_session_read_ready (session, session_index);
-          clib_spinlock_unlock (&vcm->sessions_lockp);
-          if (rv < 0)
+          if (except_map)
             {
-              // TBD: clib_warning
-              /* coverity[FORWARD_NULL] */
-              clib_bitmap_set_no_check (except_map, session_index, 1);
-              bits_set++;
+              clib_bitmap_foreach (session_index, vcm->ex_bitmap,
+                ({
+                  clib_spinlock_lock (&vcm->sessions_lockp);
+                  rv = vppcom_session_at_index (session_index, &session);
+                  if (rv < 0)
+                    {
+                      clib_spinlock_unlock (&vcm->sessions_lockp);
+                      if (VPPCOM_DEBUG > 1)
+                        clib_warning ("[%d] session %d specified in "
+                                      "except_map is closed.", vcm->my_pid,
+                                      session_index);
+                      bits_set = VPPCOM_EBADFD;
+                      goto select_done;
+                    }
+
+                  rv = vppcom_session_read_ready (session, session_index);
+                  clib_spinlock_unlock (&vcm->sessions_lockp);
+                  if (rv < 0)
+                    {
+                      // TBD: clib_warning
+                      clib_bitmap_set_no_check (except_map, session_index, 1);
+                      bits_set++;
+                    }
+                }));
             }
-        }));
+        }
       /* *INDENT-ON* */
     }
   while (clib_time_now (&vcm->clib_time) < timeout);
@@ -2637,6 +2650,7 @@ vep_verify_epoll_chain (u32 vep_idx)
   do
     {
       vep = &session->vep;
+      sid = vep->next_sid;
       if (session->is_vep_session)
        {
          if (VPPCOM_DEBUG > 1)
@@ -2655,7 +2669,6 @@ vep_verify_epoll_chain (u32 vep_idx)
                          vep->vep_idx, vep->vep_idx,
                          vep->ev.events, vep->ev.data.u64, vep->et_mask);
        }
-      sid = vep->next_sid;
       if (sid != ~0)
        {
          rv = vppcom_session_at_index (sid, &session);
@@ -3225,6 +3238,10 @@ vppcom_session_attr (uint32_t session_index, uint32_t op,
 
     case VPPCOM_ATTR_SET_TCP_KEEPINTVL:
       break;
+
+    default:
+      rv = VPPCOM_EINVAL;
+      break;
     }
 
 done:
@@ -3232,10 +3249,10 @@ done:
   return rv;
 }
 
-  /*
  * fd.io coding-style-patch-verification: ON
  *
  * Local Variables:
  * eval: (c-set-style "gnu")
  * End:
  */
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */