def _gen_br_entry(self, local, l_ifid, remote, r_ifid, remote_type, attrs, local_br, remote_br, addr_type): link_addr_type = addr_type_from_underlay( attrs.get('underlay', DEFAULT_UNDERLAY)) public_addr, remote_addr = self._reg_link_addrs( local_br, remote_br, l_ifid, r_ifid, link_addr_type) ctrl_addr = int_addr = self._reg_addr(local, local_br + "_ctrl", addr_type) # for docker we use the same internal and control address. if self.args.docker: int_addr = ctrl_addr if self.topo_dicts[local]["border_routers"].get(local_br) is None: ctrl_port = 30242 intl_port = 30042 if not self.args.docker: ctrl_port = self.args.port_gen.register(local_br + "_ctrl") intl_port = self.args.port_gen.register(local_br + "_internal") self.topo_dicts[local]["border_routers"][local_br] = { 'ctrl_addr': join_host_port(ctrl_addr.ip, ctrl_port), 'internal_addr': join_host_port(int_addr.ip, intl_port), 'interfaces': { l_ifid: self._gen_br_intf(remote, public_addr, remote_addr, attrs, remote_type) } } else: # There is already a BR entry, add interface intf = self._gen_br_intf(remote, public_addr, remote_addr, attrs, remote_type) self.topo_dicts[local]["border_routers"][local_br]['interfaces'][ l_ifid] = intf
def _gen_br_intf(self, remote, public_addr, remote_addr, attrs, remote_type): return { 'underlay': { 'public': join_host_port(public_addr.ip, SCION_ROUTER_PORT), 'remote': join_host_port(remote_addr.ip, SCION_ROUTER_PORT), }, 'isd_as': str(remote), 'link_to': LinkType.to_str(remote_type.lower()), 'mtu': attrs.get('mtu', self.args.default_mtu) }
def _gen_sig_entries(self, topo_id, as_conf): addr_type = addr_type_from_underlay(DEFAULT_UNDERLAY) elem_id = "sig" + topo_id.file_fmt() reg_id = "sig" + topo_id.file_fmt() port = 30256 if not self.args.docker: port = self.args.port_gen.register(elem_id) d = { 'ctrl_addr': join_host_port(self._reg_addr(topo_id, reg_id, addr_type).ip, port), 'data_addr': join_host_port(self._reg_addr(topo_id, reg_id, addr_type).ip, 30056), } self.topo_dicts[topo_id]['sigs'][elem_id] = d
def _gen_br_intf(self, remote, public_addr, remote_addr, attrs, remote_type): return { 'underlay': { 'public': join_host_port(public_addr.ip, SCION_ROUTER_PORT), 'remote': join_host_port(remote_addr.ip, SCION_ROUTER_PORT), }, 'bandwidth': attrs.get('bw', DEFAULT_LINK_BW), 'isd_as': str(remote), 'link_to': LinkType.to_str(remote_type.lower()), 'mtu': attrs.get('mtu', DEFAULT_MTU) }
def _quic_conf_entry(self, port, svcfrac, elem=None): addr = '127.0.0.1' if elem is None else split_host_port(elem['addr'])[0] if self.args.docker and elem is not None: _, port = split_host_port(elem['addr']) port += 1 return { 'address': join_host_port(addr, port), 'cert_file': os.path.join(self.certs_dir, 'tls.pem'), 'key_file': os.path.join(self.certs_dir, 'tls.key'), 'resolution_fraction': svcfrac, }
def _gen_srv_entry(self, topo_id, as_conf, conf_key, def_num, nick, topo_key, uses_dispatcher=True): addr_type = addr_type_from_underlay(as_conf.get('underlay', DEFAULT_UNDERLAY)) count = self._srv_count(as_conf, conf_key, def_num) for i in range(1, count + 1): elem_id = "%s%s-%s" % (nick, topo_id.file_fmt(), i) port = self._default_ctrl_port(nick) if not self.args.docker: port = self.args.port_gen.register(elem_id) d = { 'addr': join_host_port(self._reg_addr(topo_id, elem_id, addr_type).ip, port), } self.topo_dicts[topo_id][topo_key][elem_id] = d