1*** Settings ***
2Documentation  Network stack stress tests using "nping" tool.
3
4# This Suite has few testcases which uses nping with ICMP.
5# ICMP creates a raw socket, which requires root privilege/sudo to run tests.
6
7Resource                ../lib/resource.robot
8Resource                ../lib/bmc_redfish_resource.robot
9Resource                ../lib/ipmi_client.robot
10Resource                ../lib/bmc_network_security_utils.robot
11
12Library                 OperatingSystem
13Library                 String
14Library                 ../lib/gen_robot_valid.py
15Library                 ../lib/bmc_network_utils.py
16Library                 ../lib/ipmi_utils.py
17
18Suite Setup             Suite Setup Execution
19
20Force Tags              Network_Nping
21
22*** Variables ***
23
24${delay}                1000ms
25${count}                4
26${program_name}         nping
27${iterations}           5000
28
29*** Test Cases ***
30
31Send ICMP Timestamp Request
32    [Documentation]  Send ICMP packet type 13 and check BMC drops such packets
33    [Tags]  Send_ICMP_Timestamp_Request
34
35    # Send ICMP packet type 13 to BMC and check packet loss.
36    ${packet_loss}=  Send Network Packets And Get Packet Loss
37    ...  ${OPENBMC_HOST}  ${count}  ${ICMP_PACKETS}  ${NETWORK_PORT}  ${ICMP_TIMESTAMP_REQUEST}
38    Should Be Equal As Numbers  ${packet_loss}  100.00
39    ...  msg=FAILURE: BMC is not dropping timestamp request messages.
40
41Send ICMP Netmask Request
42    [Documentation]  Send ICMP packet type 17 and check BMC drops such packets
43    [Tags]  Send_ICMP_Netmask_Request
44
45    # Send ICMP packet type 17 to BMC and check packet loss.
46    ${packet_loss}=  Send Network Packets And Get Packet Loss
47    ...  ${OPENBMC_HOST}  ${count}  ${ICMP_PACKETS}  ${NETWORK_PORT}  ${ICMP_NETMASK_REQUEST}
48    Should Be Equal As Numbers  ${packet_loss}  100.00
49    ...  msg=FAILURE: BMC is not dropping netmask request messages.
50
51Send Continuous ICMP Echo Request To BMC And Verify No Packet Loss
52    [Documentation]  Send ICMP packet type 8 continuously and check no packets are dropped from BMC
53    [Tags]  Send_Continuous_ICMP_Echo_Request_To_BMC_And_Verify_No_Packet_Loss
54
55    # Send ICMP packet type 8 to BMC and check packet loss.
56    ${packet_loss}=  Send Network Packets And Get Packet Loss
57    ...  ${OPENBMC_HOST}  ${iterations}  ${ICMP_PACKETS}
58    Should Be Equal As Numbers  ${packet_loss}  0.0
59    ...  msg=FAILURE: BMC is dropping packets.
60
61Send Network Packets Continuously To Redfish Interface
62    [Documentation]  Send network packets continuously to Redfish interface and verify stability.
63    [Tags]  Send_Network_Packets_Continuously_To_Redfish_Interface
64
65    # Send large number of packets to Redfish interface.
66    ${packet_loss}=  Send Network Packets And Get Packet Loss
67    ...  ${OPENBMC_HOST}  ${iterations}  ${TCP_PACKETS}  ${REDFISH_INTERFACE}
68    Should Be Equal As Numbers  ${packet_loss}  0.0
69    ...  msg=FAILURE: BMC is dropping some packets.
70
71    # Check if Redfish interface is functional.
72    Redfish.Login
73    Redfish.Logout
74
75
76Send Network Packets Continuously To IPMI Port
77    [Documentation]  Send network packets continuously to IPMI port and verify stability.
78    [Tags]  Send_Network_Packets_Continuously_To_IPMI_Port
79
80    # Send large number of packets to IPMI port.
81    ${packet_loss}=  Send Network Packets And Get Packet Loss
82    ...  ${OPENBMC_HOST}  ${iterations}  ${TCP_PACKETS}  ${IPMI_PORT}
83    Should Be Equal As Numbers  ${packet_loss}  0.0
84    ...  msg=FAILURE: BMC is dropping some packets.
85
86    # Check if IPMI interface is functional.
87    Run IPMI Standard Command  chassis status
88
89
90Send Network Packets Continuously To SSH Port
91    [Documentation]  Send network packets continuously to SSH port and verify stability.
92    [Tags]  Send_Network_Packets_Continuously_To_SSH_Port
93
94    # Send large number of packets to SSH port.
95    ${packet_loss}=  Send Network Packets And Get Packet Loss
96    ...  ${OPENBMC_HOST}  ${iterations}  ${TCP_PACKETS}  ${SSH_PORT}
97    Should Be Equal As Numbers  ${packet_loss}  0.0
98    ...  msg=FAILURE: BMC is dropping some packets.
99
100    # Check if SSH interface is functional.
101
102    SSHLibrary.Open Connection  ${OPENBMC_HOST}
103    Open Connection And Log In  ${OPENBMC_USERNAME}  ${OPENBMC_PASSWORD}
104
105
106Flood Redfish Interface With Packets With Flags And Check Stability
107    [Documentation]  Send large number of packets with flags to Redfish interface
108    ... and check stability.
109    [Tags]  Flood_Redfish_Interface_With_Packets_With_Flags_And_Check_Stability
110    [Template]  Send Network Packets With Flags And Verify Stability
111
112    # Target         No. Of packets  Interface              Flags
113
114    # Flood syn packets and check BMC behavior.
115    ${OPENBMC_HOST}  ${iterations}   ${REDFISH_INTERFACE}   ${SYN_PACKETS}
116
117    # Flood reset packets and check BMC behavior.
118    ${OPENBMC_HOST}  ${iterations}   ${REDFISH_INTERFACE}   ${RESET_PACKETS}
119
120    # Flood fin packets and check BMC behavior.
121    ${OPENBMC_HOST}  ${iterations}   ${REDFISH_INTERFACE}   ${FIN_PACKETS}
122
123    # Flood syn ack reset packets and check BMC behavior.
124    ${OPENBMC_HOST}  ${iterations}   ${REDFISH_INTERFACE}   ${SYN_ACK_RESET}
125
126    # Flood packets with all flags and check BMC behavior.
127    ${OPENBMC_HOST}  ${iterations}   ${REDFISH_INTERFACE}   ${ALL_FLAGS}
128
129
130*** Keywords ***
131
132Suite Setup Execution
133    [Documentation]  Validate the setup.
134
135    Valid Value  OPENBMC_HOST
136    Valid Program  program_name
137
138
139Verify Interface Stability
140    [Documentation]  Verify interface is up and active.
141    [Arguments]  ${port}
142
143    # Description of argument(s):
144    # port  Network port.
145
146    Run Keyword If  ${port} == ${REDFISH_INTERFACE}
147    ...  Redfish.Login
148    ...  ELSE IF  ${port} == ${SSH_PORT}
149    ...  Open Connection And Log In  ${OPENBMC_USERNAME}  ${OPENBMC_PASSWORD}
150    ...  ELSE IF  ${port} == ${IPMI_PORT}
151    ...  Run External IPMI Standard Command lan print
152    ...  ELSE IF  ${port} == ${HOST_SOL_PORT}
153    ...  Open Connection And Log In  ${OPENBMC_USERNAME}  ${OPENBMC_PASSWORD}  port=${HOST_SOL_PORT}
154    ...  ELSE
155    ...  Redfish.Login
156