diff options
| author | Roy Marples <roy@marples.name> | 2008-11-19 15:48:18 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2008-11-19 15:48:18 +0000 |
| commit | 299662da4f99217bf4dfdd62147c273c0a5e3f1b (patch) | |
| tree | c9d6c3ec127c587bcd3e14a5d23bd3c0b10b728c /arp.c | |
| parent | 0b10229bc6ae7eadcc84a3c5e5710aac11c4f163 (diff) | |
| download | dhcpcd-299662da4f99217bf4dfdd62147c273c0a5e3f1b.tar.xz | |
We are now a BOOTP client also :)
Diffstat (limited to 'arp.c')
| -rw-r--r-- | arp.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -217,9 +217,12 @@ send_arp_probe(void *arg) struct in_addr addr; struct timeval tv; - if (state->offer) - addr.s_addr = state->offer->yiaddr; - else + if (state->offer) { + if (state->offer->yiaddr) + addr.s_addr = state->offer->yiaddr; + else + addr.s_addr = state->offer->ciaddr; + } else addr.s_addr = iface->addr.s_addr; if (iface->arp_fd == -1) { @@ -239,7 +242,10 @@ send_arp_probe(void *arg) } else { tv.tv_sec = ANNOUNCE_WAIT; tv.tv_usec = 0; - if (IN_LINKLOCAL(htonl(addr.s_addr))) + /* We will bind IPv4LL and BOOTP addresses */ + if ((state->lease.server.s_addr == 0 && + state->lease.frominfo == 0) || + IN_LINKLOCAL(htonl(addr.s_addr))) add_timeout_tv(&tv, bind_interface, iface); else add_timeout_tv(&tv, send_request, iface); |
