@@ -701,21 +701,6 @@ sai_status_t SwitchStateBase::set_switch_default_attributes()
701
701
702
702
sai_attribute_t attr;
703
703
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
-
719
704
attr.id = SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY;
720
705
attr.value .ptr = NULL ;
721
706
@@ -746,6 +731,76 @@ sai_status_t SwitchStateBase::set_switch_default_attributes()
746
731
return set (SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr);
747
732
}
748
733
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
+
749
804
sai_status_t SwitchStateBase::create_default_vlan ()
750
805
{
751
806
SWSS_LOG_ENTER ();
@@ -1261,6 +1316,7 @@ sai_status_t SwitchStateBase::initialize_default_objects()
1261
1316
CHECK_STATUS (set_number_of_ecmp_groups ());
1262
1317
CHECK_STATUS (set_switch_default_attributes ());
1263
1318
CHECK_STATUS (create_scheduler_groups ());
1319
+ CHECK_STATUS (set_static_crm_values ());
1264
1320
1265
1321
return SAI_STATUS_SUCCESS;
1266
1322
}
@@ -1576,6 +1632,17 @@ sai_status_t SwitchStateBase::refresh_read_only(
1576
1632
case SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_CHILDS_PER_SCHEDULER_GROUP:
1577
1633
return SAI_STATUS_SUCCESS;
1578
1634
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:
1579
1646
case SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY:
1580
1647
case SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY:
1581
1648
case SAI_SWITCH_ATTR_AVAILABLE_DOUBLE_NAT_ENTRY:
0 commit comments