#endif
addrs = 0;
- flags = 0;
+ flags = (int)rt->flags;
if (cmd == RTM_ADD || cmd == RTM_CHANGE) {
addrs |= RTA_GATEWAY | RTA_IFP;
{
if (ifam->ifam_type != RTM_DELADDR || errno != EEXIST)
logger(ctx, LOG_ERR,
- "%s: if_addrflags1: %s: %m",
+ "%s: if_addrflags: %s: %m",
ifp->name, inet_ntoa(addr));
addrflags = 0;
}
{
if (ifam->ifam_type != RTM_DELADDR || errno != EEXIST)
logger(ctx, LOG_ERR,
- "%s: if_addrflags1: %s: %m",
- ifp->name, inet_ntoa(addr));
+ "%s: if_addrflags: %m",
+ ifp->name);
addrflags = 0;
}
#endif
{
struct ipv6_addr *ia;
int flags;
+ const char *alias;
ia = arg;
- if ((flags = if_addrflags6(ia)) == -1) {
+#ifdef ALIAS_ADDR
+ alias = ia->alias;
+#else
+ alias = NULL;
+#endif
+ if ((flags = if_addrflags6(ia->iface, &ia->addr, alias)) == -1) {
logger(ia->iface->ctx, LOG_ERR,
"%s: if_addrflags6: %m", ia->iface->name);
return;
}
- ia->addr_flags = flags;
if (!(ia->addr_flags & IN6_IFF_TENTATIVE)) {
/* Simulate the kernel announcing the new address. */
ipv6_handleifa(ia->iface->ctx, RTM_NEWADDR,
ia->iface->ctx->ifaces, ia->iface->name,
- &ia->addr, ia->prefix_len);
+ &ia->addr, ia->prefix_len, flags);
} else {
/* Still tentative? Check again in a bit. */
struct timespec tv;
/* We need to update the address flags. */
if ((state = IPV6_STATE(ifp)) != NULL) {
struct ipv6_addr *ia;
+ const char *alias;
int flags;
TAILQ_FOREACH(ia, &state->addrs, next) {
- if ((flags = if_addrflags6(ia)) != -1)
+#ifdef ALIAS_ADDR
+ alias = ia->alias;
+#else
+ alias = NULL;
+#endif
+ flags = if_addrflags6(ia->iface, &ia->addr, alias);
+ if (flags != -1)
ia->addr_flags = flags;
}
}