diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md index c0bec1558f6..972f0e38170 100644 --- a/src/sonic-yang-models/doc/Configuration.md +++ b/src/sonic-yang-models/doc/Configuration.md @@ -34,6 +34,7 @@ Table of Contents * [FG_NHG_PREFIX](#fg_nhg_prefix) * [FLEX_COUNTER_TABLE](#flex_counter_table) * [Hash](#hash) + * [IPv6 Link-local] (#ipv6-link-local) * [KDUMP](#kdump) * [Kubernetes Master](#kubernetes-master) * [L2 Neighbors](#l2-neighbors) @@ -1082,6 +1083,30 @@ The configuration is applied globally for each ECMP and LAG on a switch. } ``` +### IPv6 Link-local +``` +{ + "INTERFACE": { + "Ethernet8": { + "ipv6_use_link_local_only": "disable" + } + }, + + "PORTCHANNEL_INTERFACE": { + "PortChannel01": { + "ipv6_use_link_local_only": "enable" + } + }, + + "VLAN_INTERFACE": { + "Vlan1000": { + "ipv6_use_link_local_only": "enable" + } + } +} + +``` + ### KDUMP ``` diff --git a/src/sonic-yang-models/tests/files/sample_config_db.json b/src/sonic-yang-models/tests/files/sample_config_db.json index 021bac8b30e..8f6041e3e71 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -116,7 +116,8 @@ "PORTCHANNEL_INTERFACE": { "PortChannel0003": { "nat_zone": "1", - "loopback_action": "drop" + "loopback_action": "drop", + "ipv6_use_link_local_only": "enable" }, "PortChannel0004": {"vrf_name": "Vrf_blue"}, "PortChannel42|10.1.0.1/31": {}, @@ -132,7 +133,8 @@ "VLAN_INTERFACE": { "Vlan111": { "nat_zone": "0", - "loopback_action": "forward" + "loopback_action": "forward", + "ipv6_use_link_local_only": "disable" }, "Vlan777": {}, "Vlan111|2a04:5555:45:6709::1/64": { @@ -1039,7 +1041,8 @@ "Ethernet16": {}, "Ethernet18": { "nat_zone": "1", - "loopback_action": "forward" + "loopback_action": "forward", + "ipv6_use_link_local_only": "enable" }, "Ethernet112|2a04:5555:40:a709::2/126": { "scope": "global", diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/interface.json b/src/sonic-yang-models/tests/yang_model_tests/tests/interface.json index ed561f25bc2..b0532d90e12 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/interface.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/interface.json @@ -22,5 +22,12 @@ "desc": "INCORRECT LOOPBACK ACTION IN INTERFACE TABLE.", "eStrKey" : "Pattern", "eStr": ["drop|forward"] + }, + "INTERFACE_ENABLE_IPV6_LINK_LOCAL": { + "desc": "Enable the ipv6 link-local." + }, + "INTERFACE_INVALID_ENABLE_IPV6_LINK_LOCAL": { + "desc": "Enable the ipv6 link-local as true.", + "eStr": "Invalid value \"true\" in \"ipv6_use_link_local_only\" element." } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/portchannel.json b/src/sonic-yang-models/tests/yang_model_tests/tests/portchannel.json index ae7a7dffd92..c44ffef291e 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/portchannel.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/portchannel.json @@ -73,5 +73,12 @@ "desc": "INCORRECT LOOPBACK ACTION IN PORTCHANNEL_INTERFACE TABLE.", "eStrKey" : "Pattern", "eStr": ["drop|forward"] + }, + "PORTCHANNEL_INTERFACE_ENABLE_IPV6_LINK_LOCAL": { + "desc": "Enable the ipv6 link-local." + }, + "PORTCHANNEL_INTERFACE_INVALID_ENABLE_IPV6_LINK_LOCAL": { + "desc": "Enable the ipv6 link-local as true.", + "eStr": "Invalid value \"true\" in \"ipv6_use_link_local_only\" element." } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/vlan.json b/src/sonic-yang-models/tests/yang_model_tests/tests/vlan.json index cf5fccf02bc..7f1cb4eb352 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/vlan.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/vlan.json @@ -79,5 +79,12 @@ "desc": "INCORRECT LOOPBACK ACTION IN VLAN_INTERFACE TABLE.", "eStrKey" : "Pattern", "eStr": ["drop|forward"] + }, + "VLAN_INTERFACE_ENABLE_IPV6_LINK_LOCAL": { + "desc": "Enable the ipv6 link-local." + }, + "VLAN_INTERFACE_INVALID_ENABLE_IPV6_LINK_LOCAL": { + "desc": "Enable the ipv6 link-local as true.", + "eStr": "Invalid value \"true\" in \"ipv6_use_link_local_only\" element." } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/interface.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/interface.json index 2f20f8475b6..b0b9fdb6819 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/interface.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/interface.json @@ -209,5 +209,61 @@ ] } } + }, + "INTERFACE_ENABLE_IPV6_LINK_LOCAL": { + "sonic-interface:sonic-interface": { + "sonic-interface:INTERFACE": { + "INTERFACE_LIST": [ + { + "name": "Ethernet8", + "ipv6_use_link_local_only": "enable" + } + ] + } + }, + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth8", + "description": "Ethernet8", + "fec": "rs", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet8", + "speed": 25000 + } + ] + } + } + }, + "INTERFACE_INVALID_ENABLE_IPV6_LINK_LOCAL": { + "sonic-interface:sonic-interface": { + "sonic-interface:INTERFACE": { + "INTERFACE_LIST": [ + { + "name": "Ethernet8", + "ipv6_use_link_local_only": "true" + } + ] + } + }, + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth8", + "description": "Ethernet8", + "fec": "rs", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet8", + "speed": 25000 + } + ] + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/portchannel.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/portchannel.json index 36f2484fa3b..7837d05443f 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/portchannel.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/portchannel.json @@ -428,5 +428,79 @@ ] } } + }, + "PORTCHANNEL_INTERFACE_ENABLE_IPV6_LINK_LOCAL": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth0", + "description": "Ethernet0", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet0", + "speed": 25000 + } + ] + } + }, + "sonic-portchannel:sonic-portchannel": { + "sonic-portchannel:PORTCHANNEL": { + "PORTCHANNEL_LIST": [ + { + "admin_status": "up", + "min_links": "1", + "mtu": "9100", + "name": "PortChannel0001" + } + ] + }, + "sonic-portchannel:PORTCHANNEL_INTERFACE": { + "PORTCHANNEL_INTERFACE_LIST": [ + { + "name": "PortChannel0001", + "ipv6_use_link_local_only": "enable" + } + ] + } + } + }, + "PORTCHANNEL_INTERFACE_INVALID_ENABLE_IPV6_LINK_LOCAL": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth0", + "description": "Ethernet0", + "lanes": "65", + "mtu": 9000, + "name": "Ethernet0", + "speed": 25000 + } + ] + } + }, + "sonic-portchannel:sonic-portchannel": { + "sonic-portchannel:PORTCHANNEL": { + "PORTCHANNEL_LIST": [ + { + "admin_status": "up", + "min_links": "1", + "mtu": "9100", + "name": "PortChannel0001" + } + ] + }, + "sonic-portchannel:PORTCHANNEL_INTERFACE": { + "PORTCHANNEL_INTERFACE_LIST": [ + { + "name": "PortChannel0001", + "ipv6_use_link_local_only": "true" + } + ] + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan.json index c5934bc39c9..c4db119b7fa 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan.json @@ -626,5 +626,93 @@ ] } } + }, + "VLAN_INTERFACE_ENABLE_IPV6_LINK_LOCAL": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth0", + "description": "Ethernet0", + "mtu": 9000, + "lanes": "1", + "name": "Ethernet0", + "speed": 25000 + } + ] + } + }, + "sonic-vlan:sonic-vlan": { + "sonic-vlan:VLAN": { + "VLAN_LIST": [ + { + "description": "vlan_nat", + "name": "Vlan100" + } + ] + }, + "sonic-vlan:VLAN_MEMBER": { + "VLAN_MEMBER_LIST": [ + { + "port": "Ethernet0", + "tagging_mode": "tagged", + "name": "Vlan100" + } + ] + }, + "sonic-vlan:VLAN_INTERFACE": { + "VLAN_INTERFACE_LIST": [ + { + "name": "Vlan100", + "ipv6_use_link_local_only": "enable" + } + ] + } + } + }, + "VLAN_INTERFACE_INVALID_ENABLE_IPV6_LINK_LOCAL": { + "sonic-port:sonic-port": { + "sonic-port:PORT": { + "PORT_LIST": [ + { + "admin_status": "up", + "alias": "eth0", + "description": "Ethernet0", + "mtu": 9000, + "lanes": "1", + "name": "Ethernet0", + "speed": 25000 + } + ] + } + }, + "sonic-vlan:sonic-vlan": { + "sonic-vlan:VLAN": { + "VLAN_LIST": [ + { + "description": "vlan_nat", + "name": "Vlan100" + } + ] + }, + "sonic-vlan:VLAN_MEMBER": { + "VLAN_MEMBER_LIST": [ + { + "port": "Ethernet0", + "tagging_mode": "tagged", + "name": "Vlan100" + } + ] + }, + "sonic-vlan:VLAN_INTERFACE": { + "VLAN_INTERFACE_LIST": [ + { + "name": "Vlan100", + "ipv6_use_link_local_only": "true" + } + ] + } + } } } diff --git a/src/sonic-yang-models/yang-models/sonic-interface.yang b/src/sonic-yang-models/yang-models/sonic-interface.yang index afd46a65550..f8c676b7ca8 100644 --- a/src/sonic-yang-models/yang-models/sonic-interface.yang +++ b/src/sonic-yang-models/yang-models/sonic-interface.yang @@ -75,6 +75,12 @@ module sonic-interface { } } + leaf ipv6_use_link_local_only { + description "Enable/Disable IPv6 link local address on interface"; + type stypes:mode-status; + default disable; + } + leaf loopback_action { description "Packet action when a packet ingress and gets routed on the same IP interface"; type stypes:loopback_action; diff --git a/src/sonic-yang-models/yang-models/sonic-portchannel.yang b/src/sonic-yang-models/yang-models/sonic-portchannel.yang index 717e3924c42..791094a7c02 100644 --- a/src/sonic-yang-models/yang-models/sonic-portchannel.yang +++ b/src/sonic-yang-models/yang-models/sonic-portchannel.yang @@ -181,6 +181,13 @@ module sonic-portchannel { enum disable; } } + + leaf ipv6_use_link_local_only { + description "Enable/Disable IPv6 link local address on portchannel interface"; + type stypes:mode-status; + default disable; + } + } /* end of list PORTCHANNEL_INTERFACE_LIST */ list PORTCHANNEL_INTERFACE_IPPREFIX_LIST { diff --git a/src/sonic-yang-models/yang-models/sonic-vlan.yang b/src/sonic-yang-models/yang-models/sonic-vlan.yang index b8f3e28c43f..f8aa7077593 100644 --- a/src/sonic-yang-models/yang-models/sonic-vlan.yang +++ b/src/sonic-yang-models/yang-models/sonic-vlan.yang @@ -102,6 +102,13 @@ module sonic-vlan { } } + leaf ipv6_use_link_local_only { + description "Enable/Disable IPv6 link local address on vlan interface"; + type stypes:mode-status; + default disable; + } + + leaf loopback_action { description "Packet action when a packet ingress and gets routed on the same IP interface"; type stypes:loopback_action;