blob: 9045143958c82549c3e3b9757947f579d425ff3e [file] [log] [blame]
Prashanth Katti391000c2021-06-11 04:09:21 -05001Documentation Utility for SNMP configurations via Redfish.
2
3*** Settings ***
4
5Resource ../../lib/utils.robot
6Resource ../../lib/connection_client.robot
7Library ../../lib/gen_misc.py
8Library ../../lib/utils.py
9
Anves Kumar rayankula2f9632f2021-07-05 04:37:45 -050010*** Variables ***
11
12${snmp_function} SNMPTrap
13${snmp_version} SNMPv2c
14${subscription_uri} /redfish/v1/EventService/Subscriptions
15
16${CMD_INTERNAL_FAILURE} busctl call xyz.openbmc_project.Logging /xyz/openbmc_project/logging
17... xyz.openbmc_project.Logging.Create Create ssa{ss} xyz.openbmc_project.Common.Error.InternalFailure
18... xyz.openbmc_project.Logging.Entry.Level.Error 0
19
20${CMD_FRU_CALLOUT} busctl call xyz.openbmc_project.Logging /xyz/openbmc_project/logging
21... xyz.openbmc_project.Logging.Create Create ssa{ss} xyz.openbmc_project.Common.Error.Timeout
22... xyz.openbmc_project.Logging.Entry.Level.Error 2 "TIMEOUT_IN_MSEC" "5"
23... "CALLOUT_INVENTORY_PATH" "/xyz/openbmc_project/inventory/system/chassis/motherboard"
24
25${CMD_INFORMATIONAL_ERROR} busctl call xyz.openbmc_project.Logging /xyz/openbmc_project/logging
26... xyz.openbmc_project.Logging.Create Create ssa{ss} xyz.openbmc_project.Common.Error.TestError2
27... xyz.openbmc_project.Logging.Entry.Level.Informational 0
28
29${SNMP_TRAP_BMC_INTERNAL_FAILURE} xyz.openbmc_project.Common.Error.InternalFailure
30${SNMP_TRAP_BMC_CALLOUT_ERROR} xyz.openbmc_project.Common.Error.Timeout
Megha G N2476c5c2023-04-10 06:22:30 -050031... CALLOUT_INVENTORY_PATH=/xyz/openbmc_project/inventory/system/chassis/motherboard TIMEOUT_IN_MSEC=5
Anves Kumar rayankula2f9632f2021-07-05 04:37:45 -050032${SNMP_TRAP_BMC_INFORMATIONAL_ERROR} xyz.openbmc_project.Common.Error.TestError2
33
Prashanth Katti391000c2021-06-11 04:09:21 -050034
35*** Keywords ***
36
37Get SNMP Manager List
38 [Documentation] Get the list of SNMP managers and return IP addresses and ports.
39
40 # Get the list of SNMP manager URIs.
41 @{snmp_mgr_uris}= Get SNMP Child URIs
42
43 ${snmp_mgr_list}= Create List
44
45 FOR ${snmp_mgr_uri} IN @{snmp_mgr_uris}
46 # Sample output:
47 # {
48 # "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp1",
49 # "@odata.type": "#EventDestination.v1_7_0.EventDestination",
50 # "Context": "",
51 # "Destination": "snmp://xx.xx.xx.xx:162",
52 # "EventFormatType": "Event",
53 # "Id": "snmp1",
54 # "Name": "Event Destination snmp1",
55 # "Protocol": "SNMPv2c",
56 # "SubscriptionType": "SNMPTrap"
57
58 ${resp}= Redfish.Get ${snmp_mgr_uri}
59 ${snmp_mgr}= Get From Dictionary ${resp.dict} Destination
60 Append To List ${snmp_mgr_list} ${snmp_mgr}
61 END
62
George Keishing409df052024-01-17 22:36:14 +053063 RETURN ${snmp_mgr_list}
Prashanth Katti391000c2021-06-11 04:09:21 -050064
65
66Configure SNMP Manager Via Redfish
67 [Documentation] Configure SNMP manager on BMC via Redfish.
68 [Arguments] ${snmp_mgr_ip} ${snmp_port} ${valid_status_codes}=${HTTP_CREATED}
69
70 # Description of argument(s):
71 # snmp_mgr_ip SNMP manager IP address
72 # snmp_port SNMP manager port
73 # valid_status_code expected code
74
Yi Hu02d32762024-03-07 14:34:34 -080075 ${colon}= Set Variable If '${snmp_port}' == '${EMPTY}' ${EMPTY} :
76 ${snmp_mgr_data}= Create Dictionary Destination=snmp://${snmp_mgr_ip}${colon}${snmp_port}
Prashanth Katti391000c2021-06-11 04:09:21 -050077 ... SubscriptionType=${snmp_function} Protocol=${snmp_version}
78
79 Redfish.Post ${subscription_uri} body=&{snmp_mgr_data}
80 ... valid_status_codes=[${valid_status_codes}]
81
82
83Verify SNMP Manager Configured On BMC
84 [Documentation] Verify SNMP manager configured on BMC.
85 [Arguments] ${snmp_mgr_ip} ${snmp_port}
86
87 # Description of argument(s):
88 # snmp_mgr_ip SNMP manager IP address
89 # snmp_port SNMP manager port
90
91 # Get the list of SNMP managers that are configured on BMC.
92 @{snmp_mgr_list}= Get SNMP Manager List
93
94 ${snmp_ip_port}= Catenate ${snmp_mgr_ip}:${snmp_port}
95
96 List Should Contain Value ${snmp_mgr_list} snmp://${snmp_ip_port}
97 ... msg=SNMP manager is not configured.
98
99
100Get SNMP Child URIs
101 [Documentation] Get the list of all SNMP manager URIs.
102
103 # Sample output of SNMP URI:
104 # {
105 # "@odata.id": "/redfish/v1/EventService/Subscriptions",
106 # "@odata.type": "#EventDestinationCollection.EventDestinationCollection",
107 # "Members": [
108 # {
109 # "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp6"
110 # },
111 # {
112 # "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp2"
113 # },
114 # {
115 # "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp9"
116 # },
117 # {
118 # "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp1"
119 # },
120 # {
121 # "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp8"
122 # },
123 # {
124 # "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp4"
125 # },
126 # {
127 # "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp7"
128 # },
129 # {
130 # "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp5"
131 # },
132 # {
133 # "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp3"
134 # }
135 # ],
136 # "Members@odata.count": 9,
137 # "Name": "Event Destination Collections"
138
139 # Get the list of child URIs.
140 @{snmp_mgr_uris}= Redfish.Get Members List ${subscription_uri} filter=snmp
141
George Keishing409df052024-01-17 22:36:14 +0530142 RETURN ${snmp_mgr_uris}
Prashanth Kattidd99a912021-06-14 09:12:02 -0500143
144
145Delete SNMP Manager Via Redfish
146 [Documentation] Delete SNMP manager.
147 [Arguments] ${snmp_mgr_ip} ${snmp_port}
148
149 # Description of argument(s):
150 # snmp_mgr_ip SNMP manager IP.
151 # snmp_port Network port where SNMP manager is listening.
152
153 ${is_snmp_found}= Set Variable ${False}
154 ${snmp_ip_port}= Catenate ${snmp_mgr_ip}:${snmp_port}
155
156 # Get the list of SNMP manager URIs.
157 @{snmp_mgr_uris}= Get SNMP Child URIs
158
159 # Find the SNMP manager URI that has IP and port configured.
160 FOR ${snmp_mgr_uri} IN @{snmp_mgr_uris}
161 # Sample output:
162 # {
163 # "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp1",
164 # "@odata.type": "#EventDestination.v1_7_0.EventDestination",
165 # "Context": "",
166 # "Destination": "snmp://xx.xx.xx.xx:162",
167 # "EventFormatType": "Event",
168 # "Id": "snmp1",
169 # "Name": "Event Destination snmp1",
170 # "Protocol": "SNMPv2c",
171 # "SubscriptionType": "SNMPTrap"
172
173 # Find the SNMP manager that has matching destination details.
174 ${snmp_mgr}= Redfish.Get Attribute ${snmp_mgr_uri} Destination
175
176 # Delete the SNMP manager if the requested IP & ports are found
177 # and mark is_snmp_found to true.
178 Run Keyword If 'snmp://${snmp_ip_port}' == '${snmp_mgr}'
179 ... Run Keywords Set Local Variable ${is_snmp_found} ${True}
180 ... AND Redfish.Delete ${snmp_mgr_uri}
181 ... AND Exit For Loop
182 END
183
184 Pass Execution If ${is_snmp_found} == ${False}
185 ... SNMP Manager: ${snmp_mgr_ip}:${snmp_port} is not configured on BMC
186
187 # Check if the SNMP manager is really deleted from BMC.
188 ${status}= Run Keyword And Return Status
189 ... Verify SNMP Manager Configured On BMC ${snmp_mgr_ip} ${snmp_port}
190
191 Should Be Equal ${status} ${False} msg=SNMP manager is not deleted in the backend.
Prashanth Kattic744f042021-06-16 07:46:04 -0500192
193
194Create Error On BMC And Verify Trap
195 [Documentation] Generate error on BMC and verify if trap is sent.
196 [Arguments] ${event_log}=${CMD_INTERNAL_FAILURE} ${expected_error}=${SNMP_TRAP_BMC_INTERNAL_FAILURE}
197
198 # Description of argument(s):
199 # event_log Event logs to be created.
200 # expected_error Expected error on SNMP.
201
202 Configure SNMP Manager Via Redfish ${SNMP_MGR1_IP} ${SNMP_DEFAULT_PORT} ${HTTP_CREATED}
203
204 Start SNMP Manager
205
206 # Generate error log.
207 BMC Execute Command ${event_log}
208
209 SSHLibrary.Switch Connection snmp_server
210 ${SNMP_LISTEN_OUT}= Read delay=1s
211
212 Delete SNMP Manager Via Redfish ${SNMP_MGR1_IP} ${SNMP_DEFAULT_PORT}
213
214 # Stop SNMP manager process.
215 SSHLibrary.Execute Command sudo killall snmptrapd
216
217 # Sample SNMP trap:
218 # 2021-06-16 07:05:29 xx.xx.xx.xx [UDP: [xx.xx.xx.xx]:58154->[xx.xx.xx.xx]:xxx]:
219 # DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2100473) 5:50:04.73
220 # SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-SMI::enterprises.49871.1.0.0.1
221 # SNMPv2-SMI::enterprises.49871.1.0.1.1 = Gauge32: 369 SNMPv2-SMI::enterprises.49871.1.0.1.2 = Opaque:
222 # UInt64: 1397718405502468474 SNMPv2-SMI::enterprises.49871.1.0.1.3 = INTEGER: 3
223 # SNMPv2-SMI::enterprises.49871.1.0.1.4 = STRING: "xxx.xx.xx Failure"
224
225 ${lines}= Split To Lines ${SNMP_LISTEN_OUT}
226 ${trap_info}= Get From List ${lines} -1
227 ${snmp_trap}= Split String ${trap_info} \t
228
229 Verify SNMP Trap ${snmp_trap} ${expected_error}
230
George Keishing409df052024-01-17 22:36:14 +0530231 RETURN ${snmp_trap}
Prashanth Kattic744f042021-06-16 07:46:04 -0500232
233
234Verify SNMP Trap
235 [Documentation] Verify SNMP trap.
236 [Arguments] ${snmp_trap} ${expected_error}=${SNMP_TRAP_BMC_INTERNAL_FAILURE}
237
238 # Description of argument(s):
239 # snmp_trap SNMP trap collected on SNMP manager.
240 # expected_error Expected error on SNMP.
241
242 # Verify all the mandatory fields of trap.
243 Should Contain ${snmp_trap}[0] DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks:
244 Should Be Equal ${snmp_trap}[1] SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-SMI::enterprises.49871.1.0.0.1
245 Should Match Regexp ${snmp_trap}[2] SNMPv2-SMI::enterprises.49871.1.0.1.1 = Gauge32: \[0-9]*
246 Should Match Regexp ${snmp_trap}[3] SNMPv2-SMI::enterprises.49871.1.0.1.2 = Opaque: UInt64: \[0-9]*
247 Should Match Regexp ${snmp_trap}[4] SNMPv2-SMI::enterprises.49871.1.0.1.3 = INTEGER: \[0-9]
248 Should Be Equal ${snmp_trap}[5] SNMPv2-SMI::enterprises.49871.1.0.1.4 = STRING: "${expected_error}"
249
250
251Start SNMP Manager
252 [Documentation] Start SNMP listener on the remote SNMP manager.
253
254 Open Connection And Log In ${SNMP_MGR1_USERNAME} ${SNMP_MGR1_PASSWORD}
255 ... alias=snmp_server host=${SNMP_MGR1_IP}
256
Prashanth Katti98825c02022-08-11 08:04:04 -0500257 # Clean SNMP managers running in the background.
258 SSHLibrary.Execute Command killall snmptrapd
259
Prashanth Kattic744f042021-06-16 07:46:04 -0500260 # The execution of the SNMP_TRAPD_CMD is necessary to cause SNMP to begin
261 # listening to SNMP messages.
262 SSHLibrary.write ${SNMP_TRAPD_CMD} &
Prashanth Kattib1a9c6b2021-06-18 01:36:14 -0500263
264
George Keishinga2e8b0d2022-07-20 05:52:51 -0500265Create Error On BMC And Verify Trap On Non Default Port
Prashanth Kattib1a9c6b2021-06-18 01:36:14 -0500266 [Documentation] Generate error on BMC and verify if trap is sent to non default port.
267 [Arguments] ${event_log}=${CMD_INTERNAL_FAILURE} ${expected_error}=${SNMP_TRAP_BMC_INTERNAL_FAILURE}
268
269 # Description of argument(s):
270 # event_log Event logs to be created.
271 # expected_error Expected error on SNMP.
272
273 Configure SNMP Manager Via Redfish ${SNMP_MGR1_IP} ${NON_DEFAULT_PORT1}
274
275 Start SNMP Manager On Specific Port ${SNMP_MGR1_IP} ${NON_DEFAULT_PORT1}
276
277 # Generate error log.
278 BMC Execute Command ${event_log}
279
280 SSHLibrary.Switch Connection snmp_server
281 ${SNMP_LISTEN_OUT}= Read delay=1s
282
283 Delete SNMP Manager Via Redfish ${SNMP_MGR1_IP} ${NON_DEFAULT_PORT1}
284
285 # Stop SNMP manager process.
286 SSHLibrary.Execute Command sudo killall snmptrapd
287
288 # Sample SNMP trap:
289 # 2021-06-16 07:05:29 xx.xx.xx.xx [UDP: [xx.xx.xx.xx]:58154->[xx.xx.xx.xx]:xxx]:
290 # DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2100473) 5:50:04.73
291 # SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-SMI::enterprises.49871.1.0.0.1
292 # SNMPv2-SMI::enterprises.49871.1.0.1.1 = Gauge32: 369 SNMPv2-SMI::enterprises.49871.1.0.1.2 = Opaque:
293 # UInt64: 1397718405502468474 SNMPv2-SMI::enterprises.49871.1.0.1.3 = INTEGER: 3
294 # SNMPv2-SMI::enterprises.49871.1.0.1.4 = STRING: "xxx.xx.xx Failure"
295
296 ${lines}= Split To Lines ${SNMP_LISTEN_OUT}
297 ${trap_info}= Get From List ${lines} -1
298 ${snmp_trap}= Split String ${trap_info} \t
299
300 Verify SNMP Trap ${snmp_trap} ${expected_error}
301
George Keishing409df052024-01-17 22:36:14 +0530302 RETURN ${snmp_trap}
Prashanth Kattib1a9c6b2021-06-18 01:36:14 -0500303
304
305Start SNMP Manager On Specific Port
306 [Documentation] Start SNMP listener on specific port on the remote SNMP manager.
307 [Arguments] ${snmp_mgr_ip} ${snmp_port}
308
309 # Description of argument(s):
310 # snmp_mgr_ip SNMP manager IP.
311 # snmp_port Network port on which SNMP manager need to run.
312
313 ${ip_and_port}= Catenate ${snmp_mgr_ip}:${snmp_port}
314
315 Open Connection And Log In ${SNMP_MGR1_USERNAME} ${SNMP_MGR1_PASSWORD}
316 ... alias=snmp_server host=${SNMP_MGR1_IP}
317
318 # The execution of the SNMP_TRAPD_CMD is necessary to cause SNMP to begin
319 # listening to SNMP messages.
320 SSHLibrary.write ${SNMP_TRAPD_CMD} ${ip_and_port} &
Prashanth Katti6ea399b2021-07-20 06:59:34 -0500321
322
323Generate Error On BMC And Verify Trap
324 [Documentation] Generate error on BMC and verify if trap is sent.
325 [Arguments] ${event_log}=${CMD_INTERNAL_FAILURE} ${expected_error}=${SNMP_TRAP_BMC_INTERNAL_FAILURE}
326
327 # Description of argument(s):
328 # event_log Event logs to be created.
329 # expected_error Expected error on SNMP.
330
331 Start SNMP Manager
332
333 # Generate error log.
334 BMC Execute Command ${event_log}
335
336 SSHLibrary.Switch Connection snmp_server
337 ${SNMP_LISTEN_OUT}= Read delay=1s
338
339 Delete SNMP Manager Via Redfish ${SNMP_MGR1_IP} ${SNMP_DEFAULT_PORT}
340
341 # Stop SNMP manager process.
342 SSHLibrary.Execute Command sudo killall snmptrapd
343
344 # Sample SNMP trap:
345 # 2021-06-16 07:05:29 xx.xx.xx.xx [UDP: [xx.xx.xx.xx]:58154->[xx.xx.xx.xx]:xxx]:
346 # DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2100473) 5:50:04.73
347 # SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-SMI::enterprises.49871.1.0.0.1
348 # SNMPv2-SMI::enterprises.49871.1.0.1.1 = Gauge32: 369 SNMPv2-SMI::enterprises.49871.1.0.1.2 = Opaque:
349 # UInt64: 1397718405502468474 SNMPv2-SMI::enterprises.49871.1.0.1.3 = INTEGER: 3
350 # SNMPv2-SMI::enterprises.49871.1.0.1.4 = STRING: "xxx.xx.xx Failure"
351
352 ${lines}= Split To Lines ${SNMP_LISTEN_OUT}
353 ${trap_info}= Get From List ${lines} -1
354 ${snmp_trap}= Split String ${trap_info} \t
355
356 Verify SNMP Trap ${snmp_trap} ${expected_error}
357
George Keishing409df052024-01-17 22:36:14 +0530358 RETURN ${snmp_trap}
Prashanth Katti6ea399b2021-07-20 06:59:34 -0500359