Issue found in avahi-autoipd when running in default mode of operation.

View: New views
1 Messages — Rating Filter:   Alert me  

Issue found in avahi-autoipd when running in default mode of operation.

by Jen Chitty :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


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