moved common variables up and localname to CoreInterface, they were being created in all subclasses and avoids type hinting errors

This commit is contained in:
Blake Harnden 2020-05-23 01:05:46 -07:00
parent 37ff989aa4
commit c580e15f8e
6 changed files with 14 additions and 25 deletions

View file

@ -48,7 +48,6 @@ class EmaneNet(CoreNetworkBase):
) -> None: ) -> None:
super().__init__(session, _id, name, start, server) super().__init__(session, _id, name, start, server)
self.conf = "" self.conf = ""
self.up = False
self.nemidmap = {} self.nemidmap = {}
self.model = None self.model = None
self.mobility = None self.mobility = None

View file

@ -65,17 +65,15 @@ class NodeBase:
name = f"o{self.id}" name = f"o{self.id}"
self.name = name self.name = name
self.server = server self.server = server
self.type = None self.type = None
self.services = None self.services = None
# ifindex is key, CoreInterface instance is value
self._netif = {} self._netif = {}
self.ifindex = 0 self.ifindex = 0
self.canvas = None self.canvas = None
self.icon = None self.icon = None
self.opaque = None self.opaque = None
self.position = Position() self.position = Position()
self.up = False
use_ovs = session.options.get_config("ovs") == "True" use_ovs = session.options.get_config("ovs") == "True"
self.net_client = get_net_client(use_ovs, self.host_cmd) self.net_client = get_net_client(use_ovs, self.host_cmd)
@ -272,7 +270,6 @@ class CoreNodeBase(NodeBase):
self.config_services = {} self.config_services = {}
self.nodedir = None self.nodedir = None
self.tmpnodedir = False self.tmpnodedir = False
self.up = False
def add_config_service(self, service_class: "ConfigServiceType") -> None: def add_config_service(self, service_class: "ConfigServiceType") -> None:
""" """
@ -1008,6 +1005,7 @@ class CoreNetworkBase(NodeBase):
will run on, default is None for localhost will run on, default is None for localhost
""" """
super().__init__(session, _id, name, start, server) super().__init__(session, _id, name, start, server)
self.brname = None
self._linked = {} self._linked = {}
self._linked_lock = threading.Lock() self._linked_lock = threading.Lock()

View file

@ -27,6 +27,7 @@ class CoreInterface:
session: "Session", session: "Session",
node: "CoreNode", node: "CoreNode",
name: str, name: str,
localname: str,
mtu: int, mtu: int,
server: "DistributedServer" = None, server: "DistributedServer" = None,
) -> None: ) -> None:
@ -36,6 +37,7 @@ class CoreInterface:
:param session: core session instance :param session: core session instance
:param node: node for interface :param node: node for interface
:param name: interface name :param name: interface name
:param localname: interface local name
:param mtu: mtu value :param mtu: mtu value
:param server: remote server node :param server: remote server node
will run on, default is None for localhost will run on, default is None for localhost
@ -43,6 +45,8 @@ class CoreInterface:
self.session = session self.session = session
self.node = node self.node = node
self.name = name self.name = name
self.localname = localname
self.up = False
if not isinstance(mtu, int): if not isinstance(mtu, int):
raise ValueError raise ValueError
self.mtu = mtu self.mtu = mtu
@ -258,9 +262,7 @@ class Veth(CoreInterface):
:raises CoreCommandError: when there is a command exception :raises CoreCommandError: when there is a command exception
""" """
# note that net arg is ignored # note that net arg is ignored
super().__init__(session, node, name, mtu, server) super().__init__(session, node, name, localname, mtu, server)
self.localname = localname
self.up = False
if start: if start:
self.startup() self.startup()
@ -326,9 +328,7 @@ class TunTap(CoreInterface):
will run on, default is None for localhost will run on, default is None for localhost
:param start: start flag :param start: start flag
""" """
super().__init__(session, node, name, mtu, server) super().__init__(session, node, name, localname, mtu, server)
self.localname = localname
self.up = False
self.transport_type = "virtual" self.transport_type = "virtual"
if start: if start:
self.startup() self.startup()
@ -509,22 +509,17 @@ class GreTap(CoreInterface):
will run on, default is None for localhost will run on, default is None for localhost
:raises CoreCommandError: when there is a command exception :raises CoreCommandError: when there is a command exception
""" """
super().__init__(session, node, name, mtu, server)
if _id is None: if _id is None:
# from PyCoreObj
_id = ((id(self) >> 16) ^ (id(self) & 0xFFFF)) & 0xFFFF _id = ((id(self) >> 16) ^ (id(self) & 0xFFFF)) & 0xFFFF
self.id = _id self.id = _id
sessionid = self.session.short_session_id() sessionid = session.short_session_id()
# interface name on the local host machine localname = f"gt.{self.id}.{sessionid}"
self.localname = f"gt.{self.id}.{sessionid}" super().__init__(session, node, name, localname, mtu, server)
self.transport_type = "raw" self.transport_type = "raw"
if not start: if not start:
self.up = False
return return
if remoteip is None: if remoteip is None:
raise ValueError("missing remote IP required for GRE TAP device") raise ValueError("missing remote IP required for GRE TAP device")
self.net_client.create_gretap(self.localname, remoteip, localip, ttl, key) self.net_client.create_gretap(self.localname, remoteip, localip, ttl, key)
self.net_client.device_up(self.localname) self.net_client.device_up(self.localname)
self.up = True self.up = True

View file

@ -243,7 +243,7 @@ class LinuxNetClient:
def create_interface(self, bridge_name: str, interface_name: str) -> None: 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 bridge_name: bridge name
:param interface_name: interface name :param interface_name: interface name

View file

@ -284,7 +284,6 @@ class CoreNetwork(CoreNetworkBase):
self.name = name self.name = name
sessionid = self.session.short_session_id() sessionid = self.session.short_session_id()
self.brname = f"b.{self.id}.{sessionid}" self.brname = f"b.{self.id}.{sessionid}"
self.up = False
self.has_ebtables_chain = False self.has_ebtables_chain = False
if start: if start:
self.startup() self.startup()
@ -561,7 +560,7 @@ class CoreNetwork(CoreNetworkBase):
netif = Veth(self.session, None, name, localname, start=self.up) netif = Veth(self.session, None, name, localname, start=self.up)
self.attach(netif) 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 # this is similar to net.attach() but uses netif.name instead of localname
netif.net_client.create_interface(net.brname, netif.name) netif.net_client.create_interface(net.brname, netif.name)
i = net.newifindex() i = net.newifindex()

View file

@ -280,12 +280,10 @@ class Rj45Node(CoreNodeBase, CoreInterface):
will run on, default is None for localhost will run on, default is None for localhost
""" """
CoreNodeBase.__init__(self, session, _id, name, start, server) 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.lock = threading.RLock()
self.ifindex = None self.ifindex = None
# the following are PyCoreNetIf attributes
self.transport_type = "raw" self.transport_type = "raw"
self.localname = name
self.old_up = False self.old_up = False
self.old_addrs = [] self.old_addrs = []
if start: if start: