]> git.ipfire.org Git - people/ms/libloc.git/commitdiff
networks: Add function to check if two networks overlap
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 12 Nov 2020 14:24:58 +0000 (14:24 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 12 Nov 2020 14:24:58 +0000 (14:24 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libloc.sym
src/loc/network.h
src/network.c

index fcb9ea5c9a4960bb8cad7b0b27e7a45ed83dbb47..0c2835b28621b24f6e6185ccc004fe7e4ac5f306 100644 (file)
@@ -93,6 +93,7 @@ global:
        loc_network_match_flag;
        loc_network_new;
        loc_network_new_from_string;
+       loc_network_overlaps;
        loc_network_ref;
        loc_network_set_asn;
        loc_network_set_country_code;
index 4e51a6299527410f9b41810e55f280dbea086b66..ef13756132eb5f26a749c32dfb73f323e4337b15 100644 (file)
@@ -55,6 +55,7 @@ int loc_network_set_flag(struct loc_network* network, uint32_t flag);
 int loc_network_match_flag(struct loc_network* network, uint32_t flag);
 
 int loc_network_eq(struct loc_network* self, struct loc_network* other);
+int loc_network_overlaps(struct loc_network* self, struct loc_network* other);
 int loc_network_is_subnet_of(struct loc_network* self, struct loc_network* other);
 struct loc_network_list* loc_network_subnets(struct loc_network* network);
 struct loc_network_list* loc_network_exclude(
index 6c08070830c9aa36cf5adecc3b5b59969d68cc58..d826511e2c12b00b9f49a3c24f8f0757e11a4f90 100644 (file)
@@ -483,6 +483,22 @@ static int loc_network_gt(struct loc_network* self, struct loc_network* other) {
        return 0;
 }
 
+LOC_EXPORT int loc_network_overlaps(struct loc_network* self, struct loc_network* other) {
+       if (loc_network_match_address(self, &other->first_address) == 0)
+               return 1;
+
+       if (loc_network_match_address(self, &other->last_address) == 0)
+               return 1;
+
+       if (loc_network_match_address(other, &self->first_address) == 0)
+               return 1;
+
+       if (loc_network_match_address(other, &self->last_address) == 0)
+               return 1;
+
+       return 0;
+}
+
 LOC_EXPORT int loc_network_is_subnet_of(struct loc_network* self, struct loc_network* other) {
        // If the start address of the other network is smaller than this network,
        // it cannot be a subnet.