def setup(self, daemon, overlay): ''' Set up overlay link runtime state. ''' super().setup(daemon, overlay) self.outer_overlay_name = overlay.name self.outer_asn = overlay.asn self.inner_overlay = self.daemon.overlays[self.inner_overlay_name] self.inner_netns = netns.get(self.dry_run, self.logger, self.inner_overlay_name) self.inner_asn = self.inner_overlay.asn self.dummy_name = self.daemon.interface_name(self.name, limit=13) self.bridge_name = self.daemon.interface_name(self.dummy_name, suffix="br") self.outer_name = self.daemon.interface_name(self.dummy_name, suffix="v") self.inner_name = self.daemon.interface_name(self.dummy_name, suffix="v")
def setup(self, daemon): ''' Set up the overlay runtime state. ''' if not self.enabled: return self.set_settingup() # Set arguments. self.daemon = daemon # Configure fields which use the daemon object. self.dry_run = self.daemon.dry_run if self.fwbuilder_script_file: if os.path.isabs(self.fwbuilder_script_file): self.fwbuilder_script = self.fwbuilder_script_file else: self.fwbuilder_script = os.path.join( self.daemon.fwbuilder_script_dir, self.fwbuilder_script_file, ) else: self.fwbuilder_script = None self.root_dir = os.path.join(self.daemon.overlay_dir, self.name) # Overlay network namespace. self.netns = netns.get(self.dry_run, self.logger, self.name) # Create the mesh tunnel interfaces. self.mesh_tunnels = [] for i, node_link in enumerate(self._node_links()): # Check if this link requires a tunnel on this host. If not, # continue. if node_link[0] != self.this_node[0]: continue # Mesh tunnel interface name, made from the BGP AS number # of this overlay and the node pair number. name = "m%il%i" % (self.asn, math.floor(i / 2)) node_local = node_link[0] node_remote = node_link[1] physical_local = self.this_node[1] physical_remote = None for node, address in self.nodes: if node == node_remote: physical_remote = address break virtual_local = self.linknet_pool.network_address + i virtual_remote = util.ip_address_remote(virtual_local) if (virtual_local > self.linknet_pool.broadcast_address or virtual_remote > self.linknet_pool.broadcast_address): raise LinknetPoolOverflowError(self, node_link) self.mesh_tunnels.append(mesh_tunnel.create( self.logger, name, node_local, node_remote, physical_local, physical_remote, virtual_local, virtual_remote, )) # Set up each interface with this overlay as the context. for mt in self.mesh_tunnels: mt.setup(self.daemon, self) for i in self.interfaces: i.setup(self.daemon, self) # Create the overlay's BGP and firewall process objects, # once the data structures are complete. self.bgp_process = bgp_process.create(self.daemon, self) self.firewall_process = firewall_process.create(self) self.set_setup()