dhcpcd_prestartinterface(void *arg)
{
struct interface *ifp = arg;
+ bool anondown;
+
+ if (ifp->carrier == LINK_DOWN &&
+ ifp->options->options & DHCPCD_ANONYMOUS &&
+ ifp->flags & IFF_UP)
+ {
+ if_down(ifp);
+ anondown = true;
+ } else
+ anondown = false;
if ((!(ifp->ctx->options & DHCPCD_MASTER) ||
- ifp->options->options & DHCPCD_IF_UP) &&
+ ifp->options->options & DHCPCD_IF_UP || anondown) &&
!(ifp->flags & IFF_UP))
{
if (ifp->options->options & DHCPCD_ANONYMOUS &&
logdebugx("%s: hardware address randomised to %s",
ifp->name,
- hwaddr_ntoa(buf, sizeof(buf), sbuf, sizeof(sbuf)));
+ hwaddr_ntoa(buf, ifp->hwlen, sbuf, sizeof(sbuf)));
retval = if_setmac(ifp, buf, ifp->hwlen);
if (retval == 0)
memcpy(ifp->hwaddr, buf, ifp->hwlen);