@@ -701,21 +701,6 @@ sai_status_t SwitchStateBase::set_switch_default_attributes()
701701
702702 sai_attribute_t attr;
703703
704- attr.id = SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY;
705- attr.value .u32 = 100 ;
706-
707- CHECK_STATUS (set (SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
708-
709- attr.id = SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY;
710- attr.value .u32 = 100 ;
711-
712- CHECK_STATUS (set (SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
713-
714- attr.id = SAI_SWITCH_ATTR_AVAILABLE_DOUBLE_NAT_ENTRY;
715- attr.value .u32 = 50 ; /* Half of single NAT entry */
716-
717- CHECK_STATUS (set (SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
718-
719704 attr.id = SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY;
720705 attr.value .ptr = NULL ;
721706
@@ -746,6 +731,76 @@ sai_status_t SwitchStateBase::set_switch_default_attributes()
746731 return set (SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr);
747732}
748733
734+ sai_status_t SwitchStateBase::set_static_crm_values ()
735+ {
736+ SWSS_LOG_ENTER ();
737+
738+ std::map<sai_switch_attr_t , int > crm_resource_lookup = {
739+ { SAI_SWITCH_ATTR_AVAILABLE_IPV4_ROUTE_ENTRY, m_maxIPv4RouteEntries },
740+ { SAI_SWITCH_ATTR_AVAILABLE_IPV6_ROUTE_ENTRY, m_maxIPv6RouteEntries },
741+ { SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEXTHOP_ENTRY, m_maxIPv4NextHopEntries },
742+ { SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEXTHOP_ENTRY, m_maxIPv6NextHopEntries },
743+ { SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEIGHBOR_ENTRY, m_maxIPv4NeighborEntries },
744+ { SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEIGHBOR_ENTRY, m_maxIPv6NeighborEntries },
745+ { SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_MEMBER_ENTRY, m_maxNextHopGroupMemberEntries },
746+ { SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_ENTRY, m_maxNextHopGroupEntries },
747+ { SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY, m_maxFdbEntries },
748+ { SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY, m_maxSNATEntries },
749+ { SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY, m_maxDNATEntries },
750+ { SAI_SWITCH_ATTR_AVAILABLE_DOUBLE_NAT_ENTRY, m_maxDoubleNATEntries }
751+ };
752+
753+ for (auto const &resource: crm_resource_lookup)
754+ {
755+ sai_attribute_t attr;
756+ attr.id = resource.first ;
757+ attr.value .u32 = resource.second ;
758+ CHECK_STATUS (set (SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
759+ }
760+
761+ CHECK_STATUS (set_static_acl_resource_list (SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE, m_maxAclTables));
762+
763+ return set_static_acl_resource_list (SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE_GROUP, m_maxAclTableGroups);
764+ }
765+
766+ sai_status_t SwitchStateBase::set_static_acl_resource_list (
767+ _In_ sai_switch_attr_t acl_resource,
768+ _In_ int max_count)
769+ {
770+ auto acl_stages = {SAI_ACL_STAGE_INGRESS, SAI_ACL_STAGE_EGRESS};
771+ auto acl_bind_points = {
772+ SAI_ACL_BIND_POINT_TYPE_PORT,
773+ SAI_ACL_BIND_POINT_TYPE_LAG,
774+ SAI_ACL_BIND_POINT_TYPE_VLAN,
775+ SAI_ACL_BIND_POINT_TYPE_ROUTER_INTERFACE,
776+ SAI_ACL_BIND_POINT_TYPE_SWITCH
777+ };
778+
779+ std::vector<sai_acl_resource_t > acl_resource_list;
780+ for (auto stage: acl_stages)
781+ {
782+ for (auto bp: acl_bind_points)
783+ {
784+ sai_acl_resource_t acl_resource_count;
785+ acl_resource_count.stage = stage;
786+ acl_resource_count.bind_point = bp;
787+ acl_resource_count.avail_num = max_count;
788+
789+ acl_resource_list.push_back (acl_resource_count);
790+ }
791+ }
792+
793+ sai_acl_resource_list_t available_acl_resources;
794+ available_acl_resources.count = static_cast <uint32_t >(acl_resource_list.size ());
795+ available_acl_resources.list = acl_resource_list.data ();
796+
797+ sai_attribute_t attr;
798+ attr.id = acl_resource;
799+ attr.value .aclresource = available_acl_resources;
800+
801+ return set (SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr);
802+ }
803+
749804sai_status_t SwitchStateBase::create_default_vlan ()
750805{
751806 SWSS_LOG_ENTER ();
@@ -1261,6 +1316,7 @@ sai_status_t SwitchStateBase::initialize_default_objects()
12611316 CHECK_STATUS (set_number_of_ecmp_groups ());
12621317 CHECK_STATUS (set_switch_default_attributes ());
12631318 CHECK_STATUS (create_scheduler_groups ());
1319+ CHECK_STATUS (set_static_crm_values ());
12641320
12651321 return SAI_STATUS_SUCCESS;
12661322}
@@ -1576,6 +1632,17 @@ sai_status_t SwitchStateBase::refresh_read_only(
15761632 case SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_CHILDS_PER_SCHEDULER_GROUP:
15771633 return SAI_STATUS_SUCCESS;
15781634
1635+ case SAI_SWITCH_ATTR_AVAILABLE_IPV4_ROUTE_ENTRY:
1636+ case SAI_SWITCH_ATTR_AVAILABLE_IPV6_ROUTE_ENTRY:
1637+ case SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEXTHOP_ENTRY:
1638+ case SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEXTHOP_ENTRY:
1639+ case SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEIGHBOR_ENTRY:
1640+ case SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEIGHBOR_ENTRY:
1641+ case SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_MEMBER_ENTRY:
1642+ case SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_ENTRY:
1643+ case SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY:
1644+ case SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE:
1645+ case SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE_GROUP:
15791646 case SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY:
15801647 case SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY:
15811648 case SAI_SWITCH_ATTR_AVAILABLE_DOUBLE_NAT_ENTRY:
0 commit comments