Allow individual stats API and introduce stats.api
[vpp.git] / src / vlibapi / api_helper_macros.h
index 4e28134..b8a9978 100644 (file)
 #define f64_endian(a)
 #define f64_print(a,b)
 
+#ifndef REPLY_MSG_ID_BASE
+#define REPLY_MSG_ID_BASE 0
+#endif
+
 #define REPLY_MACRO(t)                                          \
 do {                                                            \
     unix_shared_memory_queue_t * q;                             \
@@ -32,7 +36,7 @@ do {                                                            \
         return;                                                 \
                                                                 \
     rmp = vl_msg_api_alloc (sizeof (*rmp));                     \
-    rmp->_vl_msg_id = ntohs((t));                               \
+    rmp->_vl_msg_id = htons((t)+(REPLY_MSG_ID_BASE));           \
     rmp->context = mp->context;                                 \
     rmp->retval = ntohl(rv);                                    \
                                                                 \
@@ -48,7 +52,7 @@ do {                                                            \
         return;                                                 \
                                                                 \
     rmp = vl_msg_api_alloc (sizeof (*rmp));                     \
-    rmp->_vl_msg_id = ntohs((t));                               \
+    rmp->_vl_msg_id = htons((t)+(REPLY_MSG_ID_BASE));           \
     rmp->context = mp->context;                                 \
     rmp->retval = ntohl(rv);                                    \
     do {body;} while (0);                                       \
@@ -64,7 +68,7 @@ do {                                                            \
         return;                                                 \
                                                                 \
     rmp = vl_msg_api_alloc (sizeof (*rmp) + n);                 \
-    rmp->_vl_msg_id = ntohs((t));                               \
+    rmp->_vl_msg_id = htons((t)+(REPLY_MSG_ID_BASE));           \
     rmp->context = mp->context;                                 \
     rmp->retval = ntohl(rv);                                    \
     do {body;} while (0);                                       \
@@ -93,7 +97,7 @@ do {                                                            \
         rv = VNET_API_ERROR_TABLE_TOO_BIG;                      \
         is_error = 1;                                           \
       }                                                         \
-    rmp->_vl_msg_id = ntohs((t));                               \
+    rmp->_vl_msg_id = htons((t)+(REPLY_MSG_ID_BASE));           \
     rmp->context = mp->context;                                 \
     rmp->retval = ntohl(rv);                                    \
     if (!is_error)                                              \
@@ -151,6 +155,20 @@ bad_tx_sw_if_index:                                \
     ;                                           \
 } while (0);
 
+#define VALIDATE_BD_ID(mp)                     \
+ do { u32 __rx_bd_id = ntohl(mp->bd_id);       \
+    if (__rx_bd_id > L2_BD_ID_MAX) {           \
+        rv = VNET_API_ERROR_BD_ID_EXCEED_MAX;  \
+        goto bad_bd_id;                                \
+    }                                          \
+} while(0);
+
+#define BAD_BD_ID_LABEL                                \
+do {                                            \
+bad_bd_id:                                     \
+    ;                                           \
+} while (0);
+
 #define pub_sub_handler(lca,UCA)                                        \
 static void vl_api_want_##lca##_t_handler (                             \
     vl_api_want_##lca##_t *mp)                                          \
@@ -199,7 +217,6 @@ _(from_netconf_client)                          \
 _(oam_events)                                   \
 _(bfd_events)
 
-/* WARNING: replicated in vpp/stats.h */
 typedef struct
 {
   u32 client_index;            /* in memclnt registration pool */