def create_routing_table(bgp=None, ixp_prefixes=None, ixp_asns=None, bgp_compression='infer'):
log.info('Creating IP2AS tool.')
if bgp_compression == 'infer' and bgp.startswith('http'):
bgp_compression = infer_compression(bgp, 'infer')
if not isinstance(ixp_prefixes, pd.DataFrame):
ixp_prefixes = set(pd.read_csv(ixp_prefixes, comment='#', index_col=0).index.unique()) if ixp_prefixes is not None else set()
if not isinstance(ixp_asns, pd.DataFrame):
ixp_asns = set(pd.read_csv(ixp_asns, comment='#', index_col=0).index.unique()) if ixp_asns is not None else set()
if not isinstance(bgp, pd.DataFrame):
bgp_original = pd.read_table(bgp, comment='#', names=['Address', 'Prefixlen', 'ASN'], compression=bgp_compression)
bgp = bgp_original[~bgp_original.ASN.str.contains(',|_')].copy()
bgp['ASN'] = pd.to_numeric(bgp.ASN)
rt = RoutingTable()
for address, prefixlen, asn in bgp[~bgp.ASN.isin(ixp_asns)].itertuples(index=False):
rt.add_prefix(asn.item(), address, prefixlen)
for address, prefixlen, asn in bgp[bgp.ASN.isin(ixp_asns)].itertuples(index=False):
rt.add_ixp(address, prefixlen)
for prefix in ixp_prefixes:
rt.add_ixp(prefix)
rt.add_private()
rt.add_multicast()
rt.add_default()
return rt
评论列表
文章目录