[openwrt/openwrt] owipcalc: remove clone in cidr_contains6

LEDE Commits lede-commits at lists.infradead.org
Tue Jan 19 09:40:10 EST 2021


adrian pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/0fda8049a7d1fb34074b7d5e8041312c1971f87d

commit 0fda8049a7d1fb34074b7d5e8041312c1971f87d
Author: Nick Hainke <vincent at systemli.org>
AuthorDate: Sat Jan 16 13:48:50 2021 +0100

    owipcalc: remove clone in cidr_contains6
    
    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 at systemli.org>
---
 package/network/utils/owipcalc/Makefile       | 2 +-
 package/network/utils/owipcalc/src/owipcalc.c | 9 ++++-----
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/package/network/utils/owipcalc/Makefile b/package/network/utils/owipcalc/Makefile
index 1f4c98bb48..dc68a0346b 100644
--- a/package/network/utils/owipcalc/Makefile
+++ b/package/network/utils/owipcalc/Makefile
@@ -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
diff --git a/package/network/utils/owipcalc/src/owipcalc.c b/package/network/utils/owipcalc/src/owipcalc.c
index c4df5c7450..5ed609f158 100644
--- a/package/network/utils/owipcalc/src/owipcalc.c
+++ b/package/network/utils/owipcalc/src/owipcalc.c
@@ -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");



More information about the lede-commits mailing list