owipcalc: remove clone in cidr_contains6
authorNick Hainke <vincent@systemli.org>
Sat, 16 Jan 2021 12:48:50 +0000 (13:48 +0100)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Tue, 19 Jan 2021 14:39:36 +0000 (15:39 +0100)
The "cidr_contains6" functions clones the given cidr. The contains4
does not clone the cidr. Both functions do not behave the same.

I see no reason to push the cidr. I think that we get only a negligible
performance gain, but it makes ipv4 and ipv6 equal again.

Signed-off-by: Nick Hainke <vincent@systemli.org>
package/network/utils/owipcalc/Makefile
package/network/utils/owipcalc/src/owipcalc.c

index 1f4c98bb48d60fe36aece480f745dfa61326f048..dc68a0346ba9cd0608a6835e425e88a1d050fef6 100644 (file)
@@ -7,7 +7,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=owipcalc
-PKG_RELEASE:=4
+PKG_RELEASE:=5
 PKG_LICENSE:=Apache-2.0
 
 include $(INCLUDE_DIR)/package.mk
index c4df5c7450f4730396383b28d6aea0cbf523c244..5ed609f1580e264cb657d20c32b72fc460641166 100644 (file)
@@ -527,18 +527,17 @@ static bool cidr_network6(struct cidr *a)
 
 static bool cidr_contains6(struct cidr *a, struct cidr *b)
 {
-       struct cidr *n = cidr_clone(a);
-       struct in6_addr *x = &n->addr.v6;
+       struct in6_addr *x = &a->addr.v6;
        struct in6_addr *y = &b->addr.v6;
-       uint8_t i = (128 - n->prefix) / 8;
-       uint8_t m = ~((1 << ((128 - n->prefix) % 8)) - 1);
+       uint8_t i = (128 - a->prefix) / 8;
+       uint8_t m = ~((1 << ((128 - a->prefix) % 8)) - 1);
        uint8_t net1 = x->s6_addr[15-i] & m;
        uint8_t net2 = y->s6_addr[15-i] & m;
 
        if (printed)
                qprintf(" ");
 
-       if ((b->prefix >= n->prefix) && (net1 == net2) &&
+       if ((b->prefix >= a->prefix) && (net1 == net2) &&
            ((i == 15) || !memcmp(&x->s6_addr, &y->s6_addr, 15-i)))
        {
                qprintf("1");