mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
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> xen-unstable changeset: 23600:15fc211a13bf Backport-requested-by: Shriram Rajagopalan <rshriram@gmail.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
This commit is contained in:
1 parent
5082985386
commit
2ed867a1e6
2 files changed
+28
-10
No files matched your search
@@ -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)
|
||||
@@ -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)
|
||||
|
||||