[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