Mercurial > hg > dhcpcd
changeset 5480:42eb9ab2e771 draft
BSD: Of course DragonFly does SIOCGIFDATA differently..
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Wed, 23 Sep 2020 09:59:47 +0100 |
| parents | d7a479ba0acb |
| children | 8d0d468b6144 |
| files | src/if-bsd.c |
| diffstat | 1 files changed, 14 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/if-bsd.c Wed Sep 23 09:31:24 2020 +0100 +++ b/src/if-bsd.c Wed Sep 23 09:59:47 2020 +0100 @@ -382,18 +382,28 @@ if_carrier(struct interface *ifp) { int carrier = if_carrier0(ifp); + #ifdef SIOCGIFDATA - struct ifdatareq ifdr = { .ifdr_data.ifi_link_state = 0 }; - struct if_data *ifdata; - if (carrier != LINK_UNKNOWN) return carrier; +#ifdef __DragonFly__ + struct if_data ifd = { .ifi_link_state = 0 }; + struct ifreq ifr = { .ifr_data = &ifd }; + struct if_data *ifdata = &ifd; + + strlcpy(ifr.ifr_name, ifp->name, sizeof(ifr.ifr_name)); + if (ioctl(ifp->ctx->pf_inet_fd, SIOCGIFDATA, &ifr) == -1) + return LINK_UNKNOWN; +#else + struct ifdatareq ifdr = { .ifdr_data.ifi_link_state = 0 }; + struct if_data *ifdata = &ifdr.ifdr_data; + strlcpy(ifdr.ifdr_name, ifp->name, sizeof(ifdr.ifdr_name)); if (ioctl(ifp->ctx->pf_inet_fd, SIOCGIFDATA, &ifdr) == -1) return LINK_UNKNOWN; +#endif - ifdata = &ifdr.ifdr_data; switch (ifdata->ifi_link_state) { case LINK_STATE_DOWN: return LINK_DOWN;
