Resource Utils.robot
Resource ${CURDIR}/TemplatedRequests.robot
Resource ../variables/Variables.robot
+Resource ../variables/netvirt/Variables.robot
*** Variables ***
${OVSDB_CONFIG_DIR} ${CURDIR}/../variables/ovsdb
[Return] ${uuid}
Collect OVSDB Debugs
- [Arguments] ${switch}=br-int
+ [Arguments] ${switch}=${INTEGRATION_BRIDGE}
[Documentation] Used to log useful test debugs for OVSDB related system tests.
${output} = Utils.Run Command On Mininet ${TOOLS_SYSTEM_IP} sudo ovs-vsctl show
BuiltIn.Log ${output}
Get DPID
[Arguments] ${ip}
[Documentation] Returns the dpnid from the system at the given ip address using ovs-ofctl assuming br-int is present.
- ${output} = Builtin.Run Command On Remote System ${ip} sudo ovs-ofctl show -O Openflow13 br-int | head -1 | awk -F "dpid:" '{print $2}'
+ ${output} = Utils.Run Command On Remote System ${ip} sudo ovs-ofctl show -O Openflow13 ${INTEGRATION_BRIDGE} | head -1 | awk -F "dpid:" '{print $2}'
${dpnid} = BuiltIn.Convert To Integer ${output} 16
BuiltIn.Log ${dpnid}
[Return] ${dpnid}
Get Ethernet Adapter
[Arguments] ${ip}
[Documentation] Returns the ethernet adapter name from the system at the given ip address using ip addr show.
- ${adapter} = Builtin.Run Command On Remote System ${ip} /usr/sbin/ip addr show | grep ${ip} | cut -d " " -f 11
+ ${adapter} = Utils.Run Command On Remote System ${ip} /usr/sbin/ip addr show | grep ${ip} | cut -d " " -f 11
BuiltIn.Log ${adapter}
[Return] ${adapter}
Get Default Gateway
[Arguments] ${ip}
[Documentation] Returns the default gateway at the given ip address using route command.
- ${gateway} = Builtin.Run Command On Remote System ${ip} /usr/sbin/route -n | grep '^0.0.0.0' | cut -d " " -f 10
+ ${gateway} = Utils.Run Command On Remote System ${ip} /usr/sbin/route -n | grep '^0.0.0.0' | cut -d " " -f 10
BuiltIn.Log ${gateway}
[Return] ${gateway}
+Get Port Number
+ [Arguments] ${subportid} ${ip_addr}
+ [Documentation] Get the port number for the given sub-port id
+ ${command} = Set Variable sudo ovs-ofctl -O OpenFlow13 show ${INTEGRATION_BRIDGE} | grep ${subportid} | awk '{print$1}'
+ BuiltIn.Log sudo ovs-ofctl -O OpenFlow13 show ${INTEGRATION_BRIDGE} | grep ${subportid} | awk '{print$1}'
+ ${output} = Utils.Run Command On Remote System ${ip_addr} ${command}
+ ${port_number} = BuiltIn.Should Match Regexp ${output} [0-9]+
+ [Return] ${port_number}
+
+Get Port Metadata
+ [Arguments] ${ip_addr} ${port}
+ [Documentation] Get the Metadata for a given port
+ ${cmd} = Set Variable sudo ovs-ofctl dump-flows -O Openflow13 ${INTEGRATION_BRIDGE} | grep table=0 | grep in_port=${port}
+ ${output} = Utils.Run Command On Remote System ${ip_addr} ${cmd}
+ @{list_any_matches} = String.Get_Regexp_Matches ${output} metadata:(\\w{12}) 1
+ ${metadata} = Builtin.Convert To String @{list_any_matches}
+ ${output} = String.Get Substring ${metadata} 2
+ [Return] ${output}
+
Log Config And Operational Topology
[Documentation] For debugging purposes, this will log both config and operational topo data stores
${resp} RequestsLibrary.Get Request session ${CONFIG_TOPO_API}
${resp} = RequestsLibrary.Get Request session ${CONFIG_TOPO_API}
OVSDB.Log Config And Operational Topology
RequestsLibrary.Delete All Sessions
+
+Get DumpFlows And Ovsconfig
+ [Arguments] ${conn_id} ${bridge}
+ [Documentation] Get the OvsConfig and Flow entries from OVS
+ SSHLibrary.Switch Connection ${conn_id}
+ Write Commands Until Expected Prompt sudo ovs-vsctl show ${DEFAULT_LINUX_PROMPT_STRICT}
+ Write Commands Until Expected Prompt sudo ovs-vsctl list Open_vSwitch ${DEFAULT_LINUX_PROMPT_STRICT}
+ Write Commands Until Expected Prompt sudo ovs-ofctl show ${bridge} -OOpenFlow13 ${DEFAULT_LINUX_PROMPT_STRICT}
+ Write Commands Until Expected Prompt sudo ovs-ofctl dump-flows ${bridge} -OOpenFlow13 ${DEFAULT_LINUX_PROMPT_STRICT}
+ Write Commands Until Expected Prompt sudo ovs-ofctl dump-groups ${bridge} -OOpenFlow13 ${DEFAULT_LINUX_PROMPT_STRICT}
+ Write Commands Until Expected Prompt sudo ovs-ofctl dump-group-stats ${bridge} -OOpenFlow13 ${DEFAULT_LINUX_PROMPT_STRICT}
+ Write Commands Until Expected Prompt sudo ovs-vsctl list interface ${DEFAULT_LINUX_PROMPT_STRICT}
+
+Start OVS
+ [Arguments] ${ovs_ip}
+ [Documentation] start the OVS node.
+ ${output} = Utils.Run Command On Mininet ${ovs_ip} sudo /usr/share/openvswitch/scripts/ovs-ctl start
+ BuiltIn.Log ${output}
+
+Stop OVS
+ [Arguments] ${ovs_ip}
+ [Documentation] Stop the OVS node.
+ ${output} = Utils.Run Command On Mininet ${ovs_ip} sudo /usr/share/openvswitch/scripts/ovs-ctl stop
+ BuiltIn.Log ${output}
+
+Get Bridge Data
+ [Documentation] This keyword returns first bridge name and UUID from list of bridges.
+ ${result} = SSHLibrary.Execute Command sudo ovs-vsctl show
+ ${uuid} = String.Get Line ${result} 0
+ ${line} ${bridge_name} Builtin.Should Match Regexp ${result} Bridge "(\\w+)"
+ [Return] ${uuid} ${bridge_name}
+
+Delete OVS Controller
+ [Arguments] ${ovs_ip} ${bridge}=${INTEGRATION_BRIDGE}
+ [Documentation] Delete controller from OVS
+ ${del_ctr} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-vsctl del-controller ${bridge}
+ BuiltIn.Log ${del_ctr}
+
+Delete OVS Manager
+ [Arguments] ${ovs_ip}
+ [Documentation] Delete manager from OVS
+ ${del_mgr} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-vsctl del-manager
+ BuiltIn.Log ${del_mgr}
+
+Delete Groups On Bridge
+ [Arguments] ${ovs_ip} ${br}=${INTEGRATION_BRIDGE}
+ [Documentation] Delete OVS groups from ${br}
+ ${del_grp} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-ofctl -O Openflow13 del-groups ${br}
+ BuiltIn.Log ${del_grp}
+
+Get Ports From Bridge By Type
+ [Arguments] ${ovs_ip} ${br} ${type}
+ [Documentation] Get ${type} ports for a bridge ${br} on node ${ovs_ip}.
+ ${ports} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-vsctl list-ports ${br} | grep "${type}"
+ ${ports_list} = String.Split to lines ${ports}
+ [Return] ${ports_list}
+
+Delete Ports On Bridge By Type
+ [Arguments] ${ovs_ip} ${br} ${type}
+ [Documentation] List all ports of ${br} and delete ${type} ports
+ ${ports_present} = Get Ports From Bridge By Type ${ovs_ip} ${br} ${type}
+ : FOR ${port} IN @{ports_present}
+ \ ${del-ports} = Utils.Run Command On Remote System ${ovs_ip} sudo ovs-vsctl del-port ${br} ${port}
+ \ BuiltIn.Log ${del-ports}
+ ${ports_present_after_delete} = Get Ports From Bridge By Type ${ovs_ip} ${br} ${type}
+ BuiltIn.Log ${ports_present_after_delete}
+
+Get Tunnel Id And Packet Count
+ [Arguments] ${conn_id} ${table_id} ${direction} ${tun_id} ${dst_mac}=""
+ [Documentation] Get tunnel id and packet count from specified table id and destination port mac address
+ ${tun_id} = BuiltIn.Convert To Hex ${tun_id} prefix=0x lowercase=yes
+ ${base_cmd} = BuiltIn.Set Variable sudo ovs-ofctl dump-flows br-int -OOpenFlow13 | grep table=${table_id} | grep tun_id=${tun_id}
+ ${full_cmd} = BuiltIn.Run Keyword If "${direction}" == "Egress" BuiltIn.Catenate ${base_cmd} | grep ${dst_mac} | awk '{split($7,a,"[:-]"); print a[2]}'
+ ... ELSE BuiltIn.Catenate ${base_cmd} | awk '{split($6,a,"[,=]"); {print a[4]}}'
+ SSHLibrary.Switch Connection ${conn_id}
+ Utils.Write Commands Until Expected Prompt ${base_cmd} ${DEFAULT_LINUX_PROMPT_STRICT}
+ ${output} = Utils.Write Commands Until Expected Prompt ${full_cmd} ${DEFAULT_LINUX_PROMPT_STRICT}
+ @{list} = String.Split String ${output}
+ ${output} = Set Variable @{list}[0]
+ ${tunnel_id} = Convert To Integer ${output} 16
+ ${full_cmd} = BuiltIn.Run Keyword If "${direction}" == "Egress" BuiltIn.Catenate ${base_cmd} | grep ${dst_mac} | awk '{split($4,a,"[=,]"); {print a[2]}}'
+ ... ELSE BuiltIn.Catenate ${base_cmd} | awk '{split($4,a,"[=,]"); {print a[2]}}'
+ SSHLibrary.Switch Connection ${conn_id}
+ ${output} = Utils.Write Commands Until Expected Prompt ${full_cmd} ${DEFAULT_LINUX_PROMPT_STRICT}
+ @{list} = String.Split String ${output}
+ ${packet_count} = BuiltIn.Set Variable @{list}[0]
+ [Return] ${tunnel_id} ${packet_count}
+
+Verify Dump Flows For Specific Table
+ [Arguments] ${compute_ip} ${table_num} ${flag} ${additional_args}=${EMPTY} @{matching_paras}
+ [Documentation] To Verify flows are present for the corresponding table Number
+ ${flow_output} = Utils.Run Command On Remote System ${compute_ip} ${DUMP_FLOWS}|grep table=${table_num} ${additional_args}
+ Log ${flow_output}
+ : FOR ${matching_str} IN @{matching_paras}
+ \ BuiltIn.Run Keyword If ${flag}==True BuiltIn.Should Contain ${flow_output} ${matching_str}
+ \ ... ELSE BuiltIn.Should Not Contain ${flow_output} ${matching_str}
+
+Verify Vni Segmentation Id and Tunnel Id
+ [Arguments] ${port1} ${port2} ${net1} ${net2} ${vm1_ip} ${vm2_ip}
+ ... ${ip}=""
+ [Documentation] Get tunnel id and packet count from specified table id and destination port mac address
+ ${port_mac1} = OpenStackOperations.Get Port Mac ${port1}
+ ${port_mac2} = OpenStackOperations.Get Port Mac ${port2}
+ ${segmentation_id1} = OpenStackOperations.Get Network Segmentation Id ${net1}
+ ${segmentation_id2} = OpenStackOperations.Get Network Segmentation Id ${net2}
+ ${egress_tun_id} ${before_count_egress_port1} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP1_CONN_ID} ${L3_TABLE} direction=${EGRESS} tun_id=${segmentation_id2}
+ ... dst_mac=${port_mac2}
+ BuiltIn.Should Be Equal As Numbers ${segmentation_id2} ${egress_tun_id}
+ ${egress_tun_id} ${before_count_egress_port2} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP2_CONN_ID} ${L3_TABLE} direction=${EGRESS} tun_id=${segmentation_id1}
+ ... dst_mac=${port_mac1}
+ BuiltIn.Should Be Equal As Numbers ${segmentation_id1} ${egress_tun_id}
+ ${ingress_tun_id} ${before_count_ingress_port1} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP1_CONN_ID} ${INTERNAL_TUNNEL_TABLE} direction=${INGRESS} tun_id=${segmentation_id1}
+ BuiltIn.Should Be Equal As Numbers ${segmentation_id1} ${ingress_tun_id}
+ ${ingress_tun_id} ${before_count_ingress_port2} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP2_CONN_ID} ${INTERNAL_TUNNEL_TABLE} direction=${INGRESS} tun_id=${segmentation_id2}
+ BuiltIn.Should Be Equal As Numbers ${segmentation_id2} ${ingress_tun_id}
+ ${ping_cmd} = BuiltIn.Run Keyword If '${ip}'=='ipv4' BuiltIn.Set Variable ping -c ${DEFAULT_PING_COUNT} ${vm2_ip}
+ ... ELSE BuiltIn.Set Variable ping6 -c ${DEFAULT_PING_COUNT} ${vm2_ip}
+ ${output} = OpenStackOperations.Execute Command on VM Instance ${net1} ${vm1_ip} ${ping_cmd}
+ BuiltIn.Should Contain ${output} 64 bytes
+ BuiltIn.Wait Until Keyword Succeeds 60s 5s OVSDB.Verify Vni Packet Count After Traffic ${before_count_egress_port1} ${before_count_egress_port2} ${before_count_ingress_port1}
+ ... ${before_count_ingress_port2} ${segmentation_id1} ${segmentation_id2} ${port_mac1} ${port_mac2}
+
+Verify Vni Packet Count After Traffic
+ [Arguments] ${before_count_egress_port1} ${before_count_egress_port2} ${before_count_ingress_port1} ${before_count_ingress_port2} ${segmentation_id1} ${segmentation_id2}
+ ... ${port_mac1} ${port_mac2}
+ [Documentation] Verify the packet count after the traffic sent
+ ${tun_id} ${after_count_egress_port2} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP2_CONN_ID} ${L3_TABLE} direction=${EGRESS} tun_id=${segmentation_id1}
+ ... dst_mac=${port_mac1}
+ ${tun_id} ${after_count_ingress_port2} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP2_CONN_ID} ${INTERNAL_TUNNEL_TABLE} direction=${INGRESS} tun_id=${segmentation_id2}
+ ${tun_id} ${after_count_egress_port1} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP1_CONN_ID} ${L3_TABLE} direction=${EGRESS} tun_id=${segmentation_id2}
+ ... dst_mac=${port_mac2}
+ ${tun_id} ${after_count_ingress_port1} = OVSDB.Get Tunnel Id And Packet Count ${OS_CMP1_CONN_ID} ${INTERNAL_TUNNEL_TABLE} direction=${INGRESS} tun_id=${segmentation_id1}
+ ${diff_count_egress_port1} = BuiltIn.Evaluate ${after_count_egress_port1} - ${before_count_egress_port1}
+ ${diff_count_ingress_port1} = BuiltIn.Evaluate ${after_count_ingress_port1} - ${before_count_ingress_port1}
+ ${diff_count_egress_port2} = BuiltIn.Evaluate ${after_count_egress_port2} - ${before_count_egress_port2}
+ ${diff_count_ingress_port2} = BuiltIn.Evaluate ${after_count_ingress_port2} - ${before_count_ingress_port2}
+ BuiltIn.Should Be True ${diff_count_egress_port1} >= ${DEFAULT_PING_COUNT}
+ BuiltIn.Should Be True ${diff_count_ingress_port1} >= ${DEFAULT_PING_COUNT}
+ BuiltIn.Should Be True ${diff_count_egress_port2} >= ${DEFAULT_PING_COUNT}
+ BuiltIn.Should Be True ${diff_count_ingress_port2} >= ${DEFAULT_PING_COUNT}