From afad32ab0c03500eb983c19b85467fb072abefa3 Mon Sep 17 00:00:00 2001 From: "pengjianquan.pjq" Date: Tue, 10 Jan 2023 10:18:45 +0800 Subject: [PATCH 1/4] SONiC Yang model support for Telemetry_client. (#12483) --- src/sonic-yang-models/doc/Configuration.md | 30 ++++- src/sonic-yang-models/setup.py | 1 + .../tests/files/sample_config_db.json | 18 +++ .../tests/telemetry_client.json | 19 +++ .../tests_config/telemetry_client.json | 114 ++++++++++++++++ .../yang-models/sonic-telemetry_client.yang | 123 ++++++++++++++++++ 6 files changed, 303 insertions(+), 2 deletions(-) create mode 100644 src/sonic-yang-models/tests/yang_model_tests/tests/telemetry_client.json create mode 100644 src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry_client.json create mode 100644 src/sonic-yang-models/yang-models/sonic-telemetry_client.yang diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md index b56b9a2fbcd0..6404eea08157 100644 --- a/src/sonic-yang-models/doc/Configuration.md +++ b/src/sonic-yang-models/doc/Configuration.md @@ -53,8 +53,9 @@ Table of Contents * [Tacplus Server](#tacplus-server) * [TC to Priority group map](#tc-to-priority-group-map) * [TC to Queue map](#tc-to-queue-map) - * [Telemetry](#telemetry) - * [Tunnel](#tunnel) + * [Telemetry](#telemetry) + * [Telemetry_client](#telemetry_client) + * [Tunnel](#tunnel) * [Versions](#versions) * [VLAN](#vlan) * [VLAN_MEMBER](#vlan_member) @@ -1595,6 +1596,31 @@ Container side configuration: } ``` +### Telemetry_client + +``` +{ + "TELEMETRY_CLIENT": { + "Global": { + "encoding": "JSON_IETF", + "retry_interval": "30", + "src_ip": "30.57.185.38", + "unidirectional": "true" + }, + "DestinationGroup_HS": { + "dst_addr": "30.57.186.214:8081,30.57.185.39:8081" + }, + "Subscription_HS_RDMA": { + "dst_group": "HS", + "path_target": "COUNTERS_DB", + "paths": "COUNTERS/Ethernet*,COUNTERS_PORT_NAME_MAP", + "report_interval": "5000", + "report_type": "periodic" + } + } +} +``` + ### Tunnel This table configures the MUX tunnel for Dual-ToR setup diff --git a/src/sonic-yang-models/setup.py b/src/sonic-yang-models/setup.py index 46e48aae8203..8f379f174a45 100644 --- a/src/sonic-yang-models/setup.py +++ b/src/sonic-yang-models/setup.py @@ -146,6 +146,7 @@ def run(self): './yang-models/sonic-system-aaa.yang', './yang-models/sonic-system-tacacs.yang', './yang-models/sonic-telemetry.yang', + './yang-models/sonic-telemetry_client.yang', './yang-models/sonic-tunnel.yang', './yang-models/sonic-types.yang', './yang-models/sonic-versions.yang', 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 63e15f052366..56da8cccdb47 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -1153,6 +1153,24 @@ "port": "50051" } }, + "TELEMETRY_CLIENT": { + "Global": { + "encoding": "JSON_IETF", + "retry_interval": "30", + "src_ip": "30.57.185.38", + "unidirectional": "true" + }, + "DestinationGroup_HS": { + "dst_addr": "30.57.186.214:8081,30.57.185.39:8081" + }, + "Subscription_HS_RDMA": { + "dst_group": "HS", + "path_target": "COUNTERS_DB", + "paths": "COUNTERS/Ethernet*,COUNTERS_PORT_NAME_MAP", + "report_interval": "5000", + "report_type": "periodic" + } + }, "TUNNEL": { "MuxTunnel0": { "dscp_mode": "uniform", diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry_client.json b/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry_client.json new file mode 100644 index 000000000000..238110a69a89 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry_client.json @@ -0,0 +1,19 @@ +{ + "PASSED": { + "desc": "telemetry_client passed" + }, + "INCORRECT_DST_GROUP": { + "desc": "INCORRECT DST_GROUP FIELD IN TELEMETRY_CLIENT TABLE.", + "eStrKey" : "Must" + }, + "SRC_IP_INCORRECT_FORMAT": { + "desc": "Add src ip which is not in correct ip-prefix format.", + "eStrKey" : "InvalidValue", + "eStr": ["src_ip"] + }, + "ENCODING_WRONG_VALUE": { + "desc": "Configure wrong value for encoding.", + "eStrKey" : "InvalidValue", + "eStr": ["encoding"] + } +} \ No newline at end of file diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry_client.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry_client.json new file mode 100644 index 000000000000..42db206e25e3 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry_client.json @@ -0,0 +1,114 @@ +{ + "PASSED": { + "sonic-telemetry_client:sonic-telemetry_client": { + "sonic-telemetry_client:TELEMETRY_CLIENT": { + "Global": { + "encoding": "JSON_IETF", + "retry_interval": "30", + "src_ip": "30.57.185.38", + "unidirectional": "true" + }, + "TELEMETRY_CLIENT_DS_LIST": [ + { + "prefix": "DestinationGroup_HS", + "dst_addr": "30.57.186.214:8081,30.57.185.39:8081" + } + ], + "TELEMETRY_CLIENT_SUB_LIST": [ + { + "prefix": "Subscription_HS_RDMA", + "dst_group": "HS", + "path_target": "COUNTERS_DB", + "paths": "COUNTERS/Ethernet*,COUNTERS_PORT_NAME_MAP", + "report_interval": "5000", + "report_type": "periodic" + } + ] + } + } + }, + "INCORRECT_DST_GROUP": { + "sonic-telemetry_client:sonic-telemetry_client": { + "sonic-telemetry_client:TELEMETRY_CLIENT": { + "Global": { + "encoding": "JSON_IETF", + "retry_interval": "30", + "src_ip": "30.57.185.38", + "unidirectional": "true" + }, + "TELEMETRY_CLIENT_DS_LIST": [ + { + "prefix": "DestinationGroup_HS", + "dst_addr": "30.57.186.214:8081,30.57.185.39:8081" + } + ], + "TELEMETRY_CLIENT_SUB_LIST": [ + { + "prefix": "Subscription_HS_RDMA", + "dst_group": "FS", + "path_target": "COUNTERS_DB", + "paths": "COUNTERS/Ethernet*,COUNTERS_PORT_NAME_MAP", + "report_interval": "5000", + "report_type": "periodic" + } + ] + } + } + }, + "SRC_IP_INCORRECT_FORMAT": { + "sonic-telemetry_client:sonic-telemetry_client": { + "sonic-telemetry_client:TELEMETRY_CLIENT": { + "Global": { + "encoding": "JSON_IETF", + "retry_interval": "30", + "src_ip": "30.57.185.388", + "unidirectional": "true" + }, + "TELEMETRY_CLIENT_DS_LIST": [ + { + "prefix": "DestinationGroup_HS", + "dst_addr": "30.57.186.214:8081,30.57.185.39:8081" + } + ], + "TELEMETRY_CLIENT_SUB_LIST": [ + { + "prefix": "Subscription_HS_RDMA", + "dst_group": "HS", + "path_target": "COUNTERS_DB", + "paths": "COUNTERS/Ethernet*,COUNTERS_PORT_NAME_MAP", + "report_interval": "5000", + "report_type": "periodic" + } + ] + } + } + }, + "ENCODING_WRONG_VALUE": { + "sonic-telemetry_client:sonic-telemetry_client": { + "sonic-telemetry_client:TELEMETRY_CLIENT": { + "Global": { + "encoding": "Unicode", + "retry_interval": "30", + "src_ip": "30.57.185.38", + "unidirectional": "true" + }, + "TELEMETRY_CLIENT_DS_LIST": [ + { + "prefix": "DestinationGroup_HS", + "dst_addr": "30.57.186.214:8081,30.57.185.39:8081" + } + ], + "TELEMETRY_CLIENT_SUB_LIST": [ + { + "prefix": "Subscription_HS_RDMA", + "dst_group": "HS", + "path_target": "COUNTERS_DB", + "paths": "COUNTERS/Ethernet*,COUNTERS_PORT_NAME_MAP", + "report_interval": "5000", + "report_type": "periodic" + } + ] + } + } + } +} \ No newline at end of file diff --git a/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang b/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang new file mode 100644 index 000000000000..e5931df399b3 --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang @@ -0,0 +1,123 @@ +module sonic-telemetry_client { + + yang-version 1.1; + + namespace "http://github.com/Azure/sonic-telemetry_client"; + prefix telemetry_client; + + import ietf-inet-types { + prefix inet; + } + import sonic-types { + prefix stypes; + } + description + "TELEMETRY_CLIENT yang Module for SONiC OS"; + + revision 2021-11-30 { + description + "First revision"; + } + + typedef report-type { + type enumeration { + enum periodic; + enum stream; + enum once; + } + } + typedef path_target { + type enumeration { + enum APPL_DB; + enum CONFIG_DB; + enum COUNTERS_DB; + enum STATE_DB; + enum SYSMON_DB; + enum OTHERS; + } + } + + typedef encoding { + type enumeration { + enum JSON_IETF; + enum ASCII; + enum BYTES; + enum PROTO; + } + } + + + container sonic-telemetry_client{ + + container TELEMETRY_CLIENT { + container Global { + leaf retry_interval { + type int32; + description "retry_interval unit ms"; + } + + leaf src_ip { + type inet:ip-address; + } + + leaf encoding { + type encoding; + } + + leaf unidirectional { + type boolean; + default true; + } + } + + list TELEMETRY_CLIENT_DS_LIST { + ordered-by user; + key "prefix"; + + leaf prefix { + type string { + pattern "DestinationGroup_" + ".*"; + } + } + + leaf dst_addr { + type string; + } + } + + list TELEMETRY_CLIENT_SUB_LIST { + ordered-by user; + key "prefix"; + + leaf prefix { + type string { + pattern "Subscription_" + ".*"; + } + } + + leaf dst_group { + must "(contains(../../TELEMETRY_CLIENT_DS_LIST/prefix, current())"; + type string; + } + + leaf path_target { + type path_target; + } + + leaf paths { + type string; + } + + leaf report_interval { + type int32; + description "report_interval unit ms"; + } + + leaf report_type { + type report-type; + } + } + } + } +} + From 93a1534124b45ca60a900dcd6836db99211a2c66 Mon Sep 17 00:00:00 2001 From: NanQiSweeper <122280546+NanQiSweeper@users.noreply.github.com> Date: Tue, 10 Jan 2023 17:00:11 +0800 Subject: [PATCH 2/4] Fix compile error, missing closing parenthesis. Fix compilation error caused by adding sonic-telemetry_client.yang file, missing closing bracket. --- src/sonic-yang-models/yang-models/sonic-telemetry_client.yang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang b/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang index e5931df399b3..88367dcf76ed 100644 --- a/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang +++ b/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang @@ -96,7 +96,7 @@ module sonic-telemetry_client { } leaf dst_group { - must "(contains(../../TELEMETRY_CLIENT_DS_LIST/prefix, current())"; + must "(contains(../../TELEMETRY_CLIENT_DS_LIST/prefix, current()))"; type string; } From 3791c4833f5e33079bee80c9523a813ab10f4da2 Mon Sep 17 00:00:00 2001 From: "pengjianquan.pjq" Date: Thu, 12 Jan 2023 10:46:55 +0800 Subject: [PATCH 3/4] [modify] modify telemetry_client to restrict the ipv4:port type --- src/sonic-yang-models/setup.py | 1 + .../tests/telemetry_client.json | 4 +++ .../tests_config/telemetry_client.json | 28 +++++++++++++++++++ .../yang-models/sonic-telemetry_client.yang | 28 +++++++++++++++---- 4 files changed, 55 insertions(+), 6 deletions(-) diff --git a/src/sonic-yang-models/setup.py b/src/sonic-yang-models/setup.py index 8f379f174a45..db862c1a34a3 100644 --- a/src/sonic-yang-models/setup.py +++ b/src/sonic-yang-models/setup.py @@ -223,6 +223,7 @@ def run(self): './cvlyang-models/sonic-system-aaa.yang', './cvlyang-models/sonic-system-tacacs.yang', './cvlyang-models/sonic-telemetry.yang', + './cvlyang-models/sonic-telemetry_client.yang', './cvlyang-models/sonic-types.yang', './cvlyang-models/sonic-versions.yang', './cvlyang-models/sonic-vlan.yang', diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry_client.json b/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry_client.json index 238110a69a89..59be5b29ff03 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry_client.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry_client.json @@ -15,5 +15,9 @@ "desc": "Configure wrong value for encoding.", "eStrKey" : "InvalidValue", "eStr": ["encoding"] + }, + "DST_ADDR_INCORRECT_FORMAT": { + "desc": "Add dst_addr which is not in correct ip-port format.", + "eStrKey" : "Pattern" } } \ No newline at end of file diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry_client.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry_client.json index 42db206e25e3..5286bcba8b93 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry_client.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry_client.json @@ -110,5 +110,33 @@ ] } } + }, + "DST_ADDR_INCORRECT_FORMAT": { + "sonic-telemetry_client:sonic-telemetry_client": { + "sonic-telemetry_client:TELEMETRY_CLIENT": { + "Global": { + "encoding": "JSON_IETF", + "retry_interval": "30", + "src_ip": "30.57.185.38", + "unidirectional": "true" + }, + "TELEMETRY_CLIENT_DS_LIST": [ + { + "prefix": "DestinationGroup_HS", + "dst_addr": "30.57.186.214:80819,30.57.185.39:8081" + } + ], + "TELEMETRY_CLIENT_SUB_LIST": [ + { + "prefix": "Subscription_HS_RDMA", + "dst_group": "HS", + "path_target": "COUNTERS_DB", + "paths": "COUNTERS/Ethernet*,COUNTERS_PORT_NAME_MAP", + "report_interval": "5000", + "report_type": "periodic" + } + ] + } + } } } \ No newline at end of file diff --git a/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang b/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang index 88367dcf76ed..27e03c5ac036 100644 --- a/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang +++ b/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang @@ -8,13 +8,21 @@ module sonic-telemetry_client { import ietf-inet-types { prefix inet; } + import sonic-types { prefix stypes; } + + organization + "SONiC"; + + contact + "SONiC"; + description "TELEMETRY_CLIENT yang Module for SONiC OS"; - revision 2021-11-30 { + revision 2023-01-12 { description "First revision"; } @@ -32,7 +40,6 @@ module sonic-telemetry_client { enum CONFIG_DB; enum COUNTERS_DB; enum STATE_DB; - enum SYSMON_DB; enum OTHERS; } } @@ -46,14 +53,23 @@ module sonic-telemetry_client { } } + typedef ipv4-port { + type string { + pattern + '((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}' + + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]):' + + '([0-9]|[1-9]\d{1,3}|[1-5]\d{1,4}|6[0-4]\d{1,3}|65[0-4]\d{1,2}|655[0-2][0-9]|6553[0-5]),?)+'; + } + } + container sonic-telemetry_client{ container TELEMETRY_CLIENT { container Global { leaf retry_interval { - type int32; - description "retry_interval unit ms"; + type uint64; + description "retry_interval unit s"; } leaf src_ip { @@ -81,7 +97,7 @@ module sonic-telemetry_client { } leaf dst_addr { - type string; + type ipv4-port; } } @@ -109,7 +125,7 @@ module sonic-telemetry_client { } leaf report_interval { - type int32; + type uint64; description "report_interval unit ms"; } From a79e48a0766c9dd6b0bd5c8e04ea0694b7ea39f5 Mon Sep 17 00:00:00 2001 From: "pengjianquan.pjq" Date: Fri, 3 Feb 2023 15:36:12 +0800 Subject: [PATCH 4/4] [modify] add default value for report_interval --- src/sonic-yang-models/yang-models/sonic-telemetry_client.yang | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang b/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang index 27e03c5ac036..7b6b231031c5 100644 --- a/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang +++ b/src/sonic-yang-models/yang-models/sonic-telemetry_client.yang @@ -2,7 +2,7 @@ module sonic-telemetry_client { yang-version 1.1; - namespace "http://github.com/Azure/sonic-telemetry_client"; + namespace "http://github.com/sonic-net/sonic-telemetry_client"; prefix telemetry_client; import ietf-inet-types { @@ -127,6 +127,7 @@ module sonic-telemetry_client { leaf report_interval { type uint64; description "report_interval unit ms"; + default 5000; } leaf report_type {