Change in vdsm[master]: ethtool: remove some more usages
asegurap at redhat.com
asegurap at redhat.com
Wed Sep 3 11:58:55 UTC 2014
Antoni Segura Puimedon has uploaded a new change for review.
Change subject: ethtool: remove some more usages
......................................................................
ethtool: remove some more usages
This patch continues with the removal of the python ethtool
dependency, as it is not really necessary now that the libnl
bindings are mature.
Change-Id: Ib97f8d536edf293af748f5c16316ee92f162fe5f
Signed-off-by: Antoni S. Puimedon <asegurap at redhat.com>
---
M lib/vdsm/ipwrapper.py
M tests/tcTests.py
M vdsm/network/tc/__init__.py
3 files changed, 38 insertions(+), 43 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/81/32381/1
diff --git a/lib/vdsm/ipwrapper.py b/lib/vdsm/ipwrapper.py
index 5fa874e..9e38bf6 100644
--- a/lib/vdsm/ipwrapper.py
+++ b/lib/vdsm/ipwrapper.py
@@ -21,6 +21,7 @@
from contextlib import closing
from glob import iglob
import array
+import ctypes
import errno
import fcntl
import os
@@ -116,6 +117,7 @@
_hiddenNics = config.get('vars', 'hidden_nics').split(',')
_hiddenVlans = config.get('vars', 'hidden_vlans').split(',')
IFF_RUNNING = 1 << 6
+ IFF_PROMISC = 1 << 8
def __init__(self, address, index, linkType, mtu, name, qdisc, state,
vlanid=None, vlanprotocol=None, master=None, device=None,
@@ -243,6 +245,35 @@
def oper_up(self):
return bool(self.flags & self.IFF_RUNNING)
+ @property
+ def promisc(self):
+ return bool(self.flags & self.IFF_PROMISC)
+
+ @promisc.setter
+ def promisc(self, value):
+ """Takes a boolean to enable/disable Link promiscuity"""
+ if value:
+ self.flags |= self.IFF_PROMISC
+ else:
+ self.flags &= ~self.IFF_PROMISC
+ self.set_flags(self.flags)
+
+ def set_flags(self, flags):
+ "Set device flags. We need this local definition until ethtool has it"
+
+ SIOCSIFFLAGS = 0x8914
+
+ class ifreq(ctypes.Structure):
+ _fields_ = [("ifr_ifrn", ctypes.c_char * 16),
+ ("ifr_flags", ctypes.c_short)]
+
+ with closing(socket.socket(socket.AF_INET, socket.SOCK_DGRAM)) as s:
+ ifr = ifreq()
+ ifr.ifr_ifrn = self.name
+ ifr.ifr_flags = flags
+
+ fcntl.ioctl(s.fileno(), SIOCSIFFLAGS, ifr)
+
def drv_name(devName):
"""Returns the driver used by a device.
diff --git a/tests/tcTests.py b/tests/tcTests.py
index 606e2d0..1e59653 100644
--- a/tests/tcTests.py
+++ b/tests/tcTests.py
@@ -31,12 +31,12 @@
from subprocess import Popen, check_call, PIPE
import fcntl
import struct
-import ethtool
from testlib import VdsmTestCase as TestCaseBase
from testValidation import ValidateRunningAsRoot
from vdsm.constants import EXT_BRCTL, EXT_TC
+from vdsm import ipwrapper
from nose.plugins.skip import SkipTest
from network import tc
@@ -191,13 +191,11 @@
def testTogglePromisc(self):
tc.set_promisc(self._bridge.devName, True)
- self.assertTrue(ethtool.get_flags(self._bridge.devName) &
- ethtool.IFF_PROMISC,
+ self.assertTrue(ipwrapper.getLink(self._bridge.devName).promisc,
"Could not enable promiscuous mode.")
tc.set_promisc(self._bridge.devName, False)
- self.assertFalse(ethtool.get_flags(self._bridge.devName) &
- ethtool.IFF_PROMISC,
+ self.assertFalse(ipwrapper.getLink(self._bridge.devName).promisc,
"Could not disable promiscuous mode.")
def testException(self):
diff --git a/vdsm/network/tc/__init__.py b/vdsm/network/tc/__init__.py
index 61602ac..9b6c9bb 100644
--- a/vdsm/network/tc/__init__.py
+++ b/vdsm/network/tc/__init__.py
@@ -19,14 +19,10 @@
#
from collections import namedtuple
-from contextlib import closing
from functools import partial
-import ctypes
import errno
-import fcntl
-import socket
-import ethtool
+from vdsm import ipwrapper
from . import filter as tc_filter
from . import _parser
@@ -55,7 +51,7 @@
else:
return []
- devices = set(ethtool.get_devices())
+ devices = set(link.name for link in ipwrapper.getLinks())
acts = [act for act in filt.actions
if act.target in devices and act.target != target]
@@ -74,8 +70,7 @@
qdisc_replace_prio(network)
qdisc_id = _qdiscs_of_device(network).next()
_addTarget(network, qdisc_id, target)
-
- set_promisc(network, True)
+ ipwrapper.getLink(network).promisc = True
def unsetPortMirroring(network, target):
@@ -91,7 +86,7 @@
if not acts:
qdisc_del(network, 'root')
qdisc_del(network, 'ingress')
- set_promisc(network, False)
+ ipwrapper.getLink(network).promisc = False
def qdisc_replace_ingress(dev):
@@ -141,35 +136,6 @@
except TrafficControlException as e:
if e.errCode != errno.ENOENT:
raise
-
-
-def set_flags(dev, flags):
- "Set device flags. We need this local definition until ethtool has it"
-
- SIOCSIFFLAGS = 0x8914
-
- class ifreq(ctypes.Structure):
- _fields_ = [("ifr_ifrn", ctypes.c_char * 16),
- ("ifr_flags", ctypes.c_short)]
-
- with closing(socket.socket(socket.AF_INET, socket.SOCK_DGRAM)) as s:
- ifr = ifreq()
- ifr.ifr_ifrn = dev
- ifr.ifr_flags = flags
-
- fcntl.ioctl(s.fileno(), SIOCSIFFLAGS, ifr)
-
-
-def set_promisc(dev, on=True):
- flags = ethtool.get_flags(dev)
-
- if bool(flags & ethtool.IFF_PROMISC) != on:
- if on:
- flags |= ethtool.IFF_PROMISC
- else:
- flags &= ~ethtool.IFF_PROMISC
-
- set_flags(dev, flags)
Filter = namedtuple('Filter', 'prio handle actions')
--
To view, visit http://gerrit.ovirt.org/32381
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib97f8d536edf293af748f5c16316ee92f162fe5f
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Antoni Segura Puimedon <asegurap at redhat.com>
More information about the vdsm-patches
mailing list