Commit 82910b95 authored by Michael Tremer's avatar Michael Tremer

Implement filtering networks for the ASN they belong to

Signed-off-by: default avatarMichael Tremer <michael.tremer@ipfire.org>
parent 74fb733a
......@@ -78,6 +78,7 @@ struct loc_database_enumerator {
// Search string
char* string;
char country_code[3];
uint32_t asn;
// Index of the AS we are looking at
unsigned int as_index;
......@@ -651,6 +652,13 @@ LOC_EXPORT int loc_database_enumerator_set_country_code(struct loc_database_enum
return 0;
}
LOC_EXPORT int loc_database_enumerator_set_asn(
struct loc_database_enumerator* enumerator, unsigned int asn) {
enumerator->asn = asn;
return 0;
}
LOC_EXPORT struct loc_as* loc_database_enumerator_next_as(struct loc_database_enumerator* enumerator) {
struct loc_database* db = enumerator->db;
struct loc_as* as;
......@@ -771,6 +779,12 @@ static int loc_database_enumerator_network_depth_first_search(
continue;
}
// Skip if the ASN does not match
if (e->asn && !loc_network_match_asn(*network, e->asn)) {
loc_network_unref(*network);
continue;
}
return 0;
}
}
......
......@@ -55,6 +55,7 @@ global:
loc_database_enumerator_next_as;
loc_database_enumerator_next_network;
loc_database_enumerator_ref;
loc_database_enumerator_set_asn;
loc_database_enumerator_set_country_code;
loc_database_enumerator_set_string;
loc_database_enumerator_unref;
......@@ -62,6 +63,7 @@ global:
# Network
loc_network_get_asn;
loc_network_get_country_code;
loc_network_match_asn;
loc_network_match_country_code;
loc_network_new;
loc_network_new_from_string;
......
......@@ -50,6 +50,7 @@ struct loc_database_enumerator* loc_database_enumerator_unref(struct loc_databas
int loc_database_enumerator_set_string(struct loc_database_enumerator* enumerator, const char* string);
int loc_database_enumerator_set_country_code(struct loc_database_enumerator* enumerator, const char* country_code);
int loc_database_enumerator_set_asn(struct loc_database_enumerator* enumerator, unsigned int asn);
struct loc_as* loc_database_enumerator_next_as(struct loc_database_enumerator* enumerator);
struct loc_network* loc_database_enumerator_next_network(struct loc_database_enumerator* enumerator);
......
......@@ -38,6 +38,7 @@ int loc_network_match_country_code(struct loc_network* network, const char* coun
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);
#ifdef LIBLOC_PRIVATE
......
......@@ -324,6 +324,10 @@ LOC_EXPORT int loc_network_set_asn(struct loc_network* network, uint32_t asn) {
return 0;
}
LOC_EXPORT int loc_network_match_asn(struct loc_network* network, uint32_t asn) {
return network->asn == asn;
}
LOC_EXPORT int loc_network_to_database_v0(struct loc_network* network, struct loc_database_network_v0* dbobj) {
// Add country code
for (unsigned int i = 0; i < 2; i++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment