*** Settings *** Documentation Network stack stress tests using "nping" tool. # This Suite has few testcases which uses nping with ICMP. # ICMP creates a raw socket, which requires root privilege/sudo to run tests. Resource ../lib/resource.robot Resource ../lib/bmc_redfish_resource.robot Resource ../lib/ipmi_client.robot Resource ../lib/bmc_network_security_utils.robot Resource ../lib/protocol_setting_utils.robot Library OperatingSystem Library String Library ../lib/gen_robot_valid.py Library ../lib/bmc_network_utils.py Library ../lib/ipmi_utils.py Suite Setup Suite Setup Execution Test Tags BMC_Network_Security *** Variables *** ${delay} 1000ms ${count} 4 ${program_name} nping ${iterations} 5000 *** Test Cases *** Send ICMP Timestamp Request [Documentation] Send ICMP packet type 13 and check BMC drops such packets [Tags] Send_ICMP_Timestamp_Request # Send ICMP packet type 13 to BMC and check packet loss. ${packet_loss}= Send Network Packets And Get Packet Loss ... ${OPENBMC_HOST} ${count} ${ICMP_PACKETS} ${NETWORK_PORT} ${ICMP_TIMESTAMP_REQUEST} Should Be Equal As Numbers ${packet_loss} 100.00 ... msg=FAILURE: BMC is not dropping timestamp request messages. Send ICMP Netmask Request [Documentation] Send ICMP packet type 17 and check BMC drops such packets [Tags] Send_ICMP_Netmask_Request # Send ICMP packet type 17 to BMC and check packet loss. ${packet_loss}= Send Network Packets And Get Packet Loss ... ${OPENBMC_HOST} ${count} ${ICMP_PACKETS} ${NETWORK_PORT} ${ICMP_NETMASK_REQUEST} Should Be Equal As Numbers ${packet_loss} 100.00 ... msg=FAILURE: BMC is not dropping netmask request messages. Send Continuous ICMP Echo Request To BMC And Verify No Packet Loss [Documentation] Send ICMP packet type 8 continuously and check no packets are dropped from BMC [Tags] Send_Continuous_ICMP_Echo_Request_To_BMC_And_Verify_No_Packet_Loss # Send ICMP packet type 8 to BMC and check packet loss. ${packet_loss}= Send Network Packets And Get Packet Loss ... ${OPENBMC_HOST} ${iterations} ${ICMP_PACKETS} Should Be Equal As Numbers ${packet_loss} 0.0 ... msg=FAILURE: BMC is dropping packets. Send Network Packets Continuously To Redfish Interface [Documentation] Send network packets continuously to Redfish interface and verify stability. [Tags] Send_Network_Packets_Continuously_To_Redfish_Interface # Send large number of packets to Redfish interface. ${packet_loss}= Send Network Packets And Get Packet Loss ... ${OPENBMC_HOST} ${iterations} ${TCP_PACKETS} ${REDFISH_INTERFACE} Should Be Equal As Numbers ${packet_loss} 0.0 ... msg=FAILURE: BMC is dropping some packets. # Check if Redfish bmcweb server response is functional. Redfish.Login Redfish.Logout Send Network Packets Continuously To IPMI Port [Documentation] Send network packets continuously to IPMI port and verify stability. [Tags] Send_Network_Packets_Continuously_To_IPMI_Port # Send large number of packets to IPMI port. ${packet_loss}= Send Network Packets And Get Packet Loss ... ${OPENBMC_HOST} ${iterations} ${TCP_PACKETS} ${IPMI_PORT} Should Be Equal As Numbers ${packet_loss} 0.0 ... msg=FAILURE: BMC is dropping some packets. # Check if IPMI interface is functional. Run IPMI Standard Command chassis status Send Network Packets Continuously To SSH Port [Documentation] Send network packets continuously to SSH port and verify stability. [Tags] Send_Network_Packets_Continuously_To_SSH_Port # Send large number of packets to SSH port. ${packet_loss}= Send Network Packets And Get Packet Loss ... ${OPENBMC_HOST} ${iterations} ${TCP_PACKETS} ${SSH_PORT} Should Be Equal As Numbers ${packet_loss} 0.0 ... msg=FAILURE: BMC is dropping some packets. # Check if SSH interface is functional. SSHLibrary.Open Connection ${OPENBMC_HOST} Open Connection And Log In ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} Flood Redfish Interface With Packets With Flags And Check Stability [Documentation] Send large number of packets with flags to Redfish interface ... and check stability. [Tags] Flood_Redfish_Interface_With_Packets_With_Flags_And_Check_Stability [Template] Send Network Packets With Flags And Verify Stability # Target No. Of packets Interface Flags # Flood syn packets and check BMC behavior. ${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${SYN_PACKETS} # Flood reset packets and check BMC behavior. ${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${RESET_PACKETS} # Flood fin packets and check BMC behavior. ${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${FIN_PACKETS} # Flood syn ack reset packets and check BMC behavior. ${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${SYN_ACK_RESET} # Flood packets with all flags and check BMC behavior. ${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${ALL_FLAGS} Send Network Packets Continuously To SOL Port [Documentation] Send network packets continuously to SOL port and verify stability. [Tags] Send_Network_Packets_Continuously_To_SOL_Port [Teardown] Run Keywords FFDC On Test Case Fail AND Close all connections # Send large number of packets to SOL port. ${packet_loss}= Send Network Packets And Get Packet Loss ... ${OPENBMC_HOST} ${iterations} ${TCP_PACKETS} ${HOST_SOL_PORT} # Check if SOL interface is functional. SSHLibrary.Open Connection ${OPENBMC_HOST} port=${HOST_SOL_PORT} Verify Interface Stability ${HOST_SOL_PORT} Should Be Equal As Numbers ${packet_loss} 0.0 ... msg=FAILURE: BMC is dropping some packets. Send Continuous TCP Connection Requests To Redfish Interface And Check Stability [Documentation] Establish large number of TCP connections to Redfish port (443) ... and check check network responses stability. [Tags] Send_Continuous_TCP_Connection_Requests_To_Redfish_Interface_And_Check_Stability # Establish large number of TCP connections to Redfish interface. ${connection_loss}= Establish TCP Connections And Get Connection Failures ... ${OPENBMC_HOST} ${iterations} ${TCP_CONNECTION} ${HTTPS_PORT} # Check if Redfish interface is functional. Redfish.Login Redfish.Logout # Check if TCP connections dropped. Should Be Equal As Numbers ${connection_loss} 0.0 ... msg=FAILURE: BMC is dropping some connections. Send Continuous TCP Connection Requests To IPMI Interface And Check Stability [Documentation] Establish large number of TCP connections to IPMI interface ... and check stability. [Tags] Send_Continuous_TCP_Connection_Requests_To_IPMI_Interface_And_Check_Stability # Establish large number of TCP connections to IPMI interface. ${connection_loss}= Establish TCP Connections And Get Connection Failures ... ${OPENBMC_HOST} ${iterations} ${TCP_CONNECTION} ${IPMI_PORT} # Check if IPMI interface is functional. Verify IPMI Works lan print # Check if TCP/Network connections dropped. Should Be Equal As Numbers ${connection_loss} 0.0 ... msg=FAILURE: BMC is dropping connections Send Continuous TCP Connection Requests To SSH Interface And Check Stability [Documentation] Establish large number of TCP connections to SSH interface ... and check stability. [Tags] Send_Continuous_TCP_Connection_Requests_To_SSH_Interface_And_Check_Stability # Establish large number of TCP connections to SSH interface. ${connection_loss}= Establish TCP Connections And Get Connection Failures ... ${OPENBMC_HOST} ${iterations} ${TCP_CONNECTION} ${SSH_PORT} # Check if SSH interface is functional. Verify Interface Stability ${SSH_PORT} # Check if TCP/Network connections dropped. Should Be Equal As Numbers ${connection_loss} 0.0 ... msg=FAILURE: BMC is dropping connections *** Keywords *** Suite Setup Execution [Documentation] Validate the setup. Valid Value OPENBMC_HOST Valid Program program_name Verify Interface Stability [Documentation] Verify interface is up and active. [Arguments] ${port} # Description of argument(s): # port Network port. Run Keyword If ${port} == ${REDFISH_INTERFACE} ... Redfish.Login ... ELSE IF ${port} == ${SSH_PORT} ... Open Connection And Log In ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} ... ELSE IF ${port} == ${IPMI_PORT} ... Run External IPMI Standard Command lan print ... ELSE IF ${port} == ${HOST_SOL_PORT} ... Open Connection And Log In ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} port=${HOST_SOL_PORT} ... ELSE ... Redfish.Login Establish TCP Connections And Get Connection Failures [Documentation] Establish TCP connections and return nping connection responses. [Arguments] ${target_host} ${num}=${count} ${packet_type}=${TCP_CONNECTION} ... ${http_port}=${80} # Description of argument(s): # target_host The host name or IP address of the target system. # packet_type The type of packets to be sent ("tcp", "udp", "icmp"). # http_port Network port. # num Number of connections to be sent. # This keyword expects host, port, type and number of connections to be sent # and rate at which connectionss to be sent, should be given in command line. # By default it sends 4 TCP connections at 1 connection/second. ${cmd_buf}= Set Variable --delay ${delay} ${target_host} -c ${num} --${packet_type} -p ${http_port} ${nping_result}= Nping ${cmd_buf} RETURN ${nping_result['percent_failed']}