From 503713f0bcc7daca1bdbef6a911816b6377b0523 Mon Sep 17 00:00:00 2001 From: ahrenholz Date: Tue, 28 Oct 2014 21:18:16 +0000 Subject: [PATCH] use hex value for short session ID used in naming interfaces use interface names "vethOOOOO.ii.ss" and "vethOOOOO.iipss" for veth pairs (where OOOOO = object id, ii = interface index, ss = hex short session ID) fixes bug #260 virtual interface names too long (Boeing r1894) --- daemon/core/netns/vnode.py | 4 ++-- daemon/core/session.py | 3 ++- gui/util.tcl | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/daemon/core/netns/vnode.py b/daemon/core/netns/vnode.py index a92375f8..b8571ceb 100644 --- a/daemon/core/netns/vnode.py +++ b/daemon/core/netns/vnode.py @@ -167,9 +167,9 @@ class SimpleLxcNode(PyCoreNode): if ifname is None: ifname = "eth%d" % ifindex sessionid = self.session.shortsessionid() - name = "veth%s.%s.1.%s" % (self.objid, ifindex, sessionid) + name = "veth%s.%sp%s" % (self.objid, ifindex, sessionid) localname = "veth%s.%s.%s" % (self.objid, ifindex, sessionid) - if len(ifname) > 16: + if len(localname) >= 16: raise ValueError, "interface local name '%s' to long" % \ localname ifclass = VEth diff --git a/daemon/core/session.py b/daemon/core/session.py index 8a77ea42..6c58a6eb 100644 --- a/daemon/core/session.py +++ b/daemon/core/session.py @@ -689,7 +689,8 @@ class Session(object): ''' Return a shorter version of the session ID, appropriate for interface names, where length may be limited. ''' - return (self.sessionid >> 8) ^ (self.sessionid & ((1 << 8) - 1)) + ssid = (self.sessionid >> 8) ^ (self.sessionid & ((1 << 8) - 1)) + return "%x" % ssid def sendnodeemuid(self, handler, nodenum): ''' Send back node messages to the GUI for node messages that had diff --git a/gui/util.tcl b/gui/util.tcl index eebc10c9..7ec8aaf9 100644 --- a/gui/util.tcl +++ b/gui/util.tcl @@ -1160,7 +1160,8 @@ proc get_term_prog { want_default } { # short session ID used by Python daemon for interface names proc shortSessionID { sid } { - return [ expr { ($sid >> 8) ^ ($sid & ((1<<8) - 1)) } ] + set ssid [ expr { ($sid >> 8) ^ ($sid & ((1<<8) - 1)) } ] + return [format "%x" $ssid] }