From 52c2a3ad230ddef314418cd2906d889da375f5ec Mon Sep 17 00:00:00 2001 From: Sudharsan Dhamal Gopalarathnam Date: Thu, 17 Mar 2022 10:26:03 -0700 Subject: [PATCH] [yang] Fixing Ethertype field regex in acl rule yang to accept decimal values (#10108) #### Why I did it Fixing issue https://github.com/Azure/sonic-buildimage/issues/9991 The ACL RULE table field ETHER_TYPE can accept both hex as well as decimal values. However yang model didn't allow decimal values. Fixed it to allow decimal values (same pattern as in hex (1536-65535) #### How I did it Updated yang model to handle decimal values #### How to verify it Added UT to verify it. --- .../tests/files/sample_config_db.json | 3 +- .../tests/yang_model_tests/tests/acl.json | 9 ++- .../yang_model_tests/tests_config/acl.json | 60 ++++++++++++++++++- .../yang-templates/sonic-acl.yang.j2 | 2 +- 4 files changed, 69 insertions(+), 5 deletions(-) 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 920181646c46..ae0cc60da648 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -150,7 +150,8 @@ "V4-ACL-TABLE|DEFAULT_DENY": { "PACKET_ACTION": "DROP", "IP_TYPE": "IPv4ANY", - "PRIORITY": "0" + "PRIORITY": "0", + "ETHER_TYPE": "2048" }, "V4-ACL-TABLE|Rule_20": { "PACKET_ACTION": "FORWARD", diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/acl.json b/src/sonic-yang-models/tests/yang_model_tests/tests/acl.json index 980622cbd3e8..243554d60f9a 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/acl.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/acl.json @@ -100,7 +100,14 @@ "eStrKey" : "Pattern" }, "ACL_RULE_L2_INVALID_ETHER": { - "desc": "Configure invalid MAC address format.", + "desc": "Configure invalid ethertype.", + "eStrKey" : "Pattern" + }, + "ACL_RULE_L2_VALID_ETHER_IN_DECIMAL": { + "desc": "Configure valid ethertype in decimal format." + }, + "ACL_RULE_L2_INVALID_ETHER_IN_DECIMAL": { + "desc": "Configure invalid ethertype in decimal format.", "eStrKey" : "Pattern" }, "ACL_PACKET_ACTION_VALIDATE_VALUE_ACCEPT": { diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/acl.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/acl.json index b2aa6b3fb15d..4829eb3971dc 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/acl.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/acl.json @@ -768,8 +768,8 @@ "ACL_RULE_LIST": [ { "ACL_TABLE_NAME": "L2ACL_INVALID_ETHER", - "SRC_MAC": "00.00.AB.CD.EF.00/FF.FF.FF.00.00.00", - "DST_MAC": "00.00.AB.CD.EF.FF/FF.FF.FF.FF.FF.FF", + "SRC_MAC": "00:00:AB:CD:EF:00/FF:FF:FF:00:00:00", + "DST_MAC": "00:00:AB:CD:EF:FF/FF:FF:FF:FF:FF:FF", "ETHER_TYPE": "64", "PACKET_ACTION": "FORWARD", "PRIORITY": 999980, @@ -790,6 +790,62 @@ } } }, + "ACL_RULE_L2_VALID_ETHER_IN_DECIMAL": { + "sonic-acl:sonic-acl": { + "sonic-acl:ACL_RULE": { + "ACL_RULE_LIST": [ + { + "ACL_TABLE_NAME": "L2ACL_VALID_ETHER_DECIMAL", + "SRC_MAC": "00:00:AB:CD:EF:00/FF:FF:FF:00:00:00", + "DST_MAC": "00:00:AB:CD:EF:FF/FF:FF:FF:FF:FF:FF", + "ETHER_TYPE": "2048", + "PACKET_ACTION": "FORWARD", + "PRIORITY": 999980, + "RULE_NAME": "Rule_20" + } + ] + }, + "sonic-acl:ACL_TABLE": { + "ACL_TABLE_LIST": [ + { + "ACL_TABLE_NAME": "L2ACL_VALID_ETHER_DECIMAL", + "policy_desc": "L2ACL Test", + "ports": [ "" ], + "stage": "INGRESS", + "type": "L2" + } + ] + } + } + }, + "ACL_RULE_L2_INVALID_ETHER_IN_DECIMAL": { + "sonic-acl:sonic-acl": { + "sonic-acl:ACL_RULE": { + "ACL_RULE_LIST": [ + { + "ACL_TABLE_NAME": "L2ACL_INVALID_ETHER_DECIMAL", + "SRC_MAC": "00:00:AB:CD:EF:00/FF:FF:FF:00:00:00", + "DST_MAC": "00:00:AB:CD:EF:FF/FF:FF:FF:FF:FF:FF", + "ETHER_TYPE": "66789", + "PACKET_ACTION": "FORWARD", + "PRIORITY": 999980, + "RULE_NAME": "Rule_20" + } + ] + }, + "sonic-acl:ACL_TABLE": { + "ACL_TABLE_LIST": [ + { + "ACL_TABLE_NAME": "L2ACL_INVALID_ETHER_DECIMAL", + "policy_desc": "L2ACL Test", + "ports": [ "" ], + "stage": "INGRESS", + "type": "L2" + } + ] + } + } + }, "ACL_PACKET_ACTION_VALIDATE_VALUE_ACCEPT": { "sonic-acl:sonic-acl": { "sonic-acl:ACL_RULE": { diff --git a/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 b/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 index d007f82e0964..9fd442297c9f 100644 --- a/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 +++ b/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 @@ -168,7 +168,7 @@ module sonic-acl { leaf ETHER_TYPE { type string { - pattern "0x0[6-9a-fA-F][0-9a-fA-F]{2}|0x[1-9a-fA-F][0-9a-fA-F]{3}"; + pattern "0x0[6-9a-fA-F][0-9a-fA-F]{2}|0x[1-9a-fA-F][0-9a-fA-F]{3}|153[6-9]|15[4-9][0-9]|1[6-9][0-9][0-9]|[2-9][0-9]{3}|[1-5][0-9]{4}|6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}"; } }