[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen master] remus: init sch_plug module based on kernel version



commit 5753fe1c92efb3cc0142dadf8c82d5fb9ea80418
Author:     Shriram Rajagopalan <rshriram@xxxxxxxxx>
AuthorDate: Fri Apr 5 15:16:05 2013 +0000
Commit:     Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
CommitDate: Mon Apr 8 16:05:56 2013 +0100

    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@xxxxxxxxx>
---
 tools/python/xen/remus/device.py |    4 ++--
 tools/python/xen/remus/qdisc.py  |   23 +++++++++++++++++------
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/tools/python/xen/remus/device.py b/tools/python/xen/remus/device.py
index debfaed..970e1ea 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 e7d3b70..4d54e01 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')
 
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.