[Yang] [CBF Maps] SONiC CBF MAPs Yang (#9116)

* SONiC CBF MAPs Yang

    Created SONiC Yang model for the following CBF MAPs:
    DSCP_TO_FC_MAP
    EXP_TO_FC
This commit is contained in:
Cosmin-Jinga-MS 2021-12-06 21:41:39 +02:00 committed by GitHub
parent f501311f11
commit c5d0df1b51
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 368 additions and 23 deletions

View File

@ -8,12 +8,14 @@ from json import dump, dumps, loads
from xmltodict import parse
from glob import glob
qos_maps_model = ['DSCP_TO_TC_MAP_LIST',
'DOT1P_TO_TC_MAP_LIST',
'TC_TO_PRIORITY_GROUP_MAP_LIST',
'TC_TO_QUEUE_MAP_LIST',
'MAP_PFC_PRIORITY_TO_QUEUE_LIST',
'PFC_PRIORITY_TO_PRIORITY_GROUP_MAP_LIST']
Type_1_list_maps_model = ['DSCP_TO_TC_MAP_LIST',
'DOT1P_TO_TC_MAP_LIST',
'TC_TO_PRIORITY_GROUP_MAP_LIST',
'TC_TO_QUEUE_MAP_LIST',
'MAP_PFC_PRIORITY_TO_QUEUE_LIST',
'PFC_PRIORITY_TO_PRIORITY_GROUP_MAP_LIST',
'DSCP_TO_FC_MAP_LIST',
'EXP_TO_FC_MAP_LIST']
"""
This is the Exception thrown out of all public function of this class.
@ -413,7 +415,7 @@ class SonicYangExtMixin:
return vValue
"""
Xlate a Qos Maps list
Xlate a Type 1 map list
This function will xlate from a dict in config DB to a Yang JSON list
using yang model. Output will be go in self.xlateJson
@ -421,7 +423,7 @@ class SonicYangExtMixin:
are displayed only when an entry is not xlated properly from ConfigDB
to sonic_yang.json.
QOS MAPS Yang has inner list, which is diffrent from config DB.
Type 1 Lists have inner list, which is diffrent from config DB.
Each field value in config db should be converted to inner list with
key and value.
Example:
@ -465,7 +467,7 @@ class SonicYangExtMixin:
}
}
"""
def _xlateQosMapList(self, model, yang, config, table, exceptionList):
def _xlateType1MapList(self, model, yang, config, table, exceptionList):
#create a dict to map each key under primary key with a dict yang model.
#This is done to improve performance of mapping from values of TABLEs in
@ -524,12 +526,12 @@ class SonicYangExtMixin:
to sonic_yang.json.
"""
def _xlateList(self, model, yang, config, table, exceptionList):
#Qos Map lists needs special handling because of inner yang list and
#config db format.
if model['@name'] in qos_maps_model:
self.sysLog(msg="_xlateQosMapList: {}".format(model['@name']))
self._xlateQosMapList(model, yang,config, table, exceptionList)
# Type 1 lists need special handling because of inner yang list and
# config db format.
if model['@name'] in Type_1_list_maps_model:
self.sysLog(msg="_xlateType1MapList: {}".format(model['@name']))
self._xlateType1MapList(model, yang, config, table, exceptionList)
return
#create a dict to map each key under primary key with a dict yang model.
@ -744,7 +746,7 @@ class SonicYangExtMixin:
"""
Rev xlate from <TABLE>_LIST to table in config DB
QOS MAP Yang has inner list, each inner list key:val should
Type 1 Lists have inner list, each inner list key:val should
be mapped to field:value in Config DB.
Example:
@ -788,14 +790,14 @@ class SonicYangExtMixin:
}
"""
def _revQosMapXlateList(self, model, yang, config, table):
def _revXlateType1MapList(self, model, yang, config, table):
# get keys from YANG model list itself
listKeys = model['key']['@value']
# create a dict to map each key under primary key with a dict yang model.
# This is done to improve performance of mapping from values of TABLEs in
# config DB to leaf in YANG LIST.
# Gather inner list key and value from model
# Gather inner list key and value from model
inner_clist = model.get('list')
if inner_clist:
inner_listKey = inner_clist['key']['@value']
@ -824,10 +826,10 @@ class SonicYangExtMixin:
Rev xlate from <TABLE>_LIST to table in config DB
"""
def _revXlateList(self, model, yang, config, table):
# special processing for QOS Map table.
if model['@name'] in qos_maps_model:
self._revQosMapXlateList(model, yang, config, table)
# special processing for Type 1 Map tables.
if model['@name'] in Type_1_list_maps_model:
self._revXlateType1MapList(model, yang, config, table)
return
# get keys from YANG model list itself

View File

@ -125,6 +125,8 @@ setup(
'./yang-models/sonic-scheduler.yang',
'./yang-models/sonic-wred-profile.yang',
'./yang-models/sonic-queue.yang',
'./yang-models/sonic-dscp-fc-map.yang',
'./yang-models/sonic-exp-fc-map.yang',
'./yang-models/sonic-dscp-tc-map.yang',
'./yang-models/sonic-dot1p-tc-map.yang',
'./yang-models/sonic-tc-priority-group-map.yang',

View File

@ -1310,7 +1310,29 @@
"scheduler": "TEST@1",
"wred_profile": "Wred1"
}
},
},
"DSCP_TO_FC_MAP": {
"Dscp_to_fc_map1": {
"1": "1",
"2": "2"
},
"Dscp_to_fc_map2": {
"3": "3",
"4": "4"
}
},
"EXP_TO_FC_MAP": {
"Exp_to_fc_map1": {
"1": "1",
"2": "2"
},
"Exp_to_fc_map2": {
"3": "3",
"4": "4"
}
},
"DSCP_TO_TC_MAP": {
"Dscp_to_tc_map1": {

View File

@ -0,0 +1,24 @@
{
"DSCP_TO_FC_MAP_CREATE": {
"desc": "Configure a DSCP to Forwarding class map."
},
"DSCP_TO_FC_MAP_CREATE_INVALID_DSCP": {
"desc": "Configure a DSCP to Forwarding class map with invalid key.",
"eStr": "Invalid DSCP"
},
"DSCP_TO_FC_MAP_CREATE_INVALID_FC": {
"desc": "Configure a DSCP to Forwarding class map with invalid value.",
"eStr": "Invalid Forwarding Class"
},
"EXP_TO_FC_MAP_CREATE": {
"desc": "Configure a EXP to Forwarding class map."
},
"EXP_TO_FC_MAP_CREATE_INVALID_EXP": {
"desc": "Configure a EXP to Forwarding class map with invalid key.",
"eStr": "Invalid EXP"
},
"EXP_TO_FC_MAP_CREATE_INVALID_FC": {
"desc": "Configure a EXP to Forwarding class map with invalid value.",
"eStr": "Invalid Forwarding Class"
}
}

View File

@ -0,0 +1,159 @@
{
"DSCP_TO_FC_MAP_CREATE": {
"sonic-dscp-fc-map:sonic-dscp-fc-map": {
"sonic-dscp-fc-map:DSCP_TO_FC_MAP": {
"DSCP_TO_FC_MAP_LIST": [
{
"name": "map1",
"DSCP_TO_FC_MAP": [
{
"dscp": "1",
"fc": "1"
},
{
"dscp":"2",
"fc":"2"
}
]
},
{
"name": "map2",
"DSCP_TO_FC_MAP": [
{
"dscp": "1",
"fc": "1"
},
{
"dscp":"2",
"fc":"2"
}
]
}
]
}
}
},
"DSCP_TO_FC_MAP_CREATE_INVALID_DSCP": {
"sonic-dscp-fc-map:sonic-dscp-fc-map": {
"sonic-dscp-fc-map:DSCP_TO_FC_MAP": {
"DSCP_TO_FC_MAP_LIST": [
{
"name": "map3",
"DSCP_TO_FC_MAP": [
{
"dscp": "64",
"fc": "1"
},
{
"dscp":"2",
"fc":"2"
}
]
}
]
}
}
},
"DSCP_TO_FC_MAP_CREATE_INVALID_FC": {
"sonic-dscp-fc-map:sonic-dscp-fc-map": {
"sonic-dscp-fc-map:DSCP_TO_FC_MAP": {
"DSCP_TO_FC_MAP_LIST": [
{
"name": "map3",
"DSCP_TO_FC_MAP": [
{
"dscp": "1",
"fc": "8"
},
{
"dscp":"2",
"fc":"2"
}
]
}
]
}
}
},
"EXP_TO_FC_MAP_CREATE": {
"sonic-exp-fc-map:sonic-exp-fc-map": {
"sonic-exp-fc-map:EXP_TO_FC_MAP": {
"EXP_TO_FC_MAP_LIST": [
{
"name": "map1",
"EXP_TO_FC_MAP": [
{
"exp": "1",
"fc": "1"
},
{
"exp":"2",
"fc":"2"
}
]
},
{
"name": "map2",
"EXP_TO_FC_MAP": [
{
"exp": "1",
"fc": "1"
},
{
"exp":"2",
"fc":"2"
}
]
}
]
}
}
},
"EXP_TO_FC_MAP_CREATE_INVALID_EXP": {
"sonic-exp-fc-map:sonic-exp-fc-map": {
"sonic-exp-fc-map:EXP_TO_FC_MAP": {
"EXP_TO_FC_MAP_LIST": [
{
"name": "map3",
"EXP_TO_FC_MAP": [
{
"exp": "8",
"fc": "1"
},
{
"exp":"2",
"fc":"2"
}
]
}
]
}
}
},
"EXP_TO_FC_MAP_CREATE_INVALID_FC": {
"sonic-exp-fc-map:sonic-exp-fc-map": {
"sonic-exp-fc-map:EXP_TO_FC_MAP": {
"EXP_TO_FC_MAP_LIST": [
{
"name": "map3",
"EXP_TO_FC_MAP": [
{
"exp": "1",
"fc": "8"
},
{
"exp":"2",
"fc":"2"
}
]
}
]
}
}
}
}

View File

@ -0,0 +1,68 @@
module sonic-dscp-fc-map {
yang-version 1.1;
namespace "http://github.com/Azure/sonic-dscp-fc-map";
prefix dtm;
organization
"SONiC";
contact
"SONiC";
description
"DSCP_TO_FC_MAP yang Module for SONiC OS";
revision 2021-10-29 {
description
"Initial revision.";
}
container sonic-dscp-fc-map {
container DSCP_TO_FC_MAP {
description "DSCP_TO_FC_MAP part of config_db.json";
list DSCP_TO_FC_MAP_LIST {
key "name";
leaf name {
type string {
pattern '[a-zA-Z0-9]{1}([-a-zA-Z0-9_]{0,31})';
length 1..32 {
error-message "Invalid length for map name.";
error-app-tag map-name-invalid-length;
}
}
}
list DSCP_TO_FC_MAP { //this is list inside list for storing mapping between two fields
key "dscp";
leaf dscp {
type string {
pattern "6[0-3]|[1-5][0-9]?|[0-9]?" {
error-message "Invalid DSCP";
error-app-tag dscp-invalid;
}
}
}
leaf fc {
type string {
pattern "[0-7]?" {
error-message "Invalid Forwarding Class";
error-app-tag fc-invalid;
}
}
}
}
}
}
}
}

View File

@ -0,0 +1,68 @@
module sonic-exp-fc-map {
yang-version 1.1;
namespace "http://github.com/Azure/sonic-exp-fc-map";
prefix dtm;
organization
"SONiC";
contact
"SONiC";
description
"EXP_TO_FC_MAP yang Module for SONiC OS";
revision 2021-10-29 {
description
"Initial revision.";
}
container sonic-exp-fc-map {
container EXP_TO_FC_MAP {
description "EXP_TO_FC_MAP part of config_db.json";
list EXP_TO_FC_MAP_LIST {
key "name";
leaf name {
type string {
pattern '[a-zA-Z0-9]{1}([-a-zA-Z0-9_]{0,31})';
length 1..32 {
error-message "Invalid length for map name.";
error-app-tag map-name-invalid-length;
}
}
}
list EXP_TO_FC_MAP { //this is list inside list for storing mapping between two fields
key "exp";
leaf exp {
type string {
pattern "[0-7]?" {
error-message "Invalid EXP";
error-app-tag exp-invalid;
}
}
}
leaf fc {
type string {
pattern "[0-7]?" {
error-message "Invalid Forwarding Class";
error-app-tag fc-invalid;
}
}
}
}
}
}
}
}