From 761c14da6d8c4fcb8d2779dc9b29ab85ff33269e Mon Sep 17 00:00:00 2001 From: peusterm Date: Tue, 19 Jul 2016 09:31:19 +0200 Subject: [PATCH] Fix: Ensure that interface names are RTNETLINK compatible --- src/emuvim/api/sonata/dummygatekeeper.py | 3 ++- src/emuvim/dcemulator/node.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/emuvim/api/sonata/dummygatekeeper.py b/src/emuvim/api/sonata/dummygatekeeper.py index 20150d0..c41884b 100755 --- a/src/emuvim/api/sonata/dummygatekeeper.py +++ b/src/emuvim/api/sonata/dummygatekeeper.py @@ -208,7 +208,8 @@ class Service(object): # TODO consider flavors, and other annotations intfs = vnfd.get("connection_points") self.vnfname2num[vnf_name] = GK.get_next_vnf_name() - LOG.info("VNF "+vnf_name+" mapped to "+self.vnfname2num[vnf_name]+" on dc "+str(vnfd.get("dc"))) + LOG.info("Starting %r as %r in DC %r" % (vnf_name, self.vnfname2num[vnf_name], vnfd.get("dc"))) + LOG.debug("Interfaces for %r: %r" % (vnf_name, intfs)) vnfi = target_dc.startCompute(self.vnfname2num[vnf_name], network=intfs, image=docker_name, flavor_name="small") return vnfi diff --git a/src/emuvim/dcemulator/node.py b/src/emuvim/dcemulator/node.py index aa9fb4a..b88913b 100755 --- a/src/emuvim/dcemulator/node.py +++ b/src/emuvim/dcemulator/node.py @@ -191,6 +191,9 @@ class Datacenter(object): # if no --net option is given, network = [{}], so 1 empty dict in the list # this results in 1 default interface with a default ip address for nw in network: + # clean up network configuration (e.g. RTNETLINK does not allow ':' in intf names + if nw.get("id") is not None: + nw["id"] = self._clean_ifname(nw["id"]) # TODO we cannot use TCLink here (see: https://github.com/mpeuster/containernet/issues/3) self.net.addLink(d, self.switch, params1=nw, cls=Link, intfName1=nw.get('id')) # do bookkeeping @@ -256,3 +259,19 @@ class Datacenter(object): self.net.rm_registrar.register(self, rm) LOG.info("Assigned RM: %r to DC: %r" % (rm, self)) + @staticmethod + def _clean_ifname(name): + """ + Cleans up given string to be a + RTNETLINK compatible interface name. + :param name: string + :return: string + """ + if name is None: + return "if0" + name = name.replace(":", "-") + name = name.replace(" ", "-") + name = name.replace(".", "-") + name = name.replace("_", "-") + return name + -- 2.17.1