summaryrefslogtreecommitdiffhomepage
path: root/interface.c
diff options
context:
space:
mode:
authorUwe Kleine-König <uwe@kleine-koenig.org>2019-11-20 19:11:31 +0100
committerHans Dedecker <dedeckeh@gmail.com>2019-11-29 18:39:31 +0100
commite45b1408284c05984b38a910a1f0a07d6c761397 (patch)
tree0e139fb4950259f0e79e2700812e6747f2b52bd7 /interface.c
parente15147c272201eb17320c10ec95919e641bd03c5 (diff)
interface: warn if ip6hint is truncated
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 <uwe@kleine-koenig.org> Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
Diffstat (limited to 'interface.c')
-rw-r--r--interface.c12
1 files 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);