FD.io VPP
v21.01.1
Vector Packet Processing
|
SR policy creation and application. More...
Go to the source code of this file.
Data Structures | |
struct | sr_policy_rewrite_trace_t |
SR policy rewrite trace. More... | |
Macros | |
#define | foreach_sr_policy_rewrite_next |
#define | foreach_sr_policy_rewrite_error |
Enumerations | |
enum | sr_policy_rewrite_next_t { SR_POLICY_REWRITE_N_NEXT } |
enum | sr_policy_rewrite_error_t { SR_POLICY_REWRITE_N_ERROR } |
Functions | |
void | sr_set_source (ip6_address_t *address) |
ip6_address_t * | sr_get_encaps_source () |
static clib_error_t * | set_sr_src_command_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd) |
void | sr_set_hop_limit (u8 hop_limit) |
u8 | sr_get_hop_limit (void) |
static clib_error_t * | set_sr_hop_limit_command_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd) |
static u8 * | compute_rewrite_encaps (ip6_address_t *sl) |
SR rewrite string computation for IPv6 encapsulation (inline) More... | |
static u8 * | compute_rewrite_insert (ip6_address_t *sl) |
SR rewrite string computation for SRH insertion (inline) More... | |
static u8 * | compute_rewrite_bsid (ip6_address_t *sl) |
SR rewrite string computation for SRH insertion with BSID (inline) More... | |
static ip6_sr_sl_t * | create_sl (ip6_sr_policy_t *sr_policy, ip6_address_t *sl, u32 weight, u8 is_encap) |
Creates a Segment List and adds it to an SR policy. More... | |
static void | update_lb (ip6_sr_policy_t *sr_policy) |
Updates the Load Balancer after an SR Policy change. More... | |
static void | update_replicate (ip6_sr_policy_t *sr_policy) |
Updates the Replicate DPO after an SR Policy change. More... | |
int | sr_policy_add (ip6_address_t *bsid, ip6_address_t *segments, u32 weight, u8 behavior, u32 fib_table, u8 is_encap, u16 plugin, void *ls_plugin_mem) |
Create a new SR policy. More... | |
int | sr_policy_del (ip6_address_t *bsid, u32 index) |
Delete a SR policy. More... | |
int | sr_policy_mod (ip6_address_t *bsid, u32 index, u32 fib_table, u8 operation, ip6_address_t *segments, u32 sl_index, u32 weight) |
Modify an existing SR policy. More... | |
static clib_error_t * | sr_policy_command_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd) |
CLI for 'sr policies' command family. More... | |
static clib_error_t * | show_sr_policies_command_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd) |
CLI to display onscreen all the SR policies. More... | |
static clib_error_t * | show_sr_encaps_source_command_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd) |
CLI to display onscreen the SR encaps source addr. More... | |
static clib_error_t * | show_sr_encaps_hop_limit_command_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd) |
CLI to display onscreen the hop-limit value used for SRv6 encapsulation. More... | |
static u8 * | format_sr_policy_rewrite_trace (u8 *s, va_list *args) |
Trace for the SR Policy Rewrite graph node. More... | |
static_always_inline void | encaps_processing_v6 (vlib_node_runtime_t *node, vlib_buffer_t *b0, ip6_header_t *ip0, ip6_header_t *ip0_encap) |
IPv6 encapsulation processing as per RFC2473. More... | |
static uword | sr_policy_rewrite_encaps (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame) |
Graph node for applying a SR policy into an IPv6 packet. More... | |
static_always_inline void | encaps_processing_v4 (vlib_node_runtime_t *node, vlib_buffer_t *b0, ip6_header_t *ip0, ip4_header_t *ip0_encap) |
IPv4 encapsulation processing as per RFC2473. More... | |
static uword | sr_policy_rewrite_encaps_v4 (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame) |
Graph node for applying a SR policy into an IPv4 packet. More... | |
static u32 | ip_flow_hash (void *data) |
static u64 | mac_to_u64 (u8 *m) |
static u32 | l2_flow_hash (vlib_buffer_t *b0) |
static uword | sr_policy_rewrite_encaps_l2 (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame) |
Graph node for applying a SR policy into a L2 frame. More... | |
static uword | sr_policy_rewrite_insert (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame) |
Graph node for applying a SR policy into a packet. More... | |
static uword | sr_policy_rewrite_b_insert (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame) |
Graph node for applying a SR policy into a packet. More... | |
static_always_inline void | end_bsid_encaps_srh_processing (vlib_node_runtime_t *node, vlib_buffer_t *b0, ip6_header_t *ip0, ip6_sr_header_t *sr0, u32 *next0) |
Function BSID encapsulation. More... | |
static uword | sr_policy_rewrite_b_encaps (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame) |
Graph node for applying a SR policy BSID - Encapsulation. More... | |
int | sr_policy_register_function (vlib_main_t *vm, u8 *fn_name, u8 *keyword_str, u8 *def_str, u8 *params_str, u8 prefix_length, dpo_type_t *dpo, format_function_t *ls_format, unformat_function_t *ls_unformat, sr_p_plugin_callback_t *creation_fn, sr_p_plugin_callback_t *removal_fn) |
SR Policy plugin registry. More... | |
static clib_error_t * | show_sr_policy_behaviors_command_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd) |
CLI function to 'show' all available SR LocalSID behaviors. More... | |
static u8 * | format_sr_segment_list_dpo (u8 *s, va_list *args) |
clib_error_t * | sr_policy_rewrite_init (vlib_main_t *vm) |
SR Policy Rewrite initialization. More... | |
Variables | |
static char * | sr_policy_rewrite_error_strings [] |
static dpo_type_t | sr_pr_encaps_dpo_type |
Dynamically added SR SL DPO type. More... | |
static dpo_type_t | sr_pr_insert_dpo_type |
static dpo_type_t | sr_pr_bsid_encaps_dpo_type |
static dpo_type_t | sr_pr_bsid_insert_dpo_type |
static ip6_address_t | sr_pr_encaps_src |
IPv6 SA for encapsulated packets. More... | |
static u8 | sr_pr_encaps_hop_limit = IPv6_DEFAULT_HOP_LIMIT |
static vlib_cli_command_t | set_sr_src_command |
(constructor) VLIB_CLI_COMMAND (set_sr_src_command) More... | |
static vlib_cli_command_t | set_sr_hop_limit_command |
(constructor) VLIB_CLI_COMMAND (set_sr_hop_limit_command) More... | |
static vlib_cli_command_t | sr_policy_command |
(constructor) VLIB_CLI_COMMAND (sr_policy_command) More... | |
static vlib_cli_command_t | show_sr_policies_command |
(constructor) VLIB_CLI_COMMAND (show_sr_policies_command) More... | |
static vlib_cli_command_t | show_sr_encaps_source_command |
(constructor) VLIB_CLI_COMMAND (show_sr_encaps_source_command) More... | |
static vlib_cli_command_t | show_sr_encaps_hop_limit_command |
(constructor) VLIB_CLI_COMMAND (show_sr_encaps_hop_limit_command) More... | |
vlib_node_registration_t | sr_policy_rewrite_encaps_node |
(constructor) VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_node) More... | |
vlib_node_registration_t | sr_policy_rewrite_encaps_v4_node |
(constructor) VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_v4_node) More... | |
vlib_node_registration_t | sr_policy_rewrite_encaps_l2_node |
(constructor) VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_l2_node) More... | |
vlib_node_registration_t | sr_policy_rewrite_insert_node |
(constructor) VLIB_REGISTER_NODE (sr_policy_rewrite_insert_node) More... | |
vlib_node_registration_t | sr_policy_rewrite_b_insert_node |
(constructor) VLIB_REGISTER_NODE (sr_policy_rewrite_b_insert_node) More... | |
vlib_node_registration_t | sr_policy_rewrite_b_encaps_node |
(constructor) VLIB_REGISTER_NODE (sr_policy_rewrite_b_encaps_node) More... | |
static vlib_cli_command_t | show_sr_policy_behaviors_command |
(constructor) VLIB_CLI_COMMAND (show_sr_policy_behaviors_command) More... | |
static const dpo_vft_t | sr_policy_rewrite_vft |
static const char *const | sr_pr_encaps_ip6_nodes [] |
static const char *const | sr_pr_encaps_ip4_nodes [] |
static const char *const *const | sr_pr_encaps_nodes [DPO_PROTO_NUM] |
static const char *const | sr_pr_insert_ip6_nodes [] |
static const char *const *const | sr_pr_insert_nodes [DPO_PROTO_NUM] |
static const char *const | sr_pr_bsid_insert_ip6_nodes [] |
static const char *const *const | sr_pr_bsid_insert_nodes [DPO_PROTO_NUM] |
static const char *const | sr_pr_bsid_encaps_ip6_nodes [] |
static const char *const *const | sr_pr_bsid_encaps_nodes [DPO_PROTO_NUM] |
SR policy creation and application.
Create an SR policy. An SR policy can be either of 'default' type or 'spray' type An SR policy has attached a list of SID lists. In case the SR policy is a default one it will load balance among them. An SR policy has associated a BindingSID. In case any packet arrives with IPv6 DA == BindingSID then the SR policy associated to such bindingSID will be applied to such packet.
SR policies can be applied either by using IPv6 encapsulation or SRH insertion. Both methods can be found on this file.
Traffic input usually is IPv6 packets. However it is possible to have IPv4 packets or L2 frames. (that are encapsulated into IPv6 with SRH)
This file provides the appropiates VPP graph nodes to do any of these methods.
Definition in file sr_policy_rewrite.c.
#define foreach_sr_policy_rewrite_error |
Definition at line 76 of file sr_policy_rewrite.c.
#define foreach_sr_policy_rewrite_next |
Definition at line 63 of file sr_policy_rewrite.c.
Enumerator | |
---|---|
SR_POLICY_REWRITE_N_ERROR |
Definition at line 84 of file sr_policy_rewrite.c.
Enumerator | |
---|---|
SR_POLICY_REWRITE_N_NEXT |
Definition at line 67 of file sr_policy_rewrite.c.
|
inlinestatic |
SR rewrite string computation for SRH insertion with BSID (inline)
sl | is a vector of IPv6 addresses composing the Segment List |
Definition at line 297 of file sr_policy_rewrite.c.
|
inlinestatic |
SR rewrite string computation for IPv6 encapsulation (inline)
sl | is a vector of IPv6 addresses composing the Segment List |
Definition at line 198 of file sr_policy_rewrite.c.
|
inlinestatic |
SR rewrite string computation for SRH insertion (inline)
sl | is a vector of IPv6 addresses composing the Segment List |
Definition at line 258 of file sr_policy_rewrite.c.
|
inlinestatic |
Creates a Segment List and adds it to an SR policy.
Creates a Segment List and adds it to the SR policy. Notice that the SL are not necessarily unique. Hence there might be two Segment List within the same SR Policy with exactly the same segments and same weight.
sr_policy | is the SR policy where the SL will be added |
sl | is a vector of IPv6 addresses composing the Segment List |
weight | is the weight of the SegmentList (for load-balancing purposes) |
is_encap | represents the mode (SRH insertion vs Encapsulation) |
Definition at line 344 of file sr_policy_rewrite.c.
static_always_inline void encaps_processing_v4 | ( | vlib_node_runtime_t * | node, |
vlib_buffer_t * | b0, | ||
ip6_header_t * | ip0, | ||
ip4_header_t * | ip0_encap | ||
) |
IPv4 encapsulation processing as per RFC2473.
Definition at line 1505 of file sr_policy_rewrite.c.
static_always_inline void encaps_processing_v6 | ( | vlib_node_runtime_t * | node, |
vlib_buffer_t * | b0, | ||
ip6_header_t * | ip0, | ||
ip6_header_t * | ip0_encap | ||
) |
IPv6 encapsulation processing as per RFC2473.
Definition at line 1236 of file sr_policy_rewrite.c.
static_always_inline void end_bsid_encaps_srh_processing | ( | vlib_node_runtime_t * | node, |
vlib_buffer_t * | b0, | ||
ip6_header_t * | ip0, | ||
ip6_sr_header_t * | sr0, | ||
u32 * | next0 | ||
) |
Function BSID encapsulation.
Definition at line 3046 of file sr_policy_rewrite.c.
Trace for the SR Policy Rewrite graph node.
Definition at line 1218 of file sr_policy_rewrite.c.
Definition at line 3439 of file sr_policy_rewrite.c.
|
inlinestatic |
Definition at line 1786 of file sr_policy_rewrite.c.
|
inlinestatic |
Definition at line 1803 of file sr_policy_rewrite.c.
|
static |
|
static |
|
static |
CLI to display onscreen the hop-limit value used for SRv6 encapsulation.
Definition at line 1196 of file sr_policy_rewrite.c.
|
static |
CLI to display onscreen the SR encaps source addr.
Definition at line 1175 of file sr_policy_rewrite.c.
|
static |
CLI to display onscreen all the SR policies.
Definition at line 1109 of file sr_policy_rewrite.c.
|
static |
CLI function to 'show' all available SR LocalSID behaviors.
Definition at line 3402 of file sr_policy_rewrite.c.
ip6_address_t* sr_get_encaps_source | ( | ) |
u8 sr_get_hop_limit | ( | void | ) |
int sr_policy_add | ( | ip6_address_t * | bsid, |
ip6_address_t * | segments, | ||
u32 | weight, | ||
u8 | behavior, | ||
u32 | fib_table, | ||
u8 | is_encap, | ||
u16 | plugin, | ||
void * | ls_plugin_mem | ||
) |
Create a new SR policy.
bsid | is the bindingSID of the SR Policy |
segments | is a vector of IPv6 address composing the segment list |
weight | is the weight of the sid list. optional. |
behavior | is the behavior of the SR policy. (default//spray) |
fib_table | is the VRF where to install the FIB entry for the BSID |
is_encap | (bool) whether SR policy should behave as Encap/SRH Insertion |
Definition at line 632 of file sr_policy_rewrite.c.
|
static |
CLI for 'sr policies' command family.
Definition at line 923 of file sr_policy_rewrite.c.
int sr_policy_del | ( | ip6_address_t * | bsid, |
u32 | index | ||
) |
Delete a SR policy.
bsid | is the bindingSID of the SR Policy |
index | is the index of the SR policy |
Definition at line 720 of file sr_policy_rewrite.c.
int sr_policy_mod | ( | ip6_address_t * | bsid, |
u32 | index, | ||
u32 | fib_table, | ||
u8 | operation, | ||
ip6_address_t * | segments, | ||
u32 | sl_index, | ||
u32 | weight | ||
) |
Modify an existing SR policy.
The possible modifications are adding a new Segment List, modifying an existing Segment List (modify the weight only) and delete a given Segment List from the SR Policy.
bsid | is the bindingSID of the SR Policy |
index | is the index of the SR policy |
fib_table | is the VRF where to install the FIB entry for the BSID |
operation | is the operation to perform (among the top ones) |
segments | is a vector of IPv6 address composing the segment list |
sl_index | is the index of the Segment List to modify/delete |
weight | is the weight of the sid list. optional. |
is_encap | Mode. Encapsulation or SRH insertion. |
Definition at line 828 of file sr_policy_rewrite.c.
int sr_policy_register_function | ( | vlib_main_t * | vm, |
u8 * | fn_name, | ||
u8 * | keyword_str, | ||
u8 * | def_str, | ||
u8 * | params_str, | ||
u8 | prefix_length, | ||
dpo_type_t * | dpo, | ||
format_function_t * | ls_format, | ||
unformat_function_t * | ls_unformat, | ||
sr_p_plugin_callback_t * | creation_fn, | ||
sr_p_plugin_callback_t * | removal_fn | ||
) |
SR Policy plugin registry.
Definition at line 3352 of file sr_policy_rewrite.c.
|
static |
Graph node for applying a SR policy BSID - Encapsulation.
Definition at line 3078 of file sr_policy_rewrite.c.
|
static |
Graph node for applying a SR policy into a packet.
BSID - SRH insertion.
Definition at line 2635 of file sr_policy_rewrite.c.
|
static |
Graph node for applying a SR policy into an IPv6 packet.
Encapsulation
Definition at line 1255 of file sr_policy_rewrite.c.
|
static |
Graph node for applying a SR policy into a L2 frame.
Definition at line 1833 of file sr_policy_rewrite.c.
|
static |
Graph node for applying a SR policy into an IPv4 packet.
Encapsulation
Definition at line 1539 of file sr_policy_rewrite.c.
clib_error_t* sr_policy_rewrite_init | ( | vlib_main_t * | vm | ) |
SR Policy Rewrite initialization.
Definition at line 3516 of file sr_policy_rewrite.c.
|
static |
Graph node for applying a SR policy into a packet.
SRH insertion.
Definition at line 2213 of file sr_policy_rewrite.c.
void sr_set_hop_limit | ( | u8 | hop_limit | ) |
void sr_set_source | ( | ip6_address_t * | address | ) |
|
inlinestatic |
Updates the Load Balancer after an SR Policy change.
sr_policy | is the modified SR Policy |
Definition at line 438 of file sr_policy_rewrite.c.
|
inlinestatic |
Updates the Replicate DPO after an SR Policy change.
sr_policy | is the modified SR Policy (type spray) |
Definition at line 535 of file sr_policy_rewrite.c.
|
static |
(constructor) VLIB_CLI_COMMAND (set_sr_hop_limit_command)
Definition at line 182 of file sr_policy_rewrite.c.
|
static |
(constructor) VLIB_CLI_COMMAND (set_sr_src_command)
Definition at line 144 of file sr_policy_rewrite.c.
|
static |
(constructor) VLIB_CLI_COMMAND (show_sr_encaps_hop_limit_command)
Definition at line 1206 of file sr_policy_rewrite.c.
|
static |
(constructor) VLIB_CLI_COMMAND (show_sr_encaps_source_command)
Definition at line 1185 of file sr_policy_rewrite.c.
|
static |
(constructor) VLIB_CLI_COMMAND (show_sr_policies_command)
Definition at line 1164 of file sr_policy_rewrite.c.
|
static |
(constructor) VLIB_CLI_COMMAND (show_sr_policy_behaviors_command)
Definition at line 3430 of file sr_policy_rewrite.c.
|
static |
(constructor) VLIB_CLI_COMMAND (sr_policy_command)
Definition at line 1084 of file sr_policy_rewrite.c.
vlib_node_registration_t sr_policy_rewrite_b_encaps_node |
(constructor) VLIB_REGISTER_NODE (sr_policy_rewrite_b_encaps_node)
Definition at line 3330 of file sr_policy_rewrite.c.
vlib_node_registration_t sr_policy_rewrite_b_insert_node |
(constructor) VLIB_REGISTER_NODE (sr_policy_rewrite_b_insert_node)
Definition at line 3025 of file sr_policy_rewrite.c.
vlib_node_registration_t sr_policy_rewrite_encaps_l2_node |
(constructor) VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_l2_node)
Definition at line 2192 of file sr_policy_rewrite.c.
vlib_node_registration_t sr_policy_rewrite_encaps_node |
(constructor) VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_node)
Definition at line 1484 of file sr_policy_rewrite.c.
vlib_node_registration_t sr_policy_rewrite_encaps_v4_node |
(constructor) VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_v4_node)
Definition at line 1768 of file sr_policy_rewrite.c.
|
static |
Definition at line 92 of file sr_policy_rewrite.c.
vlib_node_registration_t sr_policy_rewrite_insert_node |
(constructor) VLIB_REGISTER_NODE (sr_policy_rewrite_insert_node)
Definition at line 2614 of file sr_policy_rewrite.c.
|
static |
Definition at line 3463 of file sr_policy_rewrite.c.
|
static |
Definition at line 103 of file sr_policy_rewrite.c.
|
static |
Definition at line 3502 of file sr_policy_rewrite.c.
|
static |
Definition at line 3507 of file sr_policy_rewrite.c.
|
static |
Definition at line 104 of file sr_policy_rewrite.c.
|
static |
Definition at line 3493 of file sr_policy_rewrite.c.
|
static |
Definition at line 3498 of file sr_policy_rewrite.c.
|
static |
Dynamically added SR SL DPO type.
Definition at line 101 of file sr_policy_rewrite.c.
|
static |
Definition at line 110 of file sr_policy_rewrite.c.
|
static |
Definition at line 3474 of file sr_policy_rewrite.c.
|
static |
Definition at line 3469 of file sr_policy_rewrite.c.
|
static |
Definition at line 3479 of file sr_policy_rewrite.c.
|
static |
IPv6 SA for encapsulated packets.
Definition at line 109 of file sr_policy_rewrite.c.
|
static |
Definition at line 102 of file sr_policy_rewrite.c.
|
static |
Definition at line 3484 of file sr_policy_rewrite.c.
|
static |
Definition at line 3489 of file sr_policy_rewrite.c.