Send connman mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        https://lists.01.org/mailman/listinfo/connman
or, via email, send a message with subject or body 'help' to
        [email protected]

You can reach the person managing the list at
        [email protected]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of connman digest..."


Today's Topics:

   1. [PATCH v4] NTP implementation for IPv6 timeserver (Naveen Singh)
   2. [PATCH] Cancel the pending reply timer (Naveen Singh)
   3. Re: [PATCH v4] NTP implementation for IPv6 timeserver
      (Patrik Flykt)
   4. Re: [PATCH] Cancel the pending reply timer (Patrik Flykt)
   5. Re: [PATCH] bluetooth: Fix crash when adapter is NULL
      (Patrik Flykt)
   6. Re: [PATCH] service: Fix memory leak (Patrik Flykt)
   7. Re: [RFC 0/5] Move resolv.conf to /run/connman (Patrik Flykt)
   8. Re: connman removes FallbackNameservers at startup (Patrik Flykt)
   9. Re: [PATCH v2 (resend)] wifi: Reset device->scanning if scan
      has not returned in 60 secs (Patrik Flykt)


----------------------------------------------------------------------

Message: 1
Date: Tue, 24 Nov 2015 20:37:03 -0800
From: Naveen Singh <[email protected]>
To: [email protected]
Subject: [PATCH v4] NTP implementation for IPv6 timeserver
Message-ID:
        <[email protected]>

From: nasingh <[email protected]>

Current NTP code is written with an assumption that
timeserver is always an IPv4 address. If there is an
IPv6 timeserver then the socket operation would fail
with error as Permission denied(13). This change in
ntp.c ensures that code works fine with both IPv4 and
IPv6 address.
---
 src/ntp.c | 131 ++++++++++++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 98 insertions(+), 33 deletions(-)

diff --git a/src/ntp.c b/src/ntp.c
index 2c313a4..9e7192d 100644
--- a/src/ntp.c
+++ b/src/ntp.c
@@ -18,7 +18,6 @@
  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  *
  */
-
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
@@ -34,6 +33,7 @@
 #include <netinet/in.h>
 #include <netinet/ip.h>
 #include <arpa/inet.h>
+#include <netdb.h>
 
 #include <glib.h>
 
@@ -117,12 +117,12 @@ static struct timespec mtx_time;
 static int transmit_fd = 0;
 
 static char *timeserver = NULL;
-static struct sockaddr_in timeserver_addr;
+static struct sockaddr_in6 timeserver_addr;
 static gint poll_id = 0;
 static gint timeout_id = 0;
 static guint retries = 0;
 
-static void send_packet(int fd, const char *server, uint32_t timeout);
+static void send_packet(int fd, struct sockaddr *server, uint32_t timeout);
 
 static void next_server(void)
 {
@@ -143,17 +143,19 @@ static gboolean send_timeout(gpointer user_data)
        if (retries++ == NTP_SEND_RETRIES)
                next_server();
        else
-               send_packet(transmit_fd, timeserver, timeout << 1);
+               send_packet(transmit_fd, (struct sockaddr *)&timeserver_addr, 
timeout << 1);
 
        return FALSE;
 }
 
-static void send_packet(int fd, const char *server, uint32_t timeout)
+static void send_packet(int fd, struct sockaddr *server, uint32_t timeout)
 {
        struct ntp_msg msg;
-       struct sockaddr_in addr;
        struct timeval transmit_timeval;
        ssize_t len;
+       void * addr;
+       int size;
+       char ipaddrstring[INET6_ADDRSTRLEN + 1];
 
        /*
         * At some point, we could specify the actual system precision with:
@@ -168,10 +170,16 @@ static void send_packet(int fd, const char *server, 
uint32_t timeout)
        msg.poll = 10;  // max
        msg.precision = NTP_PRECISION_S;
 
-       memset(&addr, 0, sizeof(addr));
-       addr.sin_family = AF_INET;
-       addr.sin_port = htons(123);
-       addr.sin_addr.s_addr = inet_addr(server);
+       if (server->sa_family == AF_INET) {
+               size = sizeof(struct sockaddr_in);
+               addr = (void *)&(((struct sockaddr_in 
*)&timeserver_addr)->sin_addr);
+       } else if (server->sa_family == AF_INET6) {
+               size = sizeof(struct sockaddr_in6);
+               addr = (void *)&timeserver_addr.sin6_addr;
+       } else {
+               connman_error("Family is neither ipv4 nor ipv6");
+               return;
+       }
 
        gettimeofday(&transmit_timeval, NULL);
        clock_gettime(CLOCK_MONOTONIC, &mtx_time);
@@ -180,10 +188,12 @@ static void send_packet(int fd, const char *server, 
uint32_t timeout)
        msg.xmttime.fraction = htonl(transmit_timeval.tv_usec * 1000);
 
        len = sendto(fd, &msg, sizeof(msg), MSG_DONTWAIT,
-                                               &addr, sizeof(addr));
+                                               server, size);
+
        if (len < 0) {
                connman_error("Time request for server %s failed (%d/%s)",
-                       server, errno, strerror(errno));
+                       inet_ntop(server->sa_family, addr, ipaddrstring, 
sizeof(ipaddrstring)),
+                       errno, strerror(errno));
 
                if (errno == ENETUNREACH)
                        __connman_timeserver_sync_next();
@@ -192,7 +202,8 @@ static void send_packet(int fd, const char *server, 
uint32_t timeout)
        }
 
        if (len != sizeof(msg)) {
-               connman_error("Broken time request for server %s", server);
+               connman_error("Broken time request for server %s",
+                       inet_ntop(server->sa_family, addr, ipaddrstring, 
sizeof(ipaddrstring)));
                return;
        }
 
@@ -213,7 +224,7 @@ static gboolean next_poll(gpointer user_data)
        if (!timeserver || transmit_fd == 0)
                return FALSE;
 
-       send_packet(transmit_fd, timeserver, NTP_SEND_TIMEOUT);
+       send_packet(transmit_fd, (struct sockaddr *)&timeserver_addr, 
NTP_SEND_TIMEOUT);
 
        return FALSE;
 }
@@ -363,7 +374,7 @@ static gboolean received_data(GIOChannel *channel, 
GIOCondition condition,
                                                        gpointer user_data)
 {
        unsigned char buf[128];
-       struct sockaddr_in sender_addr;
+       struct sockaddr_in6 sender_addr;
        struct msghdr msg;
        struct iovec iov;
        struct cmsghdr *cmsg;
@@ -372,6 +383,9 @@ static gboolean received_data(GIOChannel *channel, 
GIOCondition condition,
        char aux[128];
        ssize_t len;
        int fd;
+       int size;
+       void * addr_ptr;
+       void * src_ptr;
 
        if (condition & (G_IO_HUP | G_IO_ERR | G_IO_NVAL)) {
                connman_error("Problem with timer server channel");
@@ -396,8 +410,20 @@ static gboolean received_data(GIOChannel *channel, 
GIOCondition condition,
        if (len < 0)
                return TRUE;
 
-       if (timeserver_addr.sin_addr.s_addr != sender_addr.sin_addr.s_addr)
-               /* only accept messages from the timeserver */
+       if (sender_addr.sin6_family == AF_INET) {
+               size = 4;
+               addr_ptr = &((struct sockaddr_in *)&timeserver_addr)->sin_addr;
+               src_ptr = &((struct sockaddr_in *)&sender_addr)->sin_addr;
+       } else if (sender_addr.sin6_family == AF_INET6) {
+               size = 16;
+               addr_ptr = &((struct sockaddr_in6 
*)&timeserver_addr)->sin6_addr;
+               src_ptr = &((struct sockaddr_in6 *)&sender_addr)->sin6_addr;
+       } else {
+               connman_error("Not a valid family type");
+               return TRUE;
+       }
+
+       if(memcmp(addr_ptr, src_ptr, size) != 0)
                return TRUE;
 
        tv = NULL;
@@ -422,36 +448,76 @@ static gboolean received_data(GIOChannel *channel, 
GIOCondition condition,
 static void start_ntp(char *server)
 {
        GIOChannel *channel;
-       struct sockaddr_in addr;
+       struct addrinfo hint;
+       struct addrinfo *info;
+       struct sockaddr * addr;
+       struct sockaddr_in  * in4addr;
+       struct sockaddr_in6 in6addr;
+       int size;
+       int family;
        int tos = IPTOS_LOWDELAY, timestamp = 1;
+       int ret;
 
        if (!server)
                return;
 
-       DBG("server %s", server);
+       memset(&hint, 0, sizeof(hint));
+       hint.ai_family = AF_UNSPEC;
+       hint.ai_socktype = SOCK_DGRAM;
+       hint.ai_flags = AI_NUMERICHOST | AI_PASSIVE;
+       ret = getaddrinfo(server, NULL, &hint, &info);
 
-       if (channel_watch > 0)
-               goto send;
+       if (ret) {
+               connman_error("cannot get server info");
+               return;
+       }
 
-       transmit_fd = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
-       if (transmit_fd < 0) {
-               connman_error("Failed to open time server socket");
+       family = info->ai_family;
+
+       memcpy(&timeserver_addr, info->ai_addr, info->ai_addrlen);
+       memset(&in6addr, 0, sizeof(in6addr));
+
+       if (family == AF_INET) {
+               ((struct sockaddr_in *)&timeserver_addr)->sin_port = htons(123);
+               in4addr = (struct sockaddr_in *)&in6addr;
+               in4addr->sin_family = family;
+               addr = (struct sockaddr *)in4addr;
+               size = sizeof(struct sockaddr_in);
+       } else if (family == AF_INET6) {
+               timeserver_addr.sin6_port = htons(123);
+               in6addr.sin6_family = family;
+               addr = (struct sockaddr *)&in6addr;
+               size = sizeof(in6addr);
+       } else {
+               connman_error("Family is neither ipv4 nor ipv6");
                return;
        }
+       freeaddrinfo(info);
+
+       DBG("server %s family %d", server, family);
+
+       if (channel_watch > 0)
+               goto send;
 
-       memset(&addr, 0, sizeof(addr));
-       addr.sin_family = AF_INET;
+       transmit_fd = socket(family, SOCK_DGRAM | SOCK_CLOEXEC, 0);
 
-       if (bind(transmit_fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
+       if (transmit_fd <= 0) {
+                connman_error("Failed to open time server socket");
+                return;
+       }
+
+       if (bind(transmit_fd, (struct sockaddr *) addr, size) < 0) {
                connman_error("Failed to bind time server socket");
                close(transmit_fd);
                return;
        }
 
-       if (setsockopt(transmit_fd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) < 0) 
{
-               connman_error("Failed to set type of service option");
-               close(transmit_fd);
-               return;
+       if (family == AF_INET) {
+               if (setsockopt(transmit_fd, IPPROTO_IP, IP_TOS, &tos, 
sizeof(tos)) < 0) {
+                       connman_error("Failed to set type of service option");
+                       close(transmit_fd);
+                       return;
+               }
        }
 
        if (setsockopt(transmit_fd, SOL_SOCKET, SO_TIMESTAMP, &timestamp,
@@ -479,7 +545,7 @@ static void start_ntp(char *server)
        g_io_channel_unref(channel);
 
 send:
-       send_packet(transmit_fd, server, NTP_SEND_TIMEOUT);
+       send_packet(transmit_fd, (struct sockaddr*)&timeserver_addr, 
NTP_SEND_TIMEOUT);
 }
 
 int __connman_ntp_start(char *server)
@@ -493,7 +559,6 @@ int __connman_ntp_start(char *server)
                g_free(timeserver);
 
        timeserver = g_strdup(server);
-       timeserver_addr.sin_addr.s_addr = inet_addr(server);
 
        start_ntp(timeserver);
 
-- 
2.6.0.rc2.230.g3dd15c0



------------------------------

Message: 2
Date: Tue, 24 Nov 2015 20:58:07 -0800
From: Naveen Singh <[email protected]>
To: [email protected]
Subject: [PATCH] Cancel the pending reply timer
Message-ID:
        <[email protected]>

From: nasingh <[email protected]>

Sometimes connman crashes generating response for set_powered
after the timeout (pending_reply timeout). But before the expiry
of timer if technology is removed, the previous technology pointer
is no longer valid and on timeout it crashes. This change cancels
the timer and frees the memory before freeing the technology pointer.
---
 src/technology.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/technology.c b/src/technology.c
index 55303a0..1891d06 100644
--- a/src/technology.c
+++ b/src/technology.c
@@ -1145,6 +1145,13 @@ static void technology_put(struct connman_technology 
*technology)
 
        g_slist_free(technology->device_list);
 
+    if (technology->pending_reply) {
+        dbus_message_unref(technology->pending_reply);
+        technology->pending_reply = NULL;
+        g_source_remove(technology->pending_timeout);
+        technology->pending_timeout = 0;
+    }
+
        g_free(technology->path);
        g_free(technology->regdom);
        g_free(technology->tethering_ident);
-- 
2.6.0.rc2.230.g3dd15c0



------------------------------

Message: 3
Date: Wed, 25 Nov 2015 10:48:35 +0200
From: Patrik Flykt <[email protected]>
To: Naveen Singh <[email protected]>
Cc: [email protected]
Subject: Re: [PATCH v4] NTP implementation for IPv6 timeserver
Message-ID: <[email protected]>
Content-Type: text/plain; charset="UTF-8"

On Tue, 2015-11-24 at 20:37 -0800, Naveen Singh wrote:
> From: nasingh <[email protected]>
> 
> Current NTP code is written with an assumption that
> timeserver is always an IPv4 address. If there is an
> IPv6 timeserver then the socket operation would fail
> with error as Permission denied(13). This change in
> ntp.c ensures that code works fine with both IPv4 and
> IPv6 address.

Applied, thanks!

I updated the commit message subject line to include a 'ntp:' prefix as
that's the current best practise in this project.

        Patrik



------------------------------

Message: 4
Date: Wed, 25 Nov 2015 10:48:51 +0200
From: Patrik Flykt <[email protected]>
To: Naveen Singh <[email protected]>
Cc: [email protected]
Subject: Re: [PATCH] Cancel the pending reply timer
Message-ID: <[email protected]>
Content-Type: text/plain; charset="UTF-8"

On Tue, 2015-11-24 at 20:58 -0800, Naveen Singh wrote:
> From: nasingh <[email protected]>
> 
> Sometimes connman crashes generating response for set_powered
> after the timeout (pending_reply timeout). But before the expiry
> of timer if technology is removed, the previous technology pointer
> is no longer valid and on timeout it crashes. This change cancels
> the timer and frees the memory before freeing the technology pointer.

Applied, thanks!

        Patrik



------------------------------

Message: 5
Date: Wed, 25 Nov 2015 12:47:26 +0200
From: Patrik Flykt <[email protected]>
To: Harish Jenny K N <[email protected]>
Cc: [email protected]
Subject: Re: [PATCH] bluetooth: Fix crash when adapter is NULL
Message-ID: <[email protected]>
Content-Type: text/plain; charset="UTF-8"

On Tue, 2015-11-24 at 17:39 +0530, Harish Jenny K N wrote:
> This fixes a crash in pan_create_nap function when
> proxy_get_string returns NULL for "Adapter".
> 
> The Backtrace:
> update_properties
> ->add_property
> -->pan_create_nap
> --->g_hash_table_lookup
> ---->g_str_hash
> 
> R0:  00000000  indicating NULL is passed to g_str_hash
> 
> This patch handles the crash by adding NULL check before
> passing it to g_hash_table_lookup.

Applied, thanks!

        Patrik



------------------------------

Message: 6
Date: Wed, 25 Nov 2015 12:47:45 +0200
From: Patrik Flykt <[email protected]>
To: Saurav Babu <[email protected]>
Cc: [email protected], [email protected]
Subject: Re: [PATCH] service: Fix memory leak
Message-ID: <[email protected]>
Content-Type: text/plain; charset="UTF-8"

On Tue, 2015-11-24 at 17:43 +0530, Saurav Babu wrote:
> ssid is allocated memory but never freed

Applied, thanks!

        Patrik



------------------------------

Message: 7
Date: Wed, 25 Nov 2015 13:22:16 +0200
From: Patrik Flykt <[email protected]>
To: Mike Purvis <[email protected]>
Cc: [email protected]
Subject: Re: [RFC 0/5] Move resolv.conf to /run/connman
Message-ID: <[email protected]>
Content-Type: text/plain; charset="UTF-8"


        Hi,

On Wed, 2015-11-04 at 13:44 -0500, Mike Purvis wrote:

> Any chance of races where resolv.conf is needed on startup prior to
> /run being mounted or connman having populated the link target?

As long as ConnMan is handling network connections and DNS
proxying/writing of resolv.conf, no DNS services can exist before
ConnMan has started and connected to a network. So from ConnMan's point
of view there are no issues with this.

Any other networking needed before starting ConnMan is to be solved by
the distro or the specific use case.

> Somewhat related, our experience with Connman 1.30 is that it's not
> correctly populating resolv.conf with search domains handed to it from
> a DHCP server. Is this an intentional or accidental oversight, or
> something which can be resolved by a config change?

Bug. Needs fixing.

Cheers,

        Patrik




------------------------------

Message: 8
Date: Wed, 25 Nov 2015 13:23:08 +0200
From: Patrik Flykt <[email protected]>
To: connman <[email protected]>
Subject: Re: connman removes FallbackNameservers at startup
Message-ID: <[email protected]>
Content-Type: text/plain; charset="UTF-8"

On Fri, 2015-10-30 at 18:57 +0200, Yevhen Kyriukha wrote:
> Hello,
> 
> I noticed an issue with FallbackNameservers.
> When connman starts on system boot it tries to connect to name servers
> that are specified in FallbackNameservers. But NIC is usually not
> ready by that moment and connman removes name servers with message:
> 
> Failed to connect to server 8.8.8.8
> 
> So when I run ./list-services script I do not see Nameservers that was
> specified.

This is a bit misleading log message. It just stated that the server
8.8.8.8 cannot be connected as there are no interfaces up at this point.
The FallbackNameservers will not be visible if there are other service
specific nameservers configured either manually or via DHCP.

HTH,

        Patrik



------------------------------

Message: 9
Date: Wed, 25 Nov 2015 13:27:54 +0200
From: Patrik Flykt <[email protected]>
To: [email protected]
Cc: connman <[email protected]>
Subject: Re: [PATCH v2 (resend)] wifi: Reset device->scanning if scan
        has not returned in 60 secs
Message-ID: <[email protected]>
Content-Type: text/plain; charset="UTF-8"


        Hi,

This becomes easier if implemented in gsupplicant/supplicant.c. As far
as I can tell, it's the wpa_supplicant ScanDone signal is the one
missing as the scan start is a method call which will time out
eventually. So what should happen here is a started scan, but where a
ScanDone signal is not sent.

I suggest adding a ~10 second timer at the end of
interface_scan_result(). If the timer is hit,
interface->scan_callback(-ETIMEDOUT, ...) should be called and the
scan_callback removed. This way there is only one code path of a scan
gone missing instead of multiple places in plugins/wifi.c.

I'm not sure if you are able to work on this anymore, I'm posting the
comments to the ml in case someone else is interested to take a look.

Cheers,

        Patrik


On Tue, 2015-11-24 at 22:24 +0200, [email protected] wrote:
> From: Pasi Sj?holm <[email protected]>
> 
> Due unknown reason sometimes scan_callback()-function is not being called
> after the scan has been succesfully initiated.
> 
> This will lead into deadlock situation where device->scanning is
> indefinitely true and will forbid any future attemps of scanning available
> wifi networks.
> 
> The deadlock can be manually sorted out by commanding wpa_supplicant
> to scan available networks. If any networks are available and one or
> more of them being autoconnectable ConnMan will connect them after
> receiving NetworkAdded-signal from wpa_supplicant. This will cause
> autoscan-feature to stop and setting the device->scanning to false.
> ---
>  plugins/wifi.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 49 insertions(+), 1 deletion(-)
> 
> diff --git a/plugins/wifi.c b/plugins/wifi.c
> index dfe849f..1e6507b 100644
> --- a/plugins/wifi.c
> +++ b/plugins/wifi.c
> @@ -61,6 +61,7 @@
>  
>  #define CLEANUP_TIMEOUT   8  /* in seconds */
>  #define INACTIVE_TIMEOUT  12 /* in seconds */
> +#define SCAN_FAIL_TIMEOUT 60 /* in seconds */
>  #define FAVORITE_MAXIMUM_RETRIES 2
>  
>  #define BGSCAN_DEFAULT "simple:30:-45:300"
> @@ -131,6 +132,7 @@ struct wifi_data {
>       struct hidden_params *hidden;
>       bool postpone_hidden;
>       struct wifi_tethering_info *tethering_param;
> +     unsigned int scan_fail_timeout;
>       /**
>        * autoscan "emulation".
>        */
> @@ -817,9 +819,25 @@ static void reset_autoscan(struct connman_device *device)
>       connman_device_unref(device);
>  }
>  
> +static gboolean scan_fail_timeout(gpointer data)
> +{
> +     struct connman_device *device = data;
> +     struct wifi_data *wifi = connman_device_get_data(device);
> +
> +     DBG("");
> +
> +     if (!wifi)
> +             return FALSE;
> +
> +     connman_device_set_scanning(device, CONNMAN_SERVICE_TYPE_WIFI, false);
> +     wifi->scan_fail_timeout = 0;
> +
> +     return FALSE;
> +}
> +
>  static void stop_autoscan(struct connman_device *device)
>  {
> -     const struct wifi_data *wifi = connman_device_get_data(device);
> +     struct wifi_data *wifi = connman_device_get_data(device);
>  
>       if (!wifi || !wifi->autoscan)
>               return;
> @@ -827,6 +845,11 @@ static void stop_autoscan(struct connman_device *device)
>       reset_autoscan(device);
>  
>       connman_device_set_scanning(device, CONNMAN_SERVICE_TYPE_WIFI, false);
> +
> +     if (wifi->scan_fail_timeout) {
> +             g_source_remove(wifi->scan_fail_timeout);
> +             wifi->scan_fail_timeout = 0;
> +     }
>  }
>  
>  static void check_p2p_technology(void)
> @@ -876,6 +899,10 @@ static void wifi_remove(struct connman_device *device)
>       if (wifi->p2p_connection_timeout)
>               g_source_remove(wifi->p2p_connection_timeout);
>  
> +     if (wifi->scan_fail_timeout) {
> +             g_source_remove(wifi->scan_fail_timeout);
> +     }
> +
>       remove_networks(device, wifi);
>  
>       connman_device_set_powered(device, false);
> @@ -1193,6 +1220,11 @@ static int throw_wifi_scan(struct connman_device 
> *device,
>       if (ret == 0) {
>               connman_device_set_scanning(device,
>                               CONNMAN_SERVICE_TYPE_WIFI, true);
> +
> +             wifi->scan_fail_timeout = g_timeout_add_seconds(
> +                                             SCAN_FAIL_TIMEOUT,
> +                                             scan_fail_timeout,
> +                                             device);
>       } else
>               connman_device_unref(device);
>  
> @@ -1262,6 +1294,11 @@ static void scan_callback(int result, 
> GSupplicantInterface *interface,
>       if (scanning) {
>               connman_device_set_scanning(device,
>                               CONNMAN_SERVICE_TYPE_WIFI, false);
> +
> +             if (wifi && wifi->scan_fail_timeout) {
> +                     g_source_remove(wifi->scan_fail_timeout);
> +                     wifi->scan_fail_timeout = 0;
> +             }
>       }
>  
>       if (result != -ENOLINK)
> @@ -1516,6 +1553,11 @@ static int wifi_disable(struct connman_device *device)
>               connman_device_unref(wifi->device);
>       }
>  
> +     if (wifi->scan_fail_timeout) {
> +             g_source_remove(wifi->scan_fail_timeout);
> +             wifi->scan_fail_timeout = 0;
> +     }
> +
>       /* In case of a user scan, device is still referenced */
>       if (connman_device_get_scanning(device)) {
>               connman_device_set_scanning(device,
> @@ -1864,6 +1906,12 @@ static int wifi_scan(enum connman_service_type type,
>       if (ret == 0) {
>               connman_device_set_scanning(device,
>                               CONNMAN_SERVICE_TYPE_WIFI, true);
> +
> +             wifi->scan_fail_timeout = g_timeout_add_seconds(
> +                                             SCAN_FAIL_TIMEOUT,
> +                                             scan_fail_timeout,
> +                                             device);
> +
>       } else {
>               g_supplicant_free_scan_params(scan_params);
>               connman_device_unref(device);




------------------------------

Subject: Digest Footer

_______________________________________________
connman mailing list
[email protected]
https://lists.01.org/mailman/listinfo/connman


------------------------------

End of connman Digest, Vol 1, Issue 5
*************************************

Reply via email to