diff options
author | Brian Russell <brian@graphiant.com> | 2021-01-21 14:44:09 +0000 |
---|---|---|
committer | Neale Ranns <neale@graphiant.com> | 2021-01-28 10:27:19 +0000 |
commit | 1b2e16ac7703681a66edd589fd1f6be26b9f1661 (patch) | |
tree | 8a397709d31acb1f75e554034b34f5c5300dcf64 /src/vnet/ip/ip6_punt_drop.c | |
parent | 97de8a2d2faad42ff6c36807ec1e21bf9a0d9c91 (diff) |
ip: do policer thread handoff from punt policers
Pass packets arriving at the ip[46] punt policer nodes to punt policer
handoff nodes if the worker thread they arrive on is not the same one
configured in the policer. Initially, the policer will be tied to the
worker thread that it first received a packet on. This will be expanded
in future to be a configuration API option.
Type: improvement
Signed-off-by: Brian Russell <brian@graphiant.com>
Change-Id: Ic39d936084c354af1859ad3d946da6cd0f6e34d9
Diffstat (limited to 'src/vnet/ip/ip6_punt_drop.c')
-rw-r--r-- | src/vnet/ip/ip6_punt_drop.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/vnet/ip/ip6_punt_drop.c b/src/vnet/ip/ip6_punt_drop.c index 8d91c093a4b..107703a7b6d 100644 --- a/src/vnet/ip/ip6_punt_drop.c +++ b/src/vnet/ip/ip6_punt_drop.c @@ -38,6 +38,29 @@ extern ip_punt_policer_t ip6_punt_policer_cfg; ip_punt_policer_t ip6_punt_policer_cfg; #endif /* CLIB_MARCH_VARIANT */ +static char *ip6_punt_policer_handoff_error_strings[] = { "congestion drop" }; + +VLIB_NODE_FN (ip6_punt_policer_handoff_node) +(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame) +{ + return policer_handoff (vm, node, frame, ip6_punt_policer_cfg.fq_index, + ip6_punt_policer_cfg.policer_index); +} + +VLIB_REGISTER_NODE (ip6_punt_policer_handoff_node) = { + .name = "ip6-punt-policer-handoff", + .vector_size = sizeof (u32), + .format_trace = format_policer_handoff_trace, + .type = VLIB_NODE_TYPE_INTERNAL, + .n_errors = ARRAY_LEN(ip6_punt_policer_handoff_error_strings), + .error_strings = ip6_punt_policer_handoff_error_strings, + + .n_next_nodes = 1, + .next_nodes = { + [0] = "error-drop", + }, +}; + static char *ip6_punt_policer_error_strings[] = { #define _(sym,string) string, foreach_ip_punt_policer_error @@ -67,6 +90,7 @@ VLIB_REGISTER_NODE (ip6_punt_policer_node) = { /* edit / add dispositions here */ .next_nodes = { [IP_PUNT_POLICER_NEXT_DROP] = "ip6-drop", + [IP_PUNT_POLICER_NEXT_HANDOFF] = "ip6-punt-policer-handoff", }, }; |