diff --git a/cfgmgr/buffer_check_headroom_mellanox.lua b/cfgmgr/buffer_check_headroom_mellanox.lua index 510a967b73..da4a443b1b 100644 --- a/cfgmgr/buffer_check_headroom_mellanox.lua +++ b/cfgmgr/buffer_check_headroom_mellanox.lua @@ -10,15 +10,36 @@ local new_pg = ARGV[3] local accumulative_size = 0 local appl_db = "0" +local config_db = "4" local state_db = "6" local ret_true = {} +local ret_false = {} local ret = {} local default_ret = {} table.insert(ret_true, "result:true") +table.insert(ret_false, "result:false") -default_ret = ret_true +-- Fetch the cable length from CONFIG_DB +redis.call('SELECT', config_db) +local cable_length_keys = redis.call('KEYS', 'CABLE_LENGTH*') +if #cable_length_keys == 0 then + return ret_true +end + +-- Check whether cable length exceeds 300m (maximum value in the non-dynamic-buffer solution) +local cable_length_str = redis.call('HGET', cable_length_keys[1], port) +if cable_length_str == nil then + return ret_true +end +local cable_length = tonumber(string.sub(cable_length_str, 1, -2)) +if cable_length > 300 then + default_ret = ret_false +else + default_ret = ret_true +end +table.insert(default_ret, 'debug:no max_headroom_size configured, check cable length instead') local speed = redis.call('HGET', 'PORT|' .. port, 'speed') @@ -46,6 +67,7 @@ local function get_number_of_pgs(keyname) local range = string.match(keyname, "Ethernet%d+:([^%s]+)$") local size if range == nil then + table.insert(debuginfo, "debug:invalid pg:" .. keyname) return 0 end if string.len(range) == 1 then @@ -97,9 +119,11 @@ if max_headroom_size > accumulative_size then table.insert(ret, "result:true") else table.insert(ret, "result:false") - table.insert(ret, "debug:Accumulative headroom on port " .. accumulative_size .. " exceeds the maximum available headroom which is " .. max_headroom_size) end +table.insert(ret, "debug:max headroom:" .. max_headroom_size) +table.insert(ret, "debug:accumulative headroom:" .. accumulative_size) + for i = 1, #debuginfo do table.insert(ret, debuginfo[i]) end diff --git a/orchagent/port.h b/orchagent/port.h index 35085c16c1..baf8e3046e 100644 --- a/orchagent/port.h +++ b/orchagent/port.h @@ -124,7 +124,6 @@ class Port uint32_t m_vnid = VNID_NONE; uint32_t m_fdb_count = 0; uint32_t m_up_member_count = 0; - uint32_t m_maximum_headroom = 0; /* * Following two bit vectors are used to lock diff --git a/orchagent/portsorch.cpp b/orchagent/portsorch.cpp index 57b3df9555..749481240b 100755 --- a/orchagent/portsorch.cpp +++ b/orchagent/portsorch.cpp @@ -263,9 +263,6 @@ PortsOrch::PortsOrch(DBConnector *db, vector &tableNames) m_flexCounterTable = unique_ptr(new ProducerTable(m_flex_db.get(), FLEX_COUNTER_TABLE)); m_flexCounterGroupTable = unique_ptr(new ProducerTable(m_flex_db.get(), FLEX_COUNTER_GROUP_TABLE)); - m_state_db = shared_ptr(new DBConnector("STATE_DB", 0)); - m_stateBufferMaximumValueTable = unique_ptr(new Table(m_state_db.get(), STATE_BUFFER_MAXIMUM_VALUE_TABLE)); - initGearbox(); string queueWmSha, pgWmSha; @@ -3325,25 +3322,6 @@ void PortsOrch::initializePriorityGroups(Port &port) SWSS_LOG_INFO("Get priority groups for port %s", port.m_alias.c_str()); } -void PortsOrch::initializePortMaximumHeadroom(Port &port) -{ - sai_attribute_t attr; - - attr.id = SAI_PORT_ATTR_QOS_MAXIMUM_HEADROOM_SIZE; - - sai_status_t status = sai_port_api->get_port_attribute(port.m_port_id, 1, &attr); - if (status != SAI_STATUS_SUCCESS) - { - SWSS_LOG_NOTICE("Unable to get the maximum headroom for port %s rv:%d, ignored", port.m_alias.c_str(), status); - return; - } - - vector fvVector; - port.m_maximum_headroom = attr.value.u32; - fvVector.emplace_back("max_headroom_size", to_string(port.m_maximum_headroom)); - m_stateBufferMaximumValueTable->set(port.m_alias, fvVector); -} - bool PortsOrch::initializePort(Port &port) { SWSS_LOG_ENTER(); @@ -3352,7 +3330,6 @@ bool PortsOrch::initializePort(Port &port) initializePriorityGroups(port); initializeQueues(port); - initializePortMaximumHeadroom(port); /* Create host interface */ if (!addHostIntfs(port, port.m_alias, port.m_hif_id)) diff --git a/orchagent/portsorch.h b/orchagent/portsorch.h index 627a4f4b38..5fcbacc0cf 100755 --- a/orchagent/portsorch.h +++ b/orchagent/portsorch.h @@ -155,7 +155,6 @@ class PortsOrch : public Orch, public Subject unique_ptr
m_pgTable; unique_ptr
m_pgPortTable; unique_ptr
m_pgIndexTable; - unique_ptr
m_stateBufferMaximumValueTable; unique_ptr m_flexCounterTable; unique_ptr m_flexCounterGroupTable; @@ -166,7 +165,6 @@ class PortsOrch : public Orch, public Subject shared_ptr m_counter_db; shared_ptr m_flex_db; - shared_ptr m_state_db; FlexCounterManager port_stat_manager; FlexCounterManager port_buffer_drop_stat_manager; @@ -229,7 +227,6 @@ class PortsOrch : public Orch, public Subject bool initializePort(Port &port); void initializePriorityGroups(Port &port); - void initializePortMaximumHeadroom(Port &port); void initializeQueues(Port &port); bool addHostIntfs(Port &port, string alias, sai_object_id_t &host_intfs_id);