u32 hw_if_index,
u32 flags);
+extern clib_error_t *
+ip6_discover_neighbor_hw_interface_link_up_down (vnet_main_t * vnm,
+ u32 hw_if_index,
+ u32 flags);
+
// Feature graph node names
static char * l2input_feat_names[] = {
#define _(sym,name) name,
.name = "l2-input",
.vector_size = sizeof (u32),
.format_trace = format_l2input_trace,
+ .format_buffer = format_ethernet_header_with_length,
.type = VLIB_NODE_TYPE_INTERNAL,
.n_errors = ARRAY_LEN(l2input_error_strings),
return config->feature_bitmap;
}
-
+u32 l2input_set_bridge_features(u32 bd_index,
+ u32 feat_mask, u32 feat_value)
+{
+ l2_bridge_domain_t * bd_config;
+ vec_validate (l2input_main.bd_configs, bd_index);
+ bd_config = vec_elt_at_index(l2input_main.bd_configs, bd_index);
+ bd_validate (bd_config);
+ bd_config->feature_bitmap = (bd_config->feature_bitmap & ~feat_mask) | feat_value;
+ return bd_config->feature_bitmap;
+}
// Set the subinterface to run in l2 or l3 mode.
// for L3 mode, just the sw_if_index is specified
// delete the l2fib entry for the bvi interface
mac = *((u64 *)hi->hw_address);
l2fib_del_entry (mac, config->bd_index);
+
+ // Let ARP and NDP know that the output node index changed
+ ethernet_arp_hw_interface_link_up_down(vnet_main, hi->hw_if_index, 0);
+ ip6_discover_neighbor_hw_interface_link_up_down(vnet_main, hi->hw_if_index, 0);
}
l2_if_adjust--;
} else if (config->xconnect) {
// Disable learning by default. no use since l2fib entry is static.
config->feature_bitmap &= ~L2INPUT_FEAT_LEARN;
- // Add BVI to arp_input_next_index_by_hw_if_index table so arp-input
- // node can send out ARP response via BVI to BD
+ // Let ARP and NDP know that the output_index_node changed so they
+ // can send requests via BVI to BD
ethernet_arp_hw_interface_link_up_down(vnet_main, hi->hw_if_index, 0);
-
+ ip6_discover_neighbor_hw_interface_link_up_down(vnet_main, hi->hw_if_index, 0);
}
// Add interface to bridge-domain flood vector