summaryrefslogtreecommitdiff
path: root/src/ippool.c
diff options
context:
space:
mode:
authorGuillaume Zajac <guillaume.zajac@linux.intel.com>2012-06-19 15:21:24 +0200
committerPatrik Flykt <patrik.flykt@linux.intel.com>2012-06-20 13:13:21 +0300
commit697de0a99339a264948fdcb67dc374034178bc04 (patch)
treec1f945ee534df62de2bde89c6a5c138017aaed5a /src/ippool.c
parentc80faf72bfdd1f78562504146f16a3b05874dd92 (diff)
downloadconnman-697de0a99339a264948fdcb67dc374034178bc04.tar.gz
connman-697de0a99339a264948fdcb67dc374034178bc04.tar.bz2
connman-697de0a99339a264948fdcb67dc374034178bc04.zip
ippool: Fix endless loop issue with 32 prefix length
While trying to establish a DUN connection with oFono, an endless loop was found when requesting an IP block. The problem was on data connection activation its address with 32 length prefix was notified through ConnMann using __connman_ippool_newaddr() but mask address shifting with 32 bits was obsolete. So IP pool was considerating block 0.0.0.0 to 255.255.255.255 was in use.
Diffstat (limited to 'src/ippool.c')
-rw-r--r--src/ippool.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/ippool.c b/src/ippool.c
index 58a0d281..52446cec 100644
--- a/src/ippool.c
+++ b/src/ippool.c
@@ -258,7 +258,11 @@ void __connman_ippool_newaddr(int index, const char *address,
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;