- search->lifetime = htonl(maxival*10);
- dns.lifetime = search->lifetime;
-
- struct icmpv6_opt adv_interval = {
- .type = ND_OPT_RTR_ADV_INTERVAL,
- .len = 1,
- .data = {0, 0, (maxival*1000) >> 24, (maxival*1000) >> 16, (maxival*1000) >> 8, maxival*1000}
- };
-
- struct iovec iov[IOV_RA_TOTAL] = {
- [IOV_RA_ADV] = {&adv, sizeof(adv)},
- [IOV_RA_PFXS] = {pfxs, pfxs_cnt * sizeof(*pfxs)},
- [IOV_RA_ROUTES] = {routes, routes_cnt * sizeof(*routes)},
- [IOV_RA_DNS] = {&dns, (dns_cnt) ? sizeof(dns) : 0},
- [IOV_RA_DNS_ADDR] = {dns_addr, dns_cnt * sizeof(*dns_addr)},
- [IOV_RA_SEARCH] = {search, search->len * 8},
- [IOV_RA_ADV_INTERVAL] = {&adv_interval, adv_interval.len * 8}};
- struct sockaddr_in6 dest;
+ iov[IOV_RA_ROUTES].iov_base = (char *)routes;
+ iov[IOV_RA_ROUTES].iov_len = routes_cnt * sizeof(*routes);
+
+ memset(&adv_interval, 0, sizeof(adv_interval));
+ adv_interval.nd_opt_adv_interval_type = ND_OPT_RTR_ADV_INTERVAL;
+ adv_interval.nd_opt_adv_interval_len = 1;
+ adv_interval.nd_opt_adv_interval_ival = htonl(maxival);
+
+ iov[IOV_RA_ADV_INTERVAL].iov_base = (char *)&adv_interval;
+ iov[IOV_RA_ADV_INTERVAL].iov_len = adv_interval.nd_opt_adv_interval_len * 8;