def run(gobgpd_addr, routefamily): channel = implementations.insecure_channel(gobgpd_addr, 50051) with gobgp_pb2.beta_create_GobgpApi_stub(channel) as stub: ribs = stub.MonitorBestChanged(gobgp_pb2.Arguments(family=routefamily), _TIMEOUT_SECONDS) for rib in ribs: paths_target = rib.paths for path_target in paths_target: nlri = IPAddrPrefix.parser(path_target.nlri) print "----------------------------" print (" Rib.prefix : %s" % nlri[0].prefix) for pattr in path_target.pattrs: path_attr = _PathAttribute.parser(pattr) if isinstance(path_attr[0], BGPPathAttributeOrigin): print (" Rib.origin : %s" % path_attr[0].value) elif isinstance(path_attr[0], BGPPathAttributeAsPath): if path_attr[0].type == 2: print(" Rib.aspath : %s" % path_attr[0].value) else: print(" Rib.aspath : ???") elif isinstance(path_attr[0], BGPPathAttributeMultiExitDisc): print (" Rib.med : %s" % path_attr[0].value) elif isinstance(path_attr[0], BGPPathAttributeNextHop): print (" Rib.nexthop : %s" % path_attr[0].value) elif isinstance(path_attr[0], BGPPathAttributeCommunities): for community in path_attr[0].communities: print(" Rib.community : %s" % community) print (" Rib.is_withdraw : %s" % path_target.is_withdraw)
def run(gobgpd_addr, vrf_name): channel = implementations.insecure_channel(gobgpd_addr, 50051) with gobgp_pb2.beta_create_GobgpApi_stub(channel) as stub: rib = stub.GetRib(gobgp_pb2.Table(type=Resource_VRF, family=RF_IPv4_UC, name=vrf_name), _TIMEOUT_SECONDS) destinations_target = rib.destinations for destination_target in destinations_target: paths_target = destination_target.paths for path_target in paths_target: nlri = LabelledVPNIPAddrPrefix.parser(path_target.nlri) print (" Rib.prefix : %s" % nlri[0].prefix) print (" Rib.route_dist : %s" % nlri[0].route_dist) print (" Rib.label_list : %s" % nlri[0].label_list) for pattr in path_target.pattrs: path_attr = _PathAttribute.parser(pattr) if isinstance(path_attr[0], BGPPathAttributeOrigin): print (" Rib.origin : %s" % path_attr[0].value) elif isinstance(path_attr[0], BGPPathAttributeAsPath): if path_attr[0].type == 2: print(" Rib.aspath : %s" % path_attr[0].value) else: print(" Rib.aspath : ???") elif isinstance(path_attr[0], BGPPathAttributeMultiExitDisc): print (" Rib.med : %s" % path_attr[0].value) elif isinstance(path_attr[0], BGPPathAttributeExtendedCommunities): for community in path_attr[0].communities: if isinstance(community, BGPTwoOctetAsSpecificExtendedCommunity): print(" Rib.community : %s:%s" % ( community.as_number, community.local_administrator)) else: print(" Rib.community : ???") elif isinstance(path_attr[0], BGPPathAttributeMpReachNLRI): print (" Rib.nexthop : %s" % path_attr[0].next_hop) print "----------------------------"
def monitor_bestpath_chenged(self, arguments): ribs = self.g_conn.MonitorBestChanged(api.Arguments(**arguments), self.monitor_timeout) for rib in ribs: for path in rib.paths: nlri = IPAddrPrefix.parser(path.nlri) prefix = nlri[0].prefix log.debug( 'Recv bgp route from gobgp: prefix={0}, withdraw={1}'. format(prefix, path.is_withdraw)) bgp_path = { 'prefix': prefix, 'metric': 0, 'is_withdraw': path.is_withdraw } bgp_pathattr = { 'BGP_uptime': '', 'BGP_iBGP': '', 'BGP_flags': '', 'BGP_internal': '', 'BGP_loc_pref': '0' } for pattr in path.pattrs: path_attr = _PathAttribute.parser(pattr) if isinstance(path_attr[0], BGPPathAttributeOrigin): origin = path_attr[0].value if origin == 0: bgp_pathattr['BGP_origin'] = 'i' elif origin == 1: bgp_pathattr['BGP_origin'] = 'e' else: bgp_pathattr['BGP_origin'] = '?' elif isinstance(path_attr[0], BGPPathAttributeAsPath): if path_attr[0].type == 2: bgp_pathattr['BGP_AS_path'] = '{0}'.format( path_attr[0].value[0][0]) elif isinstance(path_attr[0], BGPPathAttributeMultiExitDisc): bgp_path['BGP_MED'] = path_attr[0].value elif isinstance(path_attr[0], BGPPathAttributeNextHop): bgp_path['nexthop'] = path_attr[0].value elif isinstance(path_attr[0], BGPPathAttributeCommunities): communities = [] for community in path_attr[0].communities: communities.append(community) bgp_pathattr['BGP_Community'] = ','.join(communities) bgp_path['bgp_pathattr'] = bgp_pathattr self.o_hdr.mod_bgp_path(bgp_path)
def run(gobgpd_addr, routefamily): channel = implementations.insecure_channel(gobgpd_addr, 50051) with gobgp_pb2.beta_create_GobgpApi_stub(channel) as stub: if routefamily: ribs = stub.MonitorBestChanged(gobgp_pb2.Arguments(family=routefamily), _TIMEOUT_SECONDS) else: ribs = stub.MonitorBestChanged(gobgp_pb2.Arguments(), _TIMEOUT_SECONDS) for rib in ribs: paths_target = rib.paths for path_target in paths_target: for pattr in path_target.pattrs: path_attr = _PathAttribute.parser(pattr) if isinstance(path_attr[0], BGPPathAttributeOrigin): print (" Rib.origin : %s" % path_attr[0].value) elif isinstance(path_attr[0], BGPPathAttributeAsPath): if path_attr[0].type == 2: print(" Rib.aspath : %s" % path_attr[0].value) else: print(" Rib.aspath : ???") elif isinstance(path_attr[0], BGPPathAttributeMultiExitDisc): print (" Rib.med : %s" % path_attr[0].value) elif isinstance(path_attr[0], BGPPathAttributeExtendedCommunities): for community in path_attr[0].communities: if isinstance(community, BGPTwoOctetAsSpecificExtendedCommunity): print(" Rib.community : %s:%s" % ( community.as_number, community.local_administrator)) else: print(" Rib.community : ???") elif isinstance(path_attr[0], BGPPathAttributeMpReachNLRI): print (" Rib.prefix : %s" % path_attr[0].nlri[0].prefix) print (" Rib.route_dist : %s" % path_attr[0].nlri[0].route_dist) print (" Rib.label_list : %s" % path_attr[0].nlri[0].label_list) print (" Rib.nexthop : %s" % path_attr[0].next_hop) print (" Rib.is_withdraw : %s" % path_target.is_withdraw) print (" Rib.best : %s" % path_target.best) print "----------------------------"