Hi On Tue, Dec 30, 2014 at 5:17 PM, Zbigniew Jędrzejewski-Szmek <[email protected]> wrote: >> commit e95e909d820429ba34fa6f6f1b0109ac22743b47 >> Author: Tom Gundersen <[email protected]> >> Date: Sun Dec 28 13:38:23 2014 +0100 >> >> core: loopback - simplify check_loopback() >> >> We no longer configure the addresses on the loopback interface, but >> simply bring it up >> and let the kernel do the rest. Also change the check to only check if >> the interface >> is up, rather than checking for the IPv4 loopback address. >> >> diff --git a/src/core/loopback-setup.c b/src/core/loopback-setup.c >> index ab6335c..0d7d00c 100644 >> --- a/src/core/loopback-setup.c >> +++ b/src/core/loopback-setup.c >> @@ -56,30 +56,24 @@ static int start_loopback(sd_rtnl *rtnl) { >> return 0; >> } >> >> -static int check_loopback(void) { >> +static bool check_loopback(sd_rtnl *rtnl) { > This does not look right. First of all, "check" is misleading, because a > return > value of false means that the check passed. Second, negative values are > implicitly > converted to bool.
This is already fixed in: http://cgit.freedesktop.org/systemd/systemd/commit/?id=2f0af4e120385e6078c96189f4a4d0cce0e12a3a Thanks David >> + _cleanup_rtnl_message_unref_ sd_rtnl_message *req = NULL, *reply = >> NULL; >> + unsigned flags; >> 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 = htonl(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; >> + >> + r = sd_rtnl_message_new_link(rtnl, &req, RTM_GETLINK, >> LOOPBACK_IFINDEX); >> + if (r < 0) >> + return r; >> + >> + r = sd_rtnl_call(rtnl, req, 0, &reply); >> + if (r < 0) >> + return r; >> + >> + r = sd_rtnl_message_link_get_flags(reply, &flags); >> + if (r < 0) >> + return r; >> + >> + return flags & IFF_UP; >> } >> >> int loopback_setup(void) { >> @@ -92,7 +86,7 @@ int loopback_setup(void) { >> >> r = start_loopback(rtnl); >> if (r == -EPERM) { >> - if (check_loopback() < 0) >> + if (!check_loopback(rtnl)) >> return log_warning_errno(EPERM, "Failed to >> configure loopback device: %m"); >> } else if (r < 0) >> return log_warning_errno(r, "Failed to configure loopback >> device: %m"); > > Zbyszek > _______________________________________________ > systemd-devel mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/systemd-devel _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
