[OpenWrt-Devel] [PATCH netifd] interface: warn if ip6hint is truncated

Uwe Kleine-König uwe at kleine-koenig.org
Wed Nov 20 13:11:31 EST 2019


When for example a /60 is assigned to a network the last 4 bits of the
ip6hint are unused. Emit a warning if any of these unused bits is set as
it indicates that someone didn't understand how the hint is used. (As I
did earlier today resulting in spending some time understanding the
code.)
---
 interface.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/interface.c b/interface.c
index 028dc6ccd5e5..839de0bb88ad 100644
--- a/interface.c
+++ b/interface.c
@@ -863,9 +863,15 @@ interface_alloc(const char *name, struct blob_attr *config, bool dynamic)
 	}
 
 	iface->assignment_hint = -1;
-	if ((cur = tb[IFACE_ATTR_IP6HINT]))
-		iface->assignment_hint = strtol(blobmsg_get_string(cur), NULL, 16) &
-				~((1 << (64 - iface->assignment_length)) - 1);
+	if ((cur = tb[IFACE_ATTR_IP6HINT])) {
+		int32_t assignment_hint = strtol(blobmsg_get_string(cur), NULL, 16);
+
+		iface->assignment_hint = assignment_hint & ~((1 << (64 - iface->assignment_length)) - 1);
+
+		if (iface->assignment_hint != assignment_hint)
+			netifd_log_message(L_WARNING, "Ignoring set bits of assignment hint for interface '%s'\n",
+					   iface->name);
+	}
 
 	if ((cur = tb[IFACE_ATTR_IP6CLASS]))
 		interface_add_assignment_classes(iface, cur);
-- 
2.24.0


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list