netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] hash:net,net and hash:net,port,net fixes and debug output extending
@ 2014-05-05  8:07 Sergey Popovich
  2014-05-05  8:07 ` [PATCH 1/2] libipset: print third element in debugging Sergey Popovich
  2014-05-05  8:07 ` [PATCH 2/2] netnet,netportnet: Fix value range support for IPv4 Sergey Popovich
  0 siblings, 2 replies; 5+ messages in thread
From: Sergey Popovich @ 2014-05-05  8:07 UTC (permalink / raw)
  To: netfilter-devel

This small series present two patches one of which fixes
problem with element ranges support in hash:net,net and
hash:net,port,net set types. Second one just extends debugging
output for three dimension sets when ipset/library compiled
with IPSET_DEBUG.

See individual patch description for more information.

Sergey Popovich (2):
  libipset: print third element in debugging
  netnet,netportnet: Fix value range support for IPv4

 kernel/net/netfilter/ipset/ip_set_hash_netnet.c     |   13 +++++++------
 kernel/net/netfilter/ipset/ip_set_hash_netportnet.c |    6 ++++--
 lib/parse.c                                         |    4 +++-
 3 files changed, 14 insertions(+), 9 deletions(-)

-- 
1.7.10.4


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] libipset: print third element in debugging
  2014-05-05  8:07 [PATCH 0/2] hash:net,net and hash:net,port,net fixes and debug output extending Sergey Popovich
@ 2014-05-05  8:07 ` Sergey Popovich
  2014-05-06  9:05   ` Jozsef Kadlecsik
  2014-05-05  8:07 ` [PATCH 2/2] netnet,netportnet: Fix value range support for IPv4 Sergey Popovich
  1 sibling, 1 reply; 5+ messages in thread
From: Sergey Popovich @ 2014-05-05  8:07 UTC (permalink / raw)
  To: netfilter-devel

We have that done for first and second elements when
parsing element string, do this for third element for
convenience.

Signed-off-by: Sergey Popovich <popovich_sergei@mail.ru>
---
 lib/parse.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/parse.c b/lib/parse.c
index 4db872e..405d6a2 100644
--- a/lib/parse.c
+++ b/lib/parse.c
@@ -1976,8 +1976,10 @@ ipset_parse_elem(struct ipset_session *session,
 		D("parse elem part two: %s", a);
 		parse_elem(session, type, IPSET_DIM_TWO, a);
 	}
-	if (type->dimension > IPSET_DIM_TWO && b != NULL)
+	if (type->dimension > IPSET_DIM_TWO && b != NULL) {
+		D("parse elem part three: %s", b);
 		parse_elem(session, type, IPSET_DIM_THREE, b);
+	}
 
 	goto out;
 
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] netnet,netportnet: Fix value range support for IPv4
  2014-05-05  8:07 [PATCH 0/2] hash:net,net and hash:net,port,net fixes and debug output extending Sergey Popovich
  2014-05-05  8:07 ` [PATCH 1/2] libipset: print third element in debugging Sergey Popovich
@ 2014-05-05  8:07 ` Sergey Popovich
  2014-05-06  9:06   ` Jozsef Kadlecsik
  1 sibling, 1 reply; 5+ messages in thread
From: Sergey Popovich @ 2014-05-05  8:07 UTC (permalink / raw)
  To: netfilter-devel

Ranges of values are broken with hash:net,net and hash:net,port,net.

hash:net,net
============

   # ipset create test-nn hash:net,net
   # ipset add test-nn 10.0.10.1-10.0.10.127,10.0.0.0/8

   # ipset list test-nn
   Name: test-nn
   Type: hash:net,net
   Revision: 0
   Header: family inet hashsize 1024 maxelem 65536
   Size in memory: 16960
   References: 0
   Members:
   10.0.10.1,10.0.0.0/8

   # ipset test test-nn 10.0.10.65,10.0.0.1
   10.0.10.65,10.0.0.1 is NOT in set test-nn.
   # ipset test test-nn 10.0.10.1,10.0.0.1
   10.0.10.1,10.0.0.1 is in set test-nn.

hash:net,port,net
=================

   # ipset create test-npn hash:net,port,net
   # ipset add test-npn 10.0.10.1-10.0.10.127,tcp:80,10.0.0.0/8
   # ipset list test-npn
   Name: test-npn
   Type: hash:net,port,net
   Revision: 0
   Header: family inet hashsize 1024 maxelem 65536
   Size in memory: 17344
   References: 0
   Members:
   10.0.10.8/29,tcp:80,10.0.0.0
   10.0.10.16/28,tcp:80,10.0.0.0
   10.0.10.2/31,tcp:80,10.0.0.0
   10.0.10.64/26,tcp:80,10.0.0.0
   10.0.10.32/27,tcp:80,10.0.0.0
   10.0.10.4/30,tcp:80,10.0.0.0
   10.0.10.1,tcp:80,10.0.0.0
   # ipset list test-npn
   # ipset test test-npn 10.0.10.126,tcp:80,10.0.0.2
   10.0.10.126,tcp:80,10.0.0.2 is NOT in set test-npn.
   # ipset test test-npn 10.0.10.126,tcp:80,10.0.0.0
   10.0.10.126,tcp:80,10.0.0.0 is in set test-npn.

   # ipset create test-npn hash:net,port,net
   # ipset add test-npn 10.0.10.0/24,tcp:80-81,10.0.0.0/8
   # ipset list test-npn
   Name: test-npn
   Type: hash:net,port,net
   Revision: 0
   Header: family inet hashsize 1024 maxelem 65536
   Size in memory: 17024
   References: 0
   Members:
   10.0.10.0,tcp:80,10.0.0.0
   10.0.10.0,tcp:81,10.0.0.0
   # ipset test test-npn 10.0.10.126,tcp:80,10.0.0.0
   10.0.10.126,tcp:80,10.0.0.0 is NOT in set test-npn.
   # ipset test test-npn 10.0.10.0,tcp:80,10.0.0.0
   10.0.10.0,tcp:80,10.0.0.0 is in set test-npn.

Correctly setup from..to variables where no IPSET_ATTR_IP_TO{,2}
attribute is given, so in range processing loop we construct proper
cidr value. Check whenever we have no ranges and can short cut in
hash:net,net properly. Use unlikely() where appropriate, to comply
with other modules.

Signed-off-by: Sergey Popovich <popovich_sergei@mail.ru>
---
 kernel/net/netfilter/ipset/ip_set_hash_netnet.c     |   13 +++++++------
 kernel/net/netfilter/ipset/ip_set_hash_netportnet.c |    6 ++++--
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/kernel/net/netfilter/ipset/ip_set_hash_netnet.c b/kernel/net/netfilter/ipset/ip_set_hash_netnet.c
index 3e99987..96b1313 100644
--- a/kernel/net/netfilter/ipset/ip_set_hash_netnet.c
+++ b/kernel/net/netfilter/ipset/ip_set_hash_netnet.c
@@ -203,7 +203,7 @@ hash_netnet4_uadt(struct ip_set *set, struct nlattr *tb[],
 			flags |= (IPSET_FLAG_NOMATCH << 16);
 	}
 
-	if (adt == IPSET_TEST || !(tb[IPSET_ATTR_IP_TO] &&
+	if (adt == IPSET_TEST || !(tb[IPSET_ATTR_IP_TO] ||
 				   tb[IPSET_ATTR_IP2_TO])) {
 		e.ip[0] = htonl(ip & ip_set_hostmask(e.cidr[0]));
 		e.ip[1] = htonl(ip2_from & ip_set_hostmask(e.cidr[1]));
@@ -219,9 +219,10 @@ hash_netnet4_uadt(struct ip_set *set, struct nlattr *tb[],
 			return ret;
 		if (ip_to < ip)
 			swap(ip, ip_to);
-		if (ip + UINT_MAX == ip_to)
+		if (unlikely(ip + UINT_MAX == ip_to))
 			return -IPSET_ERR_HASH_RANGE;
-	}
+	} else
+		ip_set_mask_from_to(ip, ip_to, e.cidr[0]);
 
 	ip2_to = ip2_from;
 	if (tb[IPSET_ATTR_IP2_TO]) {
@@ -230,10 +231,10 @@ hash_netnet4_uadt(struct ip_set *set, struct nlattr *tb[],
 			return ret;
 		if (ip2_to < ip2_from)
 			swap(ip2_from, ip2_to);
-		if (ip2_from + UINT_MAX == ip2_to)
+		if (unlikely(ip2_from + UINT_MAX == ip2_to))
 			return -IPSET_ERR_HASH_RANGE;
-
-	}
+	} else
+		ip_set_mask_from_to(ip2_from, ip2_to, e.cidr[1]);
 
 	if (retried)
 		ip = ntohl(h->next.ip[0]);
diff --git a/kernel/net/netfilter/ipset/ip_set_hash_netportnet.c b/kernel/net/netfilter/ipset/ip_set_hash_netportnet.c
index c0d2ba7..2f00343 100644
--- a/kernel/net/netfilter/ipset/ip_set_hash_netportnet.c
+++ b/kernel/net/netfilter/ipset/ip_set_hash_netportnet.c
@@ -257,7 +257,8 @@ hash_netportnet4_uadt(struct ip_set *set, struct nlattr *tb[],
 			swap(ip, ip_to);
 		if (unlikely(ip + UINT_MAX == ip_to))
 			return -IPSET_ERR_HASH_RANGE;
-	}
+	} else
+		ip_set_mask_from_to(ip, ip_to, e.cidr[0]);
 
 	port_to = port = ntohs(e.port);
 	if (tb[IPSET_ATTR_PORT_TO]) {
@@ -275,7 +276,8 @@ hash_netportnet4_uadt(struct ip_set *set, struct nlattr *tb[],
 			swap(ip2_from, ip2_to);
 		if (unlikely(ip2_from + UINT_MAX == ip2_to))
 			return -IPSET_ERR_HASH_RANGE;
-	}
+	} else
+		ip_set_mask_from_to(ip2_from, ip2_to, e.cidr[1]);
 
 	if (retried)
 		ip = ntohl(h->next.ip[0]);
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] libipset: print third element in debugging
  2014-05-05  8:07 ` [PATCH 1/2] libipset: print third element in debugging Sergey Popovich
@ 2014-05-06  9:05   ` Jozsef Kadlecsik
  0 siblings, 0 replies; 5+ messages in thread
From: Jozsef Kadlecsik @ 2014-05-06  9:05 UTC (permalink / raw)
  To: Sergey Popovich; +Cc: netfilter-devel

On Mon, 5 May 2014, Sergey Popovich wrote:

> We have that done for first and second elements when
> parsing element string, do this for third element for
> convenience.

Patch is applied, thanks.

Best regards,
Jozsef
-
E-mail  : kadlec@blackhole.kfki.hu, kadlecsik.jozsef@wigner.mta.hu
PGP key : http://www.kfki.hu/~kadlec/pgp_public_key.txt
Address : Wigner Research Centre for Physics, Hungarian Academy of Sciences
          H-1525 Budapest 114, POB. 49, Hungary

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/2] netnet,netportnet: Fix value range support for IPv4
  2014-05-05  8:07 ` [PATCH 2/2] netnet,netportnet: Fix value range support for IPv4 Sergey Popovich
@ 2014-05-06  9:06   ` Jozsef Kadlecsik
  0 siblings, 0 replies; 5+ messages in thread
From: Jozsef Kadlecsik @ 2014-05-06  9:06 UTC (permalink / raw)
  To: Sergey Popovich; +Cc: netfilter-devel

On Mon, 5 May 2014, Sergey Popovich wrote:

> Ranges of values are broken with hash:net,net and hash:net,port,net.
> 
> hash:net,net
> ============
> 
>    # ipset create test-nn hash:net,net
>    # ipset add test-nn 10.0.10.1-10.0.10.127,10.0.0.0/8
> 
>    # ipset list test-nn
>    Name: test-nn
>    Type: hash:net,net
>    Revision: 0
>    Header: family inet hashsize 1024 maxelem 65536
>    Size in memory: 16960
>    References: 0
>    Members:
>    10.0.10.1,10.0.0.0/8
> 
>    # ipset test test-nn 10.0.10.65,10.0.0.1
>    10.0.10.65,10.0.0.1 is NOT in set test-nn.
>    # ipset test test-nn 10.0.10.1,10.0.0.1
>    10.0.10.1,10.0.0.1 is in set test-nn.
> 
> hash:net,port,net
> =================
> 
>    # ipset create test-npn hash:net,port,net
>    # ipset add test-npn 10.0.10.1-10.0.10.127,tcp:80,10.0.0.0/8
>    # ipset list test-npn
>    Name: test-npn
>    Type: hash:net,port,net
>    Revision: 0
>    Header: family inet hashsize 1024 maxelem 65536
>    Size in memory: 17344
>    References: 0
>    Members:
>    10.0.10.8/29,tcp:80,10.0.0.0
>    10.0.10.16/28,tcp:80,10.0.0.0
>    10.0.10.2/31,tcp:80,10.0.0.0
>    10.0.10.64/26,tcp:80,10.0.0.0
>    10.0.10.32/27,tcp:80,10.0.0.0
>    10.0.10.4/30,tcp:80,10.0.0.0
>    10.0.10.1,tcp:80,10.0.0.0
>    # ipset list test-npn
>    # ipset test test-npn 10.0.10.126,tcp:80,10.0.0.2
>    10.0.10.126,tcp:80,10.0.0.2 is NOT in set test-npn.
>    # ipset test test-npn 10.0.10.126,tcp:80,10.0.0.0
>    10.0.10.126,tcp:80,10.0.0.0 is in set test-npn.
> 
>    # ipset create test-npn hash:net,port,net
>    # ipset add test-npn 10.0.10.0/24,tcp:80-81,10.0.0.0/8
>    # ipset list test-npn
>    Name: test-npn
>    Type: hash:net,port,net
>    Revision: 0
>    Header: family inet hashsize 1024 maxelem 65536
>    Size in memory: 17024
>    References: 0
>    Members:
>    10.0.10.0,tcp:80,10.0.0.0
>    10.0.10.0,tcp:81,10.0.0.0
>    # ipset test test-npn 10.0.10.126,tcp:80,10.0.0.0
>    10.0.10.126,tcp:80,10.0.0.0 is NOT in set test-npn.
>    # ipset test test-npn 10.0.10.0,tcp:80,10.0.0.0
>    10.0.10.0,tcp:80,10.0.0.0 is in set test-npn.
> 
> Correctly setup from..to variables where no IPSET_ATTR_IP_TO{,2}
> attribute is given, so in range processing loop we construct proper
> cidr value. Check whenever we have no ranges and can short cut in
> hash:net,net properly. Use unlikely() where appropriate, to comply
> with other modules.

Good catch, patch is applied. Thanks.

Best regards,
Jozsef
-
E-mail  : kadlec@blackhole.kfki.hu, kadlecsik.jozsef@wigner.mta.hu
PGP key : http://www.kfki.hu/~kadlec/pgp_public_key.txt
Address : Wigner Research Centre for Physics, Hungarian Academy of Sciences
          H-1525 Budapest 114, POB. 49, Hungary

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-05-06  9:06 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-05  8:07 [PATCH 0/2] hash:net,net and hash:net,port,net fixes and debug output extending Sergey Popovich
2014-05-05  8:07 ` [PATCH 1/2] libipset: print third element in debugging Sergey Popovich
2014-05-06  9:05   ` Jozsef Kadlecsik
2014-05-05  8:07 ` [PATCH 2/2] netnet,netportnet: Fix value range support for IPv4 Sergey Popovich
2014-05-06  9:06   ` Jozsef Kadlecsik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).