aboutsummaryrefslogtreecommitdiffstats
path: root/tools/python
diff options
context:
space:
mode:
authorShriram Rajagopalan <rshriram@cs.ubc.ca>2013-04-05 15:16:05 +0000
committerIan Jackson <Ian.Jackson@eu.citrix.com>2013-04-08 16:05:56 +0100
commit5753fe1c92efb3cc0142dadf8c82d5fb9ea80418 (patch)
tree8b7372ab4e4133f6b8f39d3d8064c039e0150f73 /tools/python
parent99b9ab0b3e7f0e7e5786116773cb7b746f3fab87 (diff)
downloadxen-5753fe1c92efb3cc0142dadf8c82d5fb9ea80418.tar.gz
xen-5753fe1c92efb3cc0142dadf8c82d5fb9ea80418.tar.bz2
xen-5753fe1c92efb3cc0142dadf8c82d5fb9ea80418.zip
remus: init sch_plug module based on kernel version
remus: init sch_plug module based on kernel version sch_plug module, for network buffering, is available as part of linux kernel (from 3.4 onwards), as opposed to an out-of-tree module. The netlink message format to talk to the in-kernel module is different from that of the old version. So, before initializing the Plug Qdisc, check the kernel version and use the appropriate message format. Also change the names of the constants to reflect the format used by the mainline module [CHECKPOINT -> BUFFER , RELEASE -> RELEASE_ONE ]. Signed-off-by: Shriram Rajagopalan <rshriram@cs.ubc.ca>
Diffstat (limited to 'tools/python')
-rw-r--r--tools/python/xen/remus/device.py4
-rw-r--r--tools/python/xen/remus/qdisc.py23
2 files changed, 19 insertions, 8 deletions
diff --git a/tools/python/xen/remus/device.py b/tools/python/xen/remus/device.py
index debfaedb07..970e1ead5f 100644
--- a/tools/python/xen/remus/device.py
+++ b/tools/python/xen/remus/device.py
@@ -332,12 +332,12 @@ class BufferedNIC(CheckpointedDevice):
if not self.installed:
self.install()
- self._sendqmsg(qdisc.TC_PLUG_CHECKPOINT)
+ self._sendqmsg(qdisc.TC_PLUG_BUFFER)
def commit(self):
'''Called when checkpoint has been acknowledged by
the backup'''
- self._sendqmsg(qdisc.TC_PLUG_RELEASE)
+ self._sendqmsg(qdisc.TC_PLUG_RELEASE_ONE)
# private
def _sendqmsg(self, action):
diff --git a/tools/python/xen/remus/qdisc.py b/tools/python/xen/remus/qdisc.py
index e7d3b706a5..4d54e015c3 100644
--- a/tools/python/xen/remus/qdisc.py
+++ b/tools/python/xen/remus/qdisc.py
@@ -1,6 +1,9 @@
import socket, struct
import netlink
+import platform
+
+kernelversion = platform.platform(terse=True).split("-")[1].split(".")
qdisc_kinds = {}
@@ -146,13 +149,18 @@ class CfifoQdisc(Qdisc):
qdisc_kinds['cfifo'] = CfifoQdisc
-TC_PLUG_CHECKPOINT = 0
-TC_PLUG_RELEASE = 1
+TC_PLUG_BUFFER = 0
+TC_PLUG_RELEASE_ONE = 1
class PlugQdisc(Qdisc):
- fmt = 'I'
def __init__(self, qdict=None):
+ if int(kernelversion[0]) >= 3 and int(kernelversion[1]) >= 4:
+ self.fmt = 'iI'
+ self.limit = 10000
+ else:
+ self.fmt = 'I'
+
if not qdict:
qdict = {'kind': 'plug',
'handle': TC_H_ROOT}
@@ -161,7 +169,10 @@ class PlugQdisc(Qdisc):
self.action = 0
def pack(self):
- return struct.pack(self.fmt, self.action)
+ if int(kernelversion[0]) >= 3 and int(kernelversion[1]) >= 4:
+ return struct.pack(self.fmt, self.action, self.limit)
+ else:
+ return struct.pack(self.fmt, self.action)
def parse(self, args):
if not args:
@@ -169,9 +180,9 @@ class PlugQdisc(Qdisc):
arg = args[0]
if arg == 'checkpoint':
- self.action = TC_PLUG_CHECKPOINT
+ self.action = TC_PLUG_BUFFER
elif arg == 'release':
- self.action = TC_PLUG_RELEASE
+ self.action = TC_PLUG_RELEASE_ONE
else:
raise QdiscException('unknown action')