aboutsummaryrefslogtreecommitdiffstats
path: root/vnet
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 /vnet
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>
Diffstat (limited to 'vnet')
-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 31744f5f..d551b61d 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