Пример #1
0
    def __init__(self, id, config_file, policy_file, logger):
        # participant id
        self.id = id
        self.logger = logger

        # used to signal termination
        self.run = True
        self.prefix_lock = {}

        # Initialize participant params
        self.cfg = PConfig(config_file, self.id)

        # load policies
        self.policies = self.load_policies(policy_file)

        # The port 0 MAC is used for tagging outbound rules as belonging to us
        self.port0_mac = self.cfg.port0_mac

        self.nexthop_2_part = self.cfg.get_nexthop_2_part()

        # VNHs related params
        self.num_VNHs_in_use = 0
        self.VNH_2_vmac = {}
        self.vmac_2_VNH = {}
        self.FEC_list = {}
        self.prefix_2_FEC = {}
        self.prefix_2_VNH_nrfp = {}
        #SWIFT Backup equivalence class
        self.BEC_list = {((-1, -1, -1), (-1, -1, -1)): {'id': 1, 'as_path': None, 'backup_nbs': None, 'as_path_vmac': None}}
        self.prefix_2_BEC = {}
        self.BECid_FECid_2_VNH = {}
        self.prefix_2_BEC_nrfp = {}
        self.max_depth = self.cfg.Swift_vmac["max_depth"]
        self.nexthops_nb_bits = self.cfg.Swift_vmac["nexthops_nb_bits"]
        self.Swift_flow_rule_timeout = self.cfg.Swift_vmac["hard timeout"]
        self.vnh_2_BFEC = {}
        #swift tag dic mapping ip to mac
        self.tag_dict = {}
        self.prefix_2_FEC_nrfp = {}
        self.prefix_2_BEC_nrfp = {}

        # Superset related params
        if self.cfg.isSupersetsMode():
            self.supersets = SuperSets(self, self.cfg.vmac_options)

        # Keep track of flow rules pushed
        self.dp_pushed = []
        # Keep track of flow rules which are scheduled to be pushed
        self.dp_queued = []
Пример #2
0
    def __init__(self, pid, config_file, policy_file, rib_file, logger, asn_2_id, prefrns):
        # participant id
        self.id = pid
        # print ID for logging
        self.route_id = 0
        self.end_time = 0
        self.logger = logger

        # used to signal termination
        self.run = True
        self.prefix_lock = {}

        # Initialize participant params
        self.cfg = PConfig(config_file, self.id)
        # Vmac encoding mode
        # self.cfg.vmac_mode = config_file["vmac_mode"]
        # Dataplane mode---multi table or multi switch
        # self.cfg.dp_mode = config_file["dp_mode"]

        # ExaBGP Peering Instance
        self.bgp_instance = self.cfg.get_bgp_instance()
        self.bgp_instance.init(asn_2_id, prefrns, rib_file)

        self.policies = self.load_policies(policy_file)

        # The port 0 MAC is used for tagging outbound rules as belonging to us
        self.port0_mac = self.cfg.port0_mac

        self.nexthop_2_part = self.cfg.get_nexthop_2_part()

        # VNHs related params
        self.num_VNHs_in_use = 0
        self.VNH_2_prefix = {}
        self.prefix_2_VNH = {}


        # Superset related params
        if self.cfg.isSupersetsMode():
            self.supersets = SuperSets(self, self.cfg.vmac_options)
        else:
            # TODO: create similar class and variables for MDS
            self.mds = None

        # Keep track of flow rules pushed
        self.dp_pushed = []
        # Keep track of flow rules which are scheduled to be pushed
        self.dp_queued = []