if (is_private_address(start) == FALSE)
return;
- mask = ~(0xffffffff >> prefixlen);
+ if (prefixlen >= 32)
+ mask = 0xffffffff;
+ else
+ mask = ~(0xffffffff >> prefixlen);
+
start = start & mask;
end = start | ~mask;
if (!(it->start <= info->start || info->start <= it->end))
continue;
- if (it->pool->collision_cb != NULL)
+ if (it->pool != NULL && it->pool->collision_cb != NULL)
it->pool->collision_cb(it->pool, it->pool->user_data);
return;
info = lookup_info(index, start);
if (info == NULL) {
/* In theory this should never happen */
- connman_error("Inconsisten IP pool management (start not found)");
+ connman_error("Inconsistent IP pool management (start not found)");
return;
}
* The range is at max 255 and we don't support overlapping
* blocks.
*/
- if (start + range > 254)
+ if (start + range > 254) {
+ connman_error("IP pool does not support pool size larger than 254");
return NULL;
+ }
block = get_free_block(start + range);
- if (block == 0)
+ if (block == 0) {
+ connman_warn("Could not find a free IP block");
return NULL;
+ }
pool = g_try_new0(struct connman_ippool, 1);
if (pool == NULL)