summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Pfister <ppfister@cisco.com>2016-03-09 15:56:31 +0000
committerPierre Pfister <ppfister@cisco.com>2016-03-09 15:56:31 +0000
commite389de77de7bc08761ad1f9e1c27ba54123e4faa (patch)
tree76af29b2c03a4ad2d21d35c588b9e4362dfe0fe2
parentb1df1699d73d010d6af5af05e85d843508d4f8e8 (diff)
Fix IPv6 NDP and bridge BVI and restore NDP and ARP when BVI move is changed.
Both ARP and NDP need to be called when hi->output_node_index is changed. It does not look like a perfect solution though. Maybe an actual up-down call would be better... Change-Id: If2988d131e77f4fc522f34f3ffe2d5ba9c1d506c Signed-off-by: Pierre Pfister <ppfister@cisco.com>
-rw-r--r--vnet/vnet/l2/l2_input.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/vnet/vnet/l2/l2_input.c b/vnet/vnet/l2/l2_input.c
index 31744f5fc31..d551b61ddce 100644
--- a/vnet/vnet/l2/l2_input.c
+++ b/vnet/vnet/l2/l2_input.c
@@ -39,6 +39,11 @@ ethernet_arp_hw_interface_link_up_down (vnet_main_t * vnm,
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,
@@ -552,6 +557,10 @@ u32 set_int_l2_mode (vlib_main_t * vm,
// 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) {
@@ -635,10 +644,10 @@ u32 set_int_l2_mode (vlib_main_t * vm,
// 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