#include <rpcd/plugin.h>
+#ifndef IN6_IS_ADDR_ULA
+#define IN6_IS_ADDR_ULA(a) (((a)->s6_addr[0] & 0xfe) == 0xfc)
+#endif
+
static struct blob_buf blob;
}
}
avl_for_each_element(&hint->ip6addrs, addr, avl) {
- if (!IN6_IS_ADDR_UNSPECIFIED(&addr->addr.in6)) {
+ if (!IN6_IS_ADDR_UNSPECIFIED(&addr->addr.in6) &&
+ !IN6_IS_ADDR_LINKLOCAL(&addr->addr.in6) &&
+ !IN6_IS_ADDR_ULA(&addr>addr.in6)) {
inet_ntop(AF_INET6, &addr->addr.in6, buf, sizeof(buf));
blobmsg_add_string(&req, NULL, buf);
n++;