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
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to