- r = sd_rtnl_call_async(rtnl, req, &pipe_handler, counter, 0, NULL);
- if (r < 0)
- return r;
-
- (*counter) ++;
-
- return 0;
-}
-
-static int check_loopback(void) {
- int r;
- _cleanup_close_ int fd = -1;
- union {
- struct sockaddr sa;
- struct sockaddr_in in;
- } sa = {
- .in.sin_family = AF_INET,
- .in.sin_addr.s_addr = INADDR_LOOPBACK,
- };
-
- /* If we failed to set up the loop back device, check whether
- * it might already be set up */
-
- fd = socket(AF_INET, SOCK_DGRAM|SOCK_NONBLOCK|SOCK_CLOEXEC, 0);
- if (fd < 0)
- return -errno;
-
- if (bind(fd, &sa.sa, sizeof(sa.in)) >= 0)
- r = 1;
- else
- r = errno == EADDRNOTAVAIL ? 0 : -errno;
-
- return r;