Hunt Xu has uploaded a new change for review. Change subject: netinfo: get an interface using the ip associated with it ......................................................................
netinfo: get an interface using the ip associated with it Prevent manually parsing the routes files. Change-Id: I239f92c527524e5651f51712841c3eafcf659e53 Signed-off-by: huntxu <[email protected]> --- M tests/capsTests.py M vdsm/BindingXMLRPC.py M vdsm/caps.py M vdsm/netinfo.py 4 files changed, 16 insertions(+), 32 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/19/11519/1 diff --git a/tests/capsTests.py b/tests/capsTests.py index 0234ccf..7acf836 100644 --- a/tests/capsTests.py +++ b/tests/capsTests.py @@ -23,8 +23,6 @@ from testrunner import VdsmTestCase as TestCaseBase import caps -import platform -from nose.plugins.skip import SkipTest class TestCaps(TestCaseBase): @@ -80,16 +78,3 @@ sign = ["=", "&"] for res, s in zip(expectedRes, sign): self.assertEqual(res, caps._parseKeyVal(lines, s)) - - def test_getIfaceByIP(self): - expectedRes = ["wlan0", "virbr0"] - ip = ["10.201.129.37", "192.168.122.90"] - arch = platform.machine() - if arch == 'x86_64': - route_file = 'route_info.out' - elif arch == 'ppc64': - route_file = 'route_info_ppc64.out' - else: - raise SkipTest("Unsupported Architecture %s" % arch) - for res, i in zip(expectedRes, ip): - self.assertEqual(res, caps._getIfaceByIP(i, route_file)) diff --git a/vdsm/BindingXMLRPC.py b/vdsm/BindingXMLRPC.py index 9a4db12..c989531 100644 --- a/vdsm/BindingXMLRPC.py +++ b/vdsm/BindingXMLRPC.py @@ -26,10 +26,10 @@ import libvirt import threading -import caps from vdsm import constants from vdsm import utils from vdsm.define import doneCode, errCode +from vdsm.netinfo import getIfaceByIP import API from vdsm.exception import VdsmException try: @@ -86,9 +86,10 @@ Return the IP address and last client information """ last = self.server.lastClient + lastserver = self.server.lastServerIP return {'management_ip': self.serverIP, 'lastClient': last, - 'lastClientIface': caps._getIfaceByIP(last)} + 'lastClientIface': getIfaceByIP(lastserver)} def _getKeyCertFilenames(self): """ @@ -113,6 +114,7 @@ """Track from where client connections are coming.""" self.server.lastClient = self.client_address[0] self.server.lastClientTime = time.time() + self.server.lastServerIP = self.server.socket.getsockname()[0] # FIXME: The editNetwork API uses this log file to # determine if this host is still accessible. We use a # file (rather than an event) because editNetwork is @@ -153,6 +155,7 @@ server.lastClientTime = 0 server.lastClient = '0.0.0.0' + server.lastServerIP = '0.0.0.0' return server diff --git a/vdsm/caps.py b/vdsm/caps.py index a307200..903e22f 100644 --- a/vdsm/caps.py +++ b/vdsm/caps.py @@ -24,9 +24,6 @@ from xml.dom import minidom import logging import time -import struct -import socket -import itertools import linecache import glob @@ -295,18 +292,6 @@ caps['guestOverhead'] = config.get('vars', 'guest_ram_overhead') return caps - - -def _getIfaceByIP(addr, fileName='/proc/net/route'): - remote = struct.unpack('I', socket.inet_aton(addr))[0] - for line in itertools.islice(file(fileName), 1, None): - (iface, dest, gateway, flags, refcnt, use, metric, - mask, mtu, window, irtt) = line.split() - dest = int(dest, 16) - mask = int(mask, 16) - if remote & mask == dest & mask: - return iface - return '' # should never get here w/ default gw def _getKeyPackages(): diff --git a/vdsm/netinfo.py b/vdsm/netinfo.py index 922c90c..43f24d4 100644 --- a/vdsm/netinfo.py +++ b/vdsm/netinfo.py @@ -430,6 +430,17 @@ return filter(None, [getaddr(i) for i in ethtool.get_active_devices()]) +def getIfaceByIP(ip): + for iface in ethtool.get_active_devices(): + ipaddrs = [ + a.address for a in + ethtool.get_interfaces_info(iface)[0].get_ipv6_addresses()] + ipaddrs.append(getaddr(iface)) + if ip in ipaddrs: + return iface + return '' + + class NetInfo(object): def __init__(self, _netinfo=None): if _netinfo is None: -- To view, visit http://gerrit.ovirt.org/11519 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I239f92c527524e5651f51712841c3eafcf659e53 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Hunt Xu <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
