summaryrefslogtreecommitdiffstats
path: root/arp.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2008-11-19 15:48:18 +0000
committerRoy Marples <roy@marples.name>2008-11-19 15:48:18 +0000
commit299662da4f99217bf4dfdd62147c273c0a5e3f1b (patch)
treec9d6c3ec127c587bcd3e14a5d23bd3c0b10b728c /arp.c
parent0b10229bc6ae7eadcc84a3c5e5710aac11c4f163 (diff)
downloaddhcpcd-299662da4f99217bf4dfdd62147c273c0a5e3f1b.tar.xz
We are now a BOOTP client also :)
Diffstat (limited to 'arp.c')
-rw-r--r--arp.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/arp.c b/arp.c
index ba227075..412bf9c0 100644
--- a/arp.c
+++ b/arp.c
@@ -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);