[201911][openconfig_acl] Add SONiC ACL extension to open config ACL model (#6897)
Add support for VLAN ID match Add support for ICMP type/code match To allow users to add ACL rules w/ ICMP and VLAN qualifiers via acl-loader.
This commit is contained in:
parent
a1faa590ae
commit
16e11cf875
@ -10,7 +10,7 @@
|
||||
# export PYBINDPLUGIN=`/usr/bin/env python -c \
|
||||
# 'import pyangbind; import os; print "%s/plugin" % os.path.dirname(pyangbind.__file__)'`
|
||||
# 5. Generate this file with pyang:
|
||||
# pyang --plugindir $PYBINDPLUGIN -f pybind -o openconfig_acl.py openconfig-acl.yang
|
||||
# pyang --plugindir $PYBINDPLUGIN -f pybind -o openconfig_acl.py openconfig-acl.yang sonic-acl-extension.yang
|
||||
|
||||
from operator import attrgetter
|
||||
from pyangbind.lib.yangtypes import RestrictedPrecisionDecimalType, RestrictedClassType, TypedListType
|
||||
@ -19,6 +19,17 @@ from pyangbind.lib.base import PybindBase
|
||||
from decimal import Decimal
|
||||
from bitarray import bitarray
|
||||
import __builtin__
|
||||
class sonic_acl_extension(PybindBase):
|
||||
"""
|
||||
This class was auto-generated by the PythonClass plugin for PYANG
|
||||
from YANG module sonic-acl-extension - based on the path /sonic-acl-extension. Each member element of
|
||||
the container is represented as a class variable - with a specific
|
||||
YANG type.
|
||||
"""
|
||||
_pyangbind_elements = {}
|
||||
|
||||
|
||||
|
||||
class yc_state_openconfig_acl__acl_state(PybindBase):
|
||||
"""
|
||||
This class was auto-generated by the PythonClass plugin for PYANG
|
||||
@ -791,7 +802,7 @@ class yc_config_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_l2_co
|
||||
|
||||
YANG Description: Configuration data
|
||||
"""
|
||||
__slots__ = ('_pybind_generated_by', '_path_helper', '_yang_name', '_extmethods', '__source_mac','__source_mac_mask','__destination_mac','__destination_mac_mask','__ethertype',)
|
||||
__slots__ = ('_pybind_generated_by', '_path_helper', '_yang_name', '_extmethods', '__source_mac','__source_mac_mask','__destination_mac','__destination_mac_mask','__ethertype','__vlan_id',)
|
||||
|
||||
_yang_name = 'config'
|
||||
|
||||
@ -802,11 +813,12 @@ class yc_config_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_l2_co
|
||||
self._path_helper = False
|
||||
|
||||
self._extmethods = False
|
||||
self.__source_mac = YANGDynClass(base=RestrictedClassType(base_type=unicode, restriction_dict={'pattern': u'[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'}), is_leaf=True, yang_name="source-mac", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='yang:mac-address', is_config=True)
|
||||
self.__destination_mac = YANGDynClass(base=RestrictedClassType(base_type=unicode, restriction_dict={'pattern': u'[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'}), is_leaf=True, yang_name="destination-mac", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='yang:mac-address', is_config=True)
|
||||
self.__destination_mac_mask = YANGDynClass(base=RestrictedClassType(base_type=unicode, restriction_dict={'pattern': u'[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'}), is_leaf=True, yang_name="destination-mac-mask", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='yang:mac-address', is_config=True)
|
||||
self.__ethertype = YANGDynClass(base=[RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..65535']},int_size=16), restriction_dict={'range': [u'1..65535']}),RestrictedClassType(base_type=unicode, restriction_type="dict_key", restriction_arg={u'oc-pkt-match-types:ETHERTYPE_LLDP': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'oc-pkt-match-types:ETHERTYPE_VLAN': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_ROCE': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'oc-pkt-match-types:ETHERTYPE_ARP': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_IPV4': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_IPV6': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_ARP': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'oc-pkt-match-types:ETHERTYPE_MPLS': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_VLAN': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'oc-pkt-match-types:ETHERTYPE_ROCE': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'oc-pkt-match-types:ETHERTYPE_IPV6': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_MPLS': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'oc-pkt-match-types:ETHERTYPE_IPV4': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_LLDP': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}},),], is_leaf=True, yang_name="ethertype", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='oc-pkt-match-types:ethertype-type', is_config=True)
|
||||
self.__destination_mac_mask = YANGDynClass(base=RestrictedClassType(base_type=unicode, restriction_dict={'pattern': u'[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'}), is_leaf=True, yang_name="destination-mac-mask", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='yang:mac-address', is_config=True)
|
||||
self.__source_mac = YANGDynClass(base=RestrictedClassType(base_type=unicode, restriction_dict={'pattern': u'[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'}), is_leaf=True, yang_name="source-mac", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='yang:mac-address', is_config=True)
|
||||
self.__source_mac_mask = YANGDynClass(base=RestrictedClassType(base_type=unicode, restriction_dict={'pattern': u'[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'}), is_leaf=True, yang_name="source-mac-mask", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='yang:mac-address', is_config=True)
|
||||
self.__vlan_id = YANGDynClass(base=RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..65535']},int_size=16), restriction_dict={'range': [u'0..4095']}), is_leaf=True, yang_name="vlan-id", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='vlan-id-type', is_config=True)
|
||||
self.__destination_mac = YANGDynClass(base=RestrictedClassType(base_type=unicode, restriction_dict={'pattern': u'[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'}), is_leaf=True, yang_name="destination-mac", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='yang:mac-address', is_config=True)
|
||||
|
||||
load = kwargs.pop("load", None)
|
||||
if args:
|
||||
@ -1019,14 +1031,52 @@ class yc_config_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_l2_co
|
||||
def _unset_ethertype(self):
|
||||
self.__ethertype = YANGDynClass(base=[RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..65535']},int_size=16), restriction_dict={'range': [u'1..65535']}),RestrictedClassType(base_type=unicode, restriction_type="dict_key", restriction_arg={u'oc-pkt-match-types:ETHERTYPE_LLDP': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'oc-pkt-match-types:ETHERTYPE_VLAN': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_ROCE': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'oc-pkt-match-types:ETHERTYPE_ARP': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_IPV4': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_IPV6': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_ARP': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'oc-pkt-match-types:ETHERTYPE_MPLS': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_VLAN': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'oc-pkt-match-types:ETHERTYPE_ROCE': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'oc-pkt-match-types:ETHERTYPE_IPV6': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_MPLS': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'oc-pkt-match-types:ETHERTYPE_IPV4': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}, u'ETHERTYPE_LLDP': {'@namespace': u'http://openconfig.net/yang/packet-match-types', '@module': u'openconfig-packet-match-types'}},),], is_leaf=True, yang_name="ethertype", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='oc-pkt-match-types:ethertype-type', is_config=True)
|
||||
|
||||
|
||||
def _get_vlan_id(self):
|
||||
"""
|
||||
Getter method for vlan_id, mapped from YANG variable /acl/acl_sets/acl_set/acl_entries/acl_entry/l2/config/vlan_id (vlan-id-type)
|
||||
|
||||
YANG Description: VLAN ID field to match in DOT1Q packets
|
||||
"""
|
||||
return self.__vlan_id
|
||||
|
||||
def _set_vlan_id(self, v, load=False):
|
||||
"""
|
||||
Setter method for vlan_id, mapped from YANG variable /acl/acl_sets/acl_set/acl_entries/acl_entry/l2/config/vlan_id (vlan-id-type)
|
||||
If this variable is read-only (config: false) in the
|
||||
source YANG file, then _set_vlan_id is considered as a private
|
||||
method. Backends looking to populate this variable should
|
||||
do so via calling thisObj._set_vlan_id() directly.
|
||||
|
||||
YANG Description: VLAN ID field to match in DOT1Q packets
|
||||
"""
|
||||
if hasattr(v, "_utype"):
|
||||
v = v._utype(v)
|
||||
try:
|
||||
t = YANGDynClass(v,base=RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..65535']},int_size=16), restriction_dict={'range': [u'0..4095']}), is_leaf=True, yang_name="vlan-id", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='vlan-id-type', is_config=True)
|
||||
except (TypeError, ValueError):
|
||||
raise ValueError({
|
||||
'error-string': """vlan_id must be of a type compatible with vlan-id-type""",
|
||||
'defined-type': "sonic-acl-extension:vlan-id-type",
|
||||
'generated-type': """YANGDynClass(base=RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..65535']},int_size=16), restriction_dict={'range': [u'0..4095']}), is_leaf=True, yang_name="vlan-id", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='vlan-id-type', is_config=True)""",
|
||||
})
|
||||
|
||||
self.__vlan_id = t
|
||||
if hasattr(self, '_set'):
|
||||
self._set()
|
||||
|
||||
def _unset_vlan_id(self):
|
||||
self.__vlan_id = YANGDynClass(base=RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..65535']},int_size=16), restriction_dict={'range': [u'0..4095']}), is_leaf=True, yang_name="vlan-id", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='vlan-id-type', is_config=True)
|
||||
|
||||
source_mac = __builtin__.property(_get_source_mac, _set_source_mac)
|
||||
source_mac_mask = __builtin__.property(_get_source_mac_mask, _set_source_mac_mask)
|
||||
destination_mac = __builtin__.property(_get_destination_mac, _set_destination_mac)
|
||||
destination_mac_mask = __builtin__.property(_get_destination_mac_mask, _set_destination_mac_mask)
|
||||
ethertype = __builtin__.property(_get_ethertype, _set_ethertype)
|
||||
vlan_id = __builtin__.property(_get_vlan_id, _set_vlan_id)
|
||||
|
||||
|
||||
_pyangbind_elements = {'source_mac': source_mac, 'source_mac_mask': source_mac_mask, 'destination_mac': destination_mac, 'destination_mac_mask': destination_mac_mask, 'ethertype': ethertype, }
|
||||
_pyangbind_elements = {'source_mac': source_mac, 'source_mac_mask': source_mac_mask, 'destination_mac': destination_mac, 'destination_mac_mask': destination_mac_mask, 'ethertype': ethertype, 'vlan_id': vlan_id, }
|
||||
|
||||
|
||||
class yc_state_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_l2_state(PybindBase):
|
||||
@ -3640,6 +3690,219 @@ with an entry
|
||||
_pyangbind_elements = {'config': config, 'state': state, }
|
||||
|
||||
|
||||
class yc_config_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_icmp_config(PybindBase):
|
||||
"""
|
||||
This class was auto-generated by the PythonClass plugin for PYANG
|
||||
from YANG module openconfig-acl - based on the path /acl/acl-sets/acl-set/acl-entries/acl-entry/icmp/config. Each member element of
|
||||
the container is represented as a class variable - with a specific
|
||||
YANG type.
|
||||
"""
|
||||
__slots__ = ('_pybind_generated_by', '_path_helper', '_yang_name', '_extmethods', '__type','__code',)
|
||||
|
||||
_yang_name = 'config'
|
||||
|
||||
_pybind_generated_by = 'container'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
||||
self._path_helper = False
|
||||
|
||||
self._extmethods = False
|
||||
self.__code = YANGDynClass(base=RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..255']}, int_size=8), restriction_dict={'range': [u'0..255']}), is_leaf=True, yang_name="code", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='icmp-code-type', is_config=True)
|
||||
self.__type = YANGDynClass(base=RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..255']}, int_size=8), restriction_dict={'range': [u'0..255']}), is_leaf=True, yang_name="type", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='icmp-type-type', is_config=True)
|
||||
|
||||
load = kwargs.pop("load", None)
|
||||
if args:
|
||||
if len(args) > 1:
|
||||
raise TypeError("cannot create a YANG container with >1 argument")
|
||||
all_attr = True
|
||||
for e in self._pyangbind_elements:
|
||||
if not hasattr(args[0], e):
|
||||
all_attr = False
|
||||
break
|
||||
if not all_attr:
|
||||
raise ValueError("Supplied object did not have the correct attributes")
|
||||
for e in self._pyangbind_elements:
|
||||
nobj = getattr(args[0], e)
|
||||
if nobj._changed() is False:
|
||||
continue
|
||||
setmethod = getattr(self, "_set_%s" % e)
|
||||
if load is None:
|
||||
setmethod(getattr(args[0], e))
|
||||
else:
|
||||
setmethod(getattr(args[0], e), load=load)
|
||||
|
||||
def _path(self):
|
||||
if hasattr(self, "_parent"):
|
||||
return self._parent._path()+[self._yang_name]
|
||||
else:
|
||||
return [u'acl', u'acl-sets', u'acl-set', u'acl-entries', u'acl-entry', u'icmp', u'config']
|
||||
|
||||
def _get_type(self):
|
||||
"""
|
||||
Getter method for type, mapped from YANG variable /acl/acl_sets/acl_set/acl_entries/acl_entry/icmp/config/type (icmp-type-type)
|
||||
|
||||
YANG Description: ICMP(V6) type.
|
||||
"""
|
||||
return self.__type
|
||||
|
||||
def _set_type(self, v, load=False):
|
||||
"""
|
||||
Setter method for type, mapped from YANG variable /acl/acl_sets/acl_set/acl_entries/acl_entry/icmp/config/type (icmp-type-type)
|
||||
If this variable is read-only (config: false) in the
|
||||
source YANG file, then _set_type is considered as a private
|
||||
method. Backends looking to populate this variable should
|
||||
do so via calling thisObj._set_type() directly.
|
||||
|
||||
YANG Description: ICMP(V6) type.
|
||||
"""
|
||||
if hasattr(v, "_utype"):
|
||||
v = v._utype(v)
|
||||
try:
|
||||
t = YANGDynClass(v,base=RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..255']}, int_size=8), restriction_dict={'range': [u'0..255']}), is_leaf=True, yang_name="type", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='icmp-type-type', is_config=True)
|
||||
except (TypeError, ValueError):
|
||||
raise ValueError({
|
||||
'error-string': """type must be of a type compatible with icmp-type-type""",
|
||||
'defined-type': "sonic-acl-extension:icmp-type-type",
|
||||
'generated-type': """YANGDynClass(base=RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..255']}, int_size=8), restriction_dict={'range': [u'0..255']}), is_leaf=True, yang_name="type", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='icmp-type-type', is_config=True)""",
|
||||
})
|
||||
|
||||
self.__type = t
|
||||
if hasattr(self, '_set'):
|
||||
self._set()
|
||||
|
||||
def _unset_type(self):
|
||||
self.__type = YANGDynClass(base=RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..255']}, int_size=8), restriction_dict={'range': [u'0..255']}), is_leaf=True, yang_name="type", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='icmp-type-type', is_config=True)
|
||||
|
||||
|
||||
def _get_code(self):
|
||||
"""
|
||||
Getter method for code, mapped from YANG variable /acl/acl_sets/acl_set/acl_entries/acl_entry/icmp/config/code (icmp-code-type)
|
||||
|
||||
YANG Description: ICMP(V6) code.
|
||||
"""
|
||||
return self.__code
|
||||
|
||||
def _set_code(self, v, load=False):
|
||||
"""
|
||||
Setter method for code, mapped from YANG variable /acl/acl_sets/acl_set/acl_entries/acl_entry/icmp/config/code (icmp-code-type)
|
||||
If this variable is read-only (config: false) in the
|
||||
source YANG file, then _set_code is considered as a private
|
||||
method. Backends looking to populate this variable should
|
||||
do so via calling thisObj._set_code() directly.
|
||||
|
||||
YANG Description: ICMP(V6) code.
|
||||
"""
|
||||
if hasattr(v, "_utype"):
|
||||
v = v._utype(v)
|
||||
try:
|
||||
t = YANGDynClass(v,base=RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..255']}, int_size=8), restriction_dict={'range': [u'0..255']}), is_leaf=True, yang_name="code", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='icmp-code-type', is_config=True)
|
||||
except (TypeError, ValueError):
|
||||
raise ValueError({
|
||||
'error-string': """code must be of a type compatible with icmp-code-type""",
|
||||
'defined-type': "sonic-acl-extension:icmp-code-type",
|
||||
'generated-type': """YANGDynClass(base=RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..255']}, int_size=8), restriction_dict={'range': [u'0..255']}), is_leaf=True, yang_name="code", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='icmp-code-type', is_config=True)""",
|
||||
})
|
||||
|
||||
self.__code = t
|
||||
if hasattr(self, '_set'):
|
||||
self._set()
|
||||
|
||||
def _unset_code(self):
|
||||
self.__code = YANGDynClass(base=RestrictedClassType(base_type=RestrictedClassType(base_type=int, restriction_dict={'range': ['0..255']}, int_size=8), restriction_dict={'range': [u'0..255']}), is_leaf=True, yang_name="code", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='icmp-code-type', is_config=True)
|
||||
|
||||
type = __builtin__.property(_get_type, _set_type)
|
||||
code = __builtin__.property(_get_code, _set_code)
|
||||
|
||||
|
||||
_pyangbind_elements = {'type': type, 'code': code, }
|
||||
|
||||
|
||||
class yc_icmp_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_icmp(PybindBase):
|
||||
"""
|
||||
This class was auto-generated by the PythonClass plugin for PYANG
|
||||
from YANG module openconfig-acl - based on the path /acl/acl-sets/acl-set/acl-entries/acl-entry/icmp. Each member element of
|
||||
the container is represented as a class variable - with a specific
|
||||
YANG type.
|
||||
"""
|
||||
__slots__ = ('_pybind_generated_by', '_path_helper', '_yang_name', '_extmethods', '__config',)
|
||||
|
||||
_yang_name = 'icmp'
|
||||
|
||||
_pybind_generated_by = 'container'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
||||
self._path_helper = False
|
||||
|
||||
self._extmethods = False
|
||||
self.__config = YANGDynClass(base=yc_config_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_icmp_config, is_container='container', yang_name="config", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, extensions=None, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='container', is_config=True)
|
||||
|
||||
load = kwargs.pop("load", None)
|
||||
if args:
|
||||
if len(args) > 1:
|
||||
raise TypeError("cannot create a YANG container with >1 argument")
|
||||
all_attr = True
|
||||
for e in self._pyangbind_elements:
|
||||
if not hasattr(args[0], e):
|
||||
all_attr = False
|
||||
break
|
||||
if not all_attr:
|
||||
raise ValueError("Supplied object did not have the correct attributes")
|
||||
for e in self._pyangbind_elements:
|
||||
nobj = getattr(args[0], e)
|
||||
if nobj._changed() is False:
|
||||
continue
|
||||
setmethod = getattr(self, "_set_%s" % e)
|
||||
if load is None:
|
||||
setmethod(getattr(args[0], e))
|
||||
else:
|
||||
setmethod(getattr(args[0], e), load=load)
|
||||
|
||||
def _path(self):
|
||||
if hasattr(self, "_parent"):
|
||||
return self._parent._path()+[self._yang_name]
|
||||
else:
|
||||
return [u'acl', u'acl-sets', u'acl-set', u'acl-entries', u'acl-entry', u'icmp']
|
||||
|
||||
def _get_config(self):
|
||||
"""
|
||||
Getter method for config, mapped from YANG variable /acl/acl_sets/acl_set/acl_entries/acl_entry/icmp/config (container)
|
||||
"""
|
||||
return self.__config
|
||||
|
||||
def _set_config(self, v, load=False):
|
||||
"""
|
||||
Setter method for config, mapped from YANG variable /acl/acl_sets/acl_set/acl_entries/acl_entry/icmp/config (container)
|
||||
If this variable is read-only (config: false) in the
|
||||
source YANG file, then _set_config is considered as a private
|
||||
method. Backends looking to populate this variable should
|
||||
do so via calling thisObj._set_config() directly.
|
||||
"""
|
||||
if hasattr(v, "_utype"):
|
||||
v = v._utype(v)
|
||||
try:
|
||||
t = YANGDynClass(v,base=yc_config_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_icmp_config, is_container='container', yang_name="config", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, extensions=None, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='container', is_config=True)
|
||||
except (TypeError, ValueError):
|
||||
raise ValueError({
|
||||
'error-string': """config must be of a type compatible with container""",
|
||||
'defined-type': "container",
|
||||
'generated-type': """YANGDynClass(base=yc_config_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_icmp_config, is_container='container', yang_name="config", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, extensions=None, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='container', is_config=True)""",
|
||||
})
|
||||
|
||||
self.__config = t
|
||||
if hasattr(self, '_set'):
|
||||
self._set()
|
||||
|
||||
def _unset_config(self):
|
||||
self.__config = YANGDynClass(base=yc_config_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_icmp_config, is_container='container', yang_name="config", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, extensions=None, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='container', is_config=True)
|
||||
|
||||
config = __builtin__.property(_get_config, _set_config)
|
||||
|
||||
|
||||
_pyangbind_elements = {'config': config, }
|
||||
|
||||
|
||||
class yc_acl_entry_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry(PybindBase):
|
||||
"""
|
||||
This class was auto-generated by the PythonClass plugin for PYANG
|
||||
@ -3649,7 +3912,7 @@ class yc_acl_entry_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry(Py
|
||||
|
||||
YANG Description: List of ACL entries comprising an ACL set
|
||||
"""
|
||||
__slots__ = ('_pybind_generated_by', '_path_helper', '_yang_name', '_extmethods', '__sequence_id','__config','__state','__l2','__ip','__transport','__input_interface','__actions',)
|
||||
__slots__ = ('_pybind_generated_by', '_path_helper', '_yang_name', '_extmethods', '__sequence_id','__config','__state','__l2','__ip','__transport','__input_interface','__actions','__icmp',)
|
||||
|
||||
_yang_name = 'acl-entry'
|
||||
|
||||
@ -3666,6 +3929,7 @@ class yc_acl_entry_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry(Py
|
||||
self.__actions = YANGDynClass(base=yc_actions_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_actions, is_container='container', yang_name="actions", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, extensions=None, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='container', is_config=True)
|
||||
self.__sequence_id = YANGDynClass(base=unicode, is_leaf=True, yang_name="sequence-id", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, is_keyval=True, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='leafref', is_config=True)
|
||||
self.__l2 = YANGDynClass(base=yc_l2_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_l2, is_container='container', yang_name="l2", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, extensions=None, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='container', is_config=True)
|
||||
self.__icmp = YANGDynClass(base=yc_icmp_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_icmp, is_container='container', yang_name="icmp", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, extensions=None, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='container', is_config=True)
|
||||
self.__config = YANGDynClass(base=yc_config_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_config, is_container='container', yang_name="config", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, extensions=None, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='container', is_config=True)
|
||||
self.__transport = YANGDynClass(base=yc_transport_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_transport, is_container='container', yang_name="transport", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, extensions=None, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='container', is_config=True)
|
||||
|
||||
@ -3998,6 +4262,39 @@ with an entry
|
||||
def _unset_actions(self):
|
||||
self.__actions = YANGDynClass(base=yc_actions_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_actions, is_container='container', yang_name="actions", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, extensions=None, namespace='http://openconfig.net/yang/acl', defining_module='openconfig-acl', yang_type='container', is_config=True)
|
||||
|
||||
|
||||
def _get_icmp(self):
|
||||
"""
|
||||
Getter method for icmp, mapped from YANG variable /acl/acl_sets/acl_set/acl_entries/acl_entry/icmp (container)
|
||||
"""
|
||||
return self.__icmp
|
||||
|
||||
def _set_icmp(self, v, load=False):
|
||||
"""
|
||||
Setter method for icmp, mapped from YANG variable /acl/acl_sets/acl_set/acl_entries/acl_entry/icmp (container)
|
||||
If this variable is read-only (config: false) in the
|
||||
source YANG file, then _set_icmp is considered as a private
|
||||
method. Backends looking to populate this variable should
|
||||
do so via calling thisObj._set_icmp() directly.
|
||||
"""
|
||||
if hasattr(v, "_utype"):
|
||||
v = v._utype(v)
|
||||
try:
|
||||
t = YANGDynClass(v,base=yc_icmp_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_icmp, is_container='container', yang_name="icmp", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, extensions=None, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='container', is_config=True)
|
||||
except (TypeError, ValueError):
|
||||
raise ValueError({
|
||||
'error-string': """icmp must be of a type compatible with container""",
|
||||
'defined-type': "container",
|
||||
'generated-type': """YANGDynClass(base=yc_icmp_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_icmp, is_container='container', yang_name="icmp", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, extensions=None, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='container', is_config=True)""",
|
||||
})
|
||||
|
||||
self.__icmp = t
|
||||
if hasattr(self, '_set'):
|
||||
self._set()
|
||||
|
||||
def _unset_icmp(self):
|
||||
self.__icmp = YANGDynClass(base=yc_icmp_openconfig_acl__acl_acl_sets_acl_set_acl_entries_acl_entry_icmp, is_container='container', yang_name="icmp", parent=self, path_helper=self._path_helper, extmethods=self._extmethods, register_paths=True, extensions=None, namespace='https://github.com/Azure/sonic-buildimage', defining_module='sonic-acl-extension', yang_type='container', is_config=True)
|
||||
|
||||
sequence_id = __builtin__.property(_get_sequence_id, _set_sequence_id)
|
||||
config = __builtin__.property(_get_config, _set_config)
|
||||
state = __builtin__.property(_get_state, _set_state)
|
||||
@ -4006,9 +4303,10 @@ with an entry
|
||||
transport = __builtin__.property(_get_transport, _set_transport)
|
||||
input_interface = __builtin__.property(_get_input_interface, _set_input_interface)
|
||||
actions = __builtin__.property(_get_actions, _set_actions)
|
||||
icmp = __builtin__.property(_get_icmp, _set_icmp)
|
||||
|
||||
|
||||
_pyangbind_elements = {'sequence_id': sequence_id, 'config': config, 'state': state, 'l2': l2, 'ip': ip, 'transport': transport, 'input_interface': input_interface, 'actions': actions, }
|
||||
_pyangbind_elements = {'sequence_id': sequence_id, 'config': config, 'state': state, 'l2': l2, 'ip': ip, 'transport': transport, 'input_interface': input_interface, 'actions': actions, 'icmp': icmp, }
|
||||
|
||||
|
||||
class yc_acl_entries_openconfig_acl__acl_acl_sets_acl_set_acl_entries(PybindBase):
|
||||
@ -7540,3 +7838,5 @@ and operational state data
|
||||
|
||||
|
||||
_pyangbind_elements = {'acl': acl, }
|
||||
|
||||
|
||||
|
76
src/sonic-config-engine/sonic-acl-extension.yang
Normal file
76
src/sonic-config-engine/sonic-acl-extension.yang
Normal file
@ -0,0 +1,76 @@
|
||||
module sonic-acl-extension {
|
||||
yang-version "1";
|
||||
namespace "https://github.com/Azure/sonic-buildimage";
|
||||
|
||||
prefix "sonic-acl-extension";
|
||||
|
||||
import openconfig-acl { prefix oc-acl; }
|
||||
|
||||
typedef vlan-id-type {
|
||||
type uint16 {
|
||||
range 0..4095;
|
||||
}
|
||||
description
|
||||
"The VLAN ID value may be expressed as a 12-bit number in decimal notation";
|
||||
}
|
||||
|
||||
typedef icmp-type-type {
|
||||
type uint8 {
|
||||
range 0..255;
|
||||
}
|
||||
description
|
||||
"The ICMP type value may be expressed as an 8-bit number in decimal notation";
|
||||
}
|
||||
|
||||
typedef icmp-code-type {
|
||||
type uint8 {
|
||||
range 0..255;
|
||||
}
|
||||
description
|
||||
"The ICMP code value may be expressed as an 8-bit number in decimal notation";
|
||||
}
|
||||
|
||||
grouping extended-l2-match {
|
||||
leaf vlan-id {
|
||||
type vlan-id-type;
|
||||
description
|
||||
"VLAN ID field to match in DOT1Q packets";
|
||||
}
|
||||
}
|
||||
|
||||
grouping icmp-protocol-fields-config {
|
||||
description
|
||||
"Configuration data of ICMP protocol fields.";
|
||||
|
||||
leaf type {
|
||||
type icmp-type-type;
|
||||
description
|
||||
"ICMP(V6) type.";
|
||||
}
|
||||
|
||||
leaf code {
|
||||
type icmp-code-type;
|
||||
description
|
||||
"ICMP(V6) code.";
|
||||
}
|
||||
}
|
||||
|
||||
grouping icmp-protocol-fields-top {
|
||||
description
|
||||
"ICMP header fields for IPv4 and IPv6";
|
||||
|
||||
container icmp {
|
||||
container config {
|
||||
uses icmp-protocol-fields-config;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries/oc-acl:acl-entry/oc-acl:l2/oc-acl:config" {
|
||||
uses extended-l2-match;
|
||||
}
|
||||
|
||||
augment "/oc-acl:acl/oc-acl:acl-sets/oc-acl:acl-set/oc-acl:acl-entries/oc-acl:acl-entry" {
|
||||
uses icmp-protocol-fields-top;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user