X-Git-Url: http://git.archive.openwrt.org/?p=project%2Ffirewall3.git;a=blobdiff_plain;f=ipsets.c;h=d6ff9bd272a7dc3d5b96773be473a34e9664cd1a;hp=62877c8456622a2e9e8b615cd29d9d13a872e5ea;hb=cfd25cee8cec398d93b24ff79c2aba0ea81b1670;hpb=46536e5263c4bf57a91c38b5d08d78c774649dda diff --git a/ipsets.c b/ipsets.c index 62877c8..d6ff9bd 100644 --- a/ipsets.c +++ b/ipsets.c @@ -373,20 +373,17 @@ fw3_create_ipsets(struct fw3_state *state) } void -fw3_destroy_ipsets(struct fw3_state *state) +fw3_destroy_ipsets(struct fw3_state *state, enum fw3_family family) { struct fw3_ipset *s, *tmp; - int mask = (1 << FW3_FAMILY_V4) | (1 << FW3_FAMILY_V6); + uint32_t family_mask = (1 << FW3_FAMILY_V4) | (1 << FW3_FAMILY_V6); list_for_each_entry_safe(s, tmp, &state->running_ipsets, running_list) { - if (!hasbit(state->defaults.flags, FW3_FAMILY_V4)) - delbit(s->flags, FW3_FAMILY_V4); + if (hasbit(s->running_flags, family)) + delbit(s->flags, family); - if (!hasbit(state->defaults.flags, FW3_FAMILY_V6)) - delbit(s->flags, FW3_FAMILY_V6); - - if (!(s->flags & mask)) + if (!(s->flags & family_mask)) { info("Deleting ipset %s", s->name);