diff -ru linux-orig/include/linux/netfilter_ipv4/ipt_multiport.h linux-mport/include/linux/netfilter_ipv4/ipt_multiport.h --- linux-orig/include/linux/netfilter_ipv4/ipt_multiport.h 2005-01-07 20:51:06.293435976 -0500 +++ linux-mport/include/linux/netfilter_ipv4/ipt_multiport.h 2005-01-06 19:55:28.000000000 -0500 @@ -25,5 +25,6 @@ u_int8_t count; /* Number of ports */ u_int16_t ports[IPT_MULTI_PORTS]; /* Ports */ u_int8_t pflags[IPT_MULTI_PORTS]; /* Port flags */ + u_int8_t invert; /* Invert flag */ }; #endif /*_IPT_MULTIPORT_H*/ diff -ru linux-orig/net/ipv4/netfilter/ipt_multiport.c linux-mport/net/ipv4/netfilter/ipt_multiport.c --- linux-orig/net/ipv4/netfilter/ipt_multiport.c 2005-01-07 20:51:06.404419104 -0500 +++ linux-mport/net/ipv4/netfilter/ipt_multiport.c 2005-01-07 20:53:23.468582184 -0500 @@ -64,30 +64,31 @@ if (minfo->flags == IPT_MULTIPORT_SOURCE && src >= s && src <= e) - return 1; + return 1 ^ minfo->invert; if (minfo->flags == IPT_MULTIPORT_DESTINATION && dst >= s && dst <= e) - return 1; + return 1 ^ minfo->invert; if (minfo->flags == IPT_MULTIPORT_EITHER && ((dst >= s && dst <= e) || (src >= s && src <= e))) - return 1; + return 1 ^ minfo->invert; } else { /* exact port matching */ duprintf("src or dst matches with %d?\n", s); + if (minfo->flags == IPT_MULTIPORT_SOURCE && src == s) - return 1; + return 1 ^ minfo->invert; if (minfo->flags == IPT_MULTIPORT_DESTINATION && dst == s) - return 1; + return 1 ^ minfo->invert; if (minfo->flags == IPT_MULTIPORT_EITHER && (src == s || dst == s)) - return 1; + return 1 ^ minfo->invert; } } - return 0; + return minfo->invert; } static int