]> git.ipfire.org Git - people/ms/libloc.git/blobdiff - src/loc/network.h
Bump database version to "1"
[people/ms/libloc.git] / src / loc / network.h
index 71e31c176a44d0b1edf6f99e1e5c63f74f58979e..273041c8738ceda1ddb85ca29e64e6f1613510d7 100644 (file)
 #include <loc/libloc.h>
 #include <loc/format.h>
 
+enum loc_network_flags {
+       LOC_NETWORK_FLAG_ANONYMOUS_PROXY    = (1 << 0), // A1
+       LOC_NETWORK_FLAG_SATELLITE_PROVIDER = (1 << 1), // A2
+       LOC_NETWORK_FLAG_ANYCAST            = (1 << 2), // A3
+};
+
 struct loc_network;
 int loc_network_new(struct loc_ctx* ctx, struct loc_network** network,
-               struct in6_addr start_address, unsigned int prefix);
+               struct in6_addr* start_address, unsigned int prefix);
 int loc_network_new_from_string(struct loc_ctx* ctx, struct loc_network** network,
                const char* address_string);
 struct loc_network* loc_network_ref(struct loc_network* network);
 struct loc_network* loc_network_unref(struct loc_network* network);
 char* loc_network_str(struct loc_network* network);
+int loc_network_address_family(struct loc_network* network);
+int loc_network_match_address(struct loc_network* network, const struct in6_addr* address);
 
 const char* loc_network_get_country_code(struct loc_network* network);
 int loc_network_set_country_code(struct loc_network* network, const char* country_code);
+int loc_network_match_country_code(struct loc_network* network, const char* country_code);
 
 uint32_t loc_network_get_asn(struct loc_network* network);
 int loc_network_set_asn(struct loc_network* network, uint32_t asn);
+int loc_network_match_asn(struct loc_network* network, uint32_t asn);
+
+int loc_network_has_flag(struct loc_network* network, uint32_t flag);
+int loc_network_set_flag(struct loc_network* network, uint32_t flag);
+int loc_network_match_flag(struct loc_network* network, uint32_t flag);
+
+#ifdef LIBLOC_PRIVATE
 
-int loc_network_to_database_v0(struct loc_network* network, struct loc_database_network_v0* dbobj);
+int loc_network_to_database_v1(struct loc_network* network, struct loc_database_network_v1* dbobj);
+int loc_network_new_from_database_v1(struct loc_ctx* ctx, struct loc_network** network,
+               struct in6_addr* address, unsigned int prefix, const struct loc_database_network_v1* dbobj);
 
 struct loc_network_tree;
 int loc_network_tree_new(struct loc_ctx* ctx, struct loc_network_tree** tree);
 struct loc_network_tree* loc_network_tree_unref(struct loc_network_tree* tree);
+struct loc_network_tree_node* loc_network_tree_get_root(struct loc_network_tree* tree);
 int loc_network_tree_walk(struct loc_network_tree* tree,
                int(*filter_callback)(struct loc_network* network, void* data),
                int(*callback)(struct loc_network* network, void* data), void* data);
@@ -50,4 +69,14 @@ int loc_network_tree_add_network(struct loc_network_tree* tree, struct loc_netwo
 size_t loc_network_tree_count_networks(struct loc_network_tree* tree);
 size_t loc_network_tree_count_nodes(struct loc_network_tree* tree);
 
+struct loc_network_tree_node;
+int loc_network_tree_node_new(struct loc_ctx* ctx, struct loc_network_tree_node** node);
+struct loc_network_tree_node* loc_network_tree_node_ref(struct loc_network_tree_node* node);
+struct loc_network_tree_node* loc_network_tree_node_unref(struct loc_network_tree_node* node);
+struct loc_network_tree_node* loc_network_tree_node_get(struct loc_network_tree_node* node, unsigned int index);
+
+int loc_network_tree_node_is_leaf(struct loc_network_tree_node* node);
+struct loc_network* loc_network_tree_node_get_network(struct loc_network_tree_node* node);
+
+#endif
 #endif