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_SET_ENCAP_HOP_LIMIT, sr_set_encap_hop_limit) \ 54 _(SR_LOCALSIDS_DUMP, sr_localsids_dump) \ 55 _(SR_POLICIES_DUMP, sr_policies_dump) \ 56 _(SR_STEERING_POL_DUMP, sr_steering_pol_dump) 61 vl_api_sr_localsid_add_del_reply_t *rmp;
78 memcpy (&prefix.ip4, mp->
nh_addr4, sizeof (prefix.ip4));
80 memcpy (&prefix.ip6, mp->
nh_addr6, sizeof (prefix.ip6));
97 vl_api_sr_policy_add_reply_t *rmp;
117 ntohl (mp->
sids.weight),
127 vl_api_sr_policy_mod_reply_t *rmp;
152 ntohl (mp->
sids.weight));
161 vl_api_sr_policy_del_reply_t *rmp;
176 vl_api_sr_set_encap_source_reply_t *rmp;
186 vl_api_sr_set_encap_hop_limit_reply_t *rmp;
190 rv = VNET_API_ERROR_INVALID_VALUE;
200 vl_api_sr_steering_add_del_reply_t *rmp;
230 rmp->_vl_msg_id = ntohs (VL_API_SR_LOCALSIDS_DETAILS);
262 send_sr_localsid_details(t, reg, mp->context);
275 vl_api_srv6_sid_list_t *write_sid_list;
279 sizeof (vl_api_srv6_sid_list_t));
283 sizeof (vl_api_srv6_sid_list_t)));
285 rmp->_vl_msg_id = ntohs (VL_API_SR_POLICIES_DETAILS);
298 write_sid_list->weight = htonl (segment_list->
weight);
321 send_sr_policies_details(t, reg, mp->context);
334 rmp->_vl_msg_id = ntohs (VL_API_SR_STEERING_POL_DETAILS);
372 send_sr_steering_pol_details(t, reg, mp->context);
384 #define vl_msg_name_crc_list 386 #undef vl_msg_name_crc_list 391 #define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id); 392 foreach_vl_msg_name_crc_sr;
402 vl_msg_api_set_handlers(VL_API_##N, #n, \ 403 vl_api_##n##_t_handler, \ 405 vl_api_##n##_t_endian, \ 406 vl_api_##n##_t_print, \ 407 sizeof(vl_api_##n##_t), 1);
int sr_cli_localsid(char is_del, ip6_address_t *localsid_addr, u16 prefixlen, 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.
u8 type
Type (default is 0)
u32 vlan_index
VLAN tag (not an index)
void sr_set_source(ip6_address_t *address)
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.
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
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.
static u8 ip46_address_is_ip4(const ip46_address_t *ip46)
void * vl_msg_api_alloc(int nbytes)
ip6_sr_steering_policy_t * steer_policies
IPv6 SR Set SRv6 encapsulation hop-limit.
vl_api_srv6_sid_list_t sids
struct sr_steering_key_t::@454::@457 l2
#define clib_memcpy(d, s, n)
static void vl_api_sr_steering_add_del_t_handler(vl_api_sr_steering_add_del_t *mp)
#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)
struct sr_steering_key_t::@454::@456 l3
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.
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.
u32 * segments_lists
SID lists indexes (vector)
static void vl_api_sr_set_encap_hop_limit_t_handler(vl_api_sr_set_encap_hop_limit_t *mp)
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.
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
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 *plugin_mem)
Create a new SR policy.
vl_api_srv6_sid_t bsid_addr
#define foreach_vpe_api_msg
u32 fib_table
FIB table where localsid is registered.
#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)
void sr_set_hop_limit(u8 hop_limit)
static api_main_t * vlibapi_get_main(void)
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.