From c580e15f8e55eeeba98a22bebb5860880ecf2cf5 Mon Sep 17 00:00:00 2001 From: Blake Harnden <32446120+bharnden@users.noreply.github.com> Date: Sat, 23 May 2020 01:05:46 -0700 Subject: [PATCH] moved common variables up and localname to CoreInterface, they were being created in all subclasses and avoids type hinting errors --- daemon/core/emane/nodes.py | 1 - daemon/core/nodes/base.py | 6 ++---- daemon/core/nodes/interface.py | 23 +++++++++-------------- daemon/core/nodes/netclient.py | 2 +- daemon/core/nodes/network.py | 3 +-- daemon/core/nodes/physical.py | 4 +--- 6 files changed, 14 insertions(+), 25 deletions(-) diff --git a/daemon/core/emane/nodes.py b/daemon/core/emane/nodes.py index 5b435fbf..d5f243cb 100644 --- a/daemon/core/emane/nodes.py +++ b/daemon/core/emane/nodes.py @@ -48,7 +48,6 @@ class EmaneNet(CoreNetworkBase): ) -> None: super().__init__(session, _id, name, start, server) self.conf = "" - self.up = False self.nemidmap = {} self.model = None self.mobility = None diff --git a/daemon/core/nodes/base.py b/daemon/core/nodes/base.py index efad8c0a..1dbdcf53 100644 --- a/daemon/core/nodes/base.py +++ b/daemon/core/nodes/base.py @@ -65,17 +65,15 @@ class NodeBase: name = f"o{self.id}" self.name = name self.server = server - self.type = None self.services = None - # ifindex is key, CoreInterface instance is value self._netif = {} self.ifindex = 0 self.canvas = None self.icon = None self.opaque = None self.position = Position() - + self.up = False use_ovs = session.options.get_config("ovs") == "True" self.net_client = get_net_client(use_ovs, self.host_cmd) @@ -272,7 +270,6 @@ class CoreNodeBase(NodeBase): self.config_services = {} self.nodedir = None self.tmpnodedir = False - self.up = False def add_config_service(self, service_class: "ConfigServiceType") -> None: """ @@ -1008,6 +1005,7 @@ class CoreNetworkBase(NodeBase): will run on, default is None for localhost """ super().__init__(session, _id, name, start, server) + self.brname = None self._linked = {} self._linked_lock = threading.Lock() diff --git a/daemon/core/nodes/interface.py b/daemon/core/nodes/interface.py index 8da7c95b..8235878c 100644 --- a/daemon/core/nodes/interface.py +++ b/daemon/core/nodes/interface.py @@ -27,6 +27,7 @@ class CoreInterface: session: "Session", node: "CoreNode", name: str, + localname: str, mtu: int, server: "DistributedServer" = None, ) -> None: @@ -36,6 +37,7 @@ class CoreInterface: :param session: core session instance :param node: node for interface :param name: interface name + :param localname: interface local name :param mtu: mtu value :param server: remote server node will run on, default is None for localhost @@ -43,6 +45,8 @@ class CoreInterface: self.session = session self.node = node self.name = name + self.localname = localname + self.up = False if not isinstance(mtu, int): raise ValueError self.mtu = mtu @@ -258,9 +262,7 @@ class Veth(CoreInterface): :raises CoreCommandError: when there is a command exception """ # note that net arg is ignored - super().__init__(session, node, name, mtu, server) - self.localname = localname - self.up = False + super().__init__(session, node, name, localname, mtu, server) if start: self.startup() @@ -326,9 +328,7 @@ class TunTap(CoreInterface): will run on, default is None for localhost :param start: start flag """ - super().__init__(session, node, name, mtu, server) - self.localname = localname - self.up = False + super().__init__(session, node, name, localname, mtu, server) self.transport_type = "virtual" if start: self.startup() @@ -509,22 +509,17 @@ class GreTap(CoreInterface): will run on, default is None for localhost :raises CoreCommandError: when there is a command exception """ - super().__init__(session, node, name, mtu, server) if _id is None: - # from PyCoreObj _id = ((id(self) >> 16) ^ (id(self) & 0xFFFF)) & 0xFFFF self.id = _id - sessionid = self.session.short_session_id() - # interface name on the local host machine - self.localname = f"gt.{self.id}.{sessionid}" + sessionid = session.short_session_id() + localname = f"gt.{self.id}.{sessionid}" + super().__init__(session, node, name, localname, mtu, server) self.transport_type = "raw" if not start: - self.up = False return - if remoteip is None: raise ValueError("missing remote IP required for GRE TAP device") - self.net_client.create_gretap(self.localname, remoteip, localip, ttl, key) self.net_client.device_up(self.localname) self.up = True diff --git a/daemon/core/nodes/netclient.py b/daemon/core/nodes/netclient.py index 12ab8dc1..5062dead 100644 --- a/daemon/core/nodes/netclient.py +++ b/daemon/core/nodes/netclient.py @@ -243,7 +243,7 @@ class LinuxNetClient: def create_interface(self, bridge_name: str, interface_name: str) -> None: """ - Create an interface associated with a Linux bridge. + Assign interface master to a Linux bridge. :param bridge_name: bridge name :param interface_name: interface name diff --git a/daemon/core/nodes/network.py b/daemon/core/nodes/network.py index 1b5f702c..17fb4fc2 100644 --- a/daemon/core/nodes/network.py +++ b/daemon/core/nodes/network.py @@ -284,7 +284,6 @@ class CoreNetwork(CoreNetworkBase): self.name = name sessionid = self.session.short_session_id() self.brname = f"b.{self.id}.{sessionid}" - self.up = False self.has_ebtables_chain = False if start: self.startup() @@ -561,7 +560,7 @@ class CoreNetwork(CoreNetworkBase): netif = Veth(self.session, None, name, localname, start=self.up) self.attach(netif) - if net.up: + if net.up and net.brname: # this is similar to net.attach() but uses netif.name instead of localname netif.net_client.create_interface(net.brname, netif.name) i = net.newifindex() diff --git a/daemon/core/nodes/physical.py b/daemon/core/nodes/physical.py index 3f45c9ab..b6ae8e8d 100644 --- a/daemon/core/nodes/physical.py +++ b/daemon/core/nodes/physical.py @@ -280,12 +280,10 @@ class Rj45Node(CoreNodeBase, CoreInterface): will run on, default is None for localhost """ CoreNodeBase.__init__(self, session, _id, name, start, server) - CoreInterface.__init__(self, session, self, name, mtu, server) + CoreInterface.__init__(self, session, self, name, name, mtu, server) self.lock = threading.RLock() self.ifindex = None - # the following are PyCoreNetIf attributes self.transport_type = "raw" - self.localname = name self.old_up = False self.old_addrs = [] if start: