
|
Issue found in avahi-autoipd when running in default mode of operation.
Hi,
I've found a bug when using avahi-autoipd in its default
mode
of operation (as described on the AvahiAutoipd page
in the Wiki):
If a routeable address is configured, avahi-autoipd
goes to sleep without
configuring the interface, but it is still listening
for ARP packets.
If an ARP packet is seen from the LL address it chose
for itself
at start-up, it acts on this ARP as if there was a
conflict and configures
the network interface with an LL address.
The following patch to main.c fixes this problem:
{{{
1267c1267,1280
<
daemon_log(LOG_INFO, "Trying address %s",
inet_ntop(AF_INET, &addr, buf, sizeof(buf)));
---
>
if (state == STATE_SLEEPING)
>
daemon_log(LOG_INFO, "Selected
new address %s", inet_ntop(AF_INET, &addr, buf, sizeof(buf)));
>
else {
>
daemon_log(LOG_INFO, "Trying address
%s", inet_ntop(AF_INET, &addr, buf, sizeof(buf)));
>
>
n_conflict++;
>
>
set_state(STATE_WAITING_PROBE, 1, addr);
>
>
if (n_conflict >= MAX_CONFLICTS)
{
>
daemon_log(LOG_WARNING,
"Got too many conflicts, rate limiting new probes.");
>
elapse_time(&next_wakeup,
RATE_LIMIT_INTERVAL*1000, PROBE_WAIT*1000);
>
} else
>
elapse_time(&next_wakeup,
0, PROBE_WAIT*1000);
1269,1279c1282,1283
<
n_conflict++;
<
<
set_state(STATE_WAITING_PROBE, 1, addr);
<
<
if (n_conflict >= MAX_CONFLICTS) {
<
daemon_log(LOG_WARNING, "Got too
many conflicts, rate limiting new probes.");
<
elapse_time(&next_wakeup, RATE_LIMIT_INTERVAL*1000,
PROBE_WAIT*1000);
<
} else
<
elapse_time(&next_wakeup, 0, PROBE_WAIT*1000);
<
<
next_wakeup_valid = 1;
---
>
next_wakeup_valid = 1;
>
}
}}}
Essentially, I'm just adding a state check right after
a new address is selected. If sleeping, the new address is just logged
and autoipd goes back to sleep, otherwise the conflict handling code that
was there before is executed.
Thanks.
--JT
_______________________________________________
avahi mailing list
avahi@...
http://lists.freedesktop.org/mailman/listinfo/avahi
|