From c9821d496ca0de4f054a022bb606f6134da2fb6b Mon Sep 17 00:00:00 2001 From: Naveen N Date: Sat, 28 Nov 2015 22:25:02 +0530 Subject: [PATCH] Encode fat flow config in vrouter ksync. Also, add introspect for fat flow config. Change-Id: I9261c39a034b884b273619ee3b9bd55a2d5001b3 closes-bug: 1518234 --- src/vnsw/agent/oper/agent.sandesh | 1 + src/vnsw/agent/oper/interface.cc | 11 +++++++++++ src/vnsw/agent/vrouter/ksync/interface_ksync.cc | 10 ++++++++++ 3 files changed, 22 insertions(+) diff --git a/src/vnsw/agent/oper/agent.sandesh b/src/vnsw/agent/oper/agent.sandesh index b4bf56db2d4..db49af453e4 100644 --- a/src/vnsw/agent/oper/agent.sandesh +++ b/src/vnsw/agent/oper/agent.sandesh @@ -99,6 +99,7 @@ struct ItfSandeshData { 49: optional string ipv4_active; 50: list fixed_ip4_list; 51: list fixed_ip6_list; + 52: list fat_flow_list; } struct VnIpamData { diff --git a/src/vnsw/agent/oper/interface.cc b/src/vnsw/agent/oper/interface.cc index b8a8fed235e..f2e0b855c60 100644 --- a/src/vnsw/agent/oper/interface.cc +++ b/src/vnsw/agent/oper/interface.cc @@ -930,6 +930,17 @@ void Interface::SetItfSandeshData(ItfSandeshData &data) const { } data.set_fixed_ip6_list(fixed_ip6_list); + std::vector fat_flow_list; + VmInterface::FatFlowEntrySet::iterator fat_flow_it = + vintf->fat_flow_list().list_.begin(); + while (fat_flow_it != vintf->fat_flow_list().list_.end()) { + ostringstream str; + str << (int)fat_flow_it->protocol << ":" << (int)fat_flow_it->port<<""; + fat_flow_list.push_back(str.str()); + fat_flow_it++; + } + data.set_fat_flow_list(fat_flow_list); + if (vintf->fabric_port()) { data.set_fabric_port("FabricPort"); } else { diff --git a/src/vnsw/agent/vrouter/ksync/interface_ksync.cc b/src/vnsw/agent/vrouter/ksync/interface_ksync.cc index c145d7cd8bc..2aee2bb3d82 100644 --- a/src/vnsw/agent/vrouter/ksync/interface_ksync.cc +++ b/src/vnsw/agent/vrouter/ksync/interface_ksync.cc @@ -529,6 +529,16 @@ int InterfaceKSyncEntry::Encode(sandesh_op::type op, char *buf, int buf_len) { ((const int8_t *)smac(), (const int8_t *)smac() + smac().size())); } + + if (fat_flow_list_.list_.size() != 0) { + std::vector fat_flow_list; + for (VmInterface::FatFlowEntrySet::const_iterator it = + fat_flow_list_.list_.begin(); it != fat_flow_list_.list_.end(); + it++) { + fat_flow_list.push_back(it->protocol << 16 | it->port); + } + encoder.set_vifr_fat_flow_protocol_port(fat_flow_list); + } break; }