int refcount;
int index;
int family;
- connman_bool_t enabled;
+ bool enabled;
struct connman_ipaddress *address;
struct connman_ipaddress *system;
};
static GHashTable *ipdevice_hash = NULL;
-unsigned char __vpn_ipconfig_netmask_prefix_len(const char *netmask)
+struct connman_ipaddress *
+__vpn_ipconfig_get_address(struct vpn_ipconfig *ipconfig)
{
- 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;
+ if (!ipconfig)
+ return NULL;
- return bits;
+ return ipconfig->address;
}
const char *__vpn_ipconfig_get_peer(struct vpn_ipconfig *ipconfig)
{
- if (ipconfig->address == NULL)
+ if (!ipconfig->address)
return NULL;
return ipconfig->address->peer;
struct vpn_ipdevice *ipdevice;
ipdevice = g_hash_table_lookup(ipdevice_hash, GINT_TO_POINTER(index));
- if (ipdevice == NULL)
+ if (!ipdevice)
return ARPHRD_VOID;
return ipdevice->type;
struct vpn_ipdevice *ipdevice;
ipdevice = g_hash_table_lookup(ipdevice_hash, GINT_TO_POINTER(index));
- if (ipdevice == NULL)
+ if (!ipdevice)
return 0;
return ipdevice->flags;
}
-void __vpn_ipconfig_foreach(void (*function) (int index,
+void vpn_ipconfig_foreach(void (*function) (int index,
void *user_data), void *user_data)
{
GList *list, *keys;
keys = g_hash_table_get_keys(ipdevice_hash);
- if (keys == NULL)
+ if (!keys)
return;
for (list = g_list_first(keys); list; list = g_list_next(list)) {
void __vpn_ipconfig_set_local(struct vpn_ipconfig *ipconfig,
const char *address)
{
- if (ipconfig->address == NULL)
+ if (!ipconfig->address)
return;
g_free(ipconfig->address->local);
const char *__vpn_ipconfig_get_local(struct vpn_ipconfig *ipconfig)
{
- if (ipconfig->address == NULL)
+ if (!ipconfig->address)
return NULL;
return ipconfig->address->local;
void __vpn_ipconfig_set_peer(struct vpn_ipconfig *ipconfig,
const char *address)
{
- if (ipconfig->address == NULL)
+ if (!ipconfig->address)
return;
g_free(ipconfig->address->peer);
void __vpn_ipconfig_set_broadcast(struct vpn_ipconfig *ipconfig,
const char *broadcast)
{
- if (ipconfig->address == NULL)
+ if (!ipconfig->address)
return;
g_free(ipconfig->address->broadcast);
{
DBG("");
- if (ipconfig->address == NULL)
+ if (!ipconfig->address)
return;
g_free(ipconfig->address->gateway);
ipconfig->address->gateway = g_strdup(gateway);
const char *
__vpn_ipconfig_get_gateway(struct vpn_ipconfig *ipconfig)
{
- if (ipconfig->address == NULL)
+ if (!ipconfig->address)
return NULL;
return ipconfig->address->gateway;
void __vpn_ipconfig_set_prefixlen(struct vpn_ipconfig *ipconfig,
unsigned char prefixlen)
{
- if (ipconfig->address == NULL)
+ if (!ipconfig->address)
return;
ipconfig->address->prefixlen = prefixlen;
unsigned char
__vpn_ipconfig_get_prefixlen(struct vpn_ipconfig *ipconfig)
{
- if (ipconfig->address == NULL)
+ if (!ipconfig->address)
return 0;
return ipconfig->address->prefixlen;
{
DBG("ipconfig %p family %d", ipconfig, family);
- if (ipconfig == NULL)
+ if (!ipconfig)
return -EINVAL;
if (family == AF_INET)
{
DBG("ipconfig %p family %d", ipconfig, family);
- if (ipconfig == NULL || ipconfig->address == NULL)
+ if (!ipconfig || !ipconfig->address)
return -EINVAL;
DBG("family %d gw %s peer %s", family,
return 0;
}
+void __vpn_ipconfig_unref_debug(struct vpn_ipconfig *ipconfig,
+ const char *file, int line, const char *caller)
+{
+ if (!ipconfig)
+ return;
+
+ DBG("%p ref %d by %s:%d:%s()", ipconfig, ipconfig->refcount - 1,
+ file, line, caller);
+
+ if (__sync_fetch_and_sub(&ipconfig->refcount, 1) != 1)
+ return;
+
+ connman_ipaddress_free(ipconfig->system);
+ connman_ipaddress_free(ipconfig->address);
+ g_free(ipconfig);
+}
+
static struct vpn_ipconfig *create_ipv6config(int index)
{
struct vpn_ipconfig *ipv6config;
DBG("index %d", index);
ipv6config = g_try_new0(struct vpn_ipconfig, 1);
- if (ipv6config == NULL)
+ if (!ipv6config)
return NULL;
ipv6config->refcount = 1;
ipv6config->index = index;
- ipv6config->enabled = FALSE;
+ ipv6config->enabled = false;
ipv6config->family = AF_INET6;
ipv6config->address = connman_ipaddress_alloc(AF_INET6);
- if (ipv6config->address == NULL) {
+ if (!ipv6config->address) {
g_free(ipv6config);
return NULL;
}
DBG("index %d", index);
ipconfig = g_try_new0(struct vpn_ipconfig, 1);
- if (ipconfig == NULL)
+ if (!ipconfig)
return NULL;
ipconfig->refcount = 1;
ipconfig->index = index;
- ipconfig->enabled = FALSE;
+ ipconfig->enabled = false;
ipconfig->family = family;
ipconfig->address = connman_ipaddress_alloc(AF_INET);
- if (ipconfig->address == NULL) {
+ if (!ipconfig->address) {
g_free(ipconfig);
return NULL;
}
return;
ipdevice = g_hash_table_lookup(ipdevice_hash, GINT_TO_POINTER(index));
- if (ipdevice != NULL)
+ if (ipdevice)
goto update;
ipdevice = g_try_new0(struct vpn_ipdevice, 1);
- if (ipdevice == NULL)
+ if (!ipdevice)
return;
ipdevice->index = index;
ipdevice->flags = flags;
str = g_string_new(NULL);
- if (str == NULL)
+ if (!str)
return;
if (flags & IFF_UP)
DBG("index %d", index);
ipdevice = g_hash_table_lookup(ipdevice_hash, GINT_TO_POINTER(index));
- if (ipdevice == NULL)
+ if (!ipdevice)
return;
g_hash_table_remove(ipdevice_hash, GINT_TO_POINTER(index));