diff --git a/orchagent/aclorch.cpp b/orchagent/aclorch.cpp index 3f47cb38730..18d4d973e7a 100644 --- a/orchagent/aclorch.cpp +++ b/orchagent/aclorch.cpp @@ -1555,10 +1555,10 @@ void AclTable::update(SubjectType type, void *cntx) } PortUpdate *update = static_cast(cntx); - Port &port = update->port; + sai_object_id_t bind_port_id; - if (!gPortsOrch->getAclBindPortId(port.m_alias, bind_port_id)) + if (!AclOrch::getAclBindPortId(port, bind_port_id)) { SWSS_LOG_ERROR("Failed to get port %s bind port ID", port.m_alias.c_str()); @@ -2634,7 +2634,14 @@ bool AclOrch::updateAclTablePorts(AclTable &newTable, AclTable &curTable) } else if (curTable.portSet.find(p) != curTable.portSet.end()) { - gPortsOrch->getAclBindPortId(p, port_oid); + Port port; + if (!gPortsOrch->getPort(p, port)) + { + SWSS_LOG_ERROR("Unable to retrieve OID for port %s", p.c_str()); + continue; + } + + getAclBindPortId(port, port_oid); assert(port_oid != SAI_NULL_OBJECT_ID); assert(curTable.ports.find(port_oid) != curTable.ports.end()); if (curTable.ports[port_oid] != SAI_NULL_OBJECT_ID) @@ -2661,7 +2668,7 @@ bool AclOrch::updateAclTablePorts(AclTable &newTable, AclTable &curTable) continue; } - if (!gPortsOrch->getAclBindPortId(p, port_oid)) + if (!getAclBindPortId(port, port_oid)) { // We do NOT expect this to happen at all. // If at all happens, lets catch it here! @@ -3170,7 +3177,7 @@ bool AclOrch::processAclTablePorts(string portList, AclTable &aclTable) } sai_object_id_t bind_port_id; - if (!gPortsOrch->getAclBindPortId(alias, bind_port_id)) + if (!getAclBindPortId(port, bind_port_id)) { SWSS_LOG_ERROR("Failed to get port %s bind port ID for ACL table %s", alias.c_str(), aclTable.id.c_str()); @@ -3566,3 +3573,34 @@ sai_status_t AclOrch::deleteDTelWatchListTables() return SAI_STATUS_SUCCESS; } + +bool AclOrch::getAclBindPortId(Port &port, sai_object_id_t &port_id) +{ + SWSS_LOG_ENTER(); + + switch (port.m_type) + { + case Port::PHY: + if (port.m_lag_member_id != SAI_NULL_OBJECT_ID) + { + SWSS_LOG_WARN("Invalid configuration. Bind table to LAG member %s is not allowed", port.m_alias.c_str()); + return false; + } + else + { + port_id = port.m_port_id; + } + break; + case Port::LAG: + port_id = port.m_lag_id; + break; + case Port::VLAN: + port_id = port.m_vlan_info.vlan_oid; + break; + default: + SWSS_LOG_ERROR("Failed to process port. Incorrect port %s type %d", port.m_alias.c_str(), port.m_type); + return false; + } + + return true; +} diff --git a/orchagent/aclorch.h b/orchagent/aclorch.h index 262cf3adfa9..f4037d38312 100644 --- a/orchagent/aclorch.h +++ b/orchagent/aclorch.h @@ -430,6 +430,9 @@ class AclOrch : public Orch, public Observer map m_mirrorTableCapabilities; static sai_acl_action_type_t getAclActionFromAclEntry(sai_acl_entry_attr_t attr); + + // Get the OID for the ACL bind point for a given port + static bool getAclBindPortId(Port& port, sai_object_id_t& port_id); private: SwitchOrch *m_switchOrch; diff --git a/orchagent/portsorch.cpp b/orchagent/portsorch.cpp index 20663b35c24..aaa4aa38990 100755 --- a/orchagent/portsorch.cpp +++ b/orchagent/portsorch.cpp @@ -609,46 +609,6 @@ bool PortsOrch::getPortByBridgePortId(sai_object_id_t bridge_port_id, Port &port return false; } -// TODO: move this into AclOrch -bool PortsOrch::getAclBindPortId(string alias, sai_object_id_t &port_id) -{ - SWSS_LOG_ENTER(); - - Port port; - if (getPort(alias, port)) - { - switch (port.m_type) - { - case Port::PHY: - if (port.m_lag_member_id != SAI_NULL_OBJECT_ID) - { - SWSS_LOG_WARN("Invalid configuration. Bind table to LAG member %s is not allowed", alias.c_str()); - return false; - } - else - { - port_id = port.m_port_id; - } - break; - case Port::LAG: - port_id = port.m_lag_id; - break; - case Port::VLAN: - port_id = port.m_vlan_info.vlan_oid; - break; - default: - SWSS_LOG_ERROR("Failed to process port. Incorrect port %s type %d", alias.c_str(), port.m_type); - return false; - } - - return true; - } - else - { - return false; - } -} - bool PortsOrch::addSubPort(Port &port, const string &alias, const bool &adminUp, const uint32_t &mtu) { size_t found = alias.find(VLAN_SUB_INTERFACE_SEPARATOR); diff --git a/orchagent/portsorch.h b/orchagent/portsorch.h index 936f1ff07ea..20f02a77bc4 100755 --- a/orchagent/portsorch.h +++ b/orchagent/portsorch.h @@ -93,7 +93,6 @@ class PortsOrch : public Orch, public Subject void setPort(string alias, Port port); void getCpuPort(Port &port); bool getVlanByVlanId(sai_vlan_id_t vlan_id, Port &vlan); - bool getAclBindPortId(string alias, sai_object_id_t &port_id); bool setHostIntfsOperStatus(const Port& port, bool up) const; void updateDbPortOperStatus(const Port& port, sai_port_oper_status_t status) const;