diff options
author | Neale Ranns <nranns@cisco.com> | 2019-05-15 02:13:37 -0700 |
---|---|---|
committer | Ole Trøan <otroan@employees.org> | 2019-05-28 13:30:44 +0000 |
commit | 50f0ac0f097e5495da1f2b1816106e3d420ff34b (patch) | |
tree | d10ae0385fc10b7da97b2a24f8dea3882f6d702d /src/vlib | |
parent | 9080096f7c548415fc4d5354c7e582a3eda1a5ed (diff) |
Punt: socket register for exception dispatched/punted packets based on reason
- add to the Punt API to allow different descriptions of the desired packets: UDP or exceptions
- move the punt nodes into punt_node.c
- improve tests (test that the correct packets are punted to the registered socket)
Change-Id: I1a133dec88106874993cba1f5a439cd26b2fef72
Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'src/vlib')
-rw-r--r-- | src/vlib/punt.c | 20 | ||||
-rw-r--r-- | src/vlib/punt.h | 12 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/vlib/punt.c b/src/vlib/punt.c index 5f83707c11d..7c2daf25ee4 100644 --- a/src/vlib/punt.c +++ b/src/vlib/punt.c @@ -367,6 +367,15 @@ vlib_punt_unregister (vlib_punt_hdl_t client, } int +vlib_punt_reason_validate (vlib_punt_reason_t reason) +{ + if (reason < punt_reason_last) + return (0); + + return (-1); +} + +int vlib_punt_reason_alloc (vlib_punt_hdl_t client, const char *reason_name, vlib_punt_reason_t * reason) { @@ -392,6 +401,17 @@ vlib_punt_reason_alloc (vlib_punt_hdl_t client, return (0); } +void +punt_reason_walk (punt_reason_walk_cb_t cb, void *ctx) +{ + punt_reason_data_t *pd; + + vec_foreach (pd, punt_reason_data) + { + cb (pd->pd_reason, pd->pd_name, ctx); + } +} + /* Parse node name -> node index. */ uword unformat_punt_client (unformat_input_t * input, va_list * args) diff --git a/src/vlib/punt.h b/src/vlib/punt.h index adb25f91a5e..7a3e5da2da6 100644 --- a/src/vlib/punt.h +++ b/src/vlib/punt.h @@ -28,6 +28,13 @@ typedef enum vlib_punt_reason_t_ 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 @@ -57,6 +64,11 @@ extern int vlib_punt_reason_alloc (vlib_punt_hdl_t client, 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 * * @paran client - The registered client registering for the packets |