+ [Arguments] ${conn_ids}=@{EMPTY}
+ Tcpdump.Stop Packet Capture on Nodes ${conn_ids}
+
+Server Live Migrate
+ [Documentation] Keyword for live migration of VM instance
+ ... additional_agrs is to select particular migration(live/shared-migration/block-migration)
+ ... if the additional_agrs is not given default migration(shared-migration) will happen
+ [Arguments] ${vm_instance_name}
+ ${output} = OpenStackOperations.OpenStack CLI nova live-migration ${vm_instance_name}
+
+Get Hypervisor Host Of Vm
+ [Documentation] Show server with neutron request.
+ [Arguments] ${vm_name}
+ ${output} = OpenStackOperations.OpenStack CLI
+ ... openstack server show -f value -c OS-EXT-SRV-ATTR:host ${vm_name}
+ RETURN ${output}
+
+Check If Migration Is Complete
+ [Documentation] Show server and verify if task_state is not migrating
+ [Arguments] ${vm_name}
+ ${output} = OpenStackOperations.OpenStack CLI openstack server show ${vm_name} | grep "OS-EXT-STS:task_state"
+ BuiltIn.Should Not Contain ${output} migrating
+
+Modify OpenStack Configuration File
+ [Documentation] Use crudini to modify any parameter in any Openstack configuration File
+ [Arguments] ${conn_id} ${file_name} ${section} ${key} ${value}
+ SSHLibrary.Switch Connection ${conn_id}
+ ${output} ${rc} = SSHLibrary.Execute Command
+ ... sudo crudini --verbose --set --inplace ${file_name} ${section} ${key} ${value}
+ ... return_rc=True
+ ... return_stdout=True
+ BuiltIn.Log ${output}
+ BuiltIn.Should Be True '${rc}' == '0'
+
+Restart DevStack Service
+ [Documentation] Restart the Openstack Service
+ [Arguments] ${conn_id} ${service_name}
+ SSHLibrary.Switch Connection ${conn_id}
+ ${output} ${rc} = SSHLibrary.Execute Command
+ ... sudo systemctl restart devstack@${service_name}.service
+ ... return_rc=True
+ ... return_stdout=True
+ BuiltIn.Log ${output}
+ BuiltIn.Should Be True '${rc}' == '0'
+
+Get Network Segmentation Id
+ [Documentation] Returns network segmentation id for the given network name.
+ [Arguments] ${network_name}
+ ${output} = OpenStack CLI openstack network show ${network_name} | grep segmentation_id | awk '{print $4}'
+ @{list} = String.Split String ${output}
+ RETURN ${list}[0]
+
+Verify Services
+ [Documentation] Verify if the services are operational
+ Wait Until Keyword Succeeds
+ ... 60
+ ... 2
+ ... ClusterManagement.Check Status Of Services Is OPERATIONAL
+ ... @{NETVIRT_DIAG_SERVICES}
+
+Verify Expected Default Tunnels
+ [Documentation] Verify if the default tunnels are created.
+ ... SFC jobs currently fail this validation because it uses of-tunnels.
+ ... This validation will be blocked for NEtvirt SFC jobs until support for of-tunnels
+ ... added to odltools.
+ ${check_feature_list} = BuiltIn.Create List odl-netvirt-sfc
+ ${is_sfc_enabled} = OpenStackOperations.Is Feature Installed features=${check_feature_list}
+ IF ${is_sfc_enabled} == ${True} RETURN ${True}
+ IF ${OS_NODE_CNT} == ${1} RETURN ${True}
+ ${output} = ODLTools.Analyze Tunnels test_name=${SUITE_NAME}.Suite Setup
+ BuiltIn.Should Contain ${output} All tunnels are up
+
+Verify Expected Default Tables On Nodes
+ [Documentation] Verify if Default Table Entries are programmed on all Nodes
+ [Arguments] ${node_ips}=@{OS_ALL_IPS}
+ ${resp} = RequestsLibrary.Get Request session ${RFC8040_CONFIG_NODES_API}
+ Utils.Log Content ${resp.text}
+ ${failed_node_list} = BuiltIn.Create List
+ FOR ${node_ip} IN @{node_ips}
+ ${failed_table_list} = Verify Expected Default Tables ${node_ip}
+ ${failed_table_list_size} = BuiltIn.Get Length ${failed_table_list}
+ IF ${failed_table_list_size} > 0
+ Collections.Append To List ${failed_node_list} ${node_ip}
+ END
+ END
+ Builtin.Should Be Empty ${failed_node_list}
+
+Verify Expected Default Tables
+ [Documentation] Verify if Default Table Entries are programmed on specific Node
+ [Arguments] ${ovs_ip}
+ ${flow_dump} = Utils.Run Command On Remote System
+ ... ${ovs_ip}
+ ... sudo ovs-ofctl dump-flows ${INTEGRATION_BRIDGE} -OOpenFlow13
+ BuiltIn.Log ${flow_dump}
+ ${failed_table_list} = BuiltIn.Create List
+ FOR ${table} IN @{DEFAULT_FLOW_TABLES}
+ ${rc} = Builtin.Run Keyword And Return Status
+ ... Builtin.Should Not Match Regexp
+ ... ${flow_dump}
+ ... .*table=${table}.*priority=0
+ IF ${rc}
+ Collections.Append To List ${failed_table_list} ${table}
+ END
+ END
+ RETURN ${failed_table_list}
+
+Get Project Id
+ [Documentation] Returns project ID for the given project name.
+ [Arguments] ${project_name}
+ ${project_id} = OpenStack CLI openstack project show ${project_name} -f value -c id
+ RETURN ${project_id}
+
+Set Instance Quota For Project
+ [Documentation] Set quota for the created instances using the specific project id.
+ [Arguments] ${num_instances} ${project_id}
+ ${output} = OpenStack CLI openstack quota set --instances ${num_instances} ${project_id}
+ RETURN ${output}
+
+Create Bgpvpn
+ [Documentation] Create Bgpvpn with neutron request.
+ [Arguments] ${vpnname} ${additional_args}=${EMPTY}
+ ${output} = OpenStack CLI openstack bgpvpn create --name ${vpnname} ${additional_args}
+
+Get BgpVpn Id
+ [Documentation] Retrieve the bgpvpn id for the given bgpvpn name
+ [Arguments] ${vpnName}
+ ${output} = OpenStack CLI openstack bgpvpn show ${vpnName} | grep " ID" | awk '{print $4}'
+ ${splitted_output} = String.Split String ${output} ${EMPTY}
+ ${vpn_id} = Collections.Get from List ${splitted_output} 0
+ RETURN ${vpn_id}
+
+Configure_IP_On_Sub_Interface
+ [Documentation] Keyword for configuring specified IP on specified interface and the corresponding specified sub interface
+ [Arguments] ${network_name} ${ip} ${vm_ip} ${mask} ${sub_interface_state}=${EMPTY} ${interface}=eth0
+ ... ${sub_interface_number}=1
+ OpenStackOperations.Execute Command on VM Instance
+ ... ${network_name}
+ ... ${vm_ip}
+ ... sudo ifconfig ${interface}:${sub_interface_number} ${ip} netmask ${mask} ${sub_interface_state}
+
+Verify_IP_Configured_On_Sub_Interface
+ [Documentation] Keyword for verifying specified IP on specified interface and the corresponding specified sub interface
+ [Arguments] ${network_name} ${ip} ${vm_ip} ${interface}=eth0 ${sub_interface_number}=1
+ ${resp} = OpenStackOperations.Execute Command on VM Instance
+ ... ${network_name}
+ ... ${vm_ip}
+ ... sudo ifconfig ${interface}:${sub_interface_number}
+ BuiltIn.Should Contain ${resp} ${ip}