blob: 231eb0e07c6be37610dacda7ff75d8ffb9ae9934 [file] [log] [blame]
Michael Walsh1b0ceb22017-05-31 16:03:01 -05001*** Settings ***
2Resource ../lib/utils.robot
3Resource ../lib/connection_client.robot
4Resource ../lib/boot_utils.robot
George Keishing58e47232018-02-12 10:35:15 -06005Library ../lib/gen_misc.py
George Keishingbf724772018-02-21 08:57:16 -06006Library ../lib/utils.py
Michael Walsh1b0ceb22017-05-31 16:03:01 -05007
8*** Variables ***
9# MAC input from user.
10${MAC_ADDRESS} ${EMPTY}
11
12
13*** Keywords ***
14
Michael Walsh1b0ceb22017-05-31 16:03:01 -050015Check And Reset MAC
16 [Documentation] Update BMC with user input MAC address.
17 [Arguments] ${mac_address}=${MAC_ADDRESS}
18
19 # Description of argument(s):
20 # mac_address The mac address (e.g. 00:01:6c:80:02:28).
21
22 Should Not Be Empty ${mac_address}
23 Open Connection And Log In
Joy Onyerikwu9b668972018-05-22 19:10:43 -050024 ${bmc_mac_addr} ${stderr} ${rc}= BMC Execute Command
25 ... cat /sys/class/net/eth0/address
Michael Walsh1b0ceb22017-05-31 16:03:01 -050026 Run Keyword If '${mac_address.lower()}' != '${bmc_mac_addr.lower()}'
27 ... Set MAC Address
28
Michael Walsh1b0ceb22017-05-31 16:03:01 -050029
Michael Walsh1b0ceb22017-05-31 16:03:01 -050030Set MAC Address
31 [Documentation] Update eth0 with input MAC address.
32 [Arguments] ${mac_address}=${MAC_ADDRESS}
33
34 # Description of argument(s):
35 # mac_address The mac address (e.g. 00:01:6c:80:02:28).
36
37 Write fw_setenv ethaddr ${mac_address}
38 OBMC Reboot (off)
Sunil Md1c4f272017-07-07 09:03:24 -050039
40 # Take SSH session post BMC reboot.
41 Open Connection And Log In
Joy Onyerikwu9b668972018-05-22 19:10:43 -050042 ${bmc_mac_addr} ${stderr} ${rc}= BMC Execute Command
43 ... cat /sys/class/net/eth0/address
Michael Walsh1b0ceb22017-05-31 16:03:01 -050044 Should Be Equal ${bmc_mac_addr} ${mac_address} ignore_case=True
45
Prashanth Kattie79c5402017-06-08 07:40:49 -050046
47Get BMC IP Info
48 [Documentation] Get system IP address and prefix length.
49
Prashanth Kattie79c5402017-06-08 07:40:49 -050050
51 # Get system IP address and prefix length details using "ip addr"
52 # Sample Output of "ip addr":
53 # 1: eth0: <BROADCAST,MULTIAST> mtu 1500 qdisc mq state UP qlen 1000
54 # link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
55 # inet xx.xx.xx.xx/24 brd xx.xx.xx.xx scope global eth0
56
Joy Onyerikwu9b668972018-05-22 19:10:43 -050057 ${cmd_output} ${stderr} ${rc}= BMC Execute Command
58 ... /sbin/ip addr | grep eth0
Prashanth Kattie79c5402017-06-08 07:40:49 -050059
60 # Get line having IP address details.
61 ${lines}= Get Lines Containing String ${cmd_output} inet
62
63 # List IP address details.
64 @{ip_components}= Split To Lines ${lines}
65
66 @{ip_data}= Create List
67
68 # Get all IP addresses and prefix lengths on system.
69 :FOR ${ip_component} IN @{ip_components}
70 \ @{if_info}= Split String ${ip_component}
71 \ ${ip_n_prefix}= Get From List ${if_info} 1
72 \ Append To List ${ip_data} ${ip_n_prefix}
73
74 [Return] ${ip_data}
75
76Get BMC Route Info
77 [Documentation] Get system route info.
78
Prashanth Kattie79c5402017-06-08 07:40:49 -050079
80 # Sample output of "ip route":
81 # default via xx.xx.xx.x dev eth0
82 # xx.xx.xx.0/23 dev eth0 src xx.xx.xx.xx
83 # xx.xx.xx.0/24 dev eth0 src xx.xx.xx.xx
84
Joy Onyerikwu9b668972018-05-22 19:10:43 -050085 ${cmd_output} ${stderr} ${rc}= BMC Execute Command
86 ... /sbin/ip route
Prashanth Kattie79c5402017-06-08 07:40:49 -050087
88 [Return] ${cmd_output}
89
George Keishing02651f02018-04-11 02:07:16 -050090# TODO: openbmc/openbmc-test-automation#1331
Prashanth Kattie79c5402017-06-08 07:40:49 -050091Get BMC MAC Address
92 [Documentation] Get system MAC address.
93
Prashanth Kattie79c5402017-06-08 07:40:49 -050094
95 # Sample output of "ip addr | grep ether":
96 # link/ether xx.xx.xx.xx.xx.xx brd ff:ff:ff:ff:ff:ff
97
Joy Onyerikwu9b668972018-05-22 19:10:43 -050098 ${cmd_output} ${stderr} ${rc}= BMC Execute Command
99 ... /sbin/ip addr | grep ether
Prashanth Kattie79c5402017-06-08 07:40:49 -0500100
Prashanth Katti9819b162017-12-12 05:38:59 -0600101 # Split the line and return MAC address.
102 # Split list data:
103 # link/ether | xx:xx:xx:xx:xx:xx | brd | ff:ff:ff:ff:ff:ff
104
105 @{words}= Split String ${cmd_output}
106
107 [Return] ${words[1]}
Prashanth Katti40fb8ca2017-07-25 06:47:23 -0500108
George Keishing02651f02018-04-11 02:07:16 -0500109
110Get BMC MAC Address List
111 [Documentation] Get system MAC address
112
113 # Sample output of "ip addr | grep ether":
114 # link/ether xx.xx.xx.xx.xx.xx brd ff:ff:ff:ff:ff:ff
115
Joy Onyerikwu9b668972018-05-22 19:10:43 -0500116 ${cmd_output} ${stderr} ${rc}= BMC Execute Command
117 ... /sbin/ip addr | grep ether
George Keishing02651f02018-04-11 02:07:16 -0500118
119 # Split the line and return MAC address.
120 # Split list data:
121 # link/ether | xx:xx:xx:xx:xx:xx | brd | ff:ff:ff:ff:ff:ff
122 # link/ether | xx:xx:xx:xx:xx:xx | brd | ff:ff:ff:ff:ff:ff
123
124 ${mac_list}= Create List
Joy Onyerikwu9b668972018-05-22 19:10:43 -0500125 @{lines}= Split To Lines ${cmd_output}
George Keishing02651f02018-04-11 02:07:16 -0500126 :FOR ${line} IN @{lines}
127 \ @{words}= Split String ${line}
128 \ Append To List ${mac_list} ${words[1]}
129
130 [Return] ${mac_list}
131
Prashanth Katti40fb8ca2017-07-25 06:47:23 -0500132Get BMC Hostname
133 [Documentation] Get BMC hostname.
134
135 # Sample output of "hostnamectl":
136 # Static hostname: xxyyxxyyxx
137 # Icon name: computer
138 # Machine ID: 6939927dc0db409ea09289d5b56eef08
139 # Boot ID: bb806955fd904d47b6aa4bc7c34df482
140 # Operating System: Phosphor OpenBMC (xxx xx xx) v1.xx.x-xx
141 # Kernel: Linux 4.10.17-d6ae40dc4c4dff3265cc254d404ed6b03fcc2206
142 # Architecture: arm
143
Joy Onyerikwu9b668972018-05-22 19:10:43 -0500144 ${output} ${stderr} ${rc}= BMC Execute Command
145 ... hostnamectl | grep hostname
Prashanth Katti40fb8ca2017-07-25 06:47:23 -0500146
147 [Return] ${output}
Prashanth Katti90f9ff22017-08-11 06:17:12 -0500148
149Get List Of IP Address Via REST
150 [Documentation] Get list of IP address via REST.
151 [Arguments] @{ip_uri_list}
152
153 # Description of argument(s):
154 # ip_uri_list List of IP objects.
155 # Example:
156 # "data": [
157 # "/xyz/openbmc_project/network/eth0/ipv4/e9767624",
158 # "/xyz/openbmc_project/network/eth0/ipv4/31f4ce8b"
159 # ],
160
161 ${ip_list}= Create List
162
163 : FOR ${ip_uri} IN @{ip_uri_list}
164 \ ${ip_addr}= Read Attribute ${ip_uri} Address
165 \ Append To List ${ip_list} ${ip_addr}
166
167 [Return] @{ip_list}
168
169Delete IP And Object
170 [Documentation] Delete IP and object.
171 [Arguments] ${ip_addr} @{ip_uri_list}
172
173 # Description of argument(s):
174 # ip_addr IP address to be deleted.
175 # ip_uri_list List of IP object URIs.
176
177 # Find IP object having this IP address.
178
179 : FOR ${ip_uri} IN @{ip_uri_list}
180 \ ${ip_addr1}= Read Attribute ${ip_uri} Address
181 \ Run Keyword If '${ip_addr}' == '${ip_addr1}' Exit For Loop
182
183 # If the given IP address is not configured, return.
184 # Otherwise, delete the IP and object.
185
186 Run Keyword And Return If '${ip_addr}' != '${ip_addr1}'
187 ... Pass Execution IP address to be deleted is not configured.
188
189 Run Keyword And Ignore Error OpenBMC Delete Request ${ip_uri}
190
191 # After any modification on network interface, BMC restarts network
192 # module, wait until it is reachable.
193
Prashanth Katti3690dc02017-11-22 07:21:24 -0600194 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_RETRY_TIME}
195 ... ${NETWORK_TIMEOUT}
Prashanth Katti90f9ff22017-08-11 06:17:12 -0500196
197 # Verify whether deleted IP address is removed from BMC system.
198
199 ${ip_data}= Get BMC IP Info
Prashanth Katti160faf62017-09-07 01:05:56 -0500200 Should Not Contain Match ${ip_data} ${ip_addr}*
Prashanth Katti90f9ff22017-08-11 06:17:12 -0500201 ... msg=IP address not deleted.
Prashanth Kattidf2e4fdf2018-02-07 07:04:13 -0600202
George Keishing58e47232018-02-12 10:35:15 -0600203Get First Non Pingable IP From Subnet
204 [Documentation] Find first non-pingable IP from the subnet and return it.
205 [Arguments] ${host}=${OPENBMC_HOST}
Prashanth Kattidf2e4fdf2018-02-07 07:04:13 -0600206
207 # Description of argument(s):
George Keishing58e47232018-02-12 10:35:15 -0600208 # host Any valid host name or IP address
209 # (e.g. "machine1" or "9.xx.xx.31").
Prashanth Kattidf2e4fdf2018-02-07 07:04:13 -0600210
George Keishing58e47232018-02-12 10:35:15 -0600211 # Non-pingable IP is unused IP address in the subnet.
212 ${host_name} ${ip_addr}= Get Host Name IP
Prashanth Kattidf2e4fdf2018-02-07 07:04:13 -0600213
214 # Split IP address into network part and host part.
215 # IP address will have 4 octets xx.xx.xx.xx.
216 # Sample output after split:
217 # split_ip [xx.xx.xx, xx]
218
219 ${split_ip}= Split String From Right ${ip_addr} . 1
220 # First element in list is Network part.
221 ${network_part}= Get From List ${split_ip} 0
222
George Keishing58e47232018-02-12 10:35:15 -0600223 : FOR ${octet4} IN RANGE 1 255
Prashanth Kattidf2e4fdf2018-02-07 07:04:13 -0600224 \ ${new_ip}= Catenate ${network_part}.${octet4}
Prashanth Kattidf2e4fdf2018-02-07 07:04:13 -0600225 \ ${status}= Run Keyword And Return Status Ping Host ${new_ip}
George Keishing58e47232018-02-12 10:35:15 -0600226 # If IP is non-pingable, return it.
227 \ Return From Keyword If '${status}' == 'False' ${new_ip}
Prashanth Kattidf2e4fdf2018-02-07 07:04:13 -0600228
George Keishing58e47232018-02-12 10:35:15 -0600229 Fail msg=No non-pingable IP could be found in subnet ${network_part}.
Prashanth Kattidf2e4fdf2018-02-07 07:04:13 -0600230
George Keishingbf724772018-02-21 08:57:16 -0600231
232Validate MAC On BMC
233 [Documentation] Validate MAC on BMC.
234 [Arguments] ${mac_addr}
235
236 # Description of argument(s):
237 # mac_addr MAC address of the BMC.
238
239 ${system_mac}= Get BMC MAC Address
240
241 ${status}= Compare MAC Address ${system_mac} ${mac_addr}
242 Should Be True ${status}
243 ... msg=MAC address ${system_mac} does not match ${mac_addr}.
244
Daniel Gonzalezbfd8aff2018-03-27 10:20:37 -0600245
246Run Build Net
247 [Documentation] Run build_net to preconfigure the ethernet interfaces.
248
249 OS Execute Command build_net help y y
250 # Run pingum to chech if the "build_net" was run correctly done.
251 ${output} ${stderr} ${rc}= OS Execute Command pingum
252 Should Contain ${output} All networks ping Ok