[yang] added mclag sonic yang (#7622)

#### How I did it
Added mclag sonic yang file for the MCLAG enhancements  as per HLD: Azure/SONiC#596

#### How to verify it
try rest APIs

#### Description for the changelog
Added mclag sonic yang
This commit is contained in:
sabari@broadcom 2022-01-27 13:09:58 -08:00 committed by GitHub
parent 2532d65660
commit 018a6495da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 613 additions and 2 deletions

View File

@ -122,7 +122,11 @@ setup(
'./yang-models/sonic-versions.yang',
'./yang-models/sonic-vlan.yang',
'./yang-models/sonic-vrf.yang',
'./yang-models/sonic-mclag.yang',
'./yang-models/sonic-vlan-sub-interface.yang',
'./yang-models/sonic-warm-restart.yang',
'./yang-models/sonic-lldp.yang',
'./yang-models/sonic-scheduler.yang',

View File

@ -93,6 +93,16 @@
"tpid": "0x9200",
"mtu": "9100",
"lacp_key": "auto"
},
"PortChannel2": {
"admin_status": "up",
"min_links": "1",
"members": [
"Ethernet12"
],
"tpid": "0x9200",
"mtu": "9100",
"lacp_key": "auto"
}
},
"PORTCHANNEL_INTERFACE": {
@ -103,7 +113,8 @@
},
"PORTCHANNEL_MEMBER": {
"PortChannel0003|Ethernet1": {},
"PortChannel0004|Ethernet2": {}
"PortChannel0004|Ethernet2": {},
"PortChannel2|Ethernet12": {}
},
"VLAN_INTERFACE": {
"Vlan111": {
@ -309,7 +320,17 @@
"vlanid": "777",
"mtu": "9216",
"admin_status": "up"
},
"Vlan12": {
"description": "mclag session ve",
"dhcp_servers": [
"12.1.1.1"
],
"vlanid": "12",
"mtu": "9216",
"admin_status": "up"
}
},
"DEVICE_NEIGHBOR": {
"Ethernet112": {
@ -909,6 +930,9 @@
},
"Vlan111|PortChannel0003": {
"tagging_mode": "untagged"
},
"Vlan12|PortChannel2": {
"tagging_mode": "tagged"
}
},
"LOOPBACK_INTERFACE": {
@ -1197,6 +1221,7 @@
"trap_group": "queue1_group1"
}
},
"AUTO_TECHSUPPORT": {
"GLOBAL": {
"state" : "enabled",
@ -1331,7 +1356,6 @@
"type": "DWRR",
"weight": "20"
},
"TEST@1": {
"cbs": "1024",
"cir": "1280000",
@ -1480,6 +1504,28 @@
}
},
"MCLAG_DOMAIN": {
"123": {
"source_ip": "12.1.1.1",
"peer_ip": "12.1.1.2",
"peer_link": "PortChannel2",
"keepalive_interval": "1",
"session_timeout": "30"
}
},
"MCLAG_INTERFACE": {
"123|PortChannel0004": {
"if_type": "PortChannel"
}
},
"MCLAG_UNIQUE_IP": {
"Vlan12": {
"unique_ip": "enable"
}
},
"MIRROR_SESSION": {
"erspan": {
"dscp": "10",
@ -1498,6 +1544,7 @@
"Ethernet3",
"Ethernet4"
]
}
}
},

View File

@ -0,0 +1,32 @@
{
"MCLAG_VALID_DOMAIN_CFG_TEST": {
"desc": "valid mclag configuration test"
},
"MCLAG_VALID_DOMAIN_PEERLINK_ETH_TEST": {
"desc": "valid mclag configuration test with peer link ethernet"
},
"MCLAG_INVALID_DOMAIN_IDS_TEST": {
"desc": "configure mclag domain id in range",
"eStr": "MCLAG Domain ID out of range"
},
"MCLAG_INVALID_KEEPALIVE_TEST": {
"desc": "configure mclag keepalive values in range",
"eStr" : "MCLAG Domain keepalive interval out of range"
},
"MCLAG_INVALID_SESSION_TIMEOUT_TEST": {
"desc": "configure mclag session timeout in range",
"eStr" : "MCLAG Domain session timeout out of range"
},
"MCLAG_INVALID_KEEPALIVE_MUST_COND_TEST": {
"desc": "Invalid session and keepalive multiplier",
"eStr" : "(keepalive interval * 3) <= session_timeout value"
},
"MCLAG_INTERFACE_DOMAIN_ABSENT_TEST": {
"desc": "mclag interface configured without domain",
"eStrKey" : "LeafRef"
},
"MCLAG_UNIQUE_IP_DOMAIN_ABSENT_TEST": {
"desc": "mclag unique ip configured without domain",
"eStr" : "mclag not configured"
}
}

View File

@ -0,0 +1,356 @@
{
"MCLAG_VALID_DOMAIN_CFG_TEST": {
"sonic-port:sonic-port": {
"sonic-port:PORT": {
"PORT_LIST": [
{
"admin_status": "up",
"alias": "eth0",
"description": "Ethernet0",
"lanes": "65",
"mtu": 9000,
"name": "Ethernet0",
"speed": 25000
},
{
"admin_status": "up",
"alias": "eth0",
"description": "Ethernet10",
"lanes": "65",
"mtu": 9000,
"name": "Ethernet10",
"speed": 25000
}
]
}
},
"sonic-portchannel:sonic-portchannel": {
"sonic-portchannel:PORTCHANNEL": {
"PORTCHANNEL_LIST": [
{
"admin_status": "up",
"members": [
"Ethernet0"
],
"min_links": "1",
"mtu": "9100",
"lacp_key": "auto",
"name": "PortChannel2"
},
{
"admin_status": "up",
"members": [
"Ethernet10"
],
"min_links": "1",
"mtu": "9100",
"lacp_key": "auto",
"name": "PortChannel10"
}
]
}
},
"sonic-vlan:sonic-vlan": {
"sonic-vlan:VLAN": {
"VLAN_LIST": [
{
"name": "Vlan12"
},
{
"name": "Vlan100"
}
]
},
"sonic-vlan:VLAN_MEMBER": {
"VLAN_MEMBER_LIST": [
{
"port": "PortChannel10",
"tagging_mode": "tagged",
"name": "Vlan100"
},
{
"port": "PortChannel2",
"tagging_mode": "tagged",
"name": "Vlan12"
},
{
"port": "PortChannel2",
"tagging_mode": "tagged",
"name": "Vlan100"
}
]
},
"sonic-vlan:VLAN_INTERFACE": {
"VLAN_INTERFACE_LIST": [
{
"name": "Vlan12"
}
],
"VLAN_INTERFACE_IPPREFIX_LIST": [
{
"family": "IPv4",
"ip-prefix": "12.1.1.1/24",
"scope": "global",
"name": "Vlan12"
}
]
}
},
"sonic-mclag:sonic-mclag": {
"sonic-mclag:MCLAG_DOMAIN": {
"MCLAG_DOMAIN_LIST": [
{
"domain_id": "123",
"source_ip": "12.1.1.1",
"peer_ip" : "12.1.1.2",
"peer_link": "PortChannel2",
"keepalive_interval" : "1",
"session_timeout": "30"
}
]
},
"sonic-mclag:MCLAG_INTERFACE": {
"MCLAG_INTERFACE_LIST": [
{
"domain_id": "123",
"if_name" : "PortChannel10",
"if_type" : "Portchannel"
}
]
}
}
},
"MCLAG_VALID_DOMAIN_PEERLINK_ETH_TEST": {
"sonic-port:sonic-port": {
"sonic-port:PORT": {
"PORT_LIST": [
{
"admin_status": "up",
"alias": "eth0",
"description": "Ethernet0",
"lanes": "65",
"mtu": 9000,
"name": "Ethernet0",
"speed": 25000
},
{
"admin_status": "up",
"alias": "eth4",
"description": "Ethernet4",
"lanes": "65",
"mtu": 9000,
"name": "Ethernet4",
"speed": 25000
}
]
}
},
"sonic-portchannel:sonic-portchannel": {
"sonic-portchannel:PORTCHANNEL": {
"PORTCHANNEL_LIST": [
{
"admin_status": "up",
"members": [
"Ethernet0"
],
"min_links": "1",
"mtu": "9100",
"lacp_key": "auto",
"name": "PortChannel2"
}
]
}
},
"sonic-vlan:sonic-vlan": {
"sonic-vlan:VLAN": {
"VLAN_LIST": [
{
"name": "Vlan12"
}
]
},
"sonic-vlan:VLAN_MEMBER": {
"VLAN_MEMBER_LIST": [
{
"port": "PortChannel2",
"tagging_mode": "tagged",
"name": "Vlan12"
}
]
},
"sonic-vlan:VLAN_INTERFACE": {
"VLAN_INTERFACE_LIST": [
{
"name": "Vlan12"
}
],
"VLAN_INTERFACE_IPPREFIX_LIST": [
{
"family": "IPv4",
"ip-prefix": "12.1.1.1/24",
"scope": "global",
"name": "Vlan12"
}
]
}
},
"sonic-mclag:sonic-mclag": {
"sonic-mclag:MCLAG_DOMAIN": {
"MCLAG_DOMAIN_LIST": [
{
"domain_id": "123",
"source_ip": "12.1.1.1",
"peer_ip" : "12.1.1.2",
"peer_link": "Ethernet4",
"keepalive_interval" : "1",
"session_timeout": "30"
}
]
}
}
},
"MCLAG_INVALID_DOMAIN_IDS_TEST": {
"sonic-mclag:sonic-mclag": {
"sonic-mclag:MCLAG_DOMAIN": {
"MCLAG_DOMAIN_LIST": [
{
"domain_id": "0",
"source_ip": "1.1.1.1"
},
{
"domain_id": "4096",
"source_ip": "1.1.1.1"
}
]
}
}
},
"MCLAG_INVALID_KEEPALIVE_TEST": {
"sonic-mclag:sonic-mclag": {
"sonic-mclag:MCLAG_DOMAIN": {
"MCLAG_DOMAIN_LIST": [
{
"domain_id": "123",
"source_ip": "1.1.1.1",
"keepalive_interval" : "0",
"session_timeout": "30"
},
{
"domain_id": "123",
"source_ip": "1.1.1.1",
"keepalive_interval" : "61",
"session_timeout": "30"
}
]
}
}
},
"MCLAG_INVALID_SESSION_TIMEOUT_TEST": {
"sonic-mclag:sonic-mclag": {
"sonic-mclag:MCLAG_DOMAIN": {
"MCLAG_DOMAIN_LIST": [
{
"domain_id": "123",
"source_ip": "1.1.1.1",
"keepalive_interval" : "1",
"session_timeout": "0"
},
{
"domain_id": "123",
"source_ip": "1.1.1.1",
"keepalive_interval" : "1",
"session_timeout": "3601"
}
]
}
}
},
"MCLAG_INVALID_KEEPALIVE_MUST_COND_TEST": {
"sonic-mclag:sonic-mclag": {
"sonic-mclag:MCLAG_DOMAIN": {
"MCLAG_DOMAIN_LIST": [
{
"domain_id": "123",
"source_ip": "1.1.1.1",
"keepalive_interval" : "40",
"session_timeout": "30"
}
]
}
}
},
"MCLAG_INTERFACE_DOMAIN_ABSENT_TEST": {
"sonic-mclag:sonic-mclag": {
"sonic-mclag:MCLAG_INTERFACE": {
"MCLAG_INTERFACE_LIST": [
{
"domain_id": "1001",
"if_name" : "PortChannel10",
"if_type" : "Portchannel"
},
{
"domain_id": "2001",
"if_name" : "PortChannel20",
"if_type" : "Portchannel"
}
]
}
}
},
"MCLAG_UNIQUE_IP_DOMAIN_ABSENT_TEST": {
"sonic-port:sonic-port": {
"sonic-port:PORT": {
"PORT_LIST": [
{
"admin_status": "up",
"alias": "eth0",
"description": "Ethernet12",
"lanes": "65",
"mtu": 9000,
"name": "Ethernet12",
"speed": 25000
}
]
}
},
"sonic-vlan:sonic-vlan": {
"sonic-vlan:VLAN": {
"VLAN_LIST": [
{
"name": "Vlan12"
}
]
},
"sonic-vlan:VLAN_MEMBER": {
"VLAN_MEMBER_LIST": [
{
"port": "Ethernet12",
"tagging_mode": "tagged",
"name": "Vlan12"
}
]
},
"sonic-vlan:VLAN_INTERFACE": {
"VLAN_INTERFACE_LIST": [
{
"name": "Vlan12"
}
]
}
},
"sonic-mclag:sonic-mclag": {
"sonic-mclag:MCLAG_UNIQUE_IP": {
"MCLAG_UNIQUE_IP_LIST": [
{
"if_name" : "Vlan12",
"unique_ip": "enable"
}
]
}
}
}
}

View File

@ -0,0 +1,172 @@
module sonic-mclag {
namespace "http://github.com/Azure/sonic-mclag";
prefix smclag;
yang-version 1.1;
import ietf-yang-types {
prefix yang;
}
import ietf-inet-types {
prefix inet;
}
import sonic-types {
prefix stypes;
}
import sonic-port {
prefix prt;
}
import sonic-portchannel {
prefix lag;
}
// Comment sonic-vlan import here until libyang back-links issue is resolved for VLAN leaf reference.
//import sonic-vlan {
// prefix vlan;
//}
organization
"SONiC";
contact
"SONiC";
description
"SONIC MCLAG";
revision 2019-10-01 {
description
"Initial revision.";
}
container sonic-mclag {
container MCLAG_DOMAIN {
list MCLAG_DOMAIN_LIST {
key "domain_id";
max-elements 1;
leaf domain_id {
description "MCLAG Domain ID";
type uint16 {
range "1..4095" {
error-message "MCLAG Domain ID out of range";
}
}
}
leaf source_ip {
type inet:ipv4-address;
description "MCLAG Domain source ip address for session between MCLAG Peers";
}
leaf peer_ip {
type inet:ipv4-address;
description "MCLAG Domain peer ip address for session between MCLAG Peers";
}
leaf peer_link {
description "MCLAG Domain peer link, data backup path link between MCLAG peers";
type union {
type leafref {
path "/prt:sonic-port/prt:PORT/prt:PORT_LIST/prt:name";
}
type leafref {
path "/lag:sonic-portchannel/lag:PORTCHANNEL/lag:PORTCHANNEL_LIST/lag:name";
}
}
}
leaf keepalive_interval {
description "keepalive interval in seconds for MCLAG session between peers";
type uint16 {
range "1..60" {
error-message "MCLAG Domain keepalive interval out of range";
error-app-tag keepalive_interval-invalid;
}
}
default 1;
}
leaf session_timeout {
description "Session timeout in seconds for MCLAG session between peers";
type uint16 {
range "1..3600" {
error-message "MCLAG Domain session timeout out of range";
error-app-tag session_timeout-invalid;
}
}
default 30;
}
must "(keepalive_interval * 3) <= session_timeout" {
error-message "(keepalive interval * 3) <= session_timeout value";
error-app-tag keepalive_session_multiplier-invalid;
}
}
}
container MCLAG_INTERFACE {
list MCLAG_INTERFACE_LIST {
description "List of MCLAG interfaces";
key "domain_id if_name";
leaf domain_id {
description "List of MCLAG interfaces";
type leafref {
path "../../../MCLAG_DOMAIN/MCLAG_DOMAIN_LIST/domain_id";
}
}
leaf if_name {
description "MCLAG interface name";
type leafref {
path "/lag:sonic-portchannel/lag:PORTCHANNEL/lag:PORTCHANNEL_LIST/lag:name";
}
}
leaf if_type {
description "MCLAG interface type, placeholder field to create instance";
type string;
}
}
}
container MCLAG_UNIQUE_IP {
list MCLAG_UNIQUE_IP_LIST {
description "List of VLANs allowed to have unique ip addresses on MCLAG Peer nodes";
key "if_name";
must "count(../../MCLAG_DOMAIN/MCLAG_DOMAIN_LIST/domain_id) != 0" {
error-message "mclag not configured";
error-app-tag mclag-invalid;
}
// Comment VLAN leaf reference here until libyang back-links issue is resolved and use VLAN string pattern
//must
// "count(/vlan:sonic-vlan/vlan:VLAN_INTERFACE/vlan:VLAN_INTERFACE_IPPREFIX_LIST[vlan:name=current()/if_name]) = 0" {
// error-message "remove configured ip/v6 address and reconfigure after separate ip configuration";
// error-app-tag vlan-intf-ip-invalid;
// }
leaf if_name {
description "Vlan interface name on which MCLAG unique ip config is done";
// Comment VLAN leaf reference here until libyang back-links issue is resolved and use VLAN string pattern
//type leafref {
// path "/vlan:sonic-vlan/vlan:VLAN/vlan:VLAN_LIST/vlan:name";
//}
type string {
pattern 'Vlan([0-9]{1,3}|[1-3][0-9]{3}|[4][0][0-8][0-9]|[4][0][9][0-4])';
}
}
leaf unique_ip {
description "unique ip enable, by default disable";
type enumeration {
enum enable;
}
}
}
}
}
}