char line[512], ifname[16];
bool found_default = false;
- struct odhcpd_ipaddr p = {IN6ADDR_ANY_INIT, 0, 0, 0};
+ struct odhcpd_ipaddr p = {IN6ADDR_ANY_INIT, 0, false, 0, 0, 0};
while (fgets(line, sizeof(line), fp_route)) {
uint32_t rflags;
if (sscanf(line, "00000000000000000000000000000000 00 "
.lladdr = {ND_OPT_SOURCE_LINKADDR, 1, {0}},
.mtu = {ND_OPT_MTU, 1, 0, htonl(mtu)},
};
- adv.h.nd_ra_flags_reserved = ND_RA_FLAG_OTHER;
+
+ if (iface->dhcpv6)
+ adv.h.nd_ra_flags_reserved = ND_RA_FLAG_OTHER;
+
if (iface->managed >= RELAYD_MANAGED_MFLAG)
adv.h.nd_ra_flags_reserved |= ND_RA_FLAG_MANAGED;
for (ssize_t i = 0; i < ipcnt; ++i) {
struct odhcpd_ipaddr *addr = &addrs[i];
- if (addr->prefix > 64)
+ if (addr->prefix > 64 || addr->has_class)
continue; // Address not suitable
if (addr->preferred > MaxPreferredTime)