VCL API for external callback for listener/connect event
[vpp.git] / src / vcl / vcl_event.c
index 65d2870..f6e20de 100644 (file)
@@ -79,9 +79,24 @@ vce_get_event_from_index(vce_event_thread_t *evt, u32 ev_idx)
   return ev;
 }
 
+vce_event_handler_reg_t *
+vce_get_event_handler (vce_event_thread_t *evt, vce_event_key_t *evk)
+{
+  vce_event_handler_reg_t *handler = 0;
+  uword *p;
+
+  clib_spinlock_lock (&evt->handlers_lockp);
+  p = hash_get (evt->handlers_index_by_event_key, evk->as_u64);
+  if (p)
+    handler = pool_elt_at_index (evt->vce_event_handlers, p[0]);
+  clib_spinlock_unlock (&evt->handlers_lockp);
+
+  return handler;
+}
+
 vce_event_handler_reg_t *
 vce_register_handler (vce_event_thread_t *evt, vce_event_key_t *evk,
-                     vce_event_callback_t cb)
+                     vce_event_callback_t cb, void *cb_args)
 {
   vce_event_handler_reg_t *handler;
   vce_event_handler_reg_t *old_handler = 0;
@@ -120,6 +135,7 @@ vce_register_handler (vce_event_thread_t *evt, vce_event_key_t *evk,
   handler->replaced_handler_idx = (p) ? p[0] : ~0;
   handler->ev_idx = ~0; //This will be set by the event thread if event happens
   handler->evk = evk->as_u64;
+  handler->handler_fn_args = cb_args;
 
   hash_set (evt->handlers_index_by_event_key, evk->as_u64, handler_index);
 
@@ -260,4 +276,4 @@ vce_start_event_thread (vce_event_thread_t *evt, u8 max_events)
 
   return pthread_create (&(evt->thread), NULL /* attr */ ,
                         vce_event_thread_fn, evt);
-}
\ No newline at end of file
+}