def synthesize_vif_bgp_route(self, mac_address, ip_prefix, plen, label, lb_consistent_hash_order, route_distinguisher=None, local_pref=None): rd = route_distinguisher if route_distinguisher else self.instance_rd route_entry = self.generate_vif_bgp_route(mac_address, ip_prefix, plen, label, rd) assert isinstance(route_entry, engine.RouteEntry) route_entry.attributes.add(self._gen_encap_extended_communities()) route_entry.set_route_targets(self.export_rts) ecommunities = exa.ExtendedCommunities() ecommunities.communities.append( exa.ConsistentHashSortOrder(lb_consistent_hash_order)) route_entry.attributes.add(ecommunities) route_entry.attributes.add( exa.LocalPreference(local_pref or DEFAULT_LOCAL_PREF)) self.log.debug("Synthesized Vif route entry: %s", route_entry) return route_entry
def _route_for_readvertisement(self, route, label, rd, lb_consistent_hash_order, do_default=False): prefix = "0.0.0.0/0" if do_default else route.nlri.cidr.prefix() nlri = self._nlri_from(prefix, label, rd) attributes = exa.Attributes() # new RTRecord = original RTRecord (if any) + orig RTs converted into # RTRecord attributes orig_rtrecords = route.ecoms(exa.RTRecord) rts = route.ecoms(exa.RTExtCom) add_rtrecords = [exa.RTRecord.from_rt(rt) for rt in rts] final_rtrecords = list(set(orig_rtrecords) | set(add_rtrecords)) ecoms = self._gen_encap_extended_communities() ecoms.communities += final_rtrecords ecoms.communities.append( exa.ConsistentHashSortOrder(lb_consistent_hash_order)) attributes.add(ecoms) entry = engine.RouteEntry(nlri, self.readvertise_to_rts, attributes) self.log.debug("RouteEntry for (re-)advertisement: %s", entry) return entry
def _default_route_for_advertisement(self, endpoint): label, rd, lb_consistent_hash_order = ( self._get_route_params_for_endpoint(endpoint)) self.log.debug( "Default route (re-)advertisement with label %s and " "route distinguisher %s", label, rd) nlri = self._nlri_from(DEFAULT_ADDR_PREFIX, label, rd) attributes = exa.Attributes() ecoms = self._gen_encap_extended_communities() ecoms.communities.append( exa.ConsistentHashSortOrder(lb_consistent_hash_order)) attributes.add(ecoms) entry = engine.RouteEntry(nlri, self.readvertise_to_rts, attributes) self.log.debug("RouteEntry for default prefix advertisement: %s", entry) return entry
def _route_for_readvertisement(self, route, endpoint): label, rd, lb_consistent_hash_order = ( self._get_route_params_for_endpoint(endpoint)) self.log.debug( "Prefix %s (re-)advertisement with label %s and route " "distinguisher %s", route.nlri.cidr.prefix(), label, rd) nlri = self._nlri_from(route.nlri.cidr.prefix(), label, rd) attributes = exa.Attributes() ecoms = self._gen_encap_extended_communities() ecoms.communities += (self._gen_rtrecords_extended_community( route.ecoms)) ecoms.communities.append( exa.ConsistentHashSortOrder(lb_consistent_hash_order)) attributes.add(ecoms) entry = engine.RouteEntry(nlri, self.readvertise_to_rts, attributes) self.log.debug("RouteEntry for (re-)advertisement: %s", entry) return entry