+u8 *
+format_ip_sub_address_family (u8 * s, va_list * args)
+{
+ ip_sub_address_family_t safi = va_arg (*args, int); // int promo ip_sub_address_family_t);
+
+ switch (safi)
+ {
+ case SAFI_UNICAST:
+ return (format (s, "unicast"));
+ case SAFI_MULTICAST:
+ return (format (s, "multicast"));
+ }
+
+ return (format (s, "unknown"));
+}
+
+uword
+unformat_ip_sub_address_family (unformat_input_t * input, va_list * args)
+{
+ ip_sub_address_family_t *safi = va_arg (*args, ip_sub_address_family_t *);
+
+ if (unformat (input, "unicast") || unformat (input, "uni"))
+ {
+ *safi = SAFI_UNICAST;
+ return (1);
+ }
+ else if (unformat (input, "multicast") || unformat (input, "multi"))
+ {
+ *safi = SAFI_MULTICAST;
+ return (1);
+ }
+ return (0);
+}
+
+u8 *
+format_ip_dscp (u8 * s, va_list * va)
+{
+ ip_dscp_t dscp = va_arg (*va, u32); // int promotion of u8
+
+ switch (dscp)
+ {
+#define _(n,v) \
+ case IP_DSCP_##v: \
+ return (format (s, "%s", #v));
+ foreach_ip_dscp
+#undef _
+ }
+
+ return (format (s, "unknown"));
+}
+
+uword
+unformat_ip_dscp (unformat_input_t * input, va_list * args)
+{
+ ip_dscp_t *dscp = va_arg (*args, ip_dscp_t *);
+
+ if (0)
+ ;
+#define _(n,v) \
+ else if (unformat (input, #v)) \
+ *dscp = IP_DSCP_##v;
+ foreach_ip_dscp
+#undef _
+ else
+ return 0;
+
+ return 1;
+}
+
+u8 *
+format_ip_ecn (u8 * s, va_list * va)
+{
+ ip_ecn_t ecn = va_arg (*va, u32); // int promotion of u8
+
+ switch (ecn)
+ {
+#define _(n,v) \
+ case IP_ECN_##v: \
+ return (format (s, "%s", #v));
+ foreach_ip_ecn
+#undef _
+ }
+
+ return (format (s, "unknown"));