diff options
author | Kozlov Dmitry <xeb@mail.ru> | 2013-04-19 12:00:34 +0400 |
---|---|---|
committer | Kozlov Dmitry <xeb@mail.ru> | 2013-04-19 12:00:34 +0400 |
commit | e003275f092bdbe8b64b3da301886d5e02218d6e (patch) | |
tree | 26e21b668e45febec52a7499b8fc3d7f34b7d99b | |
parent | 199bd3556de16e4a92fd4e3d79ec6741c5959336 (diff) | |
download | accel-ppp-e003275f092bdbe8b64b3da301886d5e02218d6e.tar.gz accel-ppp-e003275f092bdbe8b64b3da301886d5e02218d6e.zip |
ipoe: fix local-net handling
-rw-r--r-- | accel-pppd/ctrl/ipoe/ipoe.c | 7 | ||||
-rw-r--r-- | drivers/ipoe/ipoe.c | 2 |
2 files changed, 7 insertions, 2 deletions
diff --git a/accel-pppd/ctrl/ipoe/ipoe.c b/accel-pppd/ctrl/ipoe/ipoe.c index 214f93a..aae1cd1 100644 --- a/accel-pppd/ctrl/ipoe/ipoe.c +++ b/accel-pppd/ctrl/ipoe/ipoe.c @@ -1627,7 +1627,12 @@ static void parse_local_net(const char *opt) if (mask == 32) mask = 0xffffffff; else - mask = (1 << mask) - 1; + mask = (1 << (32-mask)) - 1; + + addr = ntohl(addr); + mask = ~mask; + + //printf("%x/%x %x\n", htonl(addr), ~mask, htonl(addr)&(~mask)); ipoe_nl_add_net(addr & mask, mask); diff --git a/drivers/ipoe/ipoe.c b/drivers/ipoe/ipoe.c index 54cb217..6fe13f8 100644 --- a/drivers/ipoe/ipoe.c +++ b/drivers/ipoe/ipoe.c @@ -155,7 +155,7 @@ static int ipoe_check_network(__be32 addr) rcu_read_lock(); list_for_each_entry_rcu(n, &ipoe_networks, entry) { - if ((addr & n->mask) == n->addr) { + if ((ntohl(addr) & n->mask) == n->addr) { r = 1; break; } |