Home | History | Annotate | Download | only in dhcpcd
      1 /*
      2  * dhcpcd - DHCP client daemon
      3  * Copyright 2006-2008 Roy Marples <roy (at) marples.name>
      4  * All rights reserved
      5 
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions
      8  * are met:
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above copyright
     12  *    notice, this list of conditions and the following disclaimer in the
     13  *    documentation and/or other materials provided with the distribution.
     14  *
     15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     25  * SUCH DAMAGE.
     26  */
     27 
     28 #include <sys/stat.h>
     29 #include <sys/time.h>
     30 #include <sys/types.h>
     31 #include <arpa/inet.h>
     32 
     33 #ifdef __linux__
     34 # include <netinet/ether.h>
     35 #endif
     36 
     37 #include <errno.h>
     38 #include <poll.h>
     39 #include <signal.h>
     40 #include <stdlib.h>
     41 #include <stdio.h>
     42 #include <string.h>
     43 #include <time.h>
     44 #include <unistd.h>
     45 
     46 #include "config.h"
     47 #include "common.h"
     48 #include "client.h"
     49 #include "configure.h"
     50 #include "dhcp.h"
     51 #include "dhcpcd.h"
     52 #include "net.h"
     53 #include "logger.h"
     54 #include "signals.h"
     55 
     56 #define IPV4LL_LEASETIME 	2
     57 
     58 /* Some platforms don't define INFTIM */
     59 #ifndef INFTIM
     60 # define INFTIM                 -1
     61 #endif
     62 
     63 #define STATE_INIT              0
     64 #define STATE_DISCOVERING	1
     65 #define STATE_REQUESTING        2
     66 #define STATE_BOUND             3
     67 #define STATE_RENEWING          4
     68 #define STATE_REBINDING         5
     69 #define STATE_REBOOT            6
     70 #define STATE_RENEW_REQUESTED   7
     71 #define STATE_INIT_IPV4LL	8
     72 #define STATE_PROBING		9
     73 #define STATE_ANNOUNCING	10
     74 
     75 /* Constants taken from RFC 2131. */
     76 #define T1			0.5
     77 #define T2			0.875
     78 #define DHCP_BASE		4
     79 #define DHCP_MAX		64
     80 #define DHCP_RAND_MIN		-1
     81 #define DHCP_RAND_MAX		1
     82 #define DHCP_ARP_FAIL		10
     83 
     84 /* We should define a maximum for the NAK exponential backoff */
     85 #define NAKOFF_MAX              60
     86 
     87 #define SOCKET_CLOSED           0
     88 #define SOCKET_OPEN             1
     89 
     90 /* These are for IPV4LL, RFC 3927. */
     91 #define PROBE_WAIT		 1
     92 #define PROBE_NUM		 3
     93 #define PROBE_MIN		 1
     94 #define PROBE_MAX		 2
     95 #define ANNOUNCE_WAIT		 2
     96 /* BSD systems always do a grauitous ARP when assigning an address,
     97  * so we can do one less announce. */
     98 #ifdef BSD
     99 # define ANNOUNCE_NUM		 1
    100 #else
    101 # define ANNOUNCE_NUM		 2
    102 #endif
    103 #define ANNOUNCE_INTERVAL	 2
    104 #define MAX_CONFLICTS		10
    105 #define RATE_LIMIT_INTERVAL	60
    106 #define DEFEND_INTERVAL		10
    107 
    108 
    109 /* number of usecs in a second. */
    110 #define USECS_SECOND		1000000
    111 /* As we use timevals, we should use the usec part for
    112  * greater randomisation. */
    113 #define DHCP_RAND_MIN_U		DHCP_RAND_MIN * USECS_SECOND
    114 #define DHCP_RAND_MAX_U		DHCP_RAND_MAX * USECS_SECOND
    115 #define PROBE_MIN_U		PROBE_MIN * USECS_SECOND
    116 #define PROBE_MAX_U		PROBE_MAX * USECS_SECOND
    117 
    118 #define timernorm(tvp)						\
    119 	do {							\
    120 		while ((tvp)->tv_usec >= 1000000) {		\
    121 			(tvp)->tv_sec++;			\
    122 			(tvp)->tv_usec -= 1000000;		\
    123 		}						\
    124 	} while (0 /* CONSTCOND */);
    125 
    126 #define timerneg(tvp)	((tvp)->tv_sec < 0 || (tvp)->tv_usec < 0)
    127 
    128 struct if_state {
    129 	int options;
    130 	struct interface *interface;
    131 	struct dhcp_message *offer;
    132 	struct dhcp_message *new;
    133 	struct dhcp_message *old;
    134 	struct dhcp_lease lease;
    135 	struct timeval timeout;
    136 	struct timeval stop;
    137 	struct timeval exit;
    138 	int state;
    139 	int messages;
    140 	time_t nakoff;
    141 	uint32_t xid;
    142 	int socket;
    143 	int *pid_fd;
    144 	int signal_fd;
    145 	int carrier;
    146 	int probes;
    147 	int claims;
    148 	int conflicts;
    149 	time_t defend;
    150 	struct in_addr fail;
    151 };
    152 
    153 #define LINK_UP 	1
    154 #define LINK_UNKNOWN	0
    155 #define LINK_DOWN 	-1
    156 
    157 struct dhcp_op {
    158         uint8_t value;
    159         const char *name;
    160 };
    161 
    162 static const struct dhcp_op const dhcp_ops[] = {
    163 	{ DHCP_DISCOVER, "DHCP_DISCOVER" },
    164 	{ DHCP_OFFER,    "DHCP_OFFER" },
    165 	{ DHCP_REQUEST,  "DHCP_REQUEST" },
    166 	{ DHCP_DECLINE,  "DHCP_DECLINE" },
    167 	{ DHCP_ACK,      "DHCP_ACK" },
    168 	{ DHCP_NAK,      "DHCP_NAK" },
    169 	{ DHCP_RELEASE,  "DHCP_RELEASE" },
    170 	{ DHCP_INFORM,   "DHCP_INFORM" },
    171 	{ 0, NULL }
    172 };
    173 
    174 static const char *
    175 get_dhcp_op(uint8_t type)
    176 {
    177 	const struct dhcp_op *d;
    178 
    179 	for (d = dhcp_ops; d->name; d++)
    180 		if (d->value == type)
    181 			return d->name;
    182 	return NULL;
    183 }
    184 
    185 #ifdef THERE_IS_NO_FORK
    186 #define daemonise(a,b) 0
    187 #else
    188 static int
    189 daemonise(struct if_state *state, const struct options *options)
    190 {
    191 	pid_t pid;
    192 	sigset_t full;
    193 	sigset_t old;
    194 	char buf = '\0';
    195 	int sidpipe[2];
    196 
    197 	if (state->options & DHCPCD_DAEMONISED ||
    198 	    !(options->options & DHCPCD_DAEMONISE))
    199 		return 0;
    200 
    201 	sigfillset(&full);
    202 	sigprocmask(SIG_SETMASK, &full, &old);
    203 
    204 	/* Setup a signal pipe so parent knows when to exit. */
    205 	if (pipe(sidpipe) == -1) {
    206 		logger(LOG_ERR,"pipe: %s", strerror(errno));
    207 		return -1;
    208 	}
    209 
    210 	logger(LOG_DEBUG, "forking to background");
    211 	switch (pid = fork()) {
    212 		case -1:
    213 			logger(LOG_ERR, "fork: %s", strerror(errno));
    214 			exit(EXIT_FAILURE);
    215 			/* NOTREACHED */
    216 		case 0:
    217 			setsid();
    218 			/* Notify parent it's safe to exit as we've detached. */
    219 			close(sidpipe[0]);
    220 			if (write(sidpipe[1], &buf, 1) != 1)
    221 				logger(LOG_ERR, "write: %s", strerror(errno));
    222 			close(sidpipe[1]);
    223 			close_fds();
    224 			break;
    225 		default:
    226 			/* Reset signals as we're the parent about to exit. */
    227 			signal_reset();
    228 			/* Wait for child to detach */
    229 			close(sidpipe[1]);
    230 			if (read(sidpipe[0], &buf, 1) != 1)
    231 				logger(LOG_ERR, "read: %s", strerror(errno));
    232 			close(sidpipe[0]);
    233 			break;
    234 	}
    235 
    236 	/* Done with the fd now */
    237 	if (pid != 0) {
    238 		writepid(*state->pid_fd, pid);
    239 		close(*state->pid_fd);
    240 		*state->pid_fd = -1;
    241 	}
    242 
    243 	sigprocmask(SIG_SETMASK, &old, NULL);
    244 	if (pid == 0) {
    245 		state->options |= DHCPCD_DAEMONISED;
    246 		timerclear(&state->exit);
    247 		return 0;
    248 	}
    249 	state->options |= DHCPCD_PERSISTENT | DHCPCD_FORKED;
    250 	return -1;
    251 }
    252 #endif
    253 
    254 #define THIRTY_YEARS_IN_SECONDS    946707779
    255 static size_t
    256 get_duid(unsigned char *duid, const struct interface *iface)
    257 {
    258 	FILE *f;
    259 	uint16_t type = 0;
    260 	uint16_t hw = 0;
    261 	uint32_t ul;
    262 	time_t t;
    263 	int x = 0;
    264 	unsigned char *p = duid;
    265 	size_t len = 0, l = 0;
    266 	char *buffer = NULL, *line, *option;
    267 
    268 	/* If we already have a DUID then use it as it's never supposed
    269 	 * to change once we have one even if the interfaces do */
    270 	if ((f = fopen(DUID, "r"))) {
    271 		while ((get_line(&buffer, &len, f))) {
    272 			line = buffer;
    273 			while ((option = strsep(&line, " \t")))
    274 				if (*option != '\0')
    275 					break;
    276 			if (!option || *option == '\0' || *option == '#')
    277 				continue;
    278 			l = hwaddr_aton(NULL, option);
    279 			if (l && l <= DUID_LEN) {
    280 				hwaddr_aton(duid, option);
    281 				break;
    282 			}
    283 			l = 0;
    284 		}
    285 		fclose(f);
    286 		free(buffer);
    287 		if (l)
    288 			return l;
    289 	} else {
    290 		if (errno != ENOENT)
    291 			return 0;
    292 	}
    293 
    294 	/* No file? OK, lets make one based on our interface */
    295 	if (!(f = fopen(DUID, "w")))
    296 		return 0;
    297 	type = htons(1); /* DUI-D-LLT */
    298 	memcpy(p, &type, 2);
    299 	p += 2;
    300 	hw = htons(iface->family);
    301 	memcpy(p, &hw, 2);
    302 	p += 2;
    303 	/* time returns seconds from jan 1 1970, but DUID-LLT is
    304 	 * seconds from jan 1 2000 modulo 2^32 */
    305 	t = time(NULL) - THIRTY_YEARS_IN_SECONDS;
    306 	ul = htonl(t & 0xffffffff);
    307 	memcpy(p, &ul, 4);
    308 	p += 4;
    309 	/* Finally, add the MAC address of the interface */
    310 	memcpy(p, iface->hwaddr, iface->hwlen);
    311 	p += iface->hwlen;
    312 	len = p - duid;
    313 	x = fprintf(f, "%s\n", hwaddr_ntoa(duid, len));
    314 	fclose(f);
    315 	/* Failed to write the duid? scrub it, we cannot use it */
    316 	if (x < 1) {
    317 		len = 0;
    318 		unlink(DUID);
    319 	}
    320 	return len;
    321 }
    322 
    323 static struct dhcp_message*
    324 ipv4ll_get_dhcp(uint32_t old_addr)
    325 {
    326 	uint32_t u32;
    327 	struct dhcp_message *dhcp;
    328 	uint8_t *p;
    329 
    330 	dhcp = xzalloc(sizeof(*dhcp));
    331 	/* Put some LL options in */
    332 	p = dhcp->options;
    333 	*p++ = DHO_SUBNETMASK;
    334 	*p++ = sizeof(u32);
    335 	u32 = htonl(LINKLOCAL_MASK);
    336 	memcpy(p, &u32, sizeof(u32));
    337 	p += sizeof(u32);
    338 	*p++ = DHO_BROADCAST;
    339 	*p++ = sizeof(u32);
    340 	u32 = htonl(LINKLOCAL_BRDC);
    341 	memcpy(p, &u32, sizeof(u32));
    342 	p += sizeof(u32);
    343 	*p++ = DHO_END;
    344 
    345 	for (;;) {
    346 		dhcp->yiaddr = htonl(LINKLOCAL_ADDR |
    347 				     (((uint32_t)abs((int)arc4random())
    348 				       % 0xFD00) + 0x0100));
    349 		if (dhcp->yiaddr != old_addr &&
    350 		    IN_LINKLOCAL(ntohl(dhcp->yiaddr)))
    351 			break;
    352 	}
    353 	return dhcp;
    354 }
    355 
    356 static double
    357 timeval_to_double(struct timeval *tv)
    358 {
    359 	return tv->tv_sec * 1.0 + tv->tv_usec * 1.0e-6;
    360 }
    361 
    362 static void
    363 get_lease(struct dhcp_lease *lease, const struct dhcp_message *dhcp)
    364 {
    365 	time_t t;
    366 
    367 	if (lease->frominfo)
    368 		return;
    369 	lease->addr.s_addr = dhcp->yiaddr;
    370 
    371 	if (get_option_addr(&lease->net, dhcp, DHO_SUBNETMASK) == -1)
    372 		lease->net.s_addr = get_netmask(dhcp->yiaddr);
    373 	if (get_option_uint32(&lease->leasetime, dhcp, DHO_LEASETIME) == 0) {
    374 		/* Ensure that we can use the lease */
    375 		t = 0;
    376 		if (t + (time_t)lease->leasetime < t) {
    377 			logger(LOG_WARNING, "lease of %u would overflow, "
    378 			       "treating as infinite", lease->leasetime);
    379 			lease->leasetime = ~0U; /* Infinite lease */
    380 		}
    381 	} else
    382 		lease->leasetime = DEFAULT_LEASETIME;
    383 	if (get_option_uint32(&lease->renewaltime, dhcp, DHO_RENEWALTIME) != 0)
    384 		lease->renewaltime = 0;
    385 	if (get_option_uint32(&lease->rebindtime, dhcp, DHO_REBINDTIME) != 0)
    386 		lease->rebindtime = 0;
    387 }
    388 
    389 static int
    390 get_old_lease(struct if_state *state)
    391 {
    392 	struct interface *iface = state->interface;
    393 	struct dhcp_lease *lease = &state->lease;
    394 	struct dhcp_message *dhcp = NULL;
    395 	struct timeval tv;
    396 	unsigned int offset = 0;
    397 	struct stat sb;
    398 
    399 	if (stat(iface->leasefile, &sb) == -1) {
    400 		if (errno != ENOENT)
    401 			logger(LOG_ERR, "stat: %s", strerror(errno));
    402 		goto eexit;
    403 	}
    404 	if (!IN_LINKLOCAL(ntohl(iface->addr.s_addr)))
    405 		logger(LOG_INFO, "trying to use old lease in `%s'",
    406 		       iface->leasefile);
    407 	if ((dhcp = read_lease(iface)) == NULL) {
    408 		logger(LOG_INFO, "read_lease: %s", strerror(errno));
    409 		goto eexit;
    410 	}
    411 	lease->frominfo = 0;
    412 	get_lease(&state->lease, dhcp);
    413 	lease->frominfo = 1;
    414 	lease->leasedfrom = sb.st_mtime;
    415 
    416 	/* Vitaly important we remove the server information here */
    417 	state->lease.server.s_addr = 0;
    418 	dhcp->servername[0] = '\0';
    419 
    420 	if (!IN_LINKLOCAL(ntohl(dhcp->yiaddr))) {
    421 		if (!(state->options & DHCPCD_LASTLEASE))
    422 			goto eexit;
    423 
    424 		/* Ensure that we can still use the lease */
    425 		if (gettimeofday(&tv, NULL) == -1) {
    426 			logger(LOG_ERR, "gettimeofday: %s", strerror(errno));
    427 			goto eexit;
    428 		}
    429 
    430 		offset = tv.tv_sec - lease->leasedfrom;
    431 		if (lease->leasedfrom &&
    432 		    tv.tv_sec - lease->leasedfrom > (time_t)lease->leasetime)
    433 		{
    434 			logger(LOG_ERR, "lease expired %u seconds ago",
    435 			       offset + lease->leasetime);
    436 			/* Persistent interfaces should still try and use the
    437 			 * lease if we can't contact a DHCP server.
    438 			 * We just set the timeout to 1 second. */
    439 			if (state->options & DHCPCD_PERSISTENT)
    440 				offset = lease->renewaltime - 1;
    441 			else
    442 				goto eexit;
    443 		}
    444 		lease->leasetime -= offset;
    445 		lease->rebindtime -= offset;
    446 		lease->renewaltime -= offset;
    447 	}
    448 
    449 	free(state->old);
    450 	state->old = state->new;
    451 	state->new = NULL;
    452 	state->offer = dhcp;
    453 	return 0;
    454 
    455 eexit:
    456 	lease->addr.s_addr = 0;
    457 	free(dhcp);
    458 	return -1;
    459 }
    460 
    461 static int
    462 client_setup(struct if_state *state, const struct options *options)
    463 {
    464 	struct interface *iface = state->interface;
    465 	struct dhcp_lease *lease = &state->lease;
    466 	struct in_addr addr;
    467 	struct timeval tv;
    468 	size_t len = 0;
    469 	unsigned char *duid = NULL;
    470 	uint32_t ul;
    471 
    472 	state->state = STATE_INIT;
    473 	state->nakoff = 1;
    474 	state->options = options->options;
    475 	timerclear(&tv);
    476 
    477 	if (options->request_address.s_addr == 0 &&
    478 	    (options->options & DHCPCD_INFORM ||
    479 	     options->options & DHCPCD_REQUEST ||
    480 	     (options->options & DHCPCD_DAEMONISED &&
    481 	      !(options->options & DHCPCD_BACKGROUND))))
    482 	{
    483 		if (get_old_lease(state) != 0)
    484 			return -1;
    485 		timerclear(&state->timeout);
    486 
    487 		if (!(options->options & DHCPCD_DAEMONISED) &&
    488 		    IN_LINKLOCAL(ntohl(lease->addr.s_addr)))
    489 		{
    490 			logger(LOG_ERR, "cannot request a link local address");
    491 			return -1;
    492 		}
    493 	} else {
    494 		lease->addr.s_addr = options->request_address.s_addr;
    495 		lease->net.s_addr = options->request_netmask.s_addr;
    496 	}
    497 
    498 	/* If INFORMing, ensure the interface has the address */
    499 	if (state->options & DHCPCD_INFORM &&
    500 	    has_address(iface->name, &lease->addr, &lease->net) < 1)
    501 	{
    502 		addr.s_addr = lease->addr.s_addr | ~lease->net.s_addr;
    503 		logger(LOG_DEBUG, "adding IP address %s/%d",
    504 		       inet_ntoa(lease->addr), inet_ntocidr(lease->net));
    505 		if (add_address(iface->name, &lease->addr,
    506 				&lease->net, &addr) == -1)
    507 		{
    508 			logger(LOG_ERR, "add_address: %s", strerror(errno));
    509 			return -1;
    510 		}
    511 		iface->addr.s_addr = lease->addr.s_addr;
    512 		iface->net.s_addr = lease->net.s_addr;
    513 	}
    514 
    515        /* If we haven't specified a ClientID and our hardware address
    516 	* length is greater than DHCP_CHADDR_LEN then we enforce a ClientID
    517 	* of the hardware address family and the hardware address. */
    518 	if (!(state->options & DHCPCD_CLIENTID) && iface->hwlen > DHCP_CHADDR_LEN)
    519 		state->options |= DHCPCD_CLIENTID;
    520 
    521 	if (*options->clientid) {
    522 		iface->clientid = xmalloc(options->clientid[0] + 1);
    523 		memcpy(iface->clientid,
    524 		       options->clientid, options->clientid[0] + 1);
    525 	} else if (state->options & DHCPCD_CLIENTID) {
    526 		if (state->options & DHCPCD_DUID) {
    527 			duid = xmalloc(DUID_LEN);
    528 			if ((len = get_duid(duid, iface)) == 0)
    529 				logger(LOG_ERR, "get_duid: %s",
    530 				       strerror(errno));
    531 		}
    532 
    533 		if (len > 0) {
    534 			logger(LOG_DEBUG, "DUID = %s",
    535 			       hwaddr_ntoa(duid, len));
    536 
    537 			iface->clientid = xmalloc(len + 6);
    538 			iface->clientid[0] = len + 5;
    539 			iface->clientid[1] = 255; /* RFC 4361 */
    540 
    541 			/* IAID is 4 bytes, so if the iface name is 4 bytes
    542 			 * or less, use it */
    543 			ul = strlen(iface->name);
    544 			if (ul < 5) {
    545 				memcpy(iface->clientid + 2, iface->name, ul);
    546 				if (ul < 4)
    547 					memset(iface->clientid + 2 + ul,
    548 					       0, 4 - ul);
    549 			} else {
    550 				/* Name isn't 4 bytes, so use the index */
    551 				ul = htonl(if_nametoindex(iface->name));
    552 				memcpy(iface->clientid + 2, &ul, 4);
    553 			}
    554 
    555 			memcpy(iface->clientid + 6, duid, len);
    556 			free(duid);
    557 		}
    558 		if (len == 0) {
    559 			len = iface->hwlen + 1;
    560 			iface->clientid = xmalloc(len + 1);
    561 			iface->clientid[0] = len;
    562 			iface->clientid[1] = iface->family;
    563 			memcpy(iface->clientid + 2, iface->hwaddr, iface->hwlen);
    564 		}
    565 	}
    566 
    567 	if (state->options & DHCPCD_LINK) {
    568 		open_link_socket(iface);
    569 		switch (carrier_status(iface->name)) {
    570 		case 0:
    571 			state->carrier = LINK_DOWN;
    572 			break;
    573 		case 1:
    574 			state->carrier = LINK_UP;
    575 			break;
    576 		default:
    577 			state->carrier = LINK_UNKNOWN;
    578 		}
    579 	}
    580 
    581 	if (options->timeout > 0 &&
    582 	    !(state->options & DHCPCD_DAEMONISED))
    583 	{
    584 		if (state->options & DHCPCD_IPV4LL) {
    585 			state->stop.tv_sec = options->timeout;
    586 			if (!(state->options & DHCPCD_BACKGROUND))
    587 				state->exit.tv_sec = state->stop.tv_sec + 10;
    588 		} else if (!(state->options & DHCPCD_BACKGROUND))
    589 			state->exit.tv_sec = options->timeout;
    590 	}
    591 	return 0;
    592 }
    593 
    594 static int
    595 do_socket(struct if_state *state, int mode)
    596 {
    597 	if (state->interface->raw_fd != -1) {
    598 		close(state->interface->raw_fd);
    599 		state->interface->raw_fd = -1;
    600 	}
    601 	if (mode == SOCKET_CLOSED) {
    602 		if (state->interface->udp_fd != -1) {
    603 			close(state->interface->udp_fd);
    604 			state->interface->udp_fd = -1;
    605 		}
    606 		if (state->interface->arp_fd != -1) {
    607 			close(state->interface->arp_fd);
    608 			state->interface->arp_fd = -1;
    609 		}
    610 	}
    611 
    612 	/* Always have the UDP socket open to avoid the kernel sending
    613 	 * ICMP unreachable messages. */
    614 	/* For systems without SO_BINDTODEVICE, (ie BSD ones) we may get an
    615 	 * error or EADDRINUSE when binding to INADDR_ANY as another dhcpcd
    616 	 * instance could be running.
    617 	 * Oddly enough, we don't care about this as the socket is there
    618 	 * just to please the kernel - we don't care for reading from it. */
    619 	if (mode == SOCKET_OPEN &&
    620 	    state->interface->udp_fd == -1 &&
    621 	    open_udp_socket(state->interface) == -1 &&
    622 	    (errno != EADDRINUSE || state->interface->addr.s_addr != 0))
    623 		logger(LOG_ERR, "open_udp_socket: %s", strerror(errno));
    624 
    625 	if (mode == SOCKET_OPEN)
    626 		if (open_socket(state->interface, ETHERTYPE_IP) == -1) {
    627 			logger(LOG_ERR, "open_socket: %s", strerror(errno));
    628 			return -1;
    629 		}
    630 	state->socket = mode;
    631 	return 0;
    632 }
    633 
    634 static ssize_t
    635 send_message(struct if_state *state, int type, const struct options *options)
    636 {
    637 	struct dhcp_message *dhcp;
    638 	uint8_t *udp;
    639 	ssize_t len, r;
    640 	struct in_addr from, to;
    641 	in_addr_t a = 0;
    642 
    643 	if (state->carrier == LINK_DOWN)
    644 		return 0;
    645 	if (type == DHCP_RELEASE)
    646 		logger(LOG_DEBUG, "sending %s with xid 0x%x",
    647 		       get_dhcp_op(type), state->xid);
    648 	else
    649 		logger(LOG_DEBUG,
    650 		       "sending %s with xid 0x%x, next in %0.2f seconds",
    651 		       get_dhcp_op(type), state->xid,
    652 		       timeval_to_double(&state->timeout));
    653 	state->messages++;
    654 	if (state->messages < 0)
    655 		state->messages = INT_MAX;
    656 	/* If we couldn't open a UDP port for our IP address
    657 	 * then we cannot renew.
    658 	 * This could happen if our IP was pulled out from underneath us. */
    659 	if (state->interface->udp_fd == -1) {
    660 		a = state->interface->addr.s_addr;
    661 		state->interface->addr.s_addr = 0;
    662 	}
    663 	len = make_message(&dhcp, state->interface, &state->lease, state->xid,
    664 			   type, options);
    665 	if (state->interface->udp_fd == -1)
    666 		state->interface->addr.s_addr = a;
    667 	from.s_addr = dhcp->ciaddr;
    668 	if (from.s_addr)
    669 		to.s_addr = state->lease.server.s_addr;
    670 	else
    671 		to.s_addr = 0;
    672 	if (to.s_addr && to.s_addr != INADDR_BROADCAST) {
    673 		r = send_packet(state->interface, to, (uint8_t *)dhcp, len);
    674 		if (r == -1)
    675 			logger(LOG_ERR, "send_packet: %s", strerror(errno));
    676 	} else {
    677 		len = make_udp_packet(&udp, (uint8_t *)dhcp, len, from, to);
    678 		r = send_raw_packet(state->interface, ETHERTYPE_IP, udp, len);
    679 		free(udp);
    680 		if (r == -1)
    681 			logger(LOG_ERR, "send_raw_packet: %s", strerror(errno));
    682 	}
    683 	free(dhcp);
    684 	/* Failed to send the packet? Return to the init state */
    685 	if (r == -1) {
    686 		state->state = STATE_INIT;
    687 		timerclear(&state->timeout);
    688 		/* We need to set a timeout so we fall through gracefully */
    689 		state->stop.tv_sec = 1;
    690 		state->stop.tv_usec = 0;
    691 		do_socket(state, SOCKET_CLOSED);
    692 	}
    693 	return r;
    694 }
    695 
    696 static void
    697 drop_config(struct if_state *state, const char *reason,
    698 	    const struct options *options)
    699 {
    700 	if (state->new || strcmp(reason, "FAIL") == 0) {
    701 		configure(state->interface, reason, NULL, state->new,
    702 			  &state->lease, options, 0);
    703 		free(state->old);
    704 		state->old = NULL;
    705 		free(state->new);
    706 		state->new = NULL;
    707 	}
    708 	state->lease.addr.s_addr = 0;
    709 }
    710 
    711 static void
    712 reduce_timers(struct if_state *state, const struct timeval *tv)
    713 {
    714 	if (timerisset(&state->exit)) {
    715 		timersub(&state->exit, tv, &state->exit);
    716 		if (!timerisset(&state->exit))
    717 			state->exit.tv_sec = -1;
    718 	}
    719 	if (timerisset(&state->stop)) {
    720 		timersub(&state->stop, tv, &state->stop);
    721 		if (!timerisset(&state->stop))
    722 			state->stop.tv_sec = -1;
    723 	}
    724 	if (timerisset(&state->timeout)) {
    725 		timersub(&state->timeout, tv, &state->timeout);
    726 		if (!timerisset(&state->timeout))
    727 			state->timeout.tv_sec = -1;
    728 	}
    729 }
    730 
    731 static struct timeval *
    732 get_lowest_timer(struct if_state *state)
    733 {
    734 	struct timeval *ref = NULL;
    735 
    736 	if (timerisset(&state->exit))
    737 		ref = &state->exit;
    738 	if (timerisset(&state->stop)) {
    739 		if (!ref || timercmp(&state->stop, ref, <))
    740 			ref = &state->stop;
    741 	}
    742 	if (timerisset(&state->timeout)) {
    743 		if (!ref || timercmp(&state->timeout, ref, <))
    744 			ref = &state->timeout;
    745 	}
    746 	return ref;
    747 }
    748 
    749 static int
    750 wait_for_fd(struct if_state *state, int *fd)
    751 {
    752 	struct pollfd fds[4]; /* signal, link, raw, arp */
    753 	struct interface *iface = state->interface;
    754 	int i, r, nfds = 0, msecs = -1;
    755 	struct timeval start, stop, diff, *ref;
    756 	static int lastinf = 0;
    757 
    758 	/* Ensure that we haven't already timed out */
    759 	ref = get_lowest_timer(state);
    760 	if (ref && timerneg(ref))
    761 		return 0;
    762 
    763 	/* We always listen to signals */
    764 	fds[nfds].fd = state->signal_fd;
    765 	fds[nfds].events = POLLIN;
    766 	nfds++;
    767 	/* And links */
    768 	if (iface->link_fd != -1) {
    769 		fds[nfds].fd = iface->link_fd;
    770 		fds[nfds].events = POLLIN;
    771 		nfds++;
    772 	}
    773 
    774 	if (state->lease.leasetime == ~0U &&
    775 	    state->state == STATE_BOUND)
    776 	{
    777 		if (!lastinf) {
    778 			logger(LOG_DEBUG, "waiting for infinity");
    779 			lastinf = 1;
    780 		}
    781 		ref = NULL;
    782 	} else if (state->carrier == LINK_DOWN && !ref) {
    783 		if (!lastinf) {
    784 			logger(LOG_DEBUG, "waiting for carrier");
    785 			lastinf = 1;
    786 		}
    787 		if (timerisset(&state->exit))
    788 			ref = &state->exit;
    789 		else
    790 			ref = NULL;
    791 	} else {
    792 		if (iface->raw_fd != -1) {
    793 			fds[nfds].fd = iface->raw_fd;
    794 			fds[nfds].events = POLLIN;
    795 			nfds++;
    796 		}
    797 		if (iface->arp_fd != -1) {
    798 			fds[nfds].fd = iface->arp_fd;
    799 			fds[nfds].events = POLLIN;
    800 			nfds++;
    801 		}
    802 	}
    803 
    804 	/* Wait and then reduce the timers.
    805 	 * If we reduce a timer to zero, set it negative to indicate timeout.
    806 	 * We cannot reliably use select as there is no guarantee we will
    807 	 * actually wait the whole time if greater than 31 days according
    808 	 * to POSIX. So we loop on poll if needed as it's limitation of
    809 	 * INT_MAX milliseconds is known. */
    810 	for (;;) {
    811 		get_monotonic(&start);
    812 		if (ref) {
    813 			lastinf = 0;
    814 			if (ref->tv_sec > INT_MAX / 1000 ||
    815 			    (ref->tv_sec == INT_MAX / 1000 &&
    816 			     (ref->tv_usec + 999) / 1000 > INT_MAX % 1000))
    817 				msecs = INT_MAX;
    818 			else
    819 				msecs = ref->tv_sec * 1000 +
    820 					(ref->tv_usec + 999) / 1000;
    821 		} else
    822 			msecs = -1;
    823 		r = poll(fds, nfds, msecs);
    824 		get_monotonic(&stop);
    825 		timersub(&stop, &start, &diff);
    826 		reduce_timers(state, &diff);
    827 		if (r == -1) {
    828 			if (errno != EINTR)
    829 				logger(LOG_ERR, "poll: %s", strerror(errno));
    830 			return -1;
    831 		}
    832 		if (r)
    833 			break;
    834 		/* We should not have an infinite timeout if we get here */
    835 		if (timerneg(ref))
    836 			return 0;
    837 	}
    838 
    839 	/* We configured our array in the order we should deal with them */
    840 	for (i = 0; i < nfds; i++) {
    841 		if (fds[i].revents & POLLERR) {
    842 			syslog(LOG_ERR, "poll: POLLERR on fd %d", fds[i].fd);
    843 			errno = EBADF;
    844 			return -1;
    845 		}
    846 		if (fds[i].revents & POLLNVAL) {
    847 			syslog(LOG_ERR, "poll: POLLNVAL on fd %d", fds[i].fd);
    848 			errno = EINVAL;
    849 			return -1;
    850 		}
    851 		if (fds[i].revents & (POLLIN | POLLHUP)) {
    852 			*fd = fds[i].fd;
    853 			return r;
    854 		}
    855 	}
    856 	/* We should never get here. */
    857 	return 0;
    858 }
    859 
    860 static int
    861 handle_signal(int sig, struct if_state *state,  const struct options *options)
    862 {
    863 	struct dhcp_lease *lease = &state->lease;
    864 
    865 	switch (sig) {
    866 	case SIGINT:
    867 		logger(LOG_INFO, "received SIGINT, stopping");
    868 		if (!(state->options & DHCPCD_PERSISTENT))
    869 			drop_config(state, "STOP", options);
    870 		return -1;
    871 	case SIGTERM:
    872 		logger(LOG_INFO, "received SIGTERM, stopping");
    873 		if (!(state->options & DHCPCD_PERSISTENT))
    874 			drop_config(state, "STOP", options);
    875 		return -1;
    876 	case SIGALRM:
    877 		logger(LOG_INFO, "received SIGALRM, renewing lease");
    878 		do_socket(state, SOCKET_CLOSED);
    879 		state->state = STATE_RENEW_REQUESTED;
    880 		timerclear(&state->timeout);
    881 		timerclear(&state->stop);
    882 		return 1;
    883 	case SIGHUP:
    884 		logger(LOG_INFO, "received SIGHUP, releasing lease");
    885 		if (lease->addr.s_addr &&
    886 		    !IN_LINKLOCAL(ntohl(lease->addr.s_addr)))
    887 		{
    888 			do_socket(state, SOCKET_OPEN);
    889 			state->xid = arc4random();
    890 			send_message(state, DHCP_RELEASE, options);
    891 			do_socket(state, SOCKET_CLOSED);
    892 		}
    893 		drop_config(state, "RELEASE", options);
    894 		return -1;
    895 	default:
    896 		logger (LOG_ERR,
    897 			"received signal %d, but don't know what to do with it",
    898 			sig);
    899 	}
    900 
    901 	return 0;
    902 }
    903 
    904 static int bind_dhcp(struct if_state *state, const struct options *options)
    905 {
    906 	struct interface *iface = state->interface;
    907 	struct dhcp_lease *lease = &state->lease;
    908 	const char *reason = NULL;
    909 	struct timeval start, stop, diff;
    910 	int retval;
    911 
    912 	free(state->old);
    913 	state->old = state->new;
    914 	state->new = state->offer;
    915 	state->offer = NULL;
    916 	state->messages = 0;
    917 	state->conflicts = 0;
    918 	state->defend = 0;
    919 	timerclear(&state->exit);
    920 	if (clock_monotonic)
    921 		get_monotonic(&lease->boundtime);
    922 
    923 	if (options->options & DHCPCD_INFORM) {
    924 		if (options->request_address.s_addr != 0)
    925 			lease->addr.s_addr = options->request_address.s_addr;
    926 		else
    927 			lease->addr.s_addr = iface->addr.s_addr;
    928 		logger(LOG_INFO, "received approval for %s",
    929 		       inet_ntoa(lease->addr));
    930 		state->state = STATE_BOUND;
    931 		state->lease.leasetime = ~0U;
    932 		timerclear(&state->stop);
    933 		reason = "INFORM";
    934 	} else if (IN_LINKLOCAL(htonl(state->new->yiaddr))) {
    935 		get_lease(lease, state->new);
    936 		logger(LOG_INFO, "using IPv4LL address %s",
    937 		       inet_ntoa(lease->addr));
    938 		state->state = STATE_INIT;
    939 		timerclear(&state->timeout);
    940 		reason = "IPV4LL";
    941 	} else {
    942 		if (gettimeofday(&start, NULL) == 0)
    943 			lease->leasedfrom = start.tv_sec;
    944 
    945 		get_lease(lease, state->new);
    946 		if (lease->frominfo)
    947 			reason = "TIMEOUT";
    948 
    949 		if (lease->leasetime == ~0U) {
    950 			lease->renewaltime = lease->rebindtime = lease->leasetime;
    951 			logger(LOG_INFO, "leased %s for infinity",
    952 			       inet_ntoa(lease->addr));
    953 			state->state = STATE_BOUND;
    954 			timerclear(&state->stop);
    955 		} else {
    956 			if (lease->rebindtime == 0)
    957 				lease->rebindtime = lease->leasetime * T2;
    958 			else if (lease->rebindtime >= lease->leasetime) {
    959 				lease->rebindtime = lease->leasetime * T2;
    960 				logger(LOG_ERR,
    961 				       "rebind time greater than lease "
    962 				       "time, forcing to %u seconds",
    963 				       lease->rebindtime);
    964 			}
    965 			if (lease->renewaltime == 0)
    966 				lease->renewaltime = lease->leasetime * T1;
    967 			else if (lease->renewaltime > lease->rebindtime) {
    968 				lease->renewaltime = lease->leasetime * T1;
    969 				logger(LOG_ERR,
    970 				       "renewal time greater than rebind time, "
    971 				       "forcing to %u seconds",
    972 				       lease->renewaltime);
    973 			}
    974 			logger(LOG_INFO,
    975 			       "leased %s for %u seconds",
    976 			       inet_ntoa(lease->addr), lease->leasetime);
    977 			state->stop.tv_sec = lease->renewaltime;
    978 			state->stop.tv_usec = 0;
    979 		}
    980 		state->state = STATE_BOUND;
    981 	}
    982 
    983 	state->xid = 0;
    984 	timerclear(&state->timeout);
    985 	if (!reason) {
    986 		if (state->old) {
    987 			if (state->old->yiaddr == state->new->yiaddr &&
    988 			    lease->server.s_addr)
    989 				reason = "RENEW";
    990 			else
    991 				reason = "REBIND";
    992 		} else
    993 			reason = "BOUND";
    994 	}
    995 	/* If we have a monotonic clock we can safely substract the
    996 	 * script execution time from our timers.
    997 	 * Otherwise we can't as the script may update the real time. */
    998 	if (clock_monotonic)
    999 		get_monotonic(&start);
   1000 	retval = configure(iface, reason, state->new, state->old,
   1001 			   &state->lease, options, 1);
   1002 	if (clock_monotonic) {
   1003 		get_monotonic(&stop);
   1004 		timersub(&stop, &start, &diff);
   1005 		reduce_timers(state, &diff);
   1006 	}
   1007 	if (retval != 0)
   1008 		return -1;
   1009 	return daemonise(state, options);
   1010 }
   1011 
   1012 static int
   1013 handle_timeout_fail(struct if_state *state, const struct options *options)
   1014 {
   1015 	struct dhcp_lease *lease = &state->lease;
   1016 	struct interface *iface = state->interface;
   1017 	int gotlease = -1, r;
   1018 	const char *reason = NULL;
   1019 
   1020 	timerclear(&state->stop);
   1021 	timerclear(&state->exit);
   1022 	if (state->state != STATE_DISCOVERING)
   1023 		state->messages = 0;
   1024 
   1025 	switch (state->state) {
   1026 	case STATE_INIT:	/* FALLTHROUGH */
   1027 	case STATE_DISCOVERING: /* FALLTHROUGH */
   1028 	case STATE_REQUESTING:
   1029 		if (IN_LINKLOCAL(ntohl(iface->addr.s_addr))) {
   1030 			if (!(state->options & DHCPCD_DAEMONISED))
   1031 				logger(LOG_ERR, "timed out");
   1032 		} else {
   1033 			if (iface->addr.s_addr != 0 &&
   1034 			    !(state->options & DHCPCD_INFORM))
   1035 				logger(LOG_ERR, "lost lease");
   1036 			else if (state->carrier != LINK_DOWN ||
   1037 				!(state->options & DHCPCD_DAEMONISED))
   1038 				logger(LOG_ERR, "timed out");
   1039 		}
   1040 		do_socket(state, SOCKET_CLOSED);
   1041 		if (state->options & DHCPCD_INFORM ||
   1042 		    state->options & DHCPCD_TEST)
   1043 			return -1;
   1044 
   1045 		if (state->carrier != LINK_DOWN &&
   1046 		    (state->options & DHCPCD_IPV4LL ||
   1047 		     state->options & DHCPCD_LASTLEASE))
   1048 			gotlease = get_old_lease(state);
   1049 
   1050 		if (state->carrier != LINK_DOWN &&
   1051 		    state->options & DHCPCD_IPV4LL &&
   1052 		    gotlease != 0)
   1053 		{
   1054 			logger(LOG_INFO, "probing for an IPV4LL address");
   1055 			free(state->offer);
   1056 			lease->frominfo = 0;
   1057 			state->offer = ipv4ll_get_dhcp(0);
   1058 			gotlease = 0;
   1059 		}
   1060 
   1061 		if (gotlease == 0 &&
   1062 		    state->offer->yiaddr != iface->addr.s_addr &&
   1063 		    state->options & DHCPCD_ARP)
   1064 		{
   1065 			state->state = STATE_PROBING;
   1066 			state->claims = 0;
   1067 			state->probes = 0;
   1068 			if (iface->addr.s_addr)
   1069 				state->conflicts = 0;
   1070 			return 1;
   1071 		}
   1072 
   1073 		if (gotlease == 0) {
   1074 			r = bind_dhcp(state, options);
   1075 			logger(LOG_DEBUG, "renew in %ld seconds",
   1076 				(long int)state->stop.tv_sec);
   1077 			return r;
   1078 		}
   1079 		if (iface->addr.s_addr)
   1080 			reason = "EXPIRE";
   1081 		else
   1082 			reason = "FAIL";
   1083 		drop_config(state, reason, options);
   1084 		if (!(state->options & DHCPCD_DAEMONISED) &&
   1085 		    (state->options & DHCPCD_DAEMONISE))
   1086 			return -1;
   1087 		state->state = STATE_RENEW_REQUESTED;
   1088 		return 1;
   1089 	case STATE_BOUND:
   1090 		logger(LOG_INFO, "renewing lease of %s",inet_ntoa(lease->addr));
   1091 		if (state->carrier != LINK_DOWN)
   1092 			do_socket(state, SOCKET_OPEN);
   1093 		state->xid = arc4random();
   1094 		state->state = STATE_RENEWING;
   1095 		state->stop.tv_sec = lease->rebindtime - lease->renewaltime;
   1096 		break;
   1097 	case STATE_RENEWING:
   1098 		logger(LOG_ERR, "failed to renew, attempting to rebind");
   1099 		state->state = STATE_REBINDING;
   1100 		if (lease->server.s_addr == 0)
   1101 			state->stop.tv_sec = options->timeout;
   1102 		else
   1103 			state->stop.tv_sec = lease->rebindtime - \
   1104 					     lease->renewaltime;
   1105 		lease->server.s_addr = 0;
   1106 		break;
   1107 	case STATE_REBINDING:
   1108 		logger(LOG_ERR, "failed to rebind");
   1109 		reason = "EXPIRE";
   1110 		drop_config(state, reason, options);
   1111 		state->state = STATE_INIT;
   1112 		break;
   1113 	case STATE_PROBING:    /* FALLTHROUGH */
   1114 	case STATE_ANNOUNCING:
   1115 		/* We should have lost carrier here and exit timer went */
   1116 		logger(LOG_ERR, "timed out");
   1117 		return -1;
   1118 	default:
   1119 		logger(LOG_DEBUG, "handle_timeout_failed: invalid state %d",
   1120 		       state->state);
   1121 	}
   1122 
   1123 	/* This effectively falls through into the handle_timeout funtion */
   1124 	return 1;
   1125 }
   1126 
   1127 static int
   1128 handle_timeout(struct if_state *state, const struct options *options)
   1129 {
   1130 	struct dhcp_lease *lease = &state->lease;
   1131 	struct interface *iface = state->interface;
   1132 	int i = 0;
   1133 	struct in_addr addr;
   1134 	struct timeval tv;
   1135 
   1136 	timerclear(&state->timeout);
   1137 	if (timerneg(&state->exit))
   1138 		return handle_timeout_fail(state, options);
   1139 
   1140 	if (state->state == STATE_RENEW_REQUESTED &&
   1141 	    IN_LINKLOCAL(ntohl(lease->addr.s_addr)))
   1142 	{
   1143 		state->state = STATE_PROBING;
   1144 		free(state->offer);
   1145 		state->offer = read_lease(state->interface);
   1146 		state->probes = 0;
   1147 		state->claims = 0;
   1148 	}
   1149 	switch (state->state) {
   1150 	case STATE_INIT_IPV4LL:
   1151 		state->state = STATE_PROBING;
   1152 		free(state->offer);
   1153 		state->offer = ipv4ll_get_dhcp(0);
   1154 		state->probes = 0;
   1155 		state->claims = 0;
   1156 		/* FALLTHROUGH */
   1157 	case STATE_PROBING:
   1158 		if (iface->arp_fd == -1)
   1159 			open_socket(iface, ETHERTYPE_ARP);
   1160 		if (state->probes < PROBE_NUM) {
   1161 			if (state->probes == 0) {
   1162 				addr.s_addr = state->offer->yiaddr;
   1163 				logger(LOG_INFO, "checking %s is available"
   1164 				       " on attached networks",
   1165 				       inet_ntoa(addr));
   1166 			}
   1167 			state->probes++;
   1168 			if (state->probes < PROBE_NUM) {
   1169 				state->timeout.tv_sec = PROBE_MIN;
   1170 				state->timeout.tv_usec = arc4random() %
   1171 					(PROBE_MAX_U - PROBE_MIN_U);
   1172 				timernorm(&state->timeout);
   1173 			} else {
   1174 				state->timeout.tv_sec = ANNOUNCE_WAIT;
   1175 				state->timeout.tv_usec = 0;
   1176 			}
   1177 			logger(LOG_DEBUG,
   1178 			       "sending ARP probe (%d of %d), next in %0.2f seconds",
   1179 			       state->probes, PROBE_NUM,
   1180 			       timeval_to_double(&state->timeout));
   1181 			if (send_arp(iface, ARPOP_REQUEST, 0,
   1182 				     state->offer->yiaddr) == -1)
   1183 			{
   1184 				logger(LOG_ERR, "send_arp: %s", strerror(errno));
   1185 				return -1;
   1186 			}
   1187 			return 0;
   1188 		} else {
   1189 			/* We've waited for ANNOUNCE_WAIT after the final probe
   1190 			 * so the address is now ours */
   1191 			i = bind_dhcp(state, options);
   1192 			state->state = STATE_ANNOUNCING;
   1193 			state->timeout.tv_sec = ANNOUNCE_INTERVAL;
   1194 			state->timeout.tv_usec = 0;
   1195 			return i;
   1196 		}
   1197 		break;
   1198 	case STATE_ANNOUNCING:
   1199 		if (iface->arp_fd == -1)
   1200 			open_socket(iface, ETHERTYPE_ARP);
   1201 		if (state->claims < ANNOUNCE_NUM) {
   1202 			state->claims++;
   1203 			if (state->claims < ANNOUNCE_NUM) {
   1204 				state->timeout.tv_sec = ANNOUNCE_INTERVAL;
   1205 				state->timeout.tv_usec = 0;
   1206 				logger(LOG_DEBUG,
   1207 				       "sending ARP announce (%d of %d),"
   1208 				       " next in %0.2f seconds",
   1209 				       state->claims, ANNOUNCE_NUM,
   1210 				       timeval_to_double(&state->timeout));
   1211 			} else
   1212 				logger(LOG_DEBUG,
   1213 				       "sending ARP announce (%d of %d)",
   1214 				       state->claims, ANNOUNCE_NUM);
   1215 			i = send_arp(iface, ARPOP_REQUEST,
   1216 				     state->new->yiaddr, state->new->yiaddr);
   1217 			if (i == -1) {
   1218 				logger(LOG_ERR, "send_arp: %s", strerror(errno));
   1219 				return -1;
   1220 			}
   1221 		}
   1222 		if (state->claims < ANNOUNCE_NUM)
   1223 			return 0;
   1224 		if (IN_LINKLOCAL(htonl(state->new->yiaddr))) {
   1225 			/* We should pretend to be at the end
   1226 			 * of the DHCP negotation cycle */
   1227 			state->state = STATE_INIT;
   1228 			state->messages = DHCP_MAX / DHCP_BASE;
   1229 			state->probes = 0;
   1230 			state->claims = 0;
   1231 			timerclear(&state->stop);
   1232 			goto dhcp_timeout;
   1233 		} else {
   1234 			state->state = STATE_BOUND;
   1235 			close(iface->arp_fd);
   1236 			iface->arp_fd = -1;
   1237 			if (lease->leasetime != ~0U) {
   1238 				state->stop.tv_sec = lease->renewaltime;
   1239 				state->stop.tv_usec = 0;
   1240 				if (clock_monotonic) {
   1241 					get_monotonic(&tv);
   1242 					timersub(&tv, &lease->boundtime, &tv);
   1243 					timersub(&state->stop, &tv, &state->stop);
   1244 				} else {
   1245 					state->stop.tv_sec -=
   1246 						(ANNOUNCE_INTERVAL * ANNOUNCE_NUM);
   1247 				}
   1248 				logger(LOG_DEBUG, "renew in %ld seconds",
   1249 				       (long int)state->stop.tv_sec);
   1250 			}
   1251 		}
   1252 		return 0;
   1253 	}
   1254 
   1255 	if (timerneg(&state->stop))
   1256 		return handle_timeout_fail(state, options);
   1257 
   1258 	switch (state->state) {
   1259 	case STATE_BOUND: /* FALLTHROUGH */
   1260 	case STATE_RENEW_REQUESTED:
   1261 		timerclear(&state->stop);
   1262 		/* FALLTHROUGH */
   1263 	case STATE_INIT:
   1264 		if (state->carrier == LINK_DOWN)
   1265 			return 0;
   1266 		do_socket(state, SOCKET_OPEN);
   1267 		state->xid = arc4random();
   1268 		iface->start_uptime = uptime();
   1269 		break;
   1270 	}
   1271 
   1272 	switch(state->state) {
   1273 	case STATE_RENEW_REQUESTED:
   1274 		/* If a renew was requested (ie, didn't timeout) we actually
   1275 		 * enter the REBIND state so that we broadcast to all servers.
   1276 		 * We need to do this for when we change networks. */
   1277 		lease->server.s_addr = 0;
   1278 		state->messages = 0;
   1279 		if (lease->addr.s_addr && !(state->options & DHCPCD_INFORM)) {
   1280 			logger(LOG_INFO, "rebinding lease of %s",
   1281 			       inet_ntoa(lease->addr));
   1282 			state->state = STATE_REBINDING;
   1283 			state->stop.tv_sec = options->timeout;
   1284 			state->stop.tv_usec = 0;
   1285 			break;
   1286 		}
   1287 		/* FALLTHROUGH */
   1288 	case STATE_INIT:
   1289 		if (lease->addr.s_addr == 0 ||
   1290 		    IN_LINKLOCAL(ntohl(iface->addr.s_addr)))
   1291 		{
   1292 			logger(LOG_INFO, "broadcasting for a lease");
   1293 			state->state = STATE_DISCOVERING;
   1294 		} else if (state->options & DHCPCD_INFORM) {
   1295 			logger(LOG_INFO, "broadcasting inform for %s",
   1296 			       inet_ntoa(lease->addr));
   1297 			state->state = STATE_REQUESTING;
   1298 		} else {
   1299 			logger(LOG_INFO, "broadcasting for a lease of %s",
   1300 			       inet_ntoa(lease->addr));
   1301 			state->state = STATE_REQUESTING;
   1302 		}
   1303 		if (!lease->addr.s_addr && !timerisset(&state->stop)) {
   1304 			state->stop.tv_sec = DHCP_MAX + DHCP_RAND_MIN;
   1305 			state->stop.tv_usec = arc4random() % (DHCP_RAND_MAX_U - DHCP_RAND_MIN_U);
   1306 			timernorm(&state->stop);
   1307 		}
   1308 		break;
   1309 	}
   1310 
   1311 dhcp_timeout:
   1312 	if (state->carrier == LINK_DOWN) {
   1313 		timerclear(&state->timeout);
   1314 		return 0;
   1315 	}
   1316 	state->timeout.tv_sec = DHCP_BASE;
   1317 	for (i = 0; i < state->messages; i++) {
   1318 		state->timeout.tv_sec *= 2;
   1319 		if (state->timeout.tv_sec > DHCP_MAX) {
   1320 			state->timeout.tv_sec = DHCP_MAX;
   1321 			break;
   1322 		}
   1323 	}
   1324 	state->timeout.tv_sec += DHCP_RAND_MIN;
   1325 	state->timeout.tv_usec = arc4random() %
   1326 		(DHCP_RAND_MAX_U - DHCP_RAND_MIN_U);
   1327 	timernorm(&state->timeout);
   1328 
   1329 	/* We send the message here so that the timeout is reported */
   1330 	switch (state->state) {
   1331 	case STATE_DISCOVERING:
   1332 		send_message(state, DHCP_DISCOVER, options);
   1333 		break;
   1334 	case STATE_REQUESTING:
   1335 		if (state->options & DHCPCD_INFORM) {
   1336 			send_message(state, DHCP_INFORM, options);
   1337 			break;
   1338 		}
   1339 		/* FALLTHROUGH */
   1340 	case STATE_RENEWING:   /* FALLTHROUGH */
   1341 	case STATE_REBINDING:
   1342 		if (iface->raw_fd == -1)
   1343 			do_socket(state, SOCKET_OPEN);
   1344 		send_message(state, DHCP_REQUEST, options);
   1345 		break;
   1346 	}
   1347 
   1348 	return 0;
   1349 }
   1350 
   1351 static void
   1352 log_dhcp(int lvl, const char *msg, const struct dhcp_message *dhcp)
   1353 {
   1354 	char *a;
   1355 	struct in_addr addr;
   1356 	int r;
   1357 
   1358 	if (strcmp(msg, "NAK:") == 0)
   1359 		a = get_option_string(dhcp, DHO_MESSAGE);
   1360 	else {
   1361 		addr.s_addr = dhcp->yiaddr;
   1362 		a = xstrdup(inet_ntoa(addr));
   1363 	}
   1364 	r = get_option_addr(&addr, dhcp, DHO_SERVERID);
   1365 	if (dhcp->servername[0] && r == 0)
   1366 		logger(lvl, "%s %s from %s `%s'", msg, a,
   1367 		       inet_ntoa(addr), dhcp->servername);
   1368 	else if (r == 0)
   1369 		logger(lvl, "%s %s from %s", msg, a, inet_ntoa(addr));
   1370 	else
   1371 		logger(lvl, "%s %s", msg, a);
   1372 	free(a);
   1373 }
   1374 
   1375 static int
   1376 handle_dhcp(struct if_state *state, struct dhcp_message **dhcpp,
   1377 	    const struct options *options)
   1378 {
   1379 	struct dhcp_message *dhcp = *dhcpp;
   1380 	struct interface *iface = state->interface;
   1381 	struct dhcp_lease *lease = &state->lease;
   1382 	uint8_t type, tmp;
   1383 	struct in_addr addr;
   1384 	size_t i;
   1385 	int r;
   1386 
   1387 	/* reset the message counter */
   1388 	state->messages = 0;
   1389 
   1390 	/* We have to have DHCP type to work */
   1391 	if (get_option_uint8(&type, dhcp, DHO_MESSAGETYPE) == -1) {
   1392 		logger(LOG_ERR, "ignoring message; no DHCP type");
   1393 		return 0;
   1394 	}
   1395 	/* Every DHCP message should include ServerID */
   1396 	if (get_option_addr(&addr, dhcp, DHO_SERVERID) == -1) {
   1397 		logger(LOG_ERR, "ignoring message; no Server ID");
   1398 		return 0;
   1399 	}
   1400 
   1401 	/* Ensure that it's not from a blacklisted server.
   1402 	 * We should expand this to check IP and/or hardware address
   1403 	 * at the packet level. */
   1404 	if (options->blacklist_len != 0 &&
   1405 	    get_option_addr(&addr, dhcp, DHO_SERVERID) == 0)
   1406 	{
   1407 		for (i = 0; i < options->blacklist_len; i++) {
   1408 			if (options->blacklist[i] != addr.s_addr)
   1409 				continue;
   1410 			if (dhcp->servername[0])
   1411 				logger(LOG_WARNING,
   1412 				       "ignoring blacklisted server %s `%s'",
   1413 					inet_ntoa(addr), dhcp->servername);
   1414 			else
   1415 				logger(LOG_WARNING,
   1416 				       "ignoring blacklisted server %s",
   1417 				       inet_ntoa(addr));
   1418 			return 0;
   1419 		}
   1420 	}
   1421 
   1422 	/* We should restart on a NAK */
   1423 	if (type == DHCP_NAK) {
   1424 		log_dhcp(LOG_WARNING, "NAK:", dhcp);
   1425 		drop_config(state, "EXPIRE", options);
   1426 		do_socket(state, SOCKET_CLOSED);
   1427 		state->state = STATE_INIT;
   1428 		/* If we constantly get NAKS then we should slowly back off */
   1429 		if (state->nakoff == 0) {
   1430 			state->nakoff = 1;
   1431 			timerclear(&state->timeout);
   1432 		} else {
   1433 			state->timeout.tv_sec = state->nakoff;
   1434 			state->timeout.tv_usec = 0;
   1435 			state->nakoff *= 2;
   1436 			if (state->nakoff > NAKOFF_MAX)
   1437 				state->nakoff = NAKOFF_MAX;
   1438 		}
   1439 		return 0;
   1440 	}
   1441 
   1442 	/* No NAK, so reset the backoff */
   1443 	state->nakoff = 1;
   1444 
   1445 	/* Ensure that all required options are present */
   1446 	for (i = 1; i < 255; i++) {
   1447 		if (has_option_mask(options->requiremask, i) &&
   1448 		    get_option_uint8(&tmp, dhcp, i) != 0)
   1449 		{
   1450 			log_dhcp(LOG_WARNING, "reject", dhcp);
   1451 			return 0;
   1452 		}
   1453 	}
   1454 
   1455 	if (type == DHCP_OFFER && state->state == STATE_DISCOVERING) {
   1456 		lease->addr.s_addr = dhcp->yiaddr;
   1457 		get_option_addr(&lease->server, dhcp, DHO_SERVERID);
   1458 		log_dhcp(LOG_INFO, "offered", dhcp);
   1459 		if (state->options & DHCPCD_TEST) {
   1460 			run_script(options, iface->name, "TEST", dhcp, NULL);
   1461 			/* Fake the fact we forked so we return 0 to userland */
   1462 			state->options |= DHCPCD_FORKED;
   1463 			return -1;
   1464 		}
   1465 		free(state->offer);
   1466 		state->offer = dhcp;
   1467 		*dhcpp = NULL;
   1468 		timerclear(&state->timeout);
   1469 		state->state = STATE_REQUESTING;
   1470 		return 1;
   1471 	}
   1472 
   1473 	if (type == DHCP_OFFER) {
   1474 		log_dhcp(LOG_INFO, "ignoring offer of", dhcp);
   1475 		return 0;
   1476 	}
   1477 
   1478 	/* We should only be dealing with acks */
   1479 	if (type != DHCP_ACK) {
   1480 		log_dhcp(LOG_ERR, "not ACK or OFFER", dhcp);
   1481 		return 0;
   1482 	}
   1483 
   1484 	switch (state->state) {
   1485 	case STATE_RENEW_REQUESTED:
   1486 	case STATE_REQUESTING:
   1487 	case STATE_RENEWING:
   1488 	case STATE_REBINDING:
   1489 		if (!(state->options & DHCPCD_INFORM)) {
   1490 			get_option_addr(&lease->server,
   1491 					dhcp, DHO_SERVERID);
   1492 			log_dhcp(LOG_INFO, "acknowledged", dhcp);
   1493 		}
   1494 		free(state->offer);
   1495 		state->offer = dhcp;
   1496 		*dhcpp = NULL;
   1497 		break;
   1498 	default:
   1499 		logger(LOG_ERR, "wrong state %d", state->state);
   1500 	}
   1501 
   1502 	lease->frominfo = 0;
   1503 	do_socket(state, SOCKET_CLOSED);
   1504 	if (state->options & DHCPCD_ARP &&
   1505 	    iface->addr.s_addr != state->offer->yiaddr)
   1506 	{
   1507 		/* If the interface already has the address configured
   1508 		 * then we can't ARP for duplicate detection. */
   1509 		addr.s_addr = state->offer->yiaddr;
   1510 		if (!has_address(iface->name, &addr, NULL)) {
   1511 			state->state = STATE_PROBING;
   1512 			state->claims = 0;
   1513 			state->probes = 0;
   1514 			state->conflicts = 0;
   1515 			timerclear(&state->stop);
   1516 			return 1;
   1517 		}
   1518 	}
   1519 
   1520 	r = bind_dhcp(state, options);
   1521 	if (!(state->options & DHCPCD_ARP)) {
   1522 		if (!(state->options & DHCPCD_INFORM))
   1523 			logger(LOG_DEBUG, "renew in %ld seconds",
   1524 			       (long int)state->stop.tv_sec);
   1525 		return r;
   1526 	}
   1527 	state->state = STATE_ANNOUNCING;
   1528 	if (state->options & DHCPCD_FORKED)
   1529 		return r;
   1530 	return 1;
   1531 }
   1532 
   1533 static int
   1534 handle_dhcp_packet(struct if_state *state, const struct options *options)
   1535 {
   1536 	uint8_t *packet;
   1537 	struct interface *iface = state->interface;
   1538 	struct dhcp_message *dhcp = NULL;
   1539 	const uint8_t *pp;
   1540 	ssize_t bytes;
   1541 	int retval = -1;
   1542 
   1543 	/* We loop through until our buffer is empty.
   1544 	 * The benefit is that if we get >1 DHCP packet in our buffer and
   1545 	 * the first one fails for any reason, we can use the next. */
   1546 	packet = xmalloc(udp_dhcp_len);
   1547 	for(;;) {
   1548 		bytes = get_raw_packet(iface, ETHERTYPE_IP,
   1549 				       packet, udp_dhcp_len);
   1550 		if (bytes == 0) {
   1551 			retval = 0;
   1552 			break;
   1553 		}
   1554 		if (bytes == -1)
   1555 			break;
   1556 		if (valid_udp_packet(packet, bytes) == -1)
   1557 			continue;
   1558 		bytes = get_udp_data(&pp, packet);
   1559 		if ((size_t)bytes > sizeof(*dhcp)) {
   1560 			logger(LOG_ERR, "packet greater than DHCP size");
   1561 			continue;
   1562 		}
   1563 		if (!dhcp)
   1564 			dhcp = xzalloc(sizeof(*dhcp));
   1565 		memcpy(dhcp, pp, bytes);
   1566 		if (dhcp->cookie != htonl(MAGIC_COOKIE)) {
   1567 			logger(LOG_DEBUG, "bogus cookie, ignoring");
   1568 			continue;
   1569 		}
   1570 		/* Ensure it's the right transaction */
   1571 		if (state->xid != dhcp->xid) {
   1572 			logger(LOG_DEBUG,
   1573 			       "ignoring packet with xid 0x%x as"
   1574 			       " it's not ours (0x%x)",
   1575 			       dhcp->xid, state->xid);
   1576 			continue;
   1577 		}
   1578 		/* Ensure packet is for us */
   1579 		if (iface->hwlen <= sizeof(dhcp->chaddr) &&
   1580 		    memcmp(dhcp->chaddr, iface->hwaddr, iface->hwlen))
   1581 		{
   1582 			logger(LOG_DEBUG, "xid 0x%x is not for our hwaddr %s",
   1583 			       dhcp->xid,
   1584 			       hwaddr_ntoa(dhcp->chaddr, sizeof(dhcp->chaddr)));
   1585 			continue;
   1586 		}
   1587 		retval = handle_dhcp(state, &dhcp, options);
   1588 		if (retval == 0 && state->options & DHCPCD_TEST)
   1589 			state->options |= DHCPCD_FORKED;
   1590 		break;
   1591 	}
   1592 
   1593 	free(packet);
   1594 	free(dhcp);
   1595 	return retval;
   1596 }
   1597 
   1598 static int
   1599 handle_arp_packet(struct if_state *state)
   1600 {
   1601 	struct arphdr reply;
   1602 	uint32_t reply_s;
   1603 	uint32_t reply_t;
   1604 	uint8_t arp_reply[sizeof(reply) + 2 * sizeof(reply_s) + 2 * HWADDR_LEN];
   1605 	uint8_t *hw_s, *hw_t;
   1606 	ssize_t bytes;
   1607 	struct interface *iface = state->interface;
   1608 
   1609 	state->fail.s_addr = 0;
   1610 	for(;;) {
   1611 		bytes = get_raw_packet(iface, ETHERTYPE_ARP,
   1612 				       arp_reply, sizeof(arp_reply));
   1613 		if (bytes == 0 || bytes == -1)
   1614 			return (int)bytes;
   1615 		/* We must have a full ARP header */
   1616 		if ((size_t)bytes < sizeof(reply))
   1617 			continue;
   1618 		memcpy(&reply, arp_reply, sizeof(reply));
   1619 		/* Protocol must be IP. */
   1620 		if (reply.ar_pro != htons(ETHERTYPE_IP))
   1621 			continue;
   1622 		if (reply.ar_pln != sizeof(reply_s))
   1623 			continue;
   1624 		/* Only these types are recognised */
   1625 		if (reply.ar_op != htons(ARPOP_REPLY) &&
   1626 		    reply.ar_op != htons(ARPOP_REQUEST))
   1627 			continue;
   1628 
   1629 		/* Get pointers to the hardware addreses */
   1630 		hw_s = arp_reply + sizeof(reply);
   1631 		hw_t = hw_s + reply.ar_hln + reply.ar_pln;
   1632 		/* Ensure we got all the data */
   1633 		if ((hw_t + reply.ar_hln + reply.ar_pln) - arp_reply > bytes)
   1634 			continue;
   1635 		/* Ignore messages from ourself */
   1636 		if (reply.ar_hln == iface->hwlen &&
   1637 		    memcmp(hw_s, iface->hwaddr, iface->hwlen) == 0)
   1638 			continue;
   1639 		/* Copy out the IP addresses */
   1640 		memcpy(&reply_s, hw_s + reply.ar_hln, reply.ar_pln);
   1641 		memcpy(&reply_t, hw_t + reply.ar_hln, reply.ar_pln);
   1642 
   1643 		/* Check for conflict */
   1644 		if (state->offer &&
   1645 		    (reply_s == state->offer->yiaddr ||
   1646 		     (reply_s == 0 && reply_t == state->offer->yiaddr)))
   1647 			state->fail.s_addr = state->offer->yiaddr;
   1648 
   1649 		/* Handle IPv4LL conflicts */
   1650 		if (IN_LINKLOCAL(htonl(iface->addr.s_addr)) &&
   1651 		    (reply_s == iface->addr.s_addr ||
   1652 		     (reply_s == 0 && reply_t == iface->addr.s_addr)))
   1653 			state->fail.s_addr = iface->addr.s_addr;
   1654 
   1655 		if (state->fail.s_addr) {
   1656 			logger(LOG_ERR, "hardware address %s claims %s",
   1657 			       hwaddr_ntoa((unsigned char *)hw_s,
   1658 					   (size_t)reply.ar_hln),
   1659 			       inet_ntoa(state->fail));
   1660 			errno = EEXIST;
   1661 			return -1;
   1662 		}
   1663 	}
   1664 }
   1665 
   1666 static int
   1667 handle_arp_fail(struct if_state *state, const struct options *options)
   1668 {
   1669 	time_t up;
   1670 	int cookie = state->offer->cookie;
   1671 
   1672 	if (!IN_LINKLOCAL(htonl(state->fail.s_addr))) {
   1673 		if (cookie) {
   1674 			state->timeout.tv_sec = DHCP_ARP_FAIL;
   1675 			state->timeout.tv_usec = 0;
   1676 			do_socket(state, SOCKET_OPEN);
   1677 			send_message(state, DHCP_DECLINE, options);
   1678 			do_socket(state, SOCKET_CLOSED);
   1679 		}
   1680 		state->state = STATE_INIT;
   1681 		free(state->offer);
   1682 		state->offer = NULL;
   1683 		state->lease.addr.s_addr = 0;
   1684 		if (!cookie)
   1685 			return 1;
   1686 		return 0;
   1687 	}
   1688 
   1689 	if (state->fail.s_addr == state->interface->addr.s_addr) {
   1690 		if (state->state == STATE_PROBING)
   1691 			/* This should only happen when SIGALRM or
   1692 			 * link when down/up and we have a conflict. */
   1693 			drop_config(state, "EXPIRE", options);
   1694 		else {
   1695 			up = uptime();
   1696 			if (state->defend + DEFEND_INTERVAL > up) {
   1697 				drop_config(state, "EXPIRE", options);
   1698 				state->conflicts = -1;
   1699 				/* drop through to set conflicts to 0 */
   1700 			} else {
   1701 				state->defend = up;
   1702 				return 0;
   1703 			}
   1704 		}
   1705 	}
   1706 	do_socket(state, SOCKET_CLOSED);
   1707 	state->conflicts++;
   1708 	timerclear(&state->stop);
   1709 	if (state->conflicts > MAX_CONFLICTS) {
   1710 		logger(LOG_ERR, "failed to obtain an IPv4LL address");
   1711 		state->state = STATE_INIT;
   1712 		timerclear(&state->timeout);
   1713 		if (!(state->options & DHCPCD_DAEMONISED) &&
   1714 		    (state->options & DHCPCD_DAEMONISE))
   1715 			return -1;
   1716 		return 1;
   1717 	}
   1718 	state->state = STATE_INIT_IPV4LL;
   1719 	state->timeout.tv_sec = PROBE_WAIT;
   1720 	state->timeout.tv_usec = 0;
   1721 	return 0;
   1722 }
   1723 
   1724 static int
   1725 handle_link(struct if_state *state)
   1726 {
   1727 	int retval;
   1728 
   1729 	retval = link_changed(state->interface);
   1730 	if (retval == -1) {
   1731 		logger(LOG_ERR, "link_changed: %s", strerror(errno));
   1732 		return -1;
   1733 	}
   1734 	if (retval == 0)
   1735 		return 0;
   1736 
   1737 	switch (carrier_status(state->interface->name)) {
   1738 	case -1:
   1739 		logger(LOG_ERR, "carrier_status: %s", strerror(errno));
   1740 		return -1;
   1741 	case 0:
   1742 		if (state->carrier != LINK_DOWN) {
   1743 			logger(LOG_INFO, "carrier lost");
   1744 			state->carrier = LINK_DOWN;
   1745 			do_socket(state, SOCKET_CLOSED);
   1746 			timerclear(&state->timeout);
   1747 			if (state->state != STATE_BOUND)
   1748 				timerclear(&state->stop);
   1749 		}
   1750 		break;
   1751 	default:
   1752 		if (state->carrier != LINK_UP) {
   1753 			logger(LOG_INFO, "carrier acquired");
   1754 			state->state = STATE_RENEW_REQUESTED;
   1755 			state->carrier = LINK_UP;
   1756 			timerclear(&state->timeout);
   1757 			timerclear(&state->stop);
   1758 			return 1;
   1759 		}
   1760 		break;
   1761 	}
   1762 	return 0;
   1763 }
   1764 
   1765 int
   1766 dhcp_run(const struct options *options, int *pid_fd)
   1767 {
   1768 	struct interface *iface;
   1769 	struct if_state *state = NULL;
   1770 	int fd = -1, r = 0, sig;
   1771 
   1772 	iface = read_interface(options->interface, options->metric);
   1773 	if (!iface) {
   1774 		logger(LOG_ERR, "read_interface: %s", strerror(errno));
   1775 		goto eexit;
   1776 	}
   1777 	logger(LOG_DEBUG, "hardware address = %s",
   1778 	       hwaddr_ntoa(iface->hwaddr, iface->hwlen));
   1779 	state = xzalloc(sizeof(*state));
   1780 	state->pid_fd = pid_fd;
   1781 	state->interface = iface;
   1782 	if (!(options->options & DHCPCD_TEST))
   1783 		run_script(options, iface->name, "PREINIT", NULL, NULL);
   1784 
   1785 	if (client_setup(state, options) == -1)
   1786 		goto eexit;
   1787 	if (signal_init() == -1)
   1788 		goto eexit;
   1789 	if (signal_setup() == -1)
   1790 		goto eexit;
   1791 	state->signal_fd = signal_fd();
   1792 
   1793 	if (state->options & DHCPCD_BACKGROUND &&
   1794 	    !(state->options & DHCPCD_DAEMONISED))
   1795 		if (daemonise(state, options) == -1)
   1796 			goto eexit;
   1797 
   1798 	if (state->carrier == LINK_DOWN)
   1799 		logger(LOG_INFO, "waiting for carrier");
   1800 
   1801 	for (;;) {
   1802 		if (r == 0)
   1803 			r = handle_timeout(state, options);
   1804 		else if (r > 0) {
   1805 			if (fd == state->signal_fd) {
   1806 			    	if ((sig = signal_read()) != -1)
   1807 					r = handle_signal(sig, state, options);
   1808 			} else if (fd == iface->link_fd)
   1809 				r = handle_link(state);
   1810 			else if (fd == iface->raw_fd)
   1811 				r = handle_dhcp_packet(state, options);
   1812 			else if (fd == iface->arp_fd) {
   1813 				if ((r = handle_arp_packet(state)) == -1)
   1814 					r = handle_arp_fail(state, options);
   1815 			} else
   1816 				r = 0;
   1817 		}
   1818 		if (r == -1)
   1819 			break;
   1820 		if (r == 0) {
   1821 			fd = -1;
   1822 			r = wait_for_fd(state, &fd);
   1823 			if (r == -1 && errno == EINTR) {
   1824 				r = 1;
   1825 				fd = state->signal_fd;
   1826 			}
   1827 		} else
   1828 			r = 0;
   1829 	}
   1830 
   1831 eexit:
   1832 	if (iface) {
   1833 		do_socket(state, SOCKET_CLOSED);
   1834 		if (iface->link_fd != -1)
   1835 		    close(iface->link_fd);
   1836 		free_routes(iface->routes);
   1837 		free(iface->clientid);
   1838 		free(iface->buffer);
   1839 		free(iface);
   1840 	}
   1841 
   1842 	if (state) {
   1843 		if (state->options & DHCPCD_FORKED)
   1844 			r = 0;
   1845 		if (state->options & DHCPCD_DAEMONISED)
   1846 			unlink(options->pidfile);
   1847 		free(state->offer);
   1848 		free(state->new);
   1849 		free(state->old);
   1850 		free(state);
   1851 	}
   1852 
   1853 	return r;
   1854 }
   1855