Mercurial > hg > dhcpcd
changeset 4961:cd7f5f9ed3cb draft
FreeBSD: Support hardware address randomisation
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Wed, 15 Jan 2020 15:49:23 +0000 |
| parents | cf298b786d8c |
| children | 854219946ad4 |
| files | src/if-bsd.c |
| diffstat | 1 files changed, 17 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/if-bsd.c Wed Jan 15 15:48:27 2020 +0000 +++ b/src/if-bsd.c Wed Jan 15 15:49:23 2020 +0000 @@ -217,6 +217,7 @@ ctx->priv = NULL; } +#ifdef SIOCALIFADDR /*NetBSD */ static int if_ioctllink(struct dhcpcd_ctx *ctx, unsigned long req, void *data, size_t len) { @@ -237,19 +238,22 @@ close(s); return retval; } +#endif int if_setmac(struct interface *ifp, void *mac, uint8_t maclen) { - struct if_laddrreq iflr = { .flags = IFLR_ACTIVE }; - struct sockaddr_dl *sdl = satosdl(&iflr.addr); - int retval; if (ifp->hwlen != maclen) { errno = EINVAL; return -1; } +#ifdef SIOCALIFADDR /*NetBSD */ + struct if_laddrreq iflr = { .flags = IFLR_ACTIVE }; + struct sockaddr_dl *sdl = satosdl(&iflr.addr); + int retval; + strlcpy(iflr.iflr_name, ifp->name, sizeof(iflr.iflr_name)); sdl->sdl_family = AF_LINK; sdl->sdl_len = sizeof(*sdl); @@ -262,6 +266,16 @@ if_ioctllink(ifp->ctx, SIOCDLIFADDR, &iflr, sizeof(iflr)); return retval; +#else + struct ifreq ifr = { + .ifr_addr.sa_family = AF_LINK, + .ifr_addr.sa_len = maclen, + }; + + strlcpy(ifr.ifr_name, ifp->name, sizeof(ifr.ifr_name)); + memcpy(ifr.ifr_addr.sa_data, mac, maclen); + return if_ioctl(ifp->ctx, SIOCSIFLLADDR, &ifr, sizeof(ifr)); +#endif } static bool
