Skip to content

Commit c48b03a

Browse files
SuvarnaMeenakshisonic-otn
authored andcommitted
[YANG][SNMP]: Add YANG model for SNMP_AGENT_ADDRESS_CONFIG table (sonic-net#15587)
#### Why I did it sonic-net/sonic-utilities#472 Added SNMP_AGENT_ADDRESS_CONFIG table in config db. This PR is to add corresponding YANG model for that table. ##### Work item tracking - Microsoft ADO **(number only)**: #### How I did it Added YANG modesl for SNMP_AGENT_ADDRESS_CONFIG. keys: agent_ip, port number, vrf. CLI implementaion checks if agent_ip, port number already exists in CONFIG_DB table, if it does, then new entry is not added. So added another condition to ensure combination of agent_ip and port is unique. Below is an example of how data looks like in DB: ``` 127.0.0.1:6379[4]> HGETALL "SNMP_AGENT_ADDRESS_CONFIG|10.1.1.1|161|foo" 1) "NULL" 2) "NULL" 127.0.0.1:6379[4]> HGETALL "SNMP_AGENT_ADDRESS_CONFIG|10.1.0.32|161|" 1) "NULL" 2) "NULL" ``` #### How to verify it Added unit-test for various combinations and ensures that it passes.
1 parent 9dc9899 commit c48b03a

File tree

3 files changed

+199
-0
lines changed

3 files changed

+199
-0
lines changed

src/sonic-yang-models/tests/yang_model_tests/tests/snmp.json

+35
Original file line numberDiff line numberDiff line change
@@ -113,5 +113,40 @@
113113
"SNMP_USER_PRIV_LONG_ENCRYPT_PASS_NEG_TEST": {
114114
"desc": "Load SNMP user with user type Priv with long encryption password",
115115
"eStrKey": "Range"
116+
},
117+
"SNMP_AGENT_ADDRESS_CONFIG": {
118+
"desc": "Load SNMP agent address config"
119+
},
120+
"SNMP_AGENT_ADDRESS_CONFIG_IPV6": {
121+
"desc": "Load SNMP agent address config"
122+
},
123+
"SNMP_AGENT_ADDRESS_CONFIG_EMPTY_PORT_NUMBER": {
124+
"desc": "Load SNMP agent address config with empty port number"
125+
},
126+
"SNMP_AGENT_ADDRESS_CONFIG_MGMT_VRF": {
127+
"desc": "Load SNMP agent address config with mgmt vrf"
128+
},
129+
"SNMP_AGENT_ADDRESS_CONFIG_NO_VRF": {
130+
"desc": "Load SNMP agent address config with no vrf",
131+
"eStr": ["Missing required element"]
132+
},
133+
"SNMP_AGENT_ADDRESS_CONFIG_INVALID_PORT": {
134+
"desc": "Load SNMP agent address config with invalid port",
135+
"eStrKey": "InvalidValue"
136+
},
137+
"SNMP_AGENT_ADDRESS_CONFIG_DUPLICATE_IP_PORT": {
138+
"desc": "Load two SNMP agent address config same ip and port",
139+
"eStr": ["Unique data leaf(s)"]
140+
},
141+
"SNMP_AGENT_ADDRESS_CONFIG_INVALID_IPV4_ADDRESS": {
142+
"desc": "Load SNMP agent address config with invalid IPv4 address",
143+
"eStrKey": "InvalidValue",
144+
"eStr": ["ip"]
145+
},
146+
"SNMP_AGENT_ADDRESS_CONFIG_INVALID_IPV6_ADDRESS": {
147+
"desc": "Load SNMP agent address config with invalid IPV6 address",
148+
"eStrKey": "InvalidValue",
149+
"eStr": ["ip"]
116150
}
117151
}
152+

src/sonic-yang-models/tests/yang_model_tests/tests_config/snmp.json

+121
Original file line numberDiff line numberDiff line change
@@ -502,5 +502,126 @@
502502
]
503503
}
504504
}
505+
},
506+
"SNMP_AGENT_ADDRESS_CONFIG": {
507+
"sonic-snmp:sonic-snmp": {
508+
"sonic-snmp:SNMP_AGENT_ADDRESS_CONFIG": {
509+
"SNMP_AGENT_ADDRESS_LIST": [
510+
{
511+
"agent_ip": "10.0.0.1",
512+
"port": "161",
513+
"vrf_name": ""
514+
}
515+
]
516+
}
517+
}
518+
},
519+
"SNMP_AGENT_ADDRESS_CONFIG_IPV6": {
520+
"sonic-snmp:sonic-snmp": {
521+
"sonic-snmp:SNMP_AGENT_ADDRESS_CONFIG": {
522+
"SNMP_AGENT_ADDRESS_LIST": [
523+
{
524+
"agent_ip": "fd00::1",
525+
"port": "161",
526+
"vrf_name": ""
527+
}
528+
]
529+
}
530+
}
531+
},
532+
"SNMP_AGENT_ADDRESS_CONFIG_EMPTY_PORT_NUMBER": {
533+
"sonic-snmp:sonic-snmp": {
534+
"sonic-snmp:SNMP_AGENT_ADDRESS_CONFIG": {
535+
"SNMP_AGENT_ADDRESS_LIST": [
536+
{
537+
"agent_ip": "10.0.0.1",
538+
"port": "",
539+
"vrf_name": "mgmt"
540+
}
541+
]
542+
}
543+
}
544+
},
545+
"SNMP_AGENT_ADDRESS_CONFIG_MGMT_VRF": {
546+
"sonic-snmp:sonic-snmp": {
547+
"sonic-snmp:SNMP_AGENT_ADDRESS_CONFIG": {
548+
"SNMP_AGENT_ADDRESS_LIST": [
549+
{
550+
"agent_ip": "10.0.0.1",
551+
"port": "161",
552+
"vrf_name": "mgmt"
553+
}
554+
]
555+
}
556+
}
557+
},
558+
"SNMP_AGENT_ADDRESS_CONFIG_NO_VRF": {
559+
"sonic-snmp:sonic-snmp": {
560+
"sonic-snmp:SNMP_AGENT_ADDRESS_CONFIG": {
561+
"SNMP_AGENT_ADDRESS_LIST": [
562+
{
563+
"agent_ip": "10.0.0.1",
564+
"port": "161"
565+
}
566+
]
567+
}
568+
}
569+
},
570+
"SNMP_AGENT_ADDRESS_CONFIG_INVALID_PORT": {
571+
"sonic-snmp:sonic-snmp": {
572+
"sonic-snmp:SNMP_AGENT_ADDRESS_CONFIG": {
573+
"SNMP_AGENT_ADDRESS_LIST": [
574+
{
575+
"agent_ip": "10.0.0.1",
576+
"port": "65536",
577+
"vrf_name": "mgmt"
578+
}
579+
]
580+
}
581+
}
582+
},
583+
"SNMP_AGENT_ADDRESS_CONFIG_DUPLICATE_IP_PORT": {
584+
"sonic-snmp:sonic-snmp": {
585+
"sonic-snmp:SNMP_AGENT_ADDRESS_CONFIG": {
586+
"SNMP_AGENT_ADDRESS_LIST": [
587+
{
588+
"agent_ip": "10.0.0.1",
589+
"port": "161",
590+
"vrf_name": "mgmt"
591+
},
592+
{
593+
"agent_ip": "10.0.0.1",
594+
"port": "161",
595+
"vrf_name": ""
596+
}
597+
]
598+
}
599+
}
600+
},
601+
"SNMP_AGENT_ADDRESS_CONFIG_INVALID_IPV4_ADDRESS": {
602+
"sonic-snmp:sonic-snmp": {
603+
"sonic-snmp:SNMP_AGENT_ADDRESS_CONFIG": {
604+
"SNMP_AGENT_ADDRESS_LIST": [
605+
{
606+
"agent_ip": "340.1.1.10",
607+
"port": "161",
608+
"vrf_name": ""
609+
}
610+
]
611+
}
612+
}
613+
},
614+
"SNMP_AGENT_ADDRESS_CONFIG_INVALID_IPV6_ADDRESS": {
615+
"sonic-snmp:sonic-snmp": {
616+
"sonic-snmp:SNMP_AGENT_ADDRESS_CONFIG": {
617+
"SNMP_AGENT_ADDRESS_LIST": [
618+
{
619+
"agent_ip": "2001:aa:aa:aa",
620+
"port": "161",
621+
"vrf_name": ""
622+
}
623+
]
624+
}
625+
}
505626
}
506627
}

src/sonic-yang-models/yang-models/sonic-snmp.yang

+43
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ module sonic-snmp {
33
prefix ssnmp;
44
yang-version 1.1;
55

6+
import ietf-inet-types {
7+
prefix inet;
8+
}
9+
import sonic-vrf {
10+
prefix vrf;
11+
}
612

713
organization
814
"SONiC";
@@ -156,5 +162,42 @@ module sonic-snmp {
156162
}
157163
}
158164
}
165+
container SNMP_AGENT_ADDRESS_CONFIG {
166+
list SNMP_AGENT_ADDRESS_LIST {
167+
key "agent_ip port vrf_name";
168+
unique "agent_ip port";
169+
description "List of SNMP agent listening IP Addresses and ports.";
170+
171+
leaf agent_ip {
172+
type inet:ip-address;
173+
description "SNMP agent listening IP";
174+
}
175+
leaf port {
176+
type union {
177+
type string {
178+
pattern '';
179+
}
180+
type inet:port-number;
181+
}
182+
default "";
183+
description "SNMP agent listening port number";
184+
}
185+
leaf vrf_name {
186+
type union {
187+
type string {
188+
pattern '';
189+
}
190+
type string {
191+
pattern 'mgmt';
192+
}
193+
type string {
194+
pattern "Vrf[a-zA-Z0-9_-]+";
195+
}
196+
}
197+
default "";
198+
description "VRF name";
199+
}
200+
}
201+
}
159202
}
160203
}

0 commit comments

Comments
 (0)