Пример #1
0
def create_as_obj(all_ases, as_credentials):
    as_objs = {}
    for _as in all_ases:
        isd_as = ISD_AS(_as)
        as_crd = as_credentials[_as]
        as_obj = AS_Object()
        as_obj.isd_id = isd_as.isd_str()
        as_obj.as_id = isd_as.as_str()
        # TRC/Cert
        trc_name = 'ISD%s-V1.trc' % isd_as.isd_str()
        cert_name = 'ISD%s-AS%s-V1.crt' % (isd_as.isd_str(), isd_as.as_file_fmt())
        as_obj.trc = json.dumps(as_crd['certs'][trc_name])
        as_obj.certificate = json.dumps(as_crd['certs'][cert_name])
        # Keys
        keys = {}
        keys['sig_key'] = as_crd['keys']['as-sig.seed']
        keys['enc_key'] = as_crd['keys']['as-decrypt.key']
        keys['master0_as_key'] = as_crd['keys']['master0.key']
        keys['master1_as_key'] = as_crd['keys']['master1.key']
        as_obj.keys = keys
        # Core keys
        if 'core-sig.seed' in as_crd['keys']:
            core_keys = {}
            core_keys['core_sig_key'] = as_crd['keys']['core-sig.seed']
            core_keys['online_key'] = as_crd['keys']['online-root.seed']
            core_keys['offline_key'] = as_crd['keys']['offline-root.seed']
            as_obj.core_keys = core_keys
        as_objs[_as] = as_obj

    return as_objs
Пример #2
0
    def fill_router_info(self, router_dict):
        """
        Update the router information in the database.
        (i.e., BorderRouter and BorderRouterAddress.)
        :param dict router_dict: topo_dict['BorderRouters']
        """
        for name, router in router_dict.items():
            br_obj, _ = BorderRouter.objects.update_or_create(name=name,
                                                              ad=self)
            router_addr = router['InternalAddrs']['IPv4']
            addr_info = router_addr['PublicOverlay']
            internal_public_obj, _ = BorderRouterAddress.objects.update_or_create(
                addr=addr_info['Addr'],
                l4port=addr_info['OverlayPort'],
                addr_type='IPv4',
                is_public=True,
                router=br_obj,
                ad=self)
            addr_info = router_addr.get('BindOverlay', None)
            if addr_info:
                internal_bound_obj, _ = BorderRouterAddress.objects.update_or_create(
                    addr=addr_info['Addr'],
                    l4port=addr_info['OverlayPort'],
                    addr_type='IPv4',
                    is_public=False,
                    router=br_obj,
                    ad=self)
            else:
                internal_bound_obj = None
            # TODO: we need to update the model: BorderRouterAddress should have also CtrlAddr, both should
            # have public + bind address. BorderRouterInterface should not have an index
            # But I don't find where we read this data for anything !

            for if_id, intf in router["Interfaces"].items():
                isd_as = ISD_AS(intf["ISD_AS"])
                br_addr_obj = internal_public_obj
                br_inft_obj, _ = BorderRouterInterface.objects.update_or_create(
                    addr=intf['PublicOverlay']['Addr'],
                    l4port=intf['PublicOverlay']['OverlayPort'],
                    remote_addr=intf['RemoteOverlay']['Addr'],
                    remote_l4port=intf['RemoteOverlay']['OverlayPort'],
                    internal_addr_idx=0,
                    interface_id=if_id,
                    bandwidth=intf['Bandwidth'],
                    mtu=intf['MTU'],
                    neighbor_isd_id=isd_as[0],
                    neighbor_as_id=isd_as[1],
                    neighbor_as_id_str=isd_as.as_str(),
                    neighbor_type=intf["LinkTo"],
                    router_addr=br_addr_obj,
                    ad=self,
                    bind_addr=intf['BindOverlay']['Addr']
                    if 'BindOverlay' in intf.keys() else None,
                    bind_l4port=intf['BindOverlay']['OverlayPort']
                    if 'BindOverlay' in intf.keys() else None,
                )
Пример #3
0
    def fill_router_info(self, router_dict):
        """
        Update the router information in the database.
        (i.e., BorderRouter and BorderRouterAddress.)
        :param dict router_dict: topo_dict['BorderRouters']
        """
        for name, router in router_dict.items():
            br_obj, _ = BorderRouter.objects.update_or_create(name=name, ad=self)
            router_addr = router['InternalAddrs']['IPv4']
            addr_info = router_addr['PublicOverlay']
            internal_public_obj, _ = BorderRouterAddress.objects.update_or_create(
                addr=addr_info['Addr'],
                l4port=addr_info['OverlayPort'],
                addr_type='IPv4',
                is_public=True,
                router=br_obj,
                ad=self
            )
            addr_info = router_addr.get('BindOverlay', None)
            if addr_info:
                internal_bound_obj, _ = BorderRouterAddress.objects.update_or_create(
                addr=addr_info['Addr'],
                l4port=addr_info['OverlayPort'],
                addr_type='IPv4',
                is_public=False,
                router=br_obj,
                ad=self
            )
            else:
                internal_bound_obj = None
            # TODO: we need to update the model: BorderRouterAddress should have also CtrlAddr, both should
            # have public + bind address. BorderRouterInterface should not have an index
            # But I don't find where we read this data for anything !

            for if_id, intf in router["Interfaces"].items():
                isd_as = ISD_AS(intf["ISD_AS"])
                br_addr_obj = internal_public_obj
                br_inft_obj, _ = BorderRouterInterface.objects.update_or_create(
                    addr=intf['PublicOverlay']['Addr'],
                    l4port=intf['PublicOverlay']['OverlayPort'],
                    remote_addr=intf['RemoteOverlay']['Addr'],
                    remote_l4port=intf['RemoteOverlay']['OverlayPort'],
                    internal_addr_idx=0,
                    interface_id=if_id,
                    bandwidth=intf['Bandwidth'],
                    mtu=intf['MTU'],
                    neighbor_isd_id=isd_as[0],
                    neighbor_as_id=isd_as[1],
                    neighbor_as_id_str=isd_as.as_str(),
                    neighbor_type=intf["LinkTo"],
                    router_addr=br_addr_obj,
                    ad=self,
                    bind_addr=intf['BindOverlay']['Addr'] if 'BindOverlay' in intf.keys() else None,
                    bind_l4port=intf['BindOverlay']['OverlayPort'] if 'BindOverlay' in intf.keys() else None,
                )
Пример #4
0
 def test(self):
     inst = ISD_AS()
     inst.isd_str = create_mock_full()
     inst.as_str = create_mock_full()
     # Call
     ntools.eq_(str(inst), "%s-%s" % (inst.isd_str.return_value, inst.as_str.return_value))
Пример #5
0
 def _check(self, as_, s):
     inst = ISD_AS()
     inst._as = as_
     # Call
     ntools.eq_(inst.as_str(), s)