diff --git a/orchagent/orchdaemon.cpp b/orchagent/orchdaemon.cpp index 3e79c70bba..9f96991169 100644 --- a/orchagent/orchdaemon.cpp +++ b/orchagent/orchdaemon.cpp @@ -155,7 +155,6 @@ bool OrchDaemon::init() gDirectory.set(vxlan_tunnel_map_orch); VxlanVrfMapOrch *vxlan_vrf_orch = new VxlanVrfMapOrch(m_applDb, APP_VXLAN_VRF_TABLE_NAME); gDirectory.set(vxlan_vrf_orch); - VxlanTunnelOrch *vxlan_tunnel_orch; = new VxlanTunnelOrch(m_stateDb, m_applDb, APP_VXLAN_TUNNEL_TABLE_NAME); EvpnNvoOrch* evpn_nvo_orch = new EvpnNvoOrch(m_applDb, APP_VXLAN_EVPN_NVO_TABLE_NAME); @@ -317,6 +316,7 @@ bool OrchDaemon::init() m_orchList.push_back(chassis_frontend_orch); m_orchList.push_back(vrf_orch); + VxlanTunnelOrch *vxlan_tunnel_orch = NULL; if (platform == MLNX_PLATFORM_SUBSTRING) { EvpnRemoteVnip2mpOrch* evpn_remote_vni_orch = new EvpnRemoteVnip2mpOrch(m_applDb, APP_VXLAN_REMOTE_VNI_TABLE_NAME); diff --git a/orchagent/port.h b/orchagent/port.h index 138592e64a..dab16ce898 100644 --- a/orchagent/port.h +++ b/orchagent/port.h @@ -32,7 +32,7 @@ struct VlanMemberEntry typedef std::map vlan_members_t; -typedef std::map endpoint_ip_l2mc_group_member_map_t; +typedef std::map endpoint_ip_l2mc_group_member_map_t; struct VlanInfo { @@ -42,7 +42,7 @@ struct VlanInfo sai_vlan_flood_control_type_t uuc_flood_type = SAI_VLAN_FLOOD_CONTROL_TYPE_ALL; sai_vlan_flood_control_type_t umc_flood_type = SAI_VLAN_FLOOD_CONTROL_TYPE_ALL; sai_vlan_flood_control_type_t bc_flood_type = SAI_VLAN_FLOOD_CONTROL_TYPE_ALL; - spai_object_id_t l2mc_group_id = SAI_NULL_OBJECT_ID; + sai_object_id_t l2mc_group_id = SAI_NULL_OBJECT_ID; endpoint_ip_l2mc_group_member_map_t l2mc_members; }; diff --git a/orchagent/portsorch.cpp b/orchagent/portsorch.cpp index a74d843ffd..6680b5a9f5 100755 --- a/orchagent/portsorch.cpp +++ b/orchagent/portsorch.cpp @@ -406,7 +406,7 @@ PortsOrch::PortsOrch(DBConnector *db, vector &tableNames, if (sai_query_attribute_enum_values_capability(gSwitchId, SAI_OBJECT_TYPE_VLAN, SAI_VLAN_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE, - values) != SAI_STATUS_SUCCESS) + &values) != SAI_STATUS_SUCCESS) { SWSS_LOG_NOTICE("This device does not support unknown unicast flood control types"); } @@ -414,7 +414,7 @@ PortsOrch::PortsOrch(DBConnector *db, vector &tableNames, { for (uint32_t idx = 0; idx < values.count; idx++) { - uuc_sup_flood_control_type.insert(values.list[idx]); + uuc_sup_flood_control_type.insert(static_cast(values.list[idx])); } } @@ -424,7 +424,7 @@ PortsOrch::PortsOrch(DBConnector *db, vector &tableNames, if (sai_query_attribute_enum_values_capability(gSwitchId, SAI_OBJECT_TYPE_VLAN, SAI_VLAN_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE, - values) != SAI_STATUS_SUCCESS) + &values) != SAI_STATUS_SUCCESS) { SWSS_LOG_NOTICE("This device does not support unknown multicast flood control types"); } @@ -432,7 +432,7 @@ PortsOrch::PortsOrch(DBConnector *db, vector &tableNames, { for (uint32_t idx = 0; idx < values.count; idx++) { - umc_sup_flood_control_type.insert(values.list[idx]); + umc_sup_flood_control_type.insert(static_cast(values.list[idx])); } } @@ -442,7 +442,7 @@ PortsOrch::PortsOrch(DBConnector *db, vector &tableNames, if (sai_query_attribute_enum_values_capability(gSwitchId, SAI_OBJECT_TYPE_VLAN, SAI_VLAN_ATTR_BROADCAST_FLOOD_CONTROL_TYPE, - values) != SAI_STATUS_SUCCESS) + &values) != SAI_STATUS_SUCCESS) { SWSS_LOG_NOTICE("This device does not support broadcast flood control types"); } @@ -450,7 +450,7 @@ PortsOrch::PortsOrch(DBConnector *db, vector &tableNames, { for (uint32_t idx = 0; idx < values.count; idx++) { - bc_sup_flood_control_type.insert(values.list[idx]); + bc_sup_flood_control_type.insert(static_cast(values.list[idx])); } } @@ -4019,7 +4019,7 @@ bool PortsOrch::addVlan(string vlan_alias) umc_flood_type = SAI_VLAN_FLOOD_CONTROL_TYPE_COMBINED; } - if(bc_sup_flood_control_type.find(SAI_VLAN_ATTR_BROADCAST_FLOOD_CONTROL_TYPE) + if(bc_sup_flood_control_type.find(SAI_VLAN_FLOOD_CONTROL_TYPE_COMBINED) != umc_sup_flood_control_type.end()) { attr.id = SAI_VLAN_ATTR_BROADCAST_FLOOD_CONTROL_TYPE; @@ -4128,13 +4128,13 @@ bool PortsOrch::getVlanByVlanId(sai_vlan_id_t vlan_id, Port &vlan) return false; } -bool PortsOrch::addVlanFloodGroups(Port &vlan, Port &port, string &tagging_mode, string end_point_ip) +bool PortsOrch::addVlanFloodGroups(Port &vlan, Port &port, string end_point_ip) { SWSS_LOG_ENTER(); sai_object_id_t l2mc_group_id = SAI_NULL_OBJECT_ID; sai_status_t status; - + sai_attribute_t attr; if (vlan.m_vlan_info.l2mc_group_id == SAI_NULL_OBJECT_ID) { @@ -4144,7 +4144,6 @@ bool PortsOrch::addVlanFloodGroups(Port &vlan, Port &port, string &tagging_mode, SWSS_LOG_ERROR("Failed to create l2mc flood group"); return false; } - sai_attribute_t attr; if (vlan.m_vlan_info.uuc_flood_type == SAI_VLAN_FLOOD_CONTROL_TYPE_COMBINED) { @@ -4218,7 +4217,7 @@ bool PortsOrch::addVlanFloodGroups(Port &vlan, Port &port, string &tagging_mode, sai_object_id_t l2mc_group_member = SAI_NULL_OBJECT_ID; status = sai_l2mc_group_api->create_l2mc_group_member(&l2mc_group_member, gSwitchId, - static_castattrs.size(), + static_cast(attrs.size()), attrs.data()); if (status != SAI_STATUS_FAILURE) { @@ -4226,11 +4225,12 @@ bool PortsOrch::addVlanFloodGroups(Port &vlan, Port &port, string &tagging_mode, end_point_ip.c_str(), vlan.m_vlan_info.vlan_id); return false; } - vlan.m_vlan_info[end_point_ip] = l2mc_group_member; + vlan.m_vlan_info.l2mc_members[end_point_ip] = l2mc_group_member; return true; } -bool PortsOrch::createVlanMember(Port &vlan, Port &port, string &tagging_mode) +bool PortsOrch::createVlanMember(Port &vlan, Port &port, sai_vlan_tagging_mode_t &sai_tagging_mode, + sai_object_id_t &vlan_member_id) { SWSS_LOG_ENTER(); @@ -4245,19 +4245,10 @@ bool PortsOrch::createVlanMember(Port &vlan, Port &port, string &tagging_mode) attr.value.oid = port.m_bridge_port_id; attrs.push_back(attr); - sai_vlan_tagging_mode_t sai_tagging_mode = SAI_VLAN_TAGGING_MODE_TAGGED; attr.id = SAI_VLAN_MEMBER_ATTR_VLAN_TAGGING_MODE; - if (tagging_mode == "untagged") - sai_tagging_mode = SAI_VLAN_TAGGING_MODE_UNTAGGED; - else if (tagging_mode == "tagged") - sai_tagging_mode = SAI_VLAN_TAGGING_MODE_TAGGED; - else if (tagging_mode == "priority_tagged") - sai_tagging_mode = SAI_VLAN_TAGGING_MODE_PRIORITY_TAGGED; - else assert(false); attr.value.s32 = sai_tagging_mode; attrs.push_back(attr); - sai_object_id_t vlan_member_id; sai_status_t status = sai_vlan_api->create_vlan_member(&vlan_member_id, gSwitchId, (uint32_t)attrs.size(), attrs.data()); if (status != SAI_STATUS_SUCCESS) { @@ -4275,24 +4266,32 @@ bool PortsOrch::createVlanMember(Port &vlan, Port &port, string &tagging_mode) } -bool PortsOrch::addVlanMember(Port &vlan, Port &port, string &tagging_mode, string end_point_ip = "") +bool PortsOrch::addVlanMember(Port &vlan, Port &port, string &tagging_mode, string end_point_ip) { SWSS_LOG_ENTER(); + sai_object_id_t vlan_member_id; if (!end_point_ip.empty()) { if (!((vlan.m_vlan_info.uuc_flood_type == SAI_VLAN_FLOOD_CONTROL_TYPE_COMBINED) || (vlan.m_vlan_info.umc_flood_type == SAI_VLAN_FLOOD_CONTROL_TYPE_COMBINED) || - (vlan.m_vlan_info.bc_flood_type == SAI_VLAN_FLOOD_CONTROL_TYPE_COMBINED)) + (vlan.m_vlan_info.bc_flood_type == SAI_VLAN_FLOOD_CONTROL_TYPE_COMBINED))) { SWSS_LOG_ERROR("Flood group with end point ip is not supported"); return false; } - // TODO Check if P2MP bridgeport needs to be added as vlan member return addVlanFloodGroups(vlan, port, end_point_ip); } - if(!createVlanMember(vlan, port, tagging_mode)) + sai_vlan_tagging_mode_t sai_tagging_mode = SAI_VLAN_TAGGING_MODE_TAGGED; + if (tagging_mode == "untagged") + sai_tagging_mode = SAI_VLAN_TAGGING_MODE_UNTAGGED; + else if (tagging_mode == "tagged") + sai_tagging_mode = SAI_VLAN_TAGGING_MODE_TAGGED; + else if (tagging_mode == "priority_tagged") + sai_tagging_mode = SAI_VLAN_TAGGING_MODE_PRIORITY_TAGGED; + else assert(false); + if(!createVlanMember(vlan, port, sai_tagging_mode, vlan_member_id)) { return false; } @@ -4319,7 +4318,7 @@ bool PortsOrch::addVlanMember(Port &vlan, Port &port, string &tagging_mode, stri return true; } -bool PortsOrch::removeVlanEndPointIP(Port &vlan, Port &port, string end_point_ip) +bool PortsOrch::removeVlanEndPointIp(Port &vlan, Port &port, string end_point_ip) { SWSS_LOG_ENTER(); @@ -4328,7 +4327,7 @@ bool PortsOrch::removeVlanEndPointIP(Port &vlan, Port &port, string end_point_ip if(vlan.m_vlan_info.l2mc_members.find(end_point_ip) == vlan.m_vlan_info.l2mc_members.end()) { SWSS_LOG_NOTICE("End point ip %s is not part of vlan %hu", - end_point_ip, vlan.m_vlan_info.vlan_id); + end_point_ip.c_str(), vlan.m_vlan_info.vlan_id); return true; } @@ -4336,11 +4335,12 @@ bool PortsOrch::removeVlanEndPointIP(Port &vlan, Port &port, string end_point_ip if (status != SAI_STATUS_SUCCESS) { SWSS_LOG_ERROR("Failed to remove end point ip %s from vlan %hu", - end_point_ip, vlan.m_vlan_info.vlan_id); + end_point_ip.c_str(), vlan.m_vlan_info.vlan_id); return false; } vlan.m_vlan_info.l2mc_members.erase(end_point_ip); sai_object_id_t l2mc_group_id = SAI_NULL_OBJECT_ID; + sai_attribute_t attr; if (vlan.m_vlan_info.l2mc_members.empty()) { @@ -4352,7 +4352,7 @@ bool PortsOrch::removeVlanEndPointIP(Port &vlan, Port &port, string end_point_ip status = sai_vlan_api->set_vlan_attribute(vlan.m_vlan_info.vlan_oid, &attr); if (status != SAI_STATUS_SUCCESS) { - SWSS_LOG_ERROR("Failed to set null l2mc group %" + SWSS_LOG_ERROR("Failed to set null l2mc group " " to vlan %hu for unknown unicast flooding", vlan.m_vlan_info.vlan_id); return false; @@ -4366,7 +4366,7 @@ bool PortsOrch::removeVlanEndPointIP(Port &vlan, Port &port, string end_point_ip status = sai_vlan_api->set_vlan_attribute(vlan.m_vlan_info.vlan_oid, &attr); if (status != SAI_STATUS_SUCCESS) { - SWSS_LOG_ERROR("Failed to set null l2mc group %" + SWSS_LOG_ERROR("Failed to set null l2mc group " " to vlan %hu for unknown multicast flooding", vlan.m_vlan_info.vlan_id); return false; @@ -4380,7 +4380,7 @@ bool PortsOrch::removeVlanEndPointIP(Port &vlan, Port &port, string end_point_ip status = sai_vlan_api->set_vlan_attribute(vlan.m_vlan_info.vlan_oid, &attr); if (status != SAI_STATUS_SUCCESS) { - SWSS_LOG_ERROR("Failed to set null l2mc group %" + SWSS_LOG_ERROR("Failed to set null l2mc group " " to vlan %hu for broadcast flooding", vlan.m_vlan_info.vlan_id); return false; @@ -4397,13 +4397,13 @@ bool PortsOrch::removeVlanEndPointIP(Port &vlan, Port &port, string end_point_ip return true; } -bool PortsOrch::removeVlanMember(Port &vlan, Port &port, string end_point_ip="") +bool PortsOrch::removeVlanMember(Port &vlan, Port &port, string end_point_ip) { SWSS_LOG_ENTER(); if (!end_point_ip.empty()) { - return removeVlanEndPointIP(vlan, port, end_point_ip); + return removeVlanEndPointIp(vlan, port, end_point_ip); } sai_object_id_t vlan_member_id; sai_vlan_tagging_mode_t sai_tagging_mode; @@ -4448,7 +4448,7 @@ bool PortsOrch::removeVlanMember(Port &vlan, Port &port, string end_point_ip="") return true; } -bool PortsOrch::isVlanMember(Port &vlan, Port &port, string end_point_ip = "") +bool PortsOrch::isVlanMember(Port &vlan, Port &port, string end_point_ip) { if (!end_point_ip.empty()) { diff --git a/orchagent/portsorch.h b/orchagent/portsorch.h index 16c4bf26eb..3f2467c378 100755 --- a/orchagent/portsorch.h +++ b/orchagent/portsorch.h @@ -142,9 +142,12 @@ class PortsOrch : public Orch, public Subject bool removeTunnel(Port tunnel); bool addBridgePort(Port &port); bool removeBridgePort(Port &port); - bool addVlanMember(Port &vlan, Port &port, string& tagging_mode); - bool removeVlanMember(Port &vlan, Port &port); + bool addVlanMember(Port &vlan, Port &port, string& tagging_mode, string end_point_ip = ""); + bool removeVlanMember(Port &vlan, Port &port, string end_point_ip = ""); bool isVlanMember(Port &vlan, Port &port, string end_point_ip = ""); + bool addVlanFloodGroups(Port &vlan, Port &port, string end_point_ip); + bool createVlanMember(Port &vlan, Port &port, sai_vlan_tagging_mode_t &sai_tagging_mode, sai_object_id_t &vlan_member_id); + bool removeVlanEndPointIp(Port &vlan, Port &port, string end_point_ip); string m_inbandPortName = ""; bool isInbandPort(const string &alias); diff --git a/orchagent/saihelper.cpp b/orchagent/saihelper.cpp index ed10112d31..3cc9ba476b 100644 --- a/orchagent/saihelper.cpp +++ b/orchagent/saihelper.cpp @@ -184,7 +184,7 @@ void initSaiApi() sai_api_query(SAI_API_NAT, (void **)&sai_nat_api); sai_api_query(SAI_API_SYSTEM_PORT, (void **)&sai_system_port_api); sai_api_query(SAI_API_MACSEC, (void **)&sai_macsec_api); - sai_api_query(SAI_API_L2MC_GROUP, (void **)&sai_l2mc_group_api_t); + sai_api_query(SAI_API_L2MC_GROUP, (void **)&sai_l2mc_group_api); sai_log_set(SAI_API_SWITCH, SAI_LOG_LEVEL_NOTICE); sai_log_set(SAI_API_BRIDGE, SAI_LOG_LEVEL_NOTICE); diff --git a/orchagent/vxlanorch.cpp b/orchagent/vxlanorch.cpp index c13415f3fc..e2fc8b2a7a 100644 --- a/orchagent/vxlanorch.cpp +++ b/orchagent/vxlanorch.cpp @@ -1566,7 +1566,7 @@ void VxlanTunnelOrch::deleteTunnelPort(Port &tunnelPort) return ; } -std::string VxlanTunnelOrch::getTunnelPortName(const std::string& vtep, bool local=false) +std::string VxlanTunnelOrch::getTunnelPortName(const std::string& vtep, bool local) { std::string tunnelPortName; @@ -1584,7 +1584,7 @@ std::string VxlanTunnelOrch::getTunnelPortName(const std::string& vtep, bool loc bool VxlanTunnelOrch::isSrcVtepTunnel(Port& tunnelPort) { string tunnel_port_name = tunnelPort.m_alias; - string prefix = "Port_SRC_VTEP_" + string prefix = "Port_SRC_VTEP_"; return (tunnel_port_name.compare(0, sizeof(prefix), prefix) == 0); } @@ -1676,9 +1676,9 @@ void VxlanTunnelOrch::addRemoveStateTableEntry(string tunnel_name, } } -bool VxlanTunnelOrch::getTunnelPort(const std::string& vtep,Port& tunnelPort, bool local=false) +bool VxlanTunnelOrch::getTunnelPort(const std::string& vtep,Port& tunnelPort, bool local) { - auto port_tunnel_name = getTunnelPortName(remote_vtep, local); + auto port_tunnel_name = getTunnelPortName(vtep, local); bool ret = gPortsOrch->getPort(port_tunnel_name,tunnelPort); @@ -1748,13 +1748,13 @@ bool VxlanTunnelMapOrch::addOperation(const Request& request) TUNNELMAP_SET_VLAN(mapper_list); TUNNELMAP_SET_VRF(mapper_list); tunnel_obj->createTunnelHw(mapper_list,TUNNEL_MAP_USE_DEDICATED_ENCAP_DECAP); - Port tunport; - if (!getTunnelPort(tunnel_name, tunport, true)) + Port tunPort; + if (!tunnel_orch->getTunnelPort(tunnel_name, tunPort, true)) { - auto port_tunnel_name = getTunnelPortName(tunnel_name, true); - gPortsOrch->addTunnel(port_tunnel_name,dip_tunnel->getTunnelId(), false); + auto port_tunnel_name = tunnel_orch->getTunnelPortName(tunnel_name, true); + gPortsOrch->addTunnel(port_tunnel_name, tunnel_obj->getTunnelId(), false); gPortsOrch->getPort(port_tunnel_name,tunPort); - gPortsOrch->addBridgePort(tunnelPort); + gPortsOrch->addBridgePort(tunPort); } } @@ -1847,13 +1847,13 @@ bool VxlanTunnelMapOrch::delOperation(const Request& request) if (tunnel_obj->getDipTunnelCnt() == 0) { Port tunnelPort; - auto port_tunnel_name = getTunnelPortName(tunnel_name, true); + auto port_tunnel_name = tunnel_orch->getTunnelPortName(tunnel_name, true); bool ret; - ret = gPortsOrch->getPort(port_tunnel_name,tunPort); + ret = gPortsOrch->getPort(port_tunnel_name,tunnelPort); if (!ret) { - SWSS_LOG_ERROR("Get port failed for source vtep", tunnel_name.c_str()); + SWSS_LOG_ERROR("Get port failed for source vtep %s", port_tunnel_name.c_str()); return true; } @@ -1861,7 +1861,7 @@ bool VxlanTunnelMapOrch::delOperation(const Request& request) if (!ret) { SWSS_LOG_ERROR("Remove Bridge port failed for source vtep = %s fdbcount = %d", - tunnel_name.c_str(), tunnelPort.m_fdb_count); + port_tunnel_name.c_str(), tunnelPort.m_fdb_count); return true; } @@ -2184,7 +2184,7 @@ bool EvpnRemoteVnip2mpOrch::addOperation(const Request& request) { SWSS_LOG_ENTER(); - EvpnNvoOrch* evpn_nvo_orch = gDirectory.get(); + EvpnNvoOrch* evpn_orch = gDirectory.get(); // Extract end point ip auto end_point_ip = request.getKeyString(1); @@ -2204,8 +2204,8 @@ bool EvpnRemoteVnip2mpOrch::addOperation(const Request& request) auto vtep_ptr = evpn_orch->getEVPNVtep(); if (!vtep_ptr) { - SWSS_LOG_WARN("Remote VNI add: VTEP not found. remote=%s vid=%d", - remote_vtep.c_str(),vlan_id); + SWSS_LOG_WARN("Remote VNI add: Source VTEP not found. remote=%s vid=%d", + end_point_ip.c_str(),vlan_id); return true; } @@ -2218,13 +2218,13 @@ bool EvpnRemoteVnip2mpOrch::addOperation(const Request& request) auto src_vtep = vtep_ptr->getSrcIP().to_string(); if (tunnel_orch->getTunnelPort(src_vtep,tunnelPort, true)) { - SWSS_LOG_INFO("Vxlan tunnelPort exists: %s", remote_vtep.c_str()); + SWSS_LOG_INFO("Vxlan tunnelPort exists: %s", src_vtep.c_str()); if (gPortsOrch->isVlanMember(vlanPort, tunnelPort, end_point_ip)) { SWSS_LOG_WARN("Remote end point %s already member of vid %d", end_point_ip.c_str(),vlan_id); - vtep_ptr->increment_spurious_imr_add(remote_vtep); + vtep_ptr->increment_spurious_imr_add(end_point_ip); return true; } } @@ -2240,15 +2240,13 @@ bool EvpnRemoteVnip2mpOrch::addOperation(const Request& request) gPortsOrch->addVlanMember(vlanPort, tunnelPort, tagging_mode, end_point_ip); SWSS_LOG_INFO("end_point_ip=%s vni=%d vlanid=%d ", - remote_vtep.c_str(), vni_id, vlan_id); + end_point_ip.c_str(), vni_id, vlan_id); return true; } bool EvpnRemoteVnip2mpOrch::delOperation(const Request& request) { - bool ret; - SWSS_LOG_ENTER(); // Extract end point ip @@ -2269,13 +2267,13 @@ bool EvpnRemoteVnip2mpOrch::delOperation(const Request& request) VxlanTunnelOrch* tunnel_orch = gDirectory.get(); Port vlanPort, tunnelPort; - EvpnNvoOrch* evpn_nvo_orch = gDirectory.get(); + EvpnNvoOrch* evpn_orch = gDirectory.get(); auto vtep_ptr = evpn_orch->getEVPNVtep(); if (!vtep_ptr) { SWSS_LOG_WARN("Remote VNI add: VTEP not found. remote=%s vid=%d", - remote_vtep.c_str(),vlan_id); + end_point_ip.c_str(),vlan_id); return true; } diff --git a/orchagent/vxlanorch.h b/orchagent/vxlanorch.h index 57cdf6c0c3..c939fd4aa3 100644 --- a/orchagent/vxlanorch.h +++ b/orchagent/vxlanorch.h @@ -245,7 +245,7 @@ typedef std::map VTEPTable; class VxlanTunnelOrch : public Orch2 { public: - VxlanTunnelOrch(DBConnector *statedb, DBConnector *db, const std::string& tableName, bool dipTunnelSupported) : + VxlanTunnelOrch(DBConnector *statedb, DBConnector *db, const std::string& tableName, bool dipTunnelsSupported) : Orch2(db, tableName, request_), m_stateVxlanTable(statedb, STATE_VXLAN_TUNNEL_TABLE_NAME), dip_tunnels_used(dipTunnelsSupported) {} @@ -315,6 +315,7 @@ class VxlanTunnelOrch : public Orch2 void addRemoveStateTableEntry(const string, IpAddress&, IpAddress&, tunnel_creation_src_t, bool); std::string getTunnelPortName(const std::string& vtep, bool local=false); + bool isSrcVtepTunnel(Port& tunnelPort); void getTunnelNameFromDIP(const string& dip, string& tunnel_name); void getTunnelNameFromPort(string& tunnel_portname, string& tunnel_name); void getTunnelDIPFromPort(Port& tunnelPort, string& remote_vtep);