From e45b1408284c05984b38a910a1f0a07d6c761397 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Uwe=20Kleine-K=C3=B6nig?= Date: Wed, 20 Nov 2019 19:11:31 +0100 Subject: [PATCH] interface: warn if ip6hint is truncated MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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.) Signed-off-by: Uwe Kleine-König Signed-off-by: Hans Dedecker --- interface.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/interface.c b/interface.c index 028dc6c..2fa0613 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, "Using truncated assignment hint %d (0x%x) for interface '%s'\n", + iface->assignment_hint, iface->assignment_hint, iface->name); + } if ((cur = tb[IFACE_ATTR_IP6CLASS])) interface_add_assignment_classes(iface, cur); -- 2.25.1