X-Git-Url: http://git.openwrt.org/?p=project%2Ffirewall3.git;a=blobdiff_plain;f=redirects.c;fp=redirects.c;h=5dea21f7c9cff72a4e8b0e8c0bae837305cb39cb;hp=080e2c17d49fc1117d1467260ab81cda0eb9b8d6;hb=bba31cce0521e014109fc805671d4cff7ee9dbf6;hpb=0aaf63b89efb27bfa370aabc7550de10335abbe3 diff --git a/redirects.c b/redirects.c index 080e2c1..5dea21f 100644 --- a/redirects.c +++ b/redirects.c @@ -116,14 +116,11 @@ check_families(struct uci_element *e, struct fw3_redirect *r) static bool compare_addr(struct fw3_address *a, struct fw3_address *b) { - uint32_t mask; - if (a->family != FW3_FAMILY_V4 || b->family != FW3_FAMILY_V4) return false; - mask = htonl(~((1 << (32 - a->mask)) - 1)); - - return ((a->address.v4.s_addr & mask) == (b->address.v4.s_addr & mask)); + return ((a->address.v4.s_addr & a->mask.v4.s_addr) == + (b->address.v4.s_addr & a->mask.v4.s_addr)); } static bool @@ -603,8 +600,8 @@ expand_redirect(struct fw3_ipt_handle *handle, struct fw3_state *state, else ref_addr = *ext_addr; - ref_addr.mask = 32; - ext_addr->mask = 32; + ref_addr.mask.v4.s_addr = 0xFFFFFFFF; + ext_addr->mask.v4.s_addr = 0xFFFFFFFF; print_reflection(handle, state, redir, num, proto, &ref_addr, int_addr, ext_addr);