int l;
uint32_t address = 0;
Address *i;
- char buf[32];
ifa = NLMSG_DATA(n);
a = RTA_NEXT(a, l);
}
- daemon_log(LOG_INFO, "%s", inet_ntop(AF_INET, &address, buf, sizeof(buf)));
-
if (!address || is_ll_address(address))
return 0;
return -1;
}
- if (p->nlmsg_type == NLMSG_DONE && wait_for_done && p->nlmsg_seq == seq)
+ if (p->nlmsg_type == NLMSG_DONE && wait_for_done && p->nlmsg_seq == seq && (pid_t) p->nlmsg_pid == getpid())
return 0;
if (p->nlmsg_type == NLMSG_ERROR) {
}
}
- if ((pid_t) p->nlmsg_pid != getpid())
- continue;
-
if (process_nlmsg(p) < 0)
return -1;
}
if (process_response(0, 0) < 0)
return -1;
- if (b && !!addresses)
+ if (b && !addresses)
*event = EVENT_ROUTABLE_ADDR_UNCONFIGURED;
else if (!b && addresses)
*event = EVENT_ROUTABLE_ADDR_CONFIGURED;
static int add_address(int iface, uint32_t addr) {
char buf[64];
- daemon_log(LOG_INFO, "Selected address %s", inet_ntop(AF_INET, &addr, buf, sizeof(buf)));
+ daemon_log(LOG_INFO, "Configuring address %s", inet_ntop(AF_INET, &addr, buf, sizeof(buf)));
return 0;
}
static int remove_address(int iface, uint32_t addr) {
char buf[64];
- daemon_log(LOG_INFO, "Removing address %s", inet_ntop(AF_INET, &addr, buf, sizeof(buf)));
+ daemon_log(LOG_INFO, "Unconfiguring address %s", inet_ntop(AF_INET, &addr, buf, sizeof(buf)));
return 0;
}
daemon_log(LOG_INFO, "Successfully claimed IP address %s", inet_ntop(AF_INET, &addr, buf, sizeof(buf)));
set_state(STATE_RUNNING, 0);
+
+ next_wakeup_valid = 0;
} else if (event == EVENT_PACKET) {
ArpPacketInfo info;
daemon_log(LOG_INFO, "A routable address has been configured.");
- set_state(STATE_SLEEPING, 1);
-
if (state == STATE_RUNNING || state == STATE_ANNOUNCING)
remove_address(iface, addr);
+
+ set_state(STATE_SLEEPING, 1);
+ next_wakeup_valid = 0;
} else if (event == EVENT_ROUTABLE_ADDR_UNCONFIGURED && state == STATE_SLEEPING) {
/* TODO:
-- netlink
- man page
- user script
- chroot/drop privs/caps