DA: Reduce debug log
[platform/upstream/connman.git] / src / ipaddress.c
old mode 100644 (file)
new mode 100755 (executable)
index f66bb67..201d834
@@ -2,7 +2,7 @@
  *
  *  Connection Manager
  *
- *  Copyright (C) 2007-2012  Intel Corporation. All rights reserved.
+ *  Copyright (C) 2007-2013  Intel Corporation. All rights reserved.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License version 2 as
 
 #include "connman.h"
 
+unsigned char connman_ipaddress_calc_netmask_len(const char *netmask)
+{
+       unsigned char bits;
+       in_addr_t mask;
+       in_addr_t host;
+
+       if (!netmask)
+               return 32;
+
+       mask = inet_network(netmask);
+       host = ~mask;
+
+       /* a valid netmask must be 2^n - 1 */
+       if ((host & (host + 1)) != 0)
+               return -1;
+
+       bits = 0;
+       for (; mask; mask <<= 1)
+               ++bits;
+
+       return bits;
+}
+
 struct connman_ipaddress *connman_ipaddress_alloc(int family)
 {
        struct connman_ipaddress *ipaddress;
 
        ipaddress = g_try_new0(struct connman_ipaddress, 1);
-       if (ipaddress == NULL)
+       if (!ipaddress)
                return NULL;
 
        ipaddress->family = family;
@@ -47,13 +70,22 @@ struct connman_ipaddress *connman_ipaddress_alloc(int family)
        ipaddress->peer = NULL;
        ipaddress->broadcast = NULL;
        ipaddress->gateway = NULL;
+       ipaddress->is_p2p = false;
 
        return ipaddress;
 }
 
+void connman_ipaddress_set_p2p(struct connman_ipaddress *ipaddress, bool value)
+{
+       if (!ipaddress)
+               return;
+
+       ipaddress->is_p2p = value;
+}
+
 void connman_ipaddress_free(struct connman_ipaddress *ipaddress)
 {
-       if (ipaddress == NULL)
+       if (!ipaddress)
                return;
 
        g_free(ipaddress->broadcast);
@@ -63,42 +95,19 @@ void connman_ipaddress_free(struct connman_ipaddress *ipaddress)
        g_free(ipaddress);
 }
 
-unsigned char __connman_ipaddress_netmask_prefix_len(const char *netmask)
-{
-       unsigned char bits;
-       in_addr_t mask;
-       in_addr_t host;
-
-       if (netmask == NULL)
-               return 32;
-
-       mask = inet_network(netmask);
-       host = ~mask;
-
-       /* a valid netmask must be 2^n - 1 */
-       if ((host & (host + 1)) != 0)
-               return -1;
-
-       bits = 0;
-       for (; mask; mask <<= 1)
-               ++bits;
-
-       return bits;
-}
-
-static gboolean check_ipv6_address(const char *address)
+static bool check_ipv6_address(const char *address)
 {
        unsigned char buf[sizeof(struct in6_addr)];
        int err;
 
-       if (address == NULL)
-               return FALSE;
+       if (!address)
+               return false;
 
        err = inet_pton(AF_INET6, address, buf);
-       if (err > 0)
-               return TRUE;
+       if (err == 1)
+               return true;
 
-       return FALSE;
+       return false;
 }
 
 int connman_ipaddress_set_ipv6(struct connman_ipaddress *ipaddress,
@@ -106,10 +115,10 @@ int connman_ipaddress_set_ipv6(struct connman_ipaddress *ipaddress,
                                unsigned char prefix_length,
                                const char *gateway)
 {
-       if (ipaddress == NULL)
+       if (!ipaddress)
                return -EINVAL;
 
-       if (check_ipv6_address(address) == FALSE)
+       if (!check_ipv6_address(address))
                return -EINVAL;
 
        DBG("prefix_len %d address %s gateway %s",
@@ -128,15 +137,28 @@ int connman_ipaddress_set_ipv6(struct connman_ipaddress *ipaddress,
        return 0;
 }
 
+int connman_ipaddress_get_ip(struct connman_ipaddress *ipaddress,
+                       const char **address,
+                       unsigned char *netmask_prefix_length)
+{
+       if (!ipaddress)
+               return -EINVAL;
+
+       *netmask_prefix_length = ipaddress->prefixlen;
+       *address = ipaddress->local;
+
+       return 0;
+}
+
 int connman_ipaddress_set_ipv4(struct connman_ipaddress *ipaddress,
                const char *address, const char *netmask, const char *gateway)
 {
-       if (ipaddress == NULL)
+       if (!ipaddress)
                return -EINVAL;
 
        ipaddress->family = AF_INET;
 
-       ipaddress->prefixlen = __connman_ipaddress_netmask_prefix_len(netmask);
+       ipaddress->prefixlen = connman_ipaddress_calc_netmask_len(netmask);
 
        g_free(ipaddress->local);
        ipaddress->local = g_strdup(address);
@@ -150,7 +172,7 @@ int connman_ipaddress_set_ipv4(struct connman_ipaddress *ipaddress,
 void connman_ipaddress_set_peer(struct connman_ipaddress *ipaddress,
                                const char *peer)
 {
-       if (ipaddress == NULL)
+       if (!ipaddress)
                return;
 
        g_free(ipaddress->peer);
@@ -159,7 +181,7 @@ void connman_ipaddress_set_peer(struct connman_ipaddress *ipaddress,
 
 void connman_ipaddress_clear(struct connman_ipaddress *ipaddress)
 {
-       if (ipaddress == NULL)
+       if (!ipaddress)
                return;
 
        ipaddress->prefixlen = 0;
@@ -179,13 +201,12 @@ void connman_ipaddress_clear(struct connman_ipaddress *ipaddress)
 
 /*
  * Note that this copy function only copies the actual address and
- * prefixlen. If you need full copy of ipaddress struct, then you need
- * to create a new function that does that.
+ * prefixlen. Use the other copy function to copy the whole struct.
  */
 void connman_ipaddress_copy_address(struct connman_ipaddress *ipaddress,
                                        struct connman_ipaddress *source)
 {
-       if (ipaddress == NULL || source == NULL)
+       if (!ipaddress || !source)
                return;
 
        ipaddress->family = source->family;
@@ -194,3 +215,24 @@ void connman_ipaddress_copy_address(struct connman_ipaddress *ipaddress,
        g_free(ipaddress->local);
        ipaddress->local = g_strdup(source->local);
 }
+
+struct connman_ipaddress *
+connman_ipaddress_copy(struct connman_ipaddress *ipaddress)
+{
+       struct connman_ipaddress *copy;
+
+       if (!ipaddress)
+               return NULL;
+
+       copy = g_new0(struct connman_ipaddress, 1);
+
+       copy->family = ipaddress->family;
+       copy->prefixlen = ipaddress->prefixlen;
+       copy->local = g_strdup(ipaddress->local);
+       copy->peer = g_strdup(ipaddress->peer);
+       copy->broadcast = g_strdup(ipaddress->broadcast);
+       copy->gateway = g_strdup(ipaddress->gateway);
+       copy->is_p2p = ipaddress->is_p2p;
+
+       return copy;
+}