vcl: remove unused fields and structures
[vpp.git] / src / vcl / vppcom.c
index 3c3e15d..7c076d3 100644 (file)
@@ -60,7 +60,7 @@ vcl_mq_dequeue_batch (vcl_worker_t * wrk, svm_msg_q_t * mq)
 }
 
 const char *
-vppcom_session_state_str (session_state_t state)
+vppcom_session_state_str (vcl_session_state_t state)
 {
   char *st;
 
@@ -533,6 +533,30 @@ vcl_session_bound_handler (vcl_worker_t * wrk, session_bound_msg_t * mp)
   return sid;
 }
 
+static void
+vcl_session_unlisten_reply_handler (vcl_worker_t * wrk, void *data)
+{
+  session_unlisten_reply_msg_t *mp = (session_unlisten_reply_msg_t *) data;
+  vcl_session_t *s;
+
+  s = vcl_session_get_w_vpp_handle (wrk, mp->handle);
+  if (!s || s->session_state != STATE_DISCONNECT)
+    {
+      VDBG (0, "Unlisten reply with wrong handle %llx", mp->handle);
+      return;
+    }
+
+  if (mp->retval)
+    VDBG (0, "ERROR: session %u [0xllx]: unlisten failed: %U",
+         s->session_index, mp->handle, format_api_error, ntohl (mp->retval));
+
+  if (mp->context != wrk->wrk_index)
+    VDBG (0, "wrong context");
+
+  vcl_session_table_del_vpp_handle (wrk, mp->handle);
+  vcl_session_free (wrk, s);
+}
+
 static vcl_session_t *
 vcl_session_accepted (vcl_worker_t * wrk, session_accepted_msg_t * msg)
 {
@@ -670,6 +694,9 @@ vcl_handle_mq_event (vcl_worker_t * wrk, session_event_t * e)
     case SESSION_CTRL_EVT_BOUND:
       vcl_session_bound_handler (wrk, (session_bound_msg_t *) e->data);
       break;
+    case SESSION_CTRL_EVT_UNLISTEN_REPLY:
+      vcl_session_unlisten_reply_handler (wrk, e->data);
+      break;
     case SESSION_CTRL_EVT_REQ_WORKER_UPDATE:
       vcl_session_req_worker_update_handler (wrk, e->data);
       break;
@@ -684,7 +711,7 @@ vcl_handle_mq_event (vcl_worker_t * wrk, session_event_t * e)
 
 static int
 vppcom_wait_for_session_state_change (u32 session_index,
-                                     session_state_t state,
+                                     vcl_session_state_t state,
                                      f64 wait_for_time)
 {
   vcl_worker_t *wrk = vcl_worker_get_current ();
@@ -730,7 +757,7 @@ vppcom_wait_for_session_state_change (u32 session_index,
 static void
 vcl_handle_pending_wrk_updates (vcl_worker_t * wrk)
 {
-  session_state_t state;
+  vcl_session_state_t state;
   vcl_session_t *s;
   u32 *sip;
 
@@ -821,7 +848,6 @@ vppcom_session_unbind (u32 session_handle)
     return VPPCOM_EBADFD;
 
   vpp_handle = session->vpp_handle;
-  vcl_session_table_del_listener (wrk, vpp_handle);
   session->vpp_handle = ~0;
   session->session_state = STATE_DISCONNECT;
 
@@ -840,7 +866,7 @@ vppcom_session_disconnect (u32 session_handle)
   vcl_worker_t *wrk = vcl_worker_get_current ();
   svm_msg_q_t *vpp_evt_q;
   vcl_session_t *session;
-  session_state_t state;
+  vcl_session_state_t state;
   u64 vpp_handle;
 
   session = vcl_session_get_w_handle (wrk, session_handle);
@@ -1027,7 +1053,7 @@ int
 vcl_session_cleanup (vcl_worker_t * wrk, vcl_session_t * session,
                     vcl_session_handle_t sh, u8 do_disconnect)
 {
-  session_state_t state;
+  vcl_session_state_t state;
   u32 next_sh, vep_sh;
   int rv = VPPCOM_OK;
   u64 vpp_handle;
@@ -1079,6 +1105,7 @@ vcl_session_cleanup (vcl_worker_t * wrk, vcl_session_t * session,
            VDBG (0, "session %u [0x%llx]: listener unbind failed! "
                  "rv %d (%s)", session->session_index, vpp_handle, rv,
                  vppcom_retval_str (rv));
+         return rv;
        }
       else if (state & STATE_OPEN)
        {
@@ -1937,6 +1964,9 @@ vcl_select_handle_mq_event (vcl_worker_t * wrk, session_event_t * e,
          *bits_set += 1;
        }
       break;
+    case SESSION_CTRL_EVT_UNLISTEN_REPLY:
+      vcl_session_unlisten_reply_handler (wrk, e->data);
+      break;
     case SESSION_CTRL_EVT_WORKER_UPDATE_REPLY:
       vcl_session_worker_update_reply_handler (wrk, e->data);
       break;
@@ -2186,11 +2216,9 @@ vep_verify_epoll_chain (vcl_worker_t * wrk, u32 vep_idx)
                "   is_vep         = %u\n"
                "   is_vep_session = %u\n"
                "   next_sid       = 0x%x (%u)\n"
-               "   wait_cont_idx  = 0x%x (%u)\n"
                "}\n", getpid (), vep_idx,
                session->is_vep, session->is_vep_session,
-               vep->next_sh, vep->next_sh,
-               session->wait_cont_idx, session->wait_cont_idx);
+               vep->next_sh, vep->next_sh);
 
   for (sid = vep->next_sh; sid != ~0; sid = vep->next_sh)
     {
@@ -2250,7 +2278,6 @@ vppcom_epoll_create (void)
   vep_session->vep.vep_sh = ~0;
   vep_session->vep.next_sh = ~0;
   vep_session->vep.prev_sh = ~0;
-  vep_session->wait_cont_idx = ~0;
   vep_session->vpp_handle = ~0;
 
   vcl_evt (VCL_EVT_EPOLL_CREATE, vep_session, vep_session->session_index);
@@ -2383,10 +2410,6 @@ vppcom_epoll_ctl (uint32_t vep_handle, int op, uint32_t session_handle,
          goto done;
        }
 
-      vep_session->wait_cont_idx =
-       (vep_session->wait_cont_idx == session_handle) ?
-       session->vep.next_sh : vep_session->wait_cont_idx;
-
       if (session->vep.prev_sh == vep_handle)
        vep_session->vep.next_sh = session->vep.next_sh;
       else
@@ -2558,6 +2581,9 @@ vcl_epoll_wait_handle_mq_event (vcl_worker_t * wrk, session_event_t * e,
       events[*num_ev].events |= EPOLLHUP | EPOLLRDHUP;
       session_evt_data = session->vep.ev.data.u64;
       break;
+    case SESSION_CTRL_EVT_UNLISTEN_REPLY:
+      vcl_session_unlisten_reply_handler (wrk, e->data);
+      break;
     case SESSION_CTRL_EVT_REQ_WORKER_UPDATE:
       vcl_session_req_worker_update_handler (wrk, e->data);
       break;