s = format (s, "\n flags:%U", format_adj_flags, adj->ia_flags);
s = format (s, "\n counts:[%Ld:%Ld]", counts.packets, counts.bytes);
s = format (s, "\n locks:%d", adj->ia_node.fn_locks);
- s = format(s, "\n delegates:\n ");
+ s = format(s, "\n delegates:");
s = adj_delegate_format(s, adj);
s = format(s, "\n children:");
switch (adj->lookup_next_index)
{
case IP_LOOKUP_NEXT_MIDCHAIN:
- dpo_reset(&adj->sub_type.midchain.next_dpo);
+ adj_midchain_teardown(adj);
/* FALL THROUGH */
case IP_LOOKUP_NEXT_ARP:
case IP_LOOKUP_NEXT_REWRITE:
adj_glean_remove(adj->ia_nh_proto,
adj->rewrite_header.sw_if_index);
break;
- case IP_LOOKUP_NEXT_MCAST:
case IP_LOOKUP_NEXT_MCAST_MIDCHAIN:
+ adj_midchain_teardown(adj);
+ /* FALL THROUGH */
+ case IP_LOOKUP_NEXT_MCAST:
adj_mcast_remove(adj->ia_nh_proto,
adj->rewrite_header.sw_if_index);
break;
return (ADJ_WALK_RC_CONTINUE);
}
-void
+static void
adj_feature_update (u32 sw_if_index,
u8 arc_index,
- u8 is_enable)
+ u8 is_enable,
+ void *data)
{
/*
* Walk all the adjacencies on the interface to update the cached
adj_midchain_module_init();
adj_mcast_module_init();
+ vnet_feature_register(adj_feature_update, NULL);
+
return (NULL);
}
{
if (unformat (input, "%d", &ai))
;
- else if (unformat (input, "sum"))
- summary = 1;
- else if (unformat (input, "summary"))
+ else if (unformat (input, "summary") || unformat (input, "sum"))
summary = 1;
else if (unformat (input, "%U",
unformat_vnet_sw_interface, vnet_get_main(),