X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=python%2Fovstest%2Futil.py;fp=python%2Fovstest%2Futil.py;h=3321e693d1b286afe418a7e1a1f3350dc2b3c141;hb=0be6140a9a7de46f07e09d3ba200bd7f0cf73838;hp=0000000000000000000000000000000000000000;hpb=5e9ceccdb69b7e8f519ebeb9d2825b2686810610;p=sliver-openvswitch.git diff --git a/python/ovstest/util.py b/python/ovstest/util.py new file mode 100644 index 000000000..3321e693d --- /dev/null +++ b/python/ovstest/util.py @@ -0,0 +1,74 @@ +# 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