// Open ICMPv6 socket
int sock = socket(AF_INET6, SOCK_RAW | SOCK_CLOEXEC, IPPROTO_ICMPV6);
if (sock < 0 && errno != EAFNOSUPPORT) {
- syslog(LOG_ERR, "Failed to open RAW-socket: %s", strerror(errno));
+ syslog(LOG_ERR, "Failed to open RAW-socket: %m");
return -1;
}
odhcpd_register(&router_event);
if (!(fp_route = fopen("/proc/net/ipv6_route", "r")))
- syslog(LOG_ERR, "Failed to open routing table: %s",
- strerror(errno));
+ syslog(LOG_ERR, "Failed to open routing table: %m");
netlink_add_netevent_handler(&router_netevent_handler);
continue;
}
+ if (odhcpd_bmemcmp(&addr->addr, &iface->pio_filter_addr,
+ iface->pio_filter_length) != 0 ||
+ addr->prefix < iface->pio_filter_length)
+ continue; // PIO filtered out of this RA
+
struct nd_opt_prefix_info *p = NULL;
for (size_t i = 0; i < pfxs_cnt; ++i) {
if (addr->prefix == pfxs[i].nd_opt_pi_prefix_len &&