vcl: add worker unregister api
[vpp.git] / src / vcl / vppcom.h
index f2fca09..6dfdd26 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2017-2019 Cisco and/or its affiliates.
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at:
@@ -31,7 +31,7 @@ extern "C"
 /*
  * VPPCOM Public API Definitions, Enums, and Data Structures
  */
-#define INVALID_SESSION_ID                     (~0)
+#define INVALID_SESSION_ID                     ((u32)~0)
 #define VPPCOM_CONF_DEFAULT                    "/etc/vpp/vcl.conf"
 #define VPPCOM_ENV_CONF                        "VCL_CONFIG"
 #define VPPCOM_ENV_DEBUG                       "VCL_DEBUG"
@@ -152,13 +152,14 @@ typedef enum
   VPPCOM_ATTR_SET_TCP_KEEPINTVL,
   VPPCOM_ATTR_GET_TCP_USER_MSS,
   VPPCOM_ATTR_SET_TCP_USER_MSS,
-  VPPCOM_ATTR_GET_REFCNT,
+  VPPCOM_ATTR_SET_SHUT,
+  VPPCOM_ATTR_GET_SHUT,
 } vppcom_attr_op_t;
 
 typedef struct _vcl_poll
 {
   uint32_t fds_ndx;
-  uint32_t sid;
+  vcl_session_handle_t sh;
   short events;
   short revents;
 } vcl_poll_t;
@@ -171,6 +172,8 @@ typedef struct vppcom_data_segment_
 
 typedef vppcom_data_segment_t vppcom_data_segments_t[2];
 
+typedef unsigned long vcl_si_set;
+
 /*
  * VPPCOM Public API Functions
  */
@@ -257,10 +260,9 @@ extern int vppcom_session_write (uint32_t session_handle, void *buf,
 extern int vppcom_session_write_msg (uint32_t session_handle, void *buf,
                                     size_t n);
 
-extern int vppcom_select (unsigned long n_bits,
-                         unsigned long *read_map,
-                         unsigned long *write_map,
-                         unsigned long *except_map, double wait_for_time);
+extern int vppcom_select (int n_bits, vcl_si_set * read_map,
+                         vcl_si_set * write_map, vcl_si_set * except_map,
+                         double wait_for_time);
 
 extern int vppcom_epoll_create (void);
 extern int vppcom_epoll_ctl (uint32_t vep_handle, int op,
@@ -281,7 +283,6 @@ extern int vppcom_poll (vcl_poll_t * vp, uint32_t n_sids,
 extern int vppcom_mq_epoll_fd (void);
 extern int vppcom_session_index (vcl_session_handle_t session_handle);
 extern int vppcom_session_worker (vcl_session_handle_t session_handle);
-extern int vppcom_session_handle (uint32_t session_index);
 
 extern int vppcom_session_read_segments (uint32_t session_handle,
                                         vppcom_data_segments_t ds);
@@ -302,11 +303,24 @@ extern int vppcom_data_segment_copy (void *buf, vppcom_data_segments_t ds,
  */
 extern int vppcom_worker_register (void);
 
+/**
+ * Unregister current worker
+ */
+extern void vppcom_worker_unregister (void);
+
 /**
  * Retrieve current worker index
  */
 extern int vppcom_worker_index (void);
 
+/**
+ * Returns the current worker's message queues epoll fd
+ *
+ * This only works if vcl is configured to do eventfd based message queue
+ * notifications.
+ */
+extern int vppcom_worker_mqs_epfd (void);
+
 /* *INDENT-OFF* */
 #ifdef __cplusplus
 }