@@ -58,6 +58,8 @@ map<string, sai_port_attr_t> qos_to_attr_map = {
58
58
{mpls_tc_to_tc_field_name, SAI_PORT_ATTR_QOS_MPLS_EXP_TO_TC_MAP},
59
59
{dot1p_to_tc_field_name, SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP},
60
60
{tc_to_queue_field_name, SAI_PORT_ATTR_QOS_TC_TO_QUEUE_MAP},
61
+ {tc_to_dot1p_field_name, SAI_PORT_ATTR_QOS_TC_AND_COLOR_TO_DOT1P_MAP},
62
+ {tc_to_dscp_field_name, SAI_PORT_ATTR_QOS_TC_AND_COLOR_TO_DSCP_MAP},
61
63
{tc_to_pg_map_field_name, SAI_PORT_ATTR_QOS_TC_TO_PRIORITY_GROUP_MAP},
62
64
{pfc_to_pg_map_name, SAI_PORT_ATTR_QOS_PFC_PRIORITY_TO_PRIORITY_GROUP_MAP},
63
65
{pfc_to_queue_map_name, SAI_PORT_ATTR_QOS_PFC_PRIORITY_TO_QUEUE_MAP},
@@ -85,6 +87,7 @@ type_map QosOrch::m_qos_maps = {
85
87
{CFG_PFC_PRIORITY_TO_QUEUE_MAP_TABLE_NAME, new object_reference_map ()},
86
88
{CFG_DSCP_TO_FC_MAP_TABLE_NAME, new object_reference_map ()},
87
89
{CFG_EXP_TO_FC_MAP_TABLE_NAME, new object_reference_map ()},
90
+ {CFG_TC_TO_DOT1P_MAP_TABLE_NAME, new object_reference_map ()},
88
91
{CFG_TC_TO_DSCP_MAP_TABLE_NAME, new object_reference_map ()},
89
92
{APP_TUNNEL_DECAP_TABLE_NAME, new object_reference_map ()}
90
93
};
@@ -94,6 +97,8 @@ map<string, string> qos_to_ref_table_map = {
94
97
{mpls_tc_to_tc_field_name, CFG_MPLS_TC_TO_TC_MAP_TABLE_NAME},
95
98
{dot1p_to_tc_field_name, CFG_DOT1P_TO_TC_MAP_TABLE_NAME},
96
99
{tc_to_queue_field_name, CFG_TC_TO_QUEUE_MAP_TABLE_NAME},
100
+ {tc_to_dot1p_field_name, CFG_TC_TO_DOT1P_MAP_TABLE_NAME},
101
+ {tc_to_dscp_field_name, CFG_TC_TO_DSCP_MAP_TABLE_NAME},
97
102
{tc_to_pg_map_field_name, CFG_TC_TO_PRIORITY_GROUP_MAP_TABLE_NAME},
98
103
{pfc_to_pg_map_name, CFG_PFC_PRIORITY_TO_PRIORITY_GROUP_MAP_TABLE_NAME},
99
104
{pfc_to_queue_map_name, CFG_PFC_PRIORITY_TO_QUEUE_MAP_TABLE_NAME},
@@ -178,7 +183,7 @@ task_process_status QosMapHandler::processWorkItem(Consumer& consumer, KeyOpFiel
178
183
}
179
184
if (!removeQosItem (sai_object))
180
185
{
181
- SWSS_LOG_ERROR (" Failed to remove dscp_to_tc map. db name:%s sai object:%" PRIx64, qos_object_name.c_str (), sai_object);
186
+ SWSS_LOG_ERROR (" Failed to remove QoS map. db name:%s sai object:%" PRIx64, qos_object_name.c_str (), sai_object);
182
187
return task_process_status::task_failed;
183
188
}
184
189
auto it_to_delete = (QosOrch::getTypeMap ()[qos_map_type_name])->find (qos_object_name);
@@ -470,6 +475,60 @@ task_process_status QosOrch::handleTcToQueueTable(Consumer& consumer, KeyOpField
470
475
return tc_queue_handler.processWorkItem (consumer, tuple);
471
476
}
472
477
478
+ // Functions for TC-to-DOT1P qos map handling
479
+ bool TcToDot1pMapHandler::convertFieldValuesToAttributes (KeyOpFieldsValuesTuple &tuple, vector<sai_attribute_t > &attributes)
480
+ {
481
+ SWSS_LOG_ENTER ();
482
+ sai_attribute_t list_attr;
483
+ sai_qos_map_list_t tc_map_list;
484
+ tc_map_list.count = (uint32_t )kfvFieldsValues (tuple).size ();
485
+ tc_map_list.list = new sai_qos_map_t [tc_map_list.count ]();
486
+ uint32_t ind = 0 ;
487
+ for (auto i = kfvFieldsValues (tuple).begin (); i != kfvFieldsValues (tuple).end (); i++, ind++)
488
+ {
489
+ tc_map_list.list [ind].key .tc = (uint8_t )stoi (fvField (*i));
490
+ tc_map_list.list [ind].value .dot1p = (uint8_t )stoi (fvValue (*i));
491
+ }
492
+ list_attr.id = SAI_QOS_MAP_ATTR_MAP_TO_VALUE_LIST;
493
+ list_attr.value .qosmap .count = tc_map_list.count ;
494
+ list_attr.value .qosmap .list = tc_map_list.list ;
495
+ attributes.push_back (list_attr);
496
+ return true ;
497
+ }
498
+
499
+ sai_object_id_t TcToDot1pMapHandler::addQosItem (const vector<sai_attribute_t > &attributes)
500
+ {
501
+ SWSS_LOG_ENTER ();
502
+ sai_status_t sai_status;
503
+ sai_object_id_t sai_object;
504
+ vector<sai_attribute_t > qos_map_attrs;
505
+ sai_attribute_t qos_map_attr;
506
+
507
+ qos_map_attr.id = SAI_QOS_MAP_ATTR_TYPE;
508
+ qos_map_attr.value .s32 = SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P;
509
+ qos_map_attrs.push_back (qos_map_attr);
510
+
511
+ qos_map_attr.id = SAI_QOS_MAP_ATTR_MAP_TO_VALUE_LIST;
512
+ qos_map_attr.value .qosmap .count = attributes[0 ].value .qosmap .count ;
513
+ qos_map_attr.value .qosmap .list = attributes[0 ].value .qosmap .list ;
514
+ qos_map_attrs.push_back (qos_map_attr);
515
+
516
+ sai_status = sai_qos_map_api->create_qos_map (&sai_object, gSwitchId , (uint32_t )qos_map_attrs.size (), qos_map_attrs.data ());
517
+ if (SAI_STATUS_SUCCESS != sai_status)
518
+ {
519
+ SWSS_LOG_ERROR (" Failed to create tc_to_dot1p qos map. status:%d" , sai_status);
520
+ return SAI_NULL_OBJECT_ID;
521
+ }
522
+ return sai_object;
523
+ }
524
+
525
+ task_process_status QosOrch::handleTcToDot1pTable (Consumer& consumer, KeyOpFieldsValuesTuple &tuple)
526
+ {
527
+ SWSS_LOG_ENTER ();
528
+ TcToDot1pMapHandler tc_dot1p_handler;
529
+ return tc_dot1p_handler.processWorkItem (consumer, tuple);
530
+ }
531
+
473
532
void WredMapHandler::freeAttribResources (vector<sai_attribute_t > &attributes)
474
533
{
475
534
SWSS_LOG_ENTER ();
@@ -857,7 +916,7 @@ sai_object_id_t TcToPgHandler::addQosItem(const vector<sai_attribute_t> &attribu
857
916
sai_status = sai_qos_map_api->create_qos_map (&sai_object, gSwitchId , (uint32_t )qos_map_attrs.size (), qos_map_attrs.data ());
858
917
if (SAI_STATUS_SUCCESS != sai_status)
859
918
{
860
- SWSS_LOG_ERROR (" Failed to create tc_to_queue map. status:%d" , sai_status);
919
+ SWSS_LOG_ERROR (" Failed to create tc_to_pg map. status:%d" , sai_status);
861
920
return SAI_NULL_OBJECT_ID;
862
921
}
863
922
return sai_object;
@@ -911,7 +970,7 @@ sai_object_id_t PfcPrioToPgHandler::addQosItem(const vector<sai_attribute_t> &at
911
970
sai_status = sai_qos_map_api->create_qos_map (&sai_object, gSwitchId , (uint32_t )qos_map_attrs.size (), qos_map_attrs.data ());
912
971
if (SAI_STATUS_SUCCESS != sai_status)
913
972
{
914
- SWSS_LOG_ERROR (" Failed to create tc_to_queue map. status:%d" , sai_status);
973
+ SWSS_LOG_ERROR (" Failed to create pfc_priority_to_queue map. status:%d" , sai_status);
915
974
return SAI_NULL_OBJECT_ID;
916
975
}
917
976
return sai_object;
@@ -966,7 +1025,7 @@ sai_object_id_t PfcToQueueHandler::addQosItem(const vector<sai_attribute_t> &att
966
1025
sai_status = sai_qos_map_api->create_qos_map (&sai_object, gSwitchId , (uint32_t )qos_map_attrs.size (), qos_map_attrs.data ());
967
1026
if (SAI_STATUS_SUCCESS != sai_status)
968
1027
{
969
- SWSS_LOG_ERROR (" Failed to create tc_to_queue map. status:%d" , sai_status);
1028
+ SWSS_LOG_ERROR (" Failed to create pfc_priority_to_queue map. status:%d" , sai_status);
970
1029
return SAI_NULL_OBJECT_ID;
971
1030
}
972
1031
return sai_object;
@@ -1274,6 +1333,7 @@ void QosOrch::initTableHandlers()
1274
1333
m_qos_handler_map.insert (qos_handler_pair (CFG_DSCP_TO_FC_MAP_TABLE_NAME, &QosOrch::handleDscpToFcTable));
1275
1334
m_qos_handler_map.insert (qos_handler_pair (CFG_EXP_TO_FC_MAP_TABLE_NAME, &QosOrch::handleExpToFcTable));
1276
1335
m_qos_handler_map.insert (qos_handler_pair (CFG_TC_TO_DSCP_MAP_TABLE_NAME, &QosOrch::handleTcToDscpTable));
1336
+ m_qos_handler_map.insert (qos_handler_pair (CFG_TC_TO_DOT1P_MAP_TABLE_NAME, &QosOrch::handleTcToDot1pTable));
1277
1337
1278
1338
m_qos_handler_map.insert (qos_handler_pair (CFG_TC_TO_PRIORITY_GROUP_MAP_TABLE_NAME, &QosOrch::handleTcToPgTable));
1279
1339
m_qos_handler_map.insert (qos_handler_pair (CFG_PFC_PRIORITY_TO_PRIORITY_GROUP_MAP_TABLE_NAME, &QosOrch::handlePfcPrioToPgTable));
0 commit comments