PUNT_N_REASONS,
} vlib_punt_reason_t;
+/**
+ * Walk each punt reason
+ */
+typedef int (*punt_reason_walk_cb_t) (vlib_punt_reason_t id,
+ const u8 * name, void *ctx);
+
+extern void punt_reason_walk (punt_reason_walk_cb_t cb, void *cxt);
/**
* @brief Format a punt reason
*/
vlib_punt_hdl_t vlib_punt_client_register (const char *who);
+typedef void (*punt_interested_listener_t) (vlib_enable_or_disable_t i,
+ void *data);
+
/**
* Allocate a new punt reason
+ * @param fn - A callback to invoke when an entity becomes [un]interested
+ * in the punt code.
+ * @param data - To be passed in the callback function.
*/
extern int vlib_punt_reason_alloc (vlib_punt_hdl_t client,
const char *reason_name,
- vlib_punt_reason_t * reason);
+ punt_interested_listener_t fn,
+ void *data, vlib_punt_reason_t * reason);
+
+/**
+ * Validate that a punt reason is assigned
+ */
+extern int vlib_punt_reason_validate (vlib_punt_reason_t reason);
/**
* @brief Register a node to receive particular punted buffers