rpaths[vec_len (rpaths) - 1].frp_flags |=
FIB_ROUTE_PATH_RESOLVE_VIA_ATTACHED;
}
- else if (unformat (line_input, "out-label %U",
- unformat_mpls_unicast_label, &out_label))
+ else if (unformat (line_input, "out-labels"))
{
if (vec_len (rpaths) == 0)
{
error = clib_error_return (0, "Paths then labels");
goto done;
}
- vec_add1 (rpaths[vec_len (rpaths) - 1].frp_label_stack, out_label);
+ else
+ {
+ while (unformat (line_input, "%U",
+ unformat_mpls_unicast_label, &out_label))
+ {
+ vec_add1 (rpaths[vec_len (rpaths) - 1].frp_label_stack,
+ out_label);
+ }
+ }
}
else if (unformat (line_input, "via-label %U",
unformat_mpls_unicast_label, &rpath.frp_local_label))
*label = MPLS_IETF_ROUTER_ALERT_LABEL;
else if (unformat (input, MPLS_IETF_IMPLICIT_NULL_STRING))
*label = MPLS_IETF_IMPLICIT_NULL_LABEL;
+ else if (unformat (input, MPLS_IETF_IPV4_EXPLICIT_NULL_BRIEF_STRING))
+ *label = MPLS_IETF_IPV4_EXPLICIT_NULL_LABEL;
+ else if (unformat (input, MPLS_IETF_IPV6_EXPLICIT_NULL_BRIEF_STRING))
+ *label = MPLS_IETF_IPV6_EXPLICIT_NULL_LABEL;
+ else if (unformat (input, MPLS_IETF_ROUTER_ALERT_BRIEF_STRING))
+ *label = MPLS_IETF_ROUTER_ALERT_LABEL;
+ else if (unformat (input, MPLS_IETF_IMPLICIT_NULL_BRIEF_STRING))
+ *label = MPLS_IETF_IMPLICIT_NULL_LABEL;
else if (unformat (input, "%d", label))
;
+ else
+ return (0);
return (1);
}
rpath.frp_flags = FIB_ROUTE_PATH_INTF_RX;
vec_add1(rpaths, rpath);
}
- else if (unformat (line_input, "out-label %U",
- unformat_mpls_unicast_label,
- &out_label))
+ else if (unformat (line_input, "out-labels"))
{
- if (vec_len(rpaths) == 0)
- {
- error = clib_error_return(0 , "Paths then labels");
+ if (vec_len (rpaths) == 0)
+ {
+ error = clib_error_return (0, "Paths then labels");
goto done;
- }
- vec_add1(rpaths[vec_len(rpaths)-1].frp_label_stack, out_label);
+ }
+ else
+ {
+ while (unformat (line_input, "%U",
+ unformat_mpls_unicast_label,
+ &out_label))
+ {
+ vec_add1 (rpaths[vec_len (rpaths) - 1].frp_label_stack,
+ out_label);
+ }
+ }
}
else
{
is_del = 0;
else if (unformat (line_input, "add"))
is_del = 0;
- else if (unformat (line_input, "out-label %U",
- unformat_mpls_unicast_label, &out_label))
- {
- vec_add1(rpath.frp_label_stack, out_label);
- }
+ else if (unformat (line_input, "out-labels"))
+ {
+ if (vec_len (rpaths) == 0)
+ {
+ error = clib_error_return (0, "Paths then labels");
+ goto done;
+ }
+ else
+ {
+ while (unformat (line_input, "%U",
+ unformat_mpls_unicast_label,
+ &out_label))
+ {
+ vec_add1 (rpaths[vec_len (rpaths) - 1].frp_label_stack,
+ out_label);
+ }
+ }
+ }
else if (unformat (line_input, "via %U %U",
unformat_ip4_address,
&rpath.frp_addr.ip4,