[systemd-devel] [systemd-commits] 8 commits - src/core src/libsystemd src/test

David Herrmann dh.herrmann at gmail.com
Tue Dec 30 08:21:29 PST 2014


Hi

On Tue, Dec 30, 2014 at 5:17 PM, Zbigniew Jędrzejewski-Szmek
<zbyszek at in.waw.pl> wrote:
>> commit e95e909d820429ba34fa6f6f1b0109ac22743b47
>> Author: Tom Gundersen <teg at jklm.no>
>> 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
> systemd-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/systemd-devel


More information about the systemd-devel mailing list