summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2006-08-30 21:20:53 +0000
committerLennart Poettering <lennart@poettering.net>2006-08-30 21:20:53 +0000
commitfee9053f6a8a22ff53d59fc7865230ad41fdf760 (patch)
tree7861b97a27d693f07005f8d8fd9b88ccd7cf945b
parent834cc833bb7bb608f778c32a1f3b5bee2f09f7c0 (diff)
a few fixes in netlink handling
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@1289 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
-rw-r--r--avahi-autoipd/iface-linux.c10
-rw-r--r--avahi-autoipd/main.c12
2 files changed, 9 insertions, 13 deletions
diff --git a/avahi-autoipd/iface-linux.c b/avahi-autoipd/iface-linux.c
index c2f24df..5e2996a 100644
--- a/avahi-autoipd/iface-linux.c
+++ b/avahi-autoipd/iface-linux.c
@@ -121,7 +121,6 @@ static int process_nlmsg(struct nlmsghdr *n) {
int l;
uint32_t address = 0;
Address *i;
- char buf[32];
ifa = NLMSG_DATA(n);
@@ -144,8 +143,6 @@ static int process_nlmsg(struct nlmsghdr *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;
@@ -189,7 +186,7 @@ static int process_response(int wait_for_done, unsigned seq) {
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) {
@@ -201,9 +198,6 @@ static int process_response(int wait_for_done, unsigned seq) {
}
}
- if ((pid_t) p->nlmsg_pid != getpid())
- continue;
-
if (process_nlmsg(p) < 0)
return -1;
}
@@ -272,7 +266,7 @@ int iface_process(Event *event) {
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;
diff --git a/avahi-autoipd/main.c b/avahi-autoipd/main.c
index 200cab0..feb88ee 100644
--- a/avahi-autoipd/main.c
+++ b/avahi-autoipd/main.c
@@ -230,14 +230,14 @@ static void set_state(State st, int reset_counter) {
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;
}
@@ -464,6 +464,8 @@ static int loop(int iface, uint32_t addr) {
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;
@@ -514,10 +516,11 @@ static int loop(int iface, uint32_t addr) {
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) {
@@ -655,7 +658,6 @@ fail:
/* TODO:
-- netlink
- man page
- user script
- chroot/drop privs/caps