#define STRCASEQ(a, b) (strcasecmp(a, b) == 0)
#define STRNCASEQ(a, b, n) (strncasecmp(a, b, n) == 0)
+/* Match set type names */
+#define MATCH_TYPENAME(a, b) STRNEQ(a, b, strlen(b))
+
/* Stringify tokens */
#define _STR(c) #c
#define STR(c) _STR(c)
goto nla_put_failure;
#endif
if (nla_put_net32(skb, IPSET_ATTR_REFERENCES, htonl(set->ref - 1)) ||
- nla_put_net32(skb, IPSET_ATTR_MEMSIZE, htonl(memsize)))
+ nla_put_net32(skb, IPSET_ATTR_MEMSIZE, htonl(memsize)) ||
+ nla_put_net32(skb, IPSET_ATTR_ELEMENTS, htonl(h->elements)))
goto nla_put_failure;
if (unlikely(ip_set_put_flags(skb, set)))
goto nla_put_failure;
{ },
};
-#define MATCH_TYPENAME(a, b) STRNEQ(a, b, strlen(b))
-
/**
* ipset_errcode - interpret a kernel error code
* @session: session structure
safe_dprintf(session, ipset_print_number, IPSET_OPT_MEMSIZE);
safe_snprintf(session, "\nReferences: ");
safe_dprintf(session, ipset_print_number, IPSET_OPT_REFERENCES);
+ if (MATCH_TYPENAME(type->name , "hash:")) {
+ safe_snprintf(session, "\nNumber of entries: ");
+ safe_dprintf(session, ipset_print_number, IPSET_OPT_ELEMENTS);
+ }
safe_snprintf(session,
session->envopts & IPSET_ENV_LIST_HEADER ?
"\n" : "\nMembers:\n");
safe_dprintf(session, ipset_print_number, IPSET_OPT_MEMSIZE);
safe_snprintf(session, "</memsize>\n<references>");
safe_dprintf(session, ipset_print_number, IPSET_OPT_REFERENCES);
+ safe_snprintf(session, "</references>\n");
+ if (MATCH_TYPENAME(type->name , "hash:")) {
+ safe_snprintf(session, "<numentries>");
+ safe_dprintf(session, ipset_print_number, IPSET_OPT_ELEMENTS);
+ safe_snprintf(session, "</numentries>\n");
+ }
safe_snprintf(session,
session->envopts & IPSET_ENV_LIST_HEADER ?
- "</references>\n</header>\n" :
- "</references>\n</header>\n<members>\n");
+ "</header>\n" :
+ "</header>\n<members>\n");
break;
default:
break;
for x in `seq 1 32`; do
$ipset a test 10.0.0.0/$x
n=`$ipset l test | wc -l`
- n=$((n - 7))
+ n=$((n - 8))
test $n -eq $x || exit 1
done
for x in `seq 32 -1 1`; do
$ipset d test 10.0.0.0/$x
n=`$ipset l test | wc -l`
# We deleted one element
- n=$((n - 7 + 1))
+ n=$((n - 8 + 1))
test $n -eq $x || exit 1
done
$ipset x test
Name: test
Type: hash:net,net
Header: family inet hashsize 128 maxelem 65536 comment
-Size in memory: 3392
+Size in memory: 1288
References: 0
+Number of entries: 4
Members:
1.1.1.1,1.1.1.2 comment "text 1.1.1.1/32,1.1.1.2/32"
192.168.68.64/27,192.168.129.64/27 comment "text 192.168.68.69/27,192.168.129.69/27"
Name: test
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536 timeout x comment
-Size in memory: 101400
+Size in memory: 95168
References: 0
+Number of entries: 512
Members:
2.0.0.0 timeout x comment "text message 0"
2.0.0.1 timeout x comment "text message 1"
Name: test
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536 timeout x comment
-Size in memory: 100152
+Size in memory: 98256
References: 0
+Number of entries: 512
Members:
2.0.1.0 timeout x comment "text message 0"
2.0.1.1 timeout x comment "text message 1"
Name: a
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 16536
+Size in memory: 152
References: 1
+Number of entries: 0
Members:
Name: b
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 16536
+Size in memory: 152
References: 1
+Number of entries: 0
Members:
Name: c
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 16536
+Size in memory: 152
References: 1
+Number of entries: 0
Members:
Name: test
Type: list:set
Header: size 8 comment
-Size in memory: 264
+Size in memory: 288
References: 0
+Number of entries: 3
Members:
a comment "a set comment"
b comment "b set comment"
Name: test
Type: hash:ip,mark
Header: family inet markmask 0xffffffff hashsize 1024 maxelem 65536 timeout x
-Size in memory: 8836
+Size in memory: 640
References: 0
+Number of entries: 4
Members:
2.0.0.0,0x00000005 timeout x
2.0.0.1,0x00000005 timeout x
Name: test
Type: hash:ip,mark
Header: family inet markmask 0xffffffff hashsize 1024 maxelem 65536 timeout 5
-Size in memory: 8836
+Size in memory: 640
References: 0
+Number of entries: 4
Members:
Name: test
Type: hash:ip,port,ip
Header: family inet hashsize 1024 maxelem 65536 timeout x
-Size in memory: 8720
+Size in memory: 840
References: 0
+Number of entries: 4
Members:
2.0.0.0,tcp:5,1.1.1.1 timeout x
2.0.0.1,tcp:5,1.1.1.1 timeout x
Name: test
Type: hash:ip,port,ip
Header: family inet hashsize 1024 maxelem 65536 timeout 5
-Size in memory: 8304
+Size in memory: 840
References: 0
+Number of entries: 4
Members:
Name: test
Type: hash:ip,port,net
Header: family inet hashsize 1024 maxelem 65536 timeout x
-Size in memory: 8720
+Size in memory: 1096
References: 0
+Number of entries: 4
Members:
2.0.0.0,tcp:5,192.168.0.0/25 timeout x
2.0.0.1,tcp:5,192.168.0.0/24 timeout x
Name: test
Type: hash:ip,port
Header: family inet hashsize 1024 maxelem 65536 timeout x
-Size in memory: 8592
+Size in memory: 640
References: 0
+Number of entries: 4
Members:
2.0.0.0,tcp:5 timeout x
2.0.0.1,tcp:5 timeout x
Name: test
Type: hash:ip,port
Header: family inet hashsize 1024 maxelem 65536 timeout 5
-Size in memory: 8304
+Size in memory: 640
References: 0
+Number of entries: 4
Members:
Name: test
Type: hash:ip,port
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 8432
+Size in memory: 320
References: 0
+Number of entries: 3
Members:
2.0.0.1,tcp:80
2.0.0.1,udp:80
Name: test
Type: hash:ip
Header: family inet hashsize 128 maxelem 65536 timeout 5
-Size in memory: 1208
+Size in memory: 352
References: 0
+Number of entries: 2
Members:
192.168.68.69 timeout 0
Name: test
Type: hash:ip
Header: family inet hashsize 128 maxelem 65536 netmask 24 timeout 5
-Size in memory: 1352
+Size in memory: 464
References: 0
+Number of entries: 3
Members:
200.100.10.0 timeout 0
Name: test
Type: hash:ip
Header: family inet hashsize 128 maxelem 65536 timeout x
-Size in memory: 1280
+Size in memory: 352
References: 0
+Number of entries: 2
Members:
192.168.68.69 timeout x
2.0.0.1 timeout x
Name: test
Type: hash:ip
Header: family inet hashsize 128 maxelem 65536 netmask 24 timeout x
-Size in memory: 1352
+Size in memory: 464
References: 0
+Number of entries: 3
Members:
192.168.68.0 timeout x
2.0.0.0 timeout x
Name: test
Type: hash:ip,mark
Header: family inet6 markmask 0xffffffff hashsize 1024 maxelem 65536 timeout x
-Size in memory: 9316
+Size in memory: 1088
References: 0
+Number of entries: 4
Members:
2:1::,0x00000080 timeout x
2:1::1,0x00000080 timeout x
Name: test
Type: hash:ip,mark
Header: family inet6 markmask 0xffffffff hashsize 1024 maxelem 65536 timeout 5
-Size in memory: 9316
+Size in memory: 1088
References: 0
+Number of entries: 4
Members:
Name: test
Type: hash:ip,port,ip
Header: family inet6 hashsize 1024 maxelem 65536 timeout x
-Size in memory: 9104
+Size in memory: 1608
References: 0
+Size in memory: 9104
+Number of entries: 4
Members:
2:1::,tcp:128,2:2:2::2 timeout x
2:1::1,tcp:128,2:2:2::2 timeout x
Name: test
Type: hash:ip,port,ip
Header: family inet6 hashsize 1024 maxelem 65536 timeout 5
-Size in memory: 8304
+Size in memory: 1608
References: 0
+Number of entries: 4
Members:
Name: test
Type: hash:ip,port,net
Header: family inet6 hashsize 1024 maxelem 65536
-Size in memory: 9928
+Size in memory: 1864
References: 0
+Number of entries: 4
Members:
2:1::,tcp:128,::/12
2:1::1,tcp:128,::/12
Name: test
Type: hash:ip,port
Header: family inet6 hashsize 1024 maxelem 65536 timeout x
-Size in memory: 8848
+Size in memory: 1088
References: 0
+Number of entries: 4
Members:
2:1::,tcp:128 timeout x
2:1::1,tcp:128 timeout x
Name: test
Type: hash:ip,port
Header: family inet6 hashsize 1024 maxelem 65536 timeout 5
-Size in memory: 8304
+Size in memory: 1088
References: 0
+Number of entries: 4
Members:
Name: test
Type: hash:ip
Header: family inet6 hashsize 128 maxelem 65536 timeout 5
-Size in memory: 1240
+Size in memory: 512
References: 0
+Number of entries: 2
Members:
192:168:68::69 timeout 0
Name: test
Type: hash:ip
Header: family inet6 hashsize 128 maxelem 65536 netmask 64 timeout 5
-Size in memory: 1448
+Size in memory: 704
References: 0
+Number of entries: 3
Members:
200:100:10:: timeout 0
Name: test
Type: hash:ip
Header: family inet6 hashsize 128 maxelem 65536 timeout x
-Size in memory: 1344
+Size in memory: 512
References: 0
+Number of entries: 2
Members:
192:168:68::69 timeout x
2::1 timeout x
Name: test
Type: hash:ip
Header: family inet6 hashsize 128 maxelem 65536 netmask 64 timeout x
-Size in memory: 1448
+Size in memory: 704
References: 0
+Number of entries: 3
Members:
192:168:68:: timeout x
200:100:10:: timeout x
Name: test
Type: hash:mac
Header: hashsize 128 maxelem 65536 timeout 5
-Size in memory: 2488
+Size in memory: 384
References: 0
+Number of entries: 2
Members:
00:0A:00:00:00:00 timeout 0
Name: test
Type: hash:mac
Header: hashsize 1024 maxelem 65536 skbinfo
-Size in memory: 17304
+Size in memory: 1088
References: 0
+Number of entries: 6
Members:
01:02:03:04:05:06 skbmark 0x123456
01:02:03:04:05:07 skbmark 0x1234ab/0xffff
Name: test
Type: hash:mac
Header: hashsize 128 maxelem 65536 timeout x
-Size in memory: 2488
+Size in memory: 384
References: 0
+Number of entries: 2
Members:
00:00:00:00:02:00 timeout x
00:0A:00:00:00:00 timeout x
Name: test
Type: hash:mac
Header: hashsize 1024 maxelem 2 skbinfo
-Size in memory: 632
+Size in memory: 448
References: 0
+Number of entries: 2
Members:
01:02:03:04:05:06 skbprio 1:10
01:02:03:04:05:07 skbprio 1:12 skbqueue 8
# Add clashing elements
0 (set -e; for x in `seq 0 63`; do ipset add test 10.0.0.0/16,eth$x; done)
# Check listing
-0 n=`ipset list test | grep -v Revision: | wc -l` && test $n -eq 70
+0 n=`ipset list test | grep -v Revision: | wc -l` && test $n -eq 71
# Delete test set
0 ipset destroy test
# Create test set with timeout support
Name: test
Type: hash:net,iface
Header: family inet hashsize 128 maxelem 65536
-Size in memory: 2928
+Size in memory: 928
References: 0
+Number of entries: 4
Members:
1.1.1.1,eth0
192.168.68.64/27,eth1
Name: test
Type: hash:net,iface
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 18512
+Size in memory: 3872
References: 0
+Number of entries: 27
Members:
192.0.0.0/10,eth10
192.0.0.0/11,eth11
Name: test
Type: hash:net,iface
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 17168
+Size in memory: 928
References: 0
+Number of entries: 4
Members:
10.2.0.0/24,eth0
10.2.1.0/29,eth0
Name: test
Type: hash:net,net
Header: family inet hashsize 128 maxelem 65536 timeout x
-Size in memory: 3040
+Size in memory: 1288
References: 0
+Number of entries: 4
Members:
1.1.1.1,1.1.1.2 timeout x
192.168.68.64/27,192.168.129.64/27 timeout x
Name: test
Type: hash:net,net
Header: family inet hashsize 128 maxelem 65536 timeout 5
-Size in memory: 3040
+Size in memory: 1288
References: 0
+Number of entries: 4
Members:
Name: test
Type: hash:net,net
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 17664
+Size in memory: 2056
References: 0
+Number of entries: 16
Members:
10.2.0.0/24,10.3.0.0/24
10.2.0.0/24,10.3.1.0/29
Name: test
Type: hash:net,port,net
Header: family inet hashsize 1024 maxelem 65536 timeout x
-Size in memory: 17672
+Size in memory: 1288
References: 0
+Number of entries: 4
Members:
2.0.0.0/24,tcp:5,192.168.0.0/24 timeout x
2.0.0.0/24,tcp:5,192.168.0.0/25 timeout x
Name: test
Type: hash:net,port
Header: family inet hashsize 128 maxelem 65536 timeout x
-Size in memory: 2072
+Size in memory: 1024
References: 0
+Number of entries: 5
Members:
1.1.1.1,tcp:5 timeout x
192.168.68.64/27,tcp:8 timeout x
Name: test
Type: hash:net,port
Header: family inet hashsize 128 maxelem 65536 timeout 5
-Size in memory: 2000
+Size in memory: 1024
References: 0
+Number of entries: 4
Members:
Name: test
Type: hash:net
Header: family inet hashsize 128 maxelem 65536 timeout x
-Size in memory: 1672
+Size in memory: 896
References: 0
+Number of entries: 4
Members:
1.1.1.1 timeout x
192.168.68.64/27 timeout x
Name: test
Type: hash:net
Header: family inet hashsize 128 maxelem 65536 timeout 5
-Size in memory: 1672
+Size in memory: 895
References: 0
+Number of entries: 4
Members:
Name: test
Type: hash:net
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 17016
+Size in memory: 640
References: 0
+Number of entries: 4
Members:
10.2.0.0/24
10.2.1.0/29
Name: test
Type: hash:net,net
Header: family inet6 hashsize 128 maxelem 65536 timeout x
-Size in memory: 4672
+Size in memory: 3144
References: 0
+Number of entries: 4
Members:
192:160::/27,172:16:68::/48 timeout x
1:1:1::1,2:2:2::2 timeout x
Name: test
Type: hash:net,net
Header: family inet6 hashsize 128 maxelem 65536 timeout 5
-Size in memory: 4672
+Size in memory: 3144
References: 0
+Number of entries: 4
Members:
Name: test
Type: hash:net,port,net
Header: family inet6 hashsize 1024 maxelem 65536
-Size in memory: 18824
+Size in memory: 2440
References: 0
+Number of entries: 4
Members:
2:1::,tcp:128,::/12
2:1::1,tcp:128,::/12
Name: test
Type: hash:net,port
Header: family inet6 hashsize 128 maxelem 65536 timeout x
-Size in memory: 2328
+Size in memory: 2352
References: 0
+Number of entries: 5
Members:
192:160::/27,ipv6-icmp:echo-request timeout x
192:168:68::95,ipv6-icmp:port-unreachable timeout x
Name: test
Type: hash:net,port
Header: family inet6 hashsize 128 maxelem 65536 timeout 5
-Size in memory: 2328
+Size in memory: 2352
References: 0
+Number of entries: 5
Members:
1:1:1::1,tcp:8 timeout 0
Name: test
Type: hash:net
Header: family inet6 hashsize 128 maxelem 65536 timeout x
-Size in memory: 2696
+Size in memory: 2112
References: 0
+Number of entries: 4
Members:
192:160::/27 timeout x
1:1:1::1 timeout x
Name: test
Type: hash:net
Header: family inet6 hashsize 128 maxelem 65536 timeout 5
-Size in memory: 2696
+Size in memory: 2112
References: 0
+Number of entries: 4
Members:
Name: test
Type: hash:ip
Header: family inet hashsize 128 maxelem 65536
-Size in memory: 1184
+Size in memory: 224
References: 0
+Number of entries: 2
Members:
192.168.68.69
2.0.0.1
Name: test
Type: hash:ip
Header: family inet hashsize 128 maxelem 65536 netmask 24
-Size in memory: 1184
+Size in memory: 224
References: 0
+Number of entries: 2
Members:
192.168.68.0
2.0.0.0
Name: test
Type: hash:ip,mark
Header: family inet markmask 0xffffffff hashsize 1024 maxelem 65536
-Size in memory: 8516
+Size in memory: 384
References: 0
+Number of entries: 4
Members:
2.0.0.0,0x00000005
2.0.0.1,0x00000005
Name: test
Type: hash:ip,mark
Header: family inet markmask 0xffffffff hashsize 1024 maxelem 65536
-Size in memory: 8468
+Size in memory: 384
References: 0
+Number of entries: 4
Members:
1.255.255.255,0x00000005
2.0.0.0,0x00000005
Name: test
Type: hash:ip,port
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 8464
+Size in memory: 384
References: 0
+Number of entries: 4
Members:
2.0.0.0,tcp:5
2.0.0.1,tcp:5
Name: test
Type: hash:ip,port
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 8464
+Size in memory: 384
References: 0
+Number of entries: 4
Members:
1.255.255.255,tcp:5
2.0.0.0,tcp:5
Name: test
Type: hash:ip,port,ip
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 8528
+Size in memory: 456
References: 0
+Number of entries: 4
Members:
2.0.0.0,tcp:5,1.1.1.1
2.0.0.1,tcp:5,1.1.1.1
Name: test
Type: hash:ip,port,ip
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 8416
+Size in memory: 296
References: 0
+Number of entries: 2
Members:
2.0.0.0,tcp:5,1.1.1.1
2.0.255.255,tcp:128,2.2.2.2
#!/bin/sh
-# set -x
+set -x
set -e
ipset=${IPSET_BIN:-../src/ipset}
Name: test
Type: hash:net
Header: family inet hashsize 128 maxelem 65536
-Size in memory: 1544
+Size in memory: 640
References: 0
+Number of entries: 4
Members:
1.1.1.1
192.168.68.64/27
#!/bin/sh
-# set -x
+#set -x
set -e
ipset=${IPSET_BIN:-../src/ipset}
Name: a
Type: hash:ip
Header: family inet6 hashsize 1024 maxelem 65536
-Size in memory: 16704
+Size in memory: 416
References: 0
+Number of entries: 3
Members:
3::3
4::4
Name: b
Type: hash:ip
Header: family inet6 hashsize 1024 maxelem 65536
-Size in memory: 16704
+Size in memory: 416
References: 0
+Number of entries: 3
Members:
1::1
2::2
Name: a
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 16504
+Size in memory: 152
References: 1
+Number of entries: 0
Members:
Name: b
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 16504
+Size in memory: 152
References: 0
+Number of entries: 0
Members:
Name: c
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 16504
+Size in memory: 152
References: 0
+Number of entries: 0
Members:
Name: d
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
-Size in memory: 16504
+Size in memory: 152
References: 0
+Number of entries: 0
Members:
Name: test
Type: list:set
Header: size 8
-Size in memory: 112
+Size in memory: 184
References: 0
+Number of entries: 1
Members:
a
#!/bin/sh
-head -n 6 $1 > .foo
-tail -n +7 $1 | grep '[[:alnum:]]' | sort >> .foo
+head -n 7 $1 > .foo
+tail -n +8 $1 | grep '[[:alnum:]]' | sort >> .foo
rm $1