From 55bc8fead207fcb2aafe414ce84073f147ebce39 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Mon, 10 Feb 2020 16:00:28 +0000 Subject: Add bcnm-waitif --- src/libbcnm/bcnm_if_getstate.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/libbcnm/bcnm_if_getstate.c (limited to 'src/libbcnm/bcnm_if_getstate.c') diff --git a/src/libbcnm/bcnm_if_getstate.c b/src/libbcnm/bcnm_if_getstate.c new file mode 100644 index 0000000..af50268 --- /dev/null +++ b/src/libbcnm/bcnm_if_getstate.c @@ -0,0 +1,30 @@ +/* ISC license. */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include +#include +#include +#include +#include +#include + +#include + +int bcnm_if_getstate (char const *ifname) +{ + struct ifreq blah ; + int sfd ; + int e = errno ; + size_t len = strlen(ifname) ; + if (len >= IFNAMSIZ) return (errno = ENAMETOOLONG, -1) ; + memcpy(blah.ifr_name, ifname, len+1) ; + sfd = socket(AF_INET, SOCK_DGRAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0) ; + if (sfd < 0) return -1 ; + if (ioctl(sfd, SIOCGIFFLAGS, &blah) < 0) + return errno == ENODEV ? (errno = e, 0) : -1 ; + close(sfd) ; + return 1 | !!(blah.ifr_flags & IFF_UP) << 1 | !!(blah.ifr_flags & IFF_RUNNING) << 2 ; +} -- cgit v1.3.1