# Enable debug logging
if args.debug:
- log.setLevel(logging.DEBUG)
+ location.logger.set_level(logging.DEBUG)
# Print usage if no action was given
if not "func" in args:
# Select all known networks
rows = self.db.query("""
SELECT
+ DISTINCT ON (announcements.network)
announcements.network AS network,
announcements.autnum AS autnum,
- (
- SELECT networks.country FROM networks
- WHERE announcements.network <<= networks.network
- ORDER BY masklen(networks.network) DESC
- LIMIT 1
- ) AS country,
+ networks.country AS country,
+
+ -- Must be part of returned values for ORDER BY clause
+ masklen(networks.network) AS sort,
-- Flags
COALESCE(
)
) AS is_anycast
FROM announcements
+ LEFT JOIN networks ON announcements.network <<= networks.network
+ ORDER BY announcements.network, sort DESC
""")
for row in rows:
prefix = int(prefix)
except:
log.warning("Invalid prefix: %s" % prefix)
+ return
# Fix prefix length for IPv4
if type == "ipv4":
-- Delete anything that is not global unicast address space
DELETE FROM announcements WHERE family(network) = 6 AND NOT network <<= '2000::/3';
+ -- DELETE "current network" address space
+ DELETE FROM announcements WHERE family(network) = 4 AND network <<= '0.0.0.0/8';
+
-- DELETE local loopback address space
DELETE FROM announcements WHERE family(network) = 4 AND network <<= '127.0.0.0/8';
- -- DELETE RFC1918 address space
+ -- DELETE RFC 1918 address space
DELETE FROM announcements WHERE family(network) = 4 AND network <<= '10.0.0.0/8';
DELETE FROM announcements WHERE family(network) = 4 AND network <<= '172.16.0.0/12';
DELETE FROM announcements WHERE family(network) = 4 AND network <<= '192.168.0.0/16';
-- DELETE IPv6 to IPv4 (6to4) address space
DELETE FROM announcements WHERE family(network) = 4 AND network <<= '192.88.99.0/24';
+ -- DELETE multicast and reserved address space
+ DELETE FROM announcements WHERE family(network) = 4 AND network <<= '224.0.0.0/4';
+ DELETE FROM announcements WHERE family(network) = 4 AND network <<= '240.0.0.0/4';
+
-- Delete networks that are too small to be in the global routing table
DELETE FROM announcements WHERE family(network) = 6 AND masklen(network) > 48;
DELETE FROM announcements WHERE family(network) = 4 AND masklen(network) > 24;
is_anonymous_proxy,
is_satellite_provider,
is_anycast
- ) VALUES (%s, %s, %s, %s)
+ ) VALUES (%s, %s, %s, %s, %s)
ON CONFLICT (network) DO NOTHING""",
"%s" % network,
block.get("country"),