Fix BSD carrier detection code
This commit is contained in:
parent
d6e2c0c4ac
commit
7881c3ce0a
1 changed files with 19 additions and 8 deletions
27
ethsock.c
27
ethsock.c
|
|
@ -554,19 +554,30 @@ bool ethsock_is_unplugged(struct ethsock *sock)
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
#elif defined(NMRPFLASH_BSD)
|
#elif defined(NMRPFLASH_BSD)
|
||||||
struct ifmediareq ifmr;
|
struct ifmediareq ifm;
|
||||||
|
int fd;
|
||||||
|
|
||||||
memset(&ifmr, 0, sizeof(ifmr));
|
fd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
strncpy(ifmr.ifr_name, name, sizeof(ifmr.ifr_name));
|
if (fd < 0) {
|
||||||
|
if (verbosity) {
|
||||||
if (ioctl(fd, SIOCGIFMEDIA, &ifmr) < 0) {
|
perror("socket");
|
||||||
if (verbosity > 1) {
|
|
||||||
perror("ioctl(SIOCGIFMEDIA)");
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (ifmr.ifm_status & IFM_AVALID) && !(ifmr.ifm_status & IFM_ACTIVE);
|
memset(&ifm, 0, sizeof(ifm));
|
||||||
|
strncpy(ifm.ifm_name, sock->intf, sizeof(ifm.ifm_name));
|
||||||
|
|
||||||
|
if (ioctl(fd, SIOCGIFMEDIA, &ifm) < 0) {
|
||||||
|
if (verbosity) {
|
||||||
|
perror("ioctl(SIOCGIFMEDIA)");
|
||||||
|
}
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
close(fd);
|
||||||
|
return (ifm.ifm_status & IFM_AVALID) && !(ifm.ifm_status & IFM_ACTIVE);
|
||||||
#else
|
#else
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue