Skip to contentSkip to conversation

: Add inversion to multiport match

PATCH In review Patrick McHardy 1 participant 1 message Jan 25, 2005 netfilter

lore
Share & tools
lore
#0 lore raw

PATCH 4/4 : Add inversion to multiport match

# This is a BitKeeper generated diff -Nru style patch. #
# ChangeSet
# 2005/01/25 04:31:49+01:00 [email protected]
# [NETFILTER]: Add inversion to multiport match
#
# Should add this to rev1 of multiport before 2.6.11 comes out.
#
# Signed-off-by: Phil Oester <[email protected]>
# Signed-off-by: Patrick McHardy <[email protected]>
#

# net/ipv4/netfilter/ipt_multiport.c
#   2005/01/25 04:31:40+01:00 [email protected] +8 -7
#   [NETFILTER]: Add inversion to multiport match
#   
#   Should add this to rev1 of multiport before 2.6.11 comes out.
#   
#   Signed-off-by: Phil Oester <[email protected]>
#   Signed-off-by: Patrick McHardy <[email protected]>
# 
# include/linux/netfilter_ipv4/ipt_multiport.h
#   2005/01/25 04:31:40+01:00 [email protected] +1 -0
#   [NETFILTER]: Add inversion to multiport match
#   
#   Should add this to rev1 of multiport before 2.6.11 comes out.
#   
#   Signed-off-by: Phil Oester <[email protected]>
#   Signed-off-by: Patrick McHardy <[email protected]>
# 
diff -Nru a/include/linux/netfilter_ipv4/ipt_multiport.h b/include/linux/netfilter_ipv4/ipt_multiport.h
--- a/include/linux/netfilter_ipv4/ipt_multiport.h	2005-01-25 04:37:23 +01:00
+++ b/include/linux/netfilter_ipv4/ipt_multiport.h	2005-01-25 04:37:23 +01:00
@@ -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 -Nru a/net/ipv4/netfilter/ipt_multiport.c b/net/ipv4/netfilter/ipt_multiport.c
--- a/net/ipv4/netfilter/ipt_multiport.c	2005-01-25 04:37:23 +01:00
+++ b/net/ipv4/netfilter/ipt_multiport.c	2005-01-25 04:37:23 +01:00
@@ -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