From 70580a5b75b19b97aaf801af27e6bda2a78ab58c Mon Sep 17 00:00:00 2001 From: Grant Erickson Date: Fri, 15 Jul 2011 10:21:34 -0700 Subject: [PATCH] loopback: Recover Loopback on Setup when Up but No Address It is possible to end up in situations in which the loopback interface is up but has no valid address. In that case, we expect SIOCGIFADDR will return EADDRNOTAVAIL and valid_loopback should return FALSE such that connman can add a loopback address back to the interface. This is a partial fix for bug 21001 . --- plugins/loopback.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/loopback.c b/plugins/loopback.c index ac3e2fc..f962415 100644 --- a/plugins/loopback.c +++ b/plugins/loopback.c @@ -188,11 +188,16 @@ static gboolean valid_loopback(int sk, struct ifreq *ifr) int err; char buf[INET_ADDRSTRLEN]; + /* It is possible to end up in situations in which the + * loopback interface is up but has no valid address. In that + * case, we expect EADDRNOTAVAIL and should return FALSE. + */ + err = ioctl(sk, SIOCGIFADDR, ifr); if (err < 0) { err = -errno; connman_error("Getting address failed (%s)", strerror(-err)); - return TRUE; + return err != -EADDRNOTAVAIL ? TRUE : FALSE; } addr = (struct sockaddr_in *) &ifr->ifr_addr; -- 2.7.4