Add yang model definition for CHASSIS_MODULE table (#14007) (#14262)

Why I did it
Add yang model definition for CHASSIS_MODULE define and implemented for sonic chassis. HLD for this configuration is included in https://github.com/sonic-net/SONiC/blob/master/doc/pmon/pmon-chassis-design.md#configuration

Fixes #12640

How I did it
Added yang model definition, unit tests, sample config and documentation for the table

How to verify it
Validated config tree generation using "pyang -Vf tree -p /usr/local/share/yang/modules/ietf ./yang-models/sonic-voq-inband-interface.yang"

Built the below python-wheels to validate unit tests and other changes
target/python-wheels/bullseye/sonic_yang_mgmt-1.0-py3-none-any.whl
target/python-wheels/bullseye/sonic_yang_models-1.0-py3-none-any.whl
target/python-wheels/bullseye/sonic_config_engine-1.0-py3-none-any.whl
This commit is contained in:
Tejaswini Chadaga 2023-03-16 10:20:56 -07:00 committed by GitHub
parent 19d6f3029c
commit df22ead036
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 175 additions and 44 deletions

View File

@ -18,6 +18,7 @@ Table of Contents
* [Buffer port ingress profile list](#buffer-port-ingress-profile-list) * [Buffer port ingress profile list](#buffer-port-ingress-profile-list)
* [Buffer port egress profile list](#buffer-port-egress-profile-list) * [Buffer port egress profile list](#buffer-port-egress-profile-list)
* [Cable length](#cable-length) * [Cable length](#cable-length)
* [Chassis module](#chassis-module)
* [COPP_TABLE](#copp_table) * [COPP_TABLE](#copp_table)
* [CRM](#crm) * [CRM](#crm)
* [Data Plane L3 Interfaces](#data-plane-l3-interfaces) * [Data Plane L3 Interfaces](#data-plane-l3-interfaces)
@ -56,7 +57,7 @@ Table of Contents
* [Virtual router](#virtual-router) * [Virtual router](#virtual-router)
* [WRED_PROFILE](#wred_profile) * [WRED_PROFILE](#wred_profile)
* [PASSWORD_HARDENING](#password_hardening) * [PASSWORD_HARDENING](#password_hardening)
* [RADIUS](#radius) * [RADIUS](#radius)
* [For Developers](#for-developers) * [For Developers](#for-developers)
* [Generating Application Config by Jinja2 Template](#generating-application-config-by-jinja2-template) * [Generating Application Config by Jinja2 Template](#generating-application-config-by-jinja2-template)
* [Incremental Configuration by Subscribing to ConfigDB](#incremental-configuration-by-subscribing-to-configdb) * [Incremental Configuration by Subscribing to ConfigDB](#incremental-configuration-by-subscribing-to-configdb)
@ -631,6 +632,24 @@ This kind of profiles will be handled by buffer manager and won't be applied to
} }
} }
```
### Chassis Module
CHASSIS_MODULE table holds the list and configuration of linecard and fabric modules in a SONiC chassis.
It currently allows user to administratively bring down a line-card or fabric-card
```
{
"CHASSIS_MODULE": {
"LINE-CARD0": {
"admin_status": "down"
},
"FABRIC-CARD1": {
"admin_status": "down"
}
}
}
``` ```
### COPP_TABLE ### COPP_TABLE
@ -726,13 +745,13 @@ This kind of profiles will be handled by buffer manager and won't be applied to
### Data Plane L3 Interfaces ### Data Plane L3 Interfaces
IP configuration for data plane are defined in **INTERFACE**, **VLAN_SUB_INTERFACE**, IP configuration for data plane are defined in **INTERFACE**, **VLAN_SUB_INTERFACE**,
**PORTCHANNEL_INTERFACE** and **VLAN_INTERFACE** table. The objects **PORTCHANNEL_INTERFACE** and **VLAN_INTERFACE** table. The objects
in all four tables have the interface (could be physical port, port in all four tables have the interface (could be physical port, port
channel, vlan or vlan sub interface) that IP address is attached to as first-level key, and channel, vlan or vlan sub interface) that IP address is attached to as first-level key, and
IP prefix as second-level key. IP interface address objects don't have any attributes. IP prefix as second-level key. IP interface address objects don't have any attributes.
IP interface attributes, resides in those tables as well, key is the interface name IP interface attributes, resides in those tables as well, key is the interface name
and value is a list of field-values representing the interface attributes, e.g. loopback action. and value is a list of field-values representing the interface attributes, e.g. loopback action.
``` ```
{ {
@ -740,27 +759,27 @@ and value is a list of field-values representing the interface attributes, e.g.
"Ethernet0|10.0.0.0/31": {}, "Ethernet0|10.0.0.0/31": {},
"Ethernet4|10.0.0.2/31": {}, "Ethernet4|10.0.0.2/31": {},
"Ethernet8|10.0.0.4/31": {} "Ethernet8|10.0.0.4/31": {}
"Ethernet8": { "Ethernet8": {
"loopback_action": "drop" "loopback_action": "drop"
} }
}, },
"PORTCHANNEL_INTERFACE": { "PORTCHANNEL_INTERFACE": {
"PortChannel01|10.0.0.56/31": {}, "PortChannel01|10.0.0.56/31": {},
"PortChannel01|FC00::71/126": {}, "PortChannel01|FC00::71/126": {},
"PortChannel02|10.0.0.58/31": {}, "PortChannel02|10.0.0.58/31": {},
"PortChannel02|FC00::75/126": {} "PortChannel02|FC00::75/126": {}
}, },
"VLAN_INTERFACE": { "VLAN_INTERFACE": {
"Vlan1000|192.168.0.1/27": {} "Vlan1000|192.168.0.1/27": {}
}, },
"VLAN_SUB_INTERFACE": { "VLAN_SUB_INTERFACE": {
"Ethernet4.1|10.0.0.2/31": {}, "Ethernet4.1|10.0.0.2/31": {},
"Ethernet4.1": { "Ethernet4.1": {
"loopback_action": "drop" "loopback_action": "drop"
} }
} }
} }
``` ```
@ -1600,7 +1619,7 @@ VOQ_INBAND_INTERFACE holds the name of the inband system port dedicated for cpu
"Ethernet-IB0|3333::3:5/128": {} "Ethernet-IB0|3333::3:5/128": {}
} }
``` ```
### Virtual router ### Virtual router
The virtual router table allows to insert or update a new virtual router The virtual router table allows to insert or update a new virtual router
@ -1758,29 +1777,29 @@ The method could be:
} }
} }
``` ```
### RADIUS ### RADIUS
The RADIUS and RADIUS_SERVER tables define RADIUS config paramerters. RADIUS table carries global configuration while RADIUS_SERVER table carries per server configuration. The RADIUS and RADIUS_SERVER tables define RADIUS config paramerters. RADIUS table carries global configuration while RADIUS_SERVER table carries per server configuration.
``` ```
"RADIUS": { "RADIUS": {
"global": { "global": {
"auth_type": "pap", "auth_type": "pap",
"timeout": "5" "timeout": "5"
} }
} }
"RADIUS_SERVER": { "RADIUS_SERVER": {
"192.168.1.2": { "192.168.1.2": {
"priority": "4", "priority": "4",
"retransmit": "2", "retransmit": "2",
"timeout": "5" "timeout": "5"
} }
} }
``` ```
For Developers For Developers
============== ==============

View File

@ -97,6 +97,7 @@ setup(
'./yang-models/sonic-buffer-profile.yang', './yang-models/sonic-buffer-profile.yang',
'./yang-models/sonic-buffer-queue.yang', './yang-models/sonic-buffer-queue.yang',
'./yang-models/sonic-cable-length.yang', './yang-models/sonic-cable-length.yang',
'./yang-models/sonic-chassis-module.yang',
'./yang-models/sonic-copp.yang', './yang-models/sonic-copp.yang',
'./yang-models/sonic-crm.yang', './yang-models/sonic-crm.yang',
'./yang-models/sonic-default-lossless-buffer-parameter.yang', './yang-models/sonic-default-lossless-buffer-parameter.yang',

View File

@ -1400,6 +1400,14 @@
"prefix1|1|10.0.0.0/8|8..16": { "prefix1|1|10.0.0.0/8|8..16": {
} }
}, },
"CHASSIS_MODULE": {
"LINE-CARD0": {
"admin_status": "down"
},
"FABRIC-CARD1": {
"admin_status": "down"
}
},
"COPP_GROUP": { "COPP_GROUP": {
"queue1_group1": { "queue1_group1": {
"queue": "1", "queue": "1",

View File

@ -0,0 +1,13 @@
{
"CHASSIS_MODULE_WITH_DEFAULT_VALUES": {
"desc": "Load chassis module table with fields set to default values"
},
"CHASSIS_MODULE_WITH_LINECARD_ADMIN_DOWN": {
"desc": "Load chassis module table with admin_status set to down"
},
"CHASSIS_MODULE_WITH_LINECARD_ADMIN_INVALID_VALUE": {
"desc": "Load chassis module table with admin_status set to invalid value",
"eStrKey": "InvalidValue",
"eStr": ["admin_status"]
}
}

View File

@ -0,0 +1,54 @@
{
"CHASSIS_MODULE_WITH_DEFAULT_VALUES": {
"sonic-chassis-module:sonic-chassis-module": {
"sonic-chassis-module:CHASSIS_MODULE": {
"CHASSIS_MODULE_LIST": [
{
"name": "LINE-CARD0",
"admin_status": "up"
},
{
"name": "LINE-CARD1",
"admin_status": "up"
},
{
"name": "FABRIC-CARD0",
"admin_status": "up"
},
{
"name": "FABRIC-CARD1",
"admin_status": "up"
}
]
}
}
},
"CHASSIS_MODULE_WITH_LINECARD_ADMIN_DOWN": {
"sonic-chassis-module:sonic-chassis-module": {
"sonic-chassis-module:CHASSIS_MODULE": {
"CHASSIS_MODULE_LIST": [
{
"name": "LINE-CARD0",
"admin_status": "down"
},
{
"name": "FABRIC-CARD1",
"admin_status": "down"
}
]
}
}
},
"CHASSIS_MODULE_WITH_LINECARD_ADMIN_INVALID_VALUE": {
"sonic-chassis-module:sonic-chassis-module": {
"sonic-chassis-module:CHASSIS_MODULE": {
"CHASSIS_MODULE_LIST": [
{
"name": "LINE-CARD0",
"admin_status": "false"
}
]
}
}
}
}

View File

@ -0,0 +1,36 @@
module sonic-chassis-module {
yang-version 1.1;
namespace "http://github.com/sonic-net/sonic-chassis-module";
prefix chassis_mod;
import sonic-types {
prefix stypes;
}
description "CHASSIS_MODULE YANG to administratively set SONIC modules state";
revision 2023-02-24 {
description "Initial version";
}
container sonic-chassis-module {
container CHASSIS_MODULE {
description "List of modules in the chassis";
list CHASSIS_MODULE_LIST {
key "name";
leaf name {
type string {
pattern "LINE-CARD[0-9]+|FABRIC-CARD[0-9]+";
}
description "Line-card or fabric-card module name";
}
leaf admin_status {
type stypes:admin_status;
default up;
description "Administrative state of chassis module";
}
}
}
}
}