feature: Add packet trace API
[vpp.git] / src / vlibapi / api_helper_macros.h
index 8fc0bd5..983b688 100644 (file)
@@ -229,6 +229,35 @@ do {                                                               \
   }));                                                         \
 } while(0);
 
+#define REPLY_AND_DETAILS_VEC_MACRO(t, v, mp, rmp, rv, body)   \
+do {                                                           \
+  vl_api_registration_t *rp;                                   \
+  rp = vl_api_client_index_to_registration (mp->client_index); \
+  if (rp == 0)                                                 \
+    return;                                                    \
+  u32 cursor = clib_net_to_host_u32 (mp->cursor);              \
+  vlib_main_t *vm = vlib_get_main ();                          \
+  f64 start = vlib_time_now (vm);                              \
+  if (!v || vec_len (v) == 0) {                                        \
+    cursor = ~0;                                               \
+    rv = VNET_API_ERROR_INVALID_VALUE;                         \
+  } else if (cursor == ~0)                                     \
+      cursor = 0;                                              \
+  while (cursor != ~0 && cursor < vec_len (v)) {               \
+    do {body;} while (0);                                      \
+    ++cursor;                                                  \
+    if (vl_api_process_may_suspend (vm, rp, start)) {          \
+      if (cursor < vec_len (v))                                        \
+       rv = VNET_API_ERROR_EAGAIN;                             \
+      break;                                                   \
+    }                                                          \
+  }                                                            \
+  REPLY_MACRO2 (t, ({                                          \
+    rmp->cursor = clib_host_to_net_u32 (cursor);               \
+  }));                                                         \
+} while(0);
+
+
 /* "trust, but verify" */
 
 static inline uword