39 #define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__) 46 #define foreach_vpe_api_msg \ 47 _(SR_LOCALSID_ADD_DEL, sr_localsid_add_del) \ 48 _(SR_POLICY_ADD, sr_policy_add) \ 49 _(SR_POLICY_MOD, sr_policy_mod) \ 50 _(SR_POLICY_DEL, sr_policy_del) \ 51 _(SR_STEERING_ADD_DEL, sr_steering_add_del) \ 52 _(SR_SET_ENCAP_SOURCE, sr_set_encap_source) \ 53 _(SR_LOCALSIDS_DUMP, sr_localsids_dump) \ 54 _(SR_POLICIES_DUMP, sr_policies_dump) \ 55 _(SR_STEERING_POL_DUMP, sr_steering_pol_dump) 60 vl_api_sr_localsid_add_del_reply_t *rmp;
74 memset (&prefix, 0,
sizeof (ip46_address_t));
77 memcpy (&prefix.ip4, mp->
nh_addr4, sizeof (prefix.ip4));
79 memcpy (&prefix.ip6, mp->
nh_addr6, sizeof (prefix.ip6));
96 vl_api_sr_policy_add_reply_t *rmp;
125 vl_api_sr_policy_mod_reply_t *rmp;
159 vl_api_sr_policy_del_reply_t *rmp;
174 vl_api_sr_set_encap_source_reply_t *rmp;
184 vl_api_sr_steering_add_del_reply_t *rmp;
213 memset (rmp, 0,
sizeof (*rmp));
214 rmp->_vl_msg_id = ntohs (VL_API_SR_LOCALSIDS_DETAILS);
246 send_sr_localsid_details(t, reg, mp->context);
268 rmp->_vl_msg_id = ntohs (VL_API_SR_POLICIES_DETAILS);
304 send_sr_policies_details(t, reg, mp->context);
316 memset (rmp, 0,
sizeof (*rmp));
317 rmp->_vl_msg_id = ntohs (VL_API_SR_STEERING_POL_DETAILS);
355 send_sr_steering_pol_details(t, reg, mp->context);
367 #define vl_msg_name_crc_list 369 #undef vl_msg_name_crc_list 374 #define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id); 375 foreach_vl_msg_name_crc_sr;
385 vl_msg_api_set_handlers(VL_API_##N, #n, \ 386 vl_api_##n##_t_handler, \ 388 vl_api_##n##_t_endian, \ 389 vl_api_##n##_t_print, \ 390 sizeof(vl_api_##n##_t), 1);
u8 type
Type (default is 0)
u32 vlan_index
VLAN tag (not an index)
void sr_set_source(ip6_address_t *address)
int sr_cli_localsid(char is_del, ip6_address_t *localsid_addr, char end_psp, u8 behavior, u32 sw_if_index, u32 vlan_index, u32 fib_table, ip46_address_t *nh_addr, void *ls_plugin_mem)
SR localsid add/del.
int sr_steering_policy(int is_del, ip6_address_t *bsid, u32 sr_policy_index, u32 table_id, ip46_address_t *prefix, u32 mask_width, u32 sw_if_index, u8 traffic_type)
Steer traffic L2 and L3 traffic through a given SR policy.
static void send_sr_policies_details(ip6_sr_policy_t *t, vl_api_registration_t *reg, u32 context)
static void vl_api_send_msg(vl_api_registration_t *rp, u8 *elem)
ip6_address_t * segments
SIDs (key)
static void vl_api_sr_policy_add_t_handler(vl_api_sr_policy_add_t *mp)
#define vec_add2(V, P, N)
Add N elements to end of vector V, return pointer to new elements in P.
for(i=1;i<=collision_buckets;i++)
u16 behavior
Behavior associated to this localsid.
struct sr_steering_key_t::@324::@326 l3
void * vl_msg_api_alloc(int nbytes)
ip6_sr_steering_policy_t * steer_policies
vl_api_srv6_sid_list_t sids
static void vl_api_sr_steering_add_del_t_handler(vl_api_sr_steering_add_del_t *mp)
memset(h->entries, 0, sizeof(h->entries[0])*entries)
#define pool_foreach(VAR, POOL, BODY)
Iterate through pool.
vl_api_srv6_sid_list_t sids
static void vl_api_sr_policy_mod_t_handler(vl_api_sr_policy_mod_t *mp)
SR Segment List (SID list)
static void send_sr_localsid_details(ip6_sr_localsid_t *t, vl_api_registration_t *reg, u32 context)
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
static void vl_api_sr_localsids_dump_t_handler(vl_api_sr_localsids_dump_t *mp)
static void setup_message_id_table(api_main_t *am)
u32 xconnect_iface_or_vrf_table
static void send_sr_steering_pol_details(ip6_sr_steering_policy_t *t, vl_api_registration_t *reg, u32 context)
char end_psp
Combined with End.PSP?
sr_steering_key_t classify
Traffic classification.
static void vl_api_sr_steering_pol_dump_t_handler(vl_api_sr_policies_dump_t *mp)
u8 is_encap
Mode (0 is SRH insert, 1 Encaps)
u32 sr_policy
SR Policy index.
u32 weight
SID list weight (wECMP / UCMP)
API main structure, used by both vpp and binary API clients.
#define ip46_address_is_ip4(ip46)
An API client registration, only in vpp/vlib.
ip6_sr_localsid_t * localsids
#define BAD_SW_IF_INDEX_LABEL
vl_api_srv6_sid_t localsid
VLIB_API_INIT_FUNCTION(sr_api_hookup)
vl_api_srv6_sid_list_t sid_lists[num_sid_lists]
#define vec_free(V)
Free vector's memory (no header).
int sr_policy_del(ip6_address_t *bsid, u32 index)
Delete a SR policy.
int sr_policy_add(ip6_address_t *bsid, ip6_address_t *segments, u32 weight, u8 behavior, u32 fib_table, u8 is_encap)
Create a new SR policy.
u32 * segments_lists
SID lists indexes (vector)
#define clib_memcpy(a, b, c)
IPv6 SR Set SRv6 encapsulation source.
static void vl_api_sr_policies_dump_t_handler(vl_api_sr_policies_dump_t *mp)
IPv6 SR steering add/del.
struct sr_steering_key_t::@324::@327 l2
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
vl_api_srv6_sid_t bsid_addr
#define foreach_vpe_api_msg
u32 fib_table
FIB table where localsid is registered.
vl_api_srv6_sid_t sids[16]
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
ip6_sr_policy_t * sr_policies
static void vl_api_sr_policy_del_t_handler(vl_api_sr_policy_del_t *mp)
static clib_error_t * sr_api_hookup(vlib_main_t *vm)
Segment Routing data structures definitions.
Segment Routing main datastructure.
IPv6 SR policy modification.
#define vec_foreach(var, vec)
Vector iterator.
u8 traffic_type
Traffic type (IPv4, IPv6, L2)
ip46_address_t next_hop
Next_hop for xconnect usage only.
static void vl_api_sr_localsid_add_del_t_handler(vl_api_sr_localsid_add_del_t *mp)
Dump the list of SR policies.
u32 sw_if_index
xconnect only
IPv6 SR LocalSID add/del request.
ip6_address_t localsid
LocalSID IPv6 address.
static void vl_api_sr_set_encap_source_t_handler(vl_api_sr_set_encap_source_t *mp)
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.
ip6_address_t bsid
BindingSID (key)
#define VALIDATE_SW_IF_INDEX(mp)
Dump the list of SR LocalSIDs.