summaryrefslogtreecommitdiffstats
path: root/src/vlib
diff options
context:
space:
mode:
authorNeale Ranns <nranns@cisco.com>2019-05-15 02:13:37 -0700
committerOle Trøan <otroan@employees.org>2019-05-28 13:30:44 +0000
commit50f0ac0f097e5495da1f2b1816106e3d420ff34b (patch)
treed10ae0385fc10b7da97b2a24f8dea3882f6d702d /src/vlib
parent9080096f7c548415fc4d5354c7e582a3eda1a5ed (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.c20
-rw-r--r--src/vlib/punt.h12
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