From afb21e39cca69bf94cb359b9667b1d896c0cb213 Mon Sep 17 00:00:00 2001 From: Hari Date: Mon, 21 Nov 2016 22:40:44 +0530 Subject: [PATCH] Retain the VRF and policy flag on the interface when HC fails. In case of L3-only network, the VRF and policy flag are being reset when HC deactivates an interface. Change this to retain these values correctly. Change-Id: Ib5d8b7c40cbd4c109abad3e34e51ca176e196d94 closes-bug: #1642672 --- src/vnsw/agent/vrouter/ksync/interface_ksync.cc | 11 ++++++++++- src/vnsw/agent/vrouter/ksync/interface_ksync.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/vnsw/agent/vrouter/ksync/interface_ksync.cc b/src/vnsw/agent/vrouter/ksync/interface_ksync.cc index 8de27741004..e52a40d3e74 100644 --- a/src/vnsw/agent/vrouter/ksync/interface_ksync.cc +++ b/src/vnsw/agent/vrouter/ksync/interface_ksync.cc @@ -51,6 +51,7 @@ InterfaceKSyncEntry::InterfaceKSyncEntry(InterfaceKSyncObject *obj, layer3_forwarding_(entry->layer3_forwarding_), ksync_obj_(obj), l2_active_(false), metadata_l2_active_(entry->metadata_l2_active_), + metadata_ip_active_(entry->metadata_ip_active_), bridging_(entry->bridging_), mac_(entry->mac_), smac_(entry->smac_), @@ -92,6 +93,7 @@ InterfaceKSyncEntry::InterfaceKSyncEntry(InterfaceKSyncObject *obj, ksync_obj_(obj), l2_active_(false), metadata_l2_active_(false), + metadata_ip_active_(false), bridging_(true), mac_(), smac_(), @@ -269,6 +271,13 @@ bool InterfaceKSyncEntry::Sync(DBEntry *e) { vm_port->metadata_l2_active(); ret = true; } + + if (metadata_ip_active_ != + vm_port->metadata_ip_active()) { + metadata_ip_active_ = + vm_port->metadata_ip_active(); + ret = true; + } } uint32_t vrf_id = VIF_VRF_INVALID; @@ -276,7 +285,7 @@ bool InterfaceKSyncEntry::Sync(DBEntry *e) { std::string analyzer_name; Interface::MirrorDirection mirror_direction = Interface::UNKNOWN; bool has_service_vlan = false; - if (l2_active_ || ipv4_active_ || metadata_l2_active_) { + if (l2_active_ || ipv4_active_ || metadata_l2_active_ || metadata_ip_active_) { vrf_id = intf->vrf_id(); if (vrf_id == VrfEntry::kInvalidIndex) { vrf_id = VIF_VRF_INVALID; diff --git a/src/vnsw/agent/vrouter/ksync/interface_ksync.h b/src/vnsw/agent/vrouter/ksync/interface_ksync.h index 4fd9edf23d8..bc19e61e92e 100644 --- a/src/vnsw/agent/vrouter/ksync/interface_ksync.h +++ b/src/vnsw/agent/vrouter/ksync/interface_ksync.h @@ -90,6 +90,7 @@ class InterfaceKSyncEntry : public KSyncNetlinkDBEntry { InterfaceKSyncObject *ksync_obj_; bool l2_active_; bool metadata_l2_active_; + bool metadata_ip_active_; bool bridging_; MacAddress mac_; MacAddress smac_;