SRv6 improvements to binary API
Change-Id: I260f5fe43074c0be973309f0a0895f50f0ca7c2b Signed-off-by: Pablo Camarillo <pcamaril@cisco.com>
This commit is contained in:

committed by
Damjan Marion

parent
7af4a57e78
commit
1a5e301fcd
src/vnet/srv6
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
vl_api_version 1.0.0
|
||||
vl_api_version 1.0.1
|
||||
|
||||
/** \brief IPv6 SR LocalSID add/del request
|
||||
@param client_index - opaque cookie to identify the sender
|
||||
@ -106,6 +106,19 @@ autoreply define sr_policy_del
|
||||
u32 sr_policy_index;
|
||||
};
|
||||
|
||||
/** \brief IPv6 SR Set SRv6 encapsulation source
|
||||
@param client_index - opaque cookie to identify the sender
|
||||
@param context - sender context, to match reply w/ request
|
||||
@param bsid is the bindingSID of the SR Policy
|
||||
@param index is the index of the SR policy
|
||||
*/
|
||||
autoreply define sr_set_encap_source
|
||||
{
|
||||
u32 client_index;
|
||||
u32 context;
|
||||
u8 encaps_source[16];
|
||||
};
|
||||
|
||||
/** \brief IPv6 SR steering add/del
|
||||
@param client_index - opaque cookie to identify the sender
|
||||
@param context - sender context, to match reply w/ request
|
||||
@ -136,33 +149,22 @@ autoreply define sr_steering_add_del
|
||||
@param client_index - opaque cookie to identify the sender
|
||||
@param context - sender context, to match reply w/ request
|
||||
*/
|
||||
/**define sr_localsids_dump
|
||||
define sr_localsids_dump
|
||||
{
|
||||
u32 client_index;
|
||||
u32 context;
|
||||
};*/
|
||||
};
|
||||
|
||||
/** \brief Details about a single SR LocalSID
|
||||
@param context - returned sender context, to match reply w/ request
|
||||
@param localsid_addr IPv6 address of the localsid
|
||||
@param behavior Type of behavior (function) for this localsid
|
||||
@param end_psp Boolean of whether decapsulation is allowed in this function
|
||||
@param sw_if_index Only for L2/L3 xconnect. OIF. In VRF variant the fib_table.
|
||||
@param vlan_index Only for L2 xconnect. Outgoing VLAN tag.
|
||||
@param fib_table FIB table in which we should install the localsid entry
|
||||
@param nh_addr Next Hop IPv4/IPv6 address. Only for L2/L3 xconnect.
|
||||
*/
|
||||
/**manual_endian define sr_localsid_details
|
||||
define sr_localsids_details
|
||||
{
|
||||
u32 context;
|
||||
u8 localsid_addr[16];
|
||||
u8 behavior;
|
||||
u8 address[16];
|
||||
u8 end_psp;
|
||||
u32 sw_if_index;
|
||||
u32 vlan_index;
|
||||
u16 behavior;
|
||||
u32 fib_table;
|
||||
u8 nh_addr[16];
|
||||
};*/
|
||||
u8 xconnect_next_hop[16];
|
||||
u32 xconnect_iface_or_vrf_table;
|
||||
};
|
||||
|
||||
/*
|
||||
* fd.io coding-style-patch-verification: OFF
|
||||
|
@ -276,6 +276,8 @@ 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);
|
||||
|
||||
extern void sr_set_source (ip6_address_t * address);
|
||||
|
||||
/**
|
||||
* @brief SR rewrite string computation for SRH insertion (inline)
|
||||
*
|
||||
|
@ -46,8 +46,9 @@
|
||||
#define foreach_vpe_api_msg \
|
||||
_(SR_LOCALSID_ADD_DEL, sr_localsid_add_del) \
|
||||
_(SR_POLICY_DEL, sr_policy_del) \
|
||||
_(SR_STEERING_ADD_DEL, sr_steering_add_del)
|
||||
//_(SR_LOCALSIDS, sr_localsids_dump)
|
||||
_(SR_STEERING_ADD_DEL, sr_steering_add_del) \
|
||||
_(SR_SET_ENCAP_SOURCE, sr_set_encap_source) \
|
||||
_(SR_LOCALSIDS_DUMP, sr_localsids_dump)
|
||||
//_(SR_LOCALSID_BEHAVIORS, sr_localsid_behaviors_dump)
|
||||
|
||||
static void vl_api_sr_localsid_add_del_t_handler
|
||||
@ -152,6 +153,16 @@ vl_api_sr_policy_del_t_handler (vl_api_sr_policy_del_t * mp)
|
||||
REPLY_MACRO (VL_API_SR_POLICY_DEL_REPLY);
|
||||
}
|
||||
|
||||
static void
|
||||
vl_api_sr_set_encap_source_t_handler (vl_api_sr_set_encap_source_t * mp)
|
||||
{
|
||||
vl_api_sr_set_encap_source_reply_t *rmp;
|
||||
int rv = 0;
|
||||
sr_set_source ((ip6_address_t *) & mp->encaps_source);
|
||||
|
||||
REPLY_MACRO (VL_API_SR_POLICY_DEL_REPLY);
|
||||
}
|
||||
|
||||
static void vl_api_sr_steering_add_del_t_handler
|
||||
(vl_api_sr_steering_add_del_t * mp)
|
||||
{
|
||||
@ -179,6 +190,47 @@ static void vl_api_sr_steering_add_del_t_handler
|
||||
REPLY_MACRO (VL_API_SR_STEERING_ADD_DEL_REPLY);
|
||||
}
|
||||
|
||||
static void send_sr_localsid_details
|
||||
(ip6_sr_localsid_t * t, unix_shared_memory_queue_t * q, u32 context)
|
||||
{
|
||||
vl_api_sr_localsids_details_t *rmp;
|
||||
|
||||
rmp = vl_msg_api_alloc (sizeof (*rmp));
|
||||
memset (rmp, 0, sizeof (*rmp));
|
||||
rmp->_vl_msg_id = ntohs (VL_API_SR_LOCALSIDS_DETAILS);
|
||||
memcpy (rmp->address, &t->localsid, sizeof (ip6_address_t));
|
||||
rmp->end_psp = t->end_psp;
|
||||
rmp->behavior = htons (t->behavior);
|
||||
rmp->fib_table = htonl (t->fib_table);
|
||||
memcpy (rmp->xconnect_next_hop, &t->next_hop, sizeof (ip6_address_t));
|
||||
rmp->xconnect_iface_or_vrf_table = htonl (t->sw_if_index);
|
||||
rmp->context = context;
|
||||
|
||||
vl_msg_api_send_shmem (q, (u8 *) & rmp);
|
||||
}
|
||||
|
||||
static void vl_api_sr_localsids_dump_t_handler
|
||||
(vl_api_sr_localsids_dump_t * mp)
|
||||
{
|
||||
unix_shared_memory_queue_t *q;
|
||||
ip6_sr_main_t *sm = &sr_main;
|
||||
ip6_sr_localsid_t *t;
|
||||
|
||||
q = vl_api_client_index_to_input_queue (mp->client_index);
|
||||
if (q == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
pool_foreach (t, sm->localsids,
|
||||
({
|
||||
send_sr_localsid_details(t, q, mp->context);
|
||||
}));
|
||||
/* *INDENT-ON* */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* sr_api_hookup
|
||||
* Add vpe's API message handlers to the table.
|
||||
|
@ -112,6 +112,12 @@ static ip6_address_t sr_pr_encaps_src;
|
||||
/* Note: This is temporal. We don't know whether to follow this path or
|
||||
take the ip address of a loopback interface or even the OIF */
|
||||
|
||||
void
|
||||
sr_set_source (ip6_address_t * address)
|
||||
{
|
||||
clib_memcpy (&sr_pr_encaps_src, address, sizeof (sr_pr_encaps_src));
|
||||
}
|
||||
|
||||
static clib_error_t *
|
||||
set_sr_src_command_fn (vlib_main_t * vm, unformat_input_t * input,
|
||||
vlib_cli_command_t * cmd)
|
||||
|
Reference in New Issue
Block a user