diff options
| author | Roy Marples <roy@marples.name> | 2016-05-25 13:50:05 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2016-05-25 13:50:05 +0000 |
| commit | 7f347e48b61c5dec851c04c37079902822ba8bcd (patch) | |
| tree | ff0b7072dc34bcea2622fd860e44025e9af30c98 /if-bsd.c | |
| parent | ff8e6026ec52cca0d52c59088caf004561ad5554 (diff) | |
| download | dhcpcd-7f347e48b61c5dec851c04c37079902822ba8bcd.tar.xz | |
Ensure mask and bcast as always set.
Diffstat (limited to 'if-bsd.c')
| -rw-r--r-- | if-bsd.c | 13 |
1 files changed, 10 insertions, 3 deletions
@@ -1377,12 +1377,19 @@ if_ifa(struct dhcpcd_ctx *ctx, const struct ifa_msghdr *ifam) case AF_INET: case 255: /* FIXME: Why 255? */ { + const struct sockaddr_in *sin; struct in_addr addr, mask, bcast; int flags; - COPYOUT(addr, rti_info[RTAX_IFA]); - COPYOUT(mask, rti_info[RTAX_NETMASK]); - COPYOUT(bcast, rti_info[RTAX_BRD]); + sin = (const void *)rti_info[RTAX_IFA]; + addr.s_addr = sin != NULL && sin->sin_family == AF_INET ? + sin->sin_addr.s_addr : INADDR_ANY; + sin = (const void *)rti_info[RTAX_NETMASK]; + mask.s_addr = sin != NULL && sin->sin_family == AF_INET ? + sin->sin_addr.s_addr : INADDR_ANY; + sin = (const void *)rti_info[RTAX_BRD]; + bcast.s_addr = sin != NULL && sin->sin_family == AF_INET ? + sin->sin_addr.s_addr : INADDR_ANY; if (ifam->ifam_type == RTM_NEWADDR) { if ((flags = if_addrflags(&addr, ifp)) == -1) break; |
