Skip to content

Commit

Permalink
Handle VN change in interface Notification
Browse files Browse the repository at this point in the history
Remove the assumption that VN of an interface cannot change without first getting a
notification for NULL VN.

Also fix the following issue.
Also when VN changes for a VMI (clubbing of VMI getting NULL VRF and later new VRF
events into a single event) we were not removing EVPN and Bridge routes for old VRF.

Also added UT to verify this scenario.

Closes-Bug: #1596792
(cherry picked from commit 64ef024)

Change-Id: I037631d09af36e7d191cc0f45a129a99d3c800ea
  • Loading branch information
ashoksr committed Aug 18, 2016
1 parent 4a8243d commit 2656b8c
Show file tree
Hide file tree
Showing 4 changed files with 197 additions and 37 deletions.
22 changes: 16 additions & 6 deletions src/vnsw/agent/oper/vm_interface.cc
Expand Up @@ -1211,7 +1211,8 @@ void VmInterface::UpdateL3(bool old_ipv4_active, VrfEntry *old_vrf,
policy_change,
old_vrf, old_dhcp_addr);
}
UpdateIpv4InstanceIp(force_update, policy_change, false, old_ethernet_tag);
UpdateIpv4InstanceIp(force_update, policy_change, false,
old_ethernet_tag, old_vrf);
UpdateMetadataRoute(old_ipv4_active, old_vrf);
UpdateFloatingIp(force_update, policy_change, false, old_ethernet_tag);
UpdateServiceVlan(force_update, policy_change);
Expand Down Expand Up @@ -1298,7 +1299,8 @@ void VmInterface::UpdateL2(bool old_l2_active, VrfEntry *old_vrf,
old_layer3_forwarding, policy_change,
Ip4Address(), Ip6Address(),
MacAddress::FromString(vm_mac_));
UpdateIpv4InstanceIp(force_update, policy_change, true, old_ethernet_tag);
UpdateIpv4InstanceIp(force_update, policy_change, true, old_ethernet_tag,
old_vrf);
UpdateIpv6InstanceIp(force_update, policy_change, true, old_ethernet_tag);
UpdateFloatingIp(force_update, policy_change, true, old_ethernet_tag);
UpdateAllowedAddressPair(force_update, policy_change, true, old_l2_active,
Expand Down Expand Up @@ -1365,9 +1367,8 @@ void VmInterface::ApplyConfigCommon(const VrfEntry *old_vrf,
void VmInterface::ApplyMacVmBindingConfig(const VrfEntry *old_vrf,
bool old_active,
bool old_dhcp_enable) {
if (!IsActive()) {
if (!IsActive() || old_vrf != vrf()) {
DeleteMacVmBinding(old_vrf);
return;
}

//Update DHCP and DNS flag in Interface Class.
Expand All @@ -1379,6 +1380,8 @@ void VmInterface::ApplyMacVmBindingConfig(const VrfEntry *old_vrf,
dns_enabled_ = false;
}

if (!IsActive())
return;
UpdateMacVmBinding();
}

Expand Down Expand Up @@ -2999,6 +3002,10 @@ void VmInterface::UpdateL2InterfaceRoute(bool old_l2_active, bool force_update,
force_update = true;
}

if (old_vrf && old_vrf != vrf()) {
force_update = true;
}

//Encap change will result in force update of l2 routes.
if (force_update) {
DeleteL2InterfaceRoute(true, old_vrf, old_v4_addr,
Expand Down Expand Up @@ -4472,8 +4479,8 @@ bool VmInterface::CopyIp6Address(const Ip6Address &addr) {
}

void VmInterface::UpdateIpv4InstanceIp(bool force_update, bool policy_change,
bool l2,
uint32_t old_ethernet_tag) {
bool l2, uint32_t old_ethernet_tag,
VrfEntry *old_vrf) {
if (l2 && old_ethernet_tag != ethernet_tag()) {
force_update = true;
}
Expand All @@ -4487,6 +4494,9 @@ void VmInterface::UpdateIpv4InstanceIp(bool force_update, bool policy_change,
instance_ipv4_list_.list_.erase(prev);
}
} else {
if (old_vrf && (old_vrf != vrf())) {
prev->DeActivate(this, l2, old_vrf, old_ethernet_tag);
}
prev->Activate(this, force_update||policy_change, l2,
old_ethernet_tag);
}
Expand Down
5 changes: 2 additions & 3 deletions src/vnsw/agent/oper/vm_interface.h
Expand Up @@ -741,12 +741,11 @@ class VmInterface : public Interface {
int old_ethernet_tag,
const MacAddress &mac) const;

void DeleteL2Route(const std::string &vrf_name,
const MacAddress &mac);
void UpdateVrfAssignRule();
void DeleteVrfAssignRule();
void UpdateIpv4InstanceIp(bool force_update, bool policy_change,
bool l2, uint32_t old_ethernet_tag);
bool l2, uint32_t old_ethernet_tag,
VrfEntry *old_vrf);
void DeleteIpv4InstanceIp(bool l2, uint32_t old_ethernet_tag,
VrfEntry *old_vrf);
void UpdateIpv6InstanceIp(bool force_update, bool policy_change,
Expand Down

0 comments on commit 2656b8c

Please sign in to comment.