summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2016-05-19 20:50:15 +0000
committerRoy Marples <roy@marples.name>2016-05-19 20:50:15 +0000
commit95feb3bfd0f56bab61968a29d80ddc2eeb4780a7 (patch)
treece8f7aee7044b42bd20c086b8584fea60d166426
parent197c2bd1dde1edb3519db8f68295c007ec09594f (diff)
downloaddhcpcd-95feb3bfd0f56bab61968a29d80ddc2eeb4780a7.tar.xz
Fix adding static address masks.
-rw-r--r--dhcp.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/dhcp.c b/dhcp.c
index 63f31526..ade23e05 100644
--- a/dhcp.c
+++ b/dhcp.c
@@ -1434,8 +1434,12 @@ get_lease(struct interface *ifp,
/* BOOTP does not set yiaddr for replies when ciaddr is set. */
lease->addr.s_addr = bootp->yiaddr ? bootp->yiaddr : bootp->ciaddr;
ctx = ifp->ctx;
- if (ifp->options->options & DHCPCD_INFORM) {
- lease->mask = ifp->options->req_mask;
+ if (ifp->options->options & (DHCPCD_STATIC | DHCPCD_INFORM)) {
+ if (ifp->options->req_mask.s_addr == INADDR_ANY)
+ lease->mask.s_addr =
+ ipv4_getnetmask(lease->addr.s_addr);
+ else
+ lease->mask = ifp->options->req_mask;
lease->brd.s_addr = lease->addr.s_addr | ~lease->mask.s_addr;
} else {
if (get_option_addr(ctx, &lease->mask, bootp, len,