u32 hi; /* head index */
pool_get (lm->if_address_pool, a);
- memset (a, ~0, sizeof (a[0]));
+ clib_memset (a, ~0, sizeof (a[0]));
ai = a - lm->if_address_pool;
hi = pi = lm->if_address_pool_index_by_sw_if_index[sw_if_index];
is_del = 0;
table_id = 0;
count = 1;
- memset (&pfx, 0, sizeof (pfx));
+ clib_memset (&pfx, 0, sizeof (pfx));
/* Get a line of input. */
if (!unformat_user (main_input, unformat_line_input, line_input))
while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
{
- memset (&rpath, 0, sizeof (rpath));
+ clib_memset (&rpath, 0, sizeof (rpath));
if (unformat (line_input, "table %d", &table_id))
;
mfib_entry_flags_t eflags = 0;
u32 gcount, scount, ss, gg, incr;
f64 timet[2];
+ u32 rpf_id = MFIB_RPF_ID_NONE;
gcount = scount = 1;
vnm = vnet_get_main ();
is_del = 0;
table_id = 0;
- memset (&pfx, 0, sizeof (pfx));
- memset (&rpath, 0, sizeof (rpath));
+ clib_memset (&pfx, 0, sizeof (pfx));
+ clib_memset (&rpath, 0, sizeof (rpath));
rpath.frp_sw_if_index = ~0;
/* Get a line of input. */
is_del = 1;
else if (unformat (line_input, "add"))
is_del = 0;
+ else if (unformat (line_input, "rpf-id %d", &rpf_id))
+ ;
else if (unformat (line_input, "scount %d", &scount))
;
else if (unformat (line_input, "gcount %d", &gcount))
unformat_ip4_address,
&pfx.fp_grp_addr.ip4, &pfx.fp_len))
{
- memset (&pfx.fp_src_addr.ip4, 0, sizeof (pfx.fp_src_addr.ip4));
+ clib_memset (&pfx.fp_src_addr.ip4, 0, sizeof (pfx.fp_src_addr.ip4));
pfx.fp_proto = FIB_PROTOCOL_IP4;
}
else if (unformat (line_input, "%U/%d",
unformat_ip6_address,
&pfx.fp_grp_addr.ip6, &pfx.fp_len))
{
- memset (&pfx.fp_src_addr.ip6, 0, sizeof (pfx.fp_src_addr.ip6));
+ clib_memset (&pfx.fp_src_addr.ip6, 0, sizeof (pfx.fp_src_addr.ip6));
pfx.fp_proto = FIB_PROTOCOL_IP6;
}
else if (unformat (line_input, "%U",
unformat_ip4_address, &pfx.fp_grp_addr.ip4))
{
- memset (&pfx.fp_src_addr.ip4, 0, sizeof (pfx.fp_src_addr.ip4));
+ clib_memset (&pfx.fp_src_addr.ip4, 0, sizeof (pfx.fp_src_addr.ip4));
pfx.fp_proto = FIB_PROTOCOL_IP4;
pfx.fp_len = 32;
}
else if (unformat (line_input, "%U",
unformat_ip6_address, &pfx.fp_grp_addr.ip6))
{
- memset (&pfx.fp_src_addr.ip6, 0, sizeof (pfx.fp_src_addr.ip6));
+ clib_memset (&pfx.fp_src_addr.ip6, 0, sizeof (pfx.fp_src_addr.ip6));
pfx.fp_proto = FIB_PROTOCOL_IP6;
pfx.fp_len = 128;
}
+ else if (unformat (line_input, "via %U %U %U",
+ unformat_ip4_address, &rpath.frp_addr.ip4,
+ unformat_vnet_sw_interface, vnm,
+ &rpath.frp_sw_if_index,
+ unformat_mfib_itf_flags, &iflags))
+ {
+ rpath.frp_weight = 1;
+ }
+ else if (unformat (line_input, "via %U %U %U",
+ unformat_ip6_address, &rpath.frp_addr.ip6,
+ unformat_vnet_sw_interface, vnm,
+ &rpath.frp_sw_if_index,
+ unformat_mfib_itf_flags, &iflags))
+ {
+ rpath.frp_weight = 1;
+ }
+ else if (unformat (line_input, "via %U %U",
+ unformat_vnet_sw_interface, vnm,
+ &rpath.frp_sw_if_index,
+ unformat_mfib_itf_flags, &iflags))
+ {
+ clib_memset (&rpath.frp_addr, 0, sizeof (rpath.frp_addr));
+ rpath.frp_weight = 1;
+ }
else if (unformat (line_input, "via %U %U",
unformat_ip4_address, &rpath.frp_addr.ip4,
unformat_vnet_sw_interface, vnm,
unformat_vnet_sw_interface, vnm,
&rpath.frp_sw_if_index))
{
- memset (&rpath.frp_addr, 0, sizeof (rpath.frp_addr));
+ clib_memset (&rpath.frp_addr, 0, sizeof (rpath.frp_addr));
rpath.frp_weight = 1;
}
- else if (unformat (line_input, "via local"))
+ else if (unformat (line_input, "via local Forward"))
{
- memset (&rpath.frp_addr, 0, sizeof (rpath.frp_addr));
+ clib_memset (&rpath.frp_addr, 0, sizeof (rpath.frp_addr));
rpath.frp_sw_if_index = ~0;
rpath.frp_weight = 1;
rpath.frp_flags |= FIB_ROUTE_PATH_LOCAL;
* set the path proto appropriately for the prefix
*/
rpath.frp_proto = fib_proto_to_dpo (pfx.fp_proto);
+ iflags = MFIB_ITF_FLAG_FORWARD;
}
- else if (unformat (line_input, "%U", unformat_mfib_itf_flags, &iflags))
- ;
else if (unformat (line_input, "%U",
unformat_mfib_entry_flags, &eflags))
;
/* no path provided => route delete */
mfib_table_entry_delete (fib_index, &pfx, MFIB_SOURCE_CLI);
}
- else if (eflags)
+ else if (eflags || (MFIB_RPF_ID_NONE != rpf_id))
{
mfib_table_entry_update (fib_index, &pfx, MFIB_SOURCE_CLI,
- MFIB_RPF_ID_NONE, eflags);
+ rpf_id, eflags);
}
else
{
VLIB_CLI_COMMAND (ip_mroute_command, static) =
{
.path = "ip mroute",
- .short_help = "ip mroute [add|del] <dst-ip-addr>/<width> [table <table-id>] [via <next-hop-ip-addr> [<interface>],",
+ .short_help = "ip mroute [add|del] <dst-ip-addr>/<width> [table <table-id>] [rpf-id <ID>] [via <next-hop-ip-addr> [<interface>],",
.function = vnet_ip_mroute_cmd,
.is_mp_safe = 1,
};
vnm = vnet_get_main ();
is_del = 0;
sw_if_index = ~0;
- memset (&pfx, 0, sizeof (pfx));
+ clib_memset (&pfx, 0, sizeof (pfx));
/* Get a line of input. */
if (!unformat_user (main_input, unformat_line_input, line_input))