static const char *mfib_itf_flag_long_names[] = MFIB_ITF_NAMES_LONG;
static const char *mfib_itf_flag_names[] = MFIB_ITF_NAMES_SHORT;
+int
+mfib_prefix_is_cover (const mfib_prefix_t *p1,
+ const mfib_prefix_t *p2)
+{
+ if (!ip46_address_is_equal(&p1->fp_src_addr, &p2->fp_src_addr))
+ return (0);
+
+ switch (p1->fp_proto)
+ {
+ case FIB_PROTOCOL_IP4:
+ return (ip4_destination_matches_route(&ip4_main,
+ &p1->fp_grp_addr.ip4,
+ &p2->fp_grp_addr.ip4,
+ p1->fp_len));
+ case FIB_PROTOCOL_IP6:
+ return (ip6_destination_matches_route(&ip6_main,
+ &p1->fp_grp_addr.ip6,
+ &p2->fp_grp_addr.ip6,
+ p1->fp_len));
+ case FIB_PROTOCOL_MPLS:
+ break;
+ }
+ return (0);
+}
+
+int
+mfib_prefix_is_host (const mfib_prefix_t *pfx)
+{
+ switch (pfx->fp_proto)
+ {
+ case FIB_PROTOCOL_IP4:
+ return (64 == pfx->fp_len);
+ case FIB_PROTOCOL_IP6:
+ return (256 == pfx->fp_len);
+ case FIB_PROTOCOL_MPLS:
+ ASSERT(0);
+ break;
+ }
+ return (0);
+}
+
+fib_forward_chain_type_t
+mfib_forw_chain_type_from_dpo_proto (dpo_proto_t proto)
+{
+ switch (proto)
+ {
+ case DPO_PROTO_IP4:
+ return (FIB_FORW_CHAIN_TYPE_MCAST_IP4);
+ case DPO_PROTO_IP6:
+ return (FIB_FORW_CHAIN_TYPE_MCAST_IP6);
+ case DPO_PROTO_MPLS:
+ case DPO_PROTO_ETHERNET:
+ case DPO_PROTO_NSH:
+ case DPO_PROTO_BIER:
+ break;
+ }
+ ASSERT(0);
+ return (FIB_FORW_CHAIN_TYPE_MCAST_IP4);
+}
+
+fib_forward_chain_type_t
+mfib_forw_chain_type_from_fib_proto (fib_protocol_t proto)
+{
+ switch (proto)
+ {
+ case FIB_PROTOCOL_IP4:
+ return (FIB_FORW_CHAIN_TYPE_MCAST_IP4);
+ case FIB_PROTOCOL_IP6:
+ return (FIB_FORW_CHAIN_TYPE_MCAST_IP6);
+ case FIB_PROTOCOL_MPLS:
+ break;
+ }
+ ASSERT(0);
+ return (FIB_FORW_CHAIN_TYPE_MCAST_IP4);
+}
+
u8 *
format_mfib_prefix (u8 * s, va_list * args)
{
s = format(s, " flags:");
FOR_EACH_MFIB_ATTRIBUTE(attr) {
if ((1<<attr) & flags) {
- s = format (s, "%s,", mfib_flag_names[attr]);
+ s = format (s, "%s,", mfib_flag_names_long[attr]);
}
}
}
mfib_entry_attribute_t attr;
old = *eflags;
+ FOR_EACH_MFIB_ATTRIBUTE(attr) {
+ if (unformat (input, mfib_flag_names_long[attr]))
+ *eflags |= (1 << attr);
+ }
FOR_EACH_MFIB_ATTRIBUTE(attr) {
if (unformat (input, mfib_flag_names[attr]))
*eflags |= (1 << attr);
}
/*?
- * This command display the set of support flags applicable to the MFIB route
+ * This command displays the set of supported flags applicable to an MFIB route
*/
/* *INDENT-OFF* */
VLIB_CLI_COMMAND (mfib_route_flags_command, static) =
{
- .path = "sh mfib route flags",
+ .path = "show mfib route flags",
.short_help = "Flags applicable to an MFIB route",
.function = mfib_show_route_flags,
.is_mp_safe = 1,
}
/*?
- * This command display the set of support flags applicable to the MFIB route
+ * This command displays the set of supported flags applicable to an MFIB interface
*/
/* *INDENT-OFF* */
VLIB_CLI_COMMAND (mfib_itf_flags_command, static) =
{
- .path = "sh mfib itf flags",
+ .path = "show mfib itf flags",
.short_help = "Flags applicable to an MFIB interfaces",
.function = mfib_show_itf_flags,
.is_mp_safe = 1,