static int sock = -1, rtnl_sock = -1;
static unsigned if_index = 0;
static char if_name[IF_NAMESIZE] = {0};
-static volatile int rs_attempt = 1;
+static volatile int rs_attempt = 0;
static struct in6_addr lladdr = IN6ADDR_ANY_INIT;
static void ra_send_rs(int signal __attribute__((unused)));
const struct sockaddr_in6 dest = {AF_INET6, 0, 0, ALL_IPV6_ROUTERS, if_index};
sendto(sock, &rs, sizeof(rs), MSG_DONTWAIT, (struct sockaddr*)&dest, sizeof(dest));
- if (++rs_attempt < 3)
+ if (++rs_attempt <= 3)
alarm(4);
}
static int16_t pref_to_priority(uint8_t flags)
{
flags = (flags >> 3) & 0x03;
- return (flags == 0x00) ? 1024 : (flags == 0x01) ? 512 :
- (flags == 0x11) ? 2048 : -1;
+ return (flags == 0x0) ? 1024 : (flags == 0x1) ? 512 :
+ (flags == 0x3) ? 2048 : -1;
}
if (len < 0)
break;
- for (struct nlmsghdr *nh = (struct nlmsghdr*)buf; NLMSG_OK(nh, len);
+ for (struct nlmsghdr *nh = (struct nlmsghdr*)buf; NLMSG_OK(nh, (size_t)len);
nh = NLMSG_NEXT(nh, len)) {
struct ifaddrmsg *ifa = NLMSG_DATA(nh);
struct in6_addr *addr = NULL;