mirror of
https://github.com/openvswitch/ovs
synced 2025-08-23 10:28:00 +00:00
This tool will be a replacement for the current ovs-vlan-test utility. Besides from connectivity issues it will also be able to detect performance related issues in Open vSwitch setups. Currently it uses UDP and TCP protocols for stressing. Issue #6976
75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
# Copyright (c) 2011 Nicira Networks
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at:
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
"""
|
|
util module contains some helper function
|
|
"""
|
|
import socket, struct, fcntl, array, os, subprocess, exceptions
|
|
|
|
def str_ip(ip):
|
|
(x1, x2, x3, x4) = struct.unpack("BBBB", ip)
|
|
return ("%u.%u.%u.%u") % (x1, x2, x3, x4)
|
|
|
|
def get_interface_mtu(iface):
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
indata = iface + ('\0' * (32 - len(iface)))
|
|
try:
|
|
outdata = fcntl.ioctl(s.fileno(), 0x8921, indata) # socket.SIOCGIFMTU
|
|
mtu = struct.unpack("16si12x", outdata)[1]
|
|
except:
|
|
return 0
|
|
|
|
return mtu
|
|
|
|
def get_interface(address):
|
|
"""
|
|
Finds first interface that has given address
|
|
"""
|
|
bytes = 256 * 32
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
names = array.array('B', '\0' * bytes)
|
|
outbytes = struct.unpack('iL', fcntl.ioctl(
|
|
s.fileno(),
|
|
0x8912, # SIOCGIFCONF
|
|
struct.pack('iL', bytes, names.buffer_info()[0])
|
|
))[0]
|
|
namestr = names.tostring()
|
|
|
|
for i in range(0, outbytes, 40):
|
|
name = namestr[i:i + 16].split('\0', 1)[0]
|
|
if address == str_ip(namestr[i + 20:i + 24]):
|
|
return name
|
|
return "" # did not find interface we were looking for
|
|
|
|
def uname():
|
|
os_info = os.uname()
|
|
return os_info[2] #return only the kernel version number
|
|
|
|
def get_driver(iface):
|
|
try:
|
|
p = subprocess.Popen(
|
|
["ethtool", "-i", iface],
|
|
stdin = subprocess.PIPE,
|
|
stdout = subprocess.PIPE,
|
|
stderr = subprocess.PIPE)
|
|
out, err = p.communicate()
|
|
if p.returncode == 0:
|
|
lines = out.split("\n")
|
|
driver = "%s(%s)" % (lines[0], lines[1]) #driver name + version
|
|
else:
|
|
driver = "no support for ethtool"
|
|
except exceptions.OSError:
|
|
driver = ""
|
|
return driver
|