]> git.ipfire.org Git - people/ms/libloc.git/blobdiff - src/python/location-importer.in
location-import: Abort when we could not parse the prefix
[people/ms/libloc.git] / src / python / location-importer.in
index 26e4d0d2bfe77118f615f00b33dd48e82e82389c..0551cf6605b9a58426df329ff3342d1fb875912d 100644 (file)
@@ -221,12 +221,47 @@ class CLI(object):
                                (
                                        SELECT networks.country FROM networks
                                                WHERE announcements.network <<= networks.network
+                                               ORDER BY masklen(networks.network) DESC
+                                               LIMIT 1
                                ) AS country,
 
                                -- Flags
-                               FALSE AS is_anonymous_proxy,
-                               FALSE AS is_satellite_provider,
-                               FALSE AS is_anycast
+                               COALESCE(
+                                       (
+                                               SELECT is_anonymous_proxy FROM network_overrides overrides
+                                                       WHERE announcements.network <<= overrides.network
+                                                       ORDER BY masklen(overrides.network) DESC
+                                                       LIMIT 1
+                                       ),
+                                       (
+                                               SELECT is_anonymous_proxy FROM autnum_overrides overrides
+                                                       WHERE announcements.autnum = overrides.number
+                                       )
+                               ) AS is_anonymous_proxy,
+                               COALESCE(
+                                       (
+                                               SELECT is_satellite_provider FROM network_overrides overrides
+                                                       WHERE announcements.network <<= overrides.network
+                                                       ORDER BY masklen(overrides.network) DESC
+                                                       LIMIT 1
+                                       ),
+                                       (
+                                               SELECT is_satellite_provider FROM autnum_overrides overrides
+                                                       WHERE announcements.autnum = overrides.number
+                                       )
+                               ) AS is_satellite_provider,
+                               COALESCE(
+                                       (
+                                               SELECT is_anycast FROM network_overrides overrides
+                                                       WHERE announcements.network <<= overrides.network
+                                                       ORDER BY masklen(overrides.network) DESC
+                                                       LIMIT 1
+                                       ),
+                                       (
+                                               SELECT is_anycast FROM autnum_overrides overrides
+                                                       WHERE announcements.autnum = overrides.number
+                                       )
+                               ) AS is_anycast
                        FROM announcements
                """)
 
@@ -387,6 +422,7 @@ class CLI(object):
                        prefix = int(prefix)
                except:
                        log.warning("Invalid prefix: %s" % prefix)
+                       return
 
                # Fix prefix length for IPv4
                if type == "ipv4":
@@ -456,6 +492,10 @@ class CLI(object):
                                                        # Convert network to string
                                                        network = network.decode()
 
+                                                       # Append /24 for IPv4 addresses
+                                                       if not "/" in network and not ":" in network:
+                                                               network = "%s/24" % network
+
                                                        # Convert AS number to integer
                                                        autnum = int(autnum)
 
@@ -477,11 +517,37 @@ class CLI(object):
                                        -- Delete anything that is not global unicast address space
                                        DELETE FROM announcements WHERE family(network) = 6 AND NOT network <<= '2000::/3';
 
-                                       -- DELETE RFC1918 address space
+                                       -- 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 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 test, benchmark and documentation address space
+                                       DELETE FROM announcements WHERE family(network) = 4 AND network <<= '192.0.0.0/24';
+                                       DELETE FROM announcements WHERE family(network) = 4 AND network <<= '192.0.2.0/24';
+                                       DELETE FROM announcements WHERE family(network) = 4 AND network <<= '198.18.0.0/15';
+                                       DELETE FROM announcements WHERE family(network) = 4 AND network <<= '198.51.100.0/24';
+                                       DELETE FROM announcements WHERE family(network) = 4 AND network <<= '203.0.113.0/24';
+
+                                       -- DELETE CGNAT address space (RFC 6598)
+                                       DELETE FROM announcements WHERE family(network) = 4 AND network <<= '100.64.0.0/10';
+
+                                       -- DELETE link local address space
+                                       DELETE FROM announcements WHERE family(network) = 4 AND network <<= '169.254.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;