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 "----------------------------"
示例#3
0
 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 "----------------------------"