vnet_main_t *vnm = va_arg (*va, vnet_main_t *);
ethernet_arp_ip4_entry_t *e = va_arg (*va, ethernet_arp_ip4_entry_t *);
vnet_sw_interface_t *si;
- u8 *flags = 0;
if (!e)
return format (s, "%=12s%=16s%=6s%=20s%=24s", "Time", "IP4",
si = vnet_get_sw_interface (vnm, e->sw_if_index);
- if (e->flags & IP_NEIGHBOR_FLAG_STATIC)
- flags = format (flags, "S");
-
- if (e->flags & IP_NEIGHBOR_FLAG_DYNAMIC)
- flags = format (flags, "D");
-
- if (e->flags & IP_NEIGHBOR_FLAG_NO_FIB_ENTRY)
- flags = format (flags, "N");
-
- s = format (s, "%=12U%=16U%=6s%=20U%U",
- format_vlib_time, vnm->vlib_main, e->time_last_updated,
- format_ip4_address, &e->ip4_address,
- flags ? (char *) flags : "",
- format_mac_address_t, &e->mac,
- format_vnet_sw_interface_name, vnm, si);
-
- vec_free (flags);
- return s;
+ return format (s, "%=12U%=16U%=6U%=20U%U",
+ format_vlib_time, vnm->vlib_main, e->time_last_updated,
+ format_ip4_address, &e->ip4_address,
+ format_ip_neighbor_flags, e->flags,
+ format_mac_address_t, &e->mac,
+ format_vnet_sw_interface_name, vnm, si);
}
typedef struct
am->ethernet_arp_by_sw_if_index[sw_if_index].enabled = 1;
vnet_feature_enable_disable ("arp", "arp-reply", sw_if_index, 1, NULL, 0);
+ vnet_feature_enable_disable ("arp", "arp-disabled", sw_if_index, 0, NULL,
+ 0);
}
static int
if (!arp_is_enabled (am, sw_if_index))
return;
+ vnet_feature_enable_disable ("arp", "arp-disabled", sw_if_index, 1, NULL,
+ 0);
vnet_feature_enable_disable ("arp", "arp-reply", sw_if_index, 0, NULL, 0);
eai = &am->ethernet_arp_by_sw_if_index[sw_if_index];
.runs_before = VNET_FEATURES ("arp-disabled"),
};
-VNET_FEATURE_INIT (arp_drop_feat_node, static) =
+VNET_FEATURE_INIT (arp_disabled_feat_node, static) =
{
.arc_name = "arp",
.node_name = "arp-disabled",
+ .runs_before = VNET_FEATURES ("error-drop"),
+};
+
+VNET_FEATURE_INIT (arp_drop_feat_node, static) =
+{
+ .arc_name = "arp",
+ .node_name = "error-drop",
.runs_before = 0, /* last feature */
};
static clib_error_t *
vnet_arp_delete_sw_interface (vnet_main_t * vnm, u32 sw_if_index, u32 is_add)
{
+ ethernet_arp_main_t *am = ðernet_arp_main;
+
if (!is_add && sw_if_index != ~0)
{
- ethernet_arp_main_t *am = ðernet_arp_main;
ethernet_arp_ip4_entry_t *e;
/* *INDENT-OFF* */
pool_foreach (e, am->ip4_entry_pool, ({
vnet_arp_unset_ip4_over_ethernet_internal (vnm, &args);
}));
/* *INDENT-ON* */
+ arp_disable (am, sw_if_index);
+ }
+ else if (is_add)
+ {
+ vnet_feature_enable_disable ("arp", "arp-disabled",
+ sw_if_index, 1, NULL, 0);
}
return (NULL);