diff options
author | Signed-off-by: Shriram Rajagopalan <rshriram@cs.ubc.ca> | 2011-06-27 15:18:38 +0100 |
---|---|---|
committer | Signed-off-by: Shriram Rajagopalan <rshriram@cs.ubc.ca> | 2011-06-27 15:18:38 +0100 |
commit | 9b660e230a2d9074b8814d979bba27f03d9be12d (patch) | |
tree | 2e9a5044930033f16e703eae6c1e02081d5b4cae /tools/python | |
parent | a9cdaf2a901b353f1d93b9123b1591b8c742955f (diff) | |
download | xen-9b660e230a2d9074b8814d979bba27f03d9be12d.tar.gz xen-9b660e230a2d9074b8814d979bba27f03d9be12d.tar.bz2 xen-9b660e230a2d9074b8814d979bba27f03d9be12d.zip |
remus: handle exceptions while installing/unstalling net buffer
Signed-off-by: Shriram Rajagopalan <rshriram@cs.ubc.ca>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/python')
-rw-r--r-- | tools/python/xen/remus/device.py | 32 | ||||
-rw-r--r-- | tools/python/xen/remus/util.py | 6 |
2 files changed, 28 insertions, 10 deletions
diff --git a/tools/python/xen/remus/device.py b/tools/python/xen/remus/device.py index 9e4dafa9df..debfaedb07 100644 --- a/tools/python/xen/remus/device.py +++ b/tools/python/xen/remus/device.py @@ -169,15 +169,25 @@ class IFBBuffer(Netbuf): self.vif = vif # voodoo from http://www.linuxfoundation.org/collaborate/workgroups/networking/ifb#Typical_Usage util.runcmd('ip link set %s up' % self.devname) - util.runcmd('tc qdisc add dev %s ingress' % vif.dev) + try: + util.runcmd('tc qdisc add dev %s ingress' % vif.dev) + except util.PipeException, e: + # check if error indicates that ingress qdisc + # already exists on the vif. If so, ignore it. + ignoreme = 'RTNETLINK answers: File exists' + if ignoreme in str(e): + pass + else: + raise e util.runcmd('tc filter add dev %s parent ffff: proto ip pref 10 ' 'u32 match u32 0 0 action mirred egress redirect ' 'dev %s' % (vif.dev, self.devname)) def uninstall(self): - util.runcmd('tc filter del dev %s parent ffff: proto ip pref 10 u32' \ - % self.vif.dev) - util.runcmd('tc qdisc del dev %s ingress' % self.vif.dev) + try: + util.runcmd('tc qdisc del dev %s ingress' % self.vif.dev) + except util.PipeException, e: + pass util.runcmd('ip link set %s down' % self.devname) class IMQBuffer(Netbuf): @@ -373,9 +383,15 @@ class BufferedNIC(CheckpointedDevice): def uninstall(self): if self.installed: - req = qdisc.delrequest(self.bufdevno, self.handle) - self.rth.talk(req.pack()) + try: + req = qdisc.delrequest(self.bufdevno, self.handle) + self.rth.talk(req.pack()) + except IOError, e: + pass self.installed = False - self.bufdev.uninstall() - self.pool.put(self.bufdev) + try: + self.bufdev.uninstall() + except util.PipeException, e: + pass + self.pool.put(self.bufdev) diff --git a/tools/python/xen/remus/util.py b/tools/python/xen/remus/util.py index 4ebb39ff45..b75052c6e1 100644 --- a/tools/python/xen/remus/util.py +++ b/tools/python/xen/remus/util.py @@ -65,8 +65,10 @@ def runcmd(args, cwd=None): proc.wait() if proc.returncode: print ' '.join(args) - print stderr.strip() - raise PipeException('%s failed' % args[0], proc.returncode) + errmsg = stderr.strip() + print errmsg + raise PipeException('%s failed (errmsg: %s)' % (args[0], errmsg), + proc.returncode) return stdout except (OSError, IOError), inst: raise PipeException('could not run %s' % args[0], inst.errno) |