* xtables: connlimit with dstaddr support
@ 2011-01-19 17:31 Jan Engelhardt
2011-01-19 17:31 ` [PATCH] netfilter: xtables: connlimit revision 1 Jan Engelhardt
2011-01-20 9:34 ` xtables: connlimit with dstaddr support Patrick McHardy
0 siblings, 2 replies; 3+ messages in thread
From: Jan Engelhardt @ 2011-01-19 17:31 UTC (permalink / raw)
To: kaber; +Cc: netfilter-devel, jan.rovner
The following changes since commit 93557f53e1fbd9e2b6574ab0a9b5852628fde9e3:
netfilter: nf_conntrack: nf_conntrack snmp helper (2011-01-18 18:12:24 +0100)
are available in the git repository at:
git://dev.medozas.de/linux connlimit
Jan Engelhardt (1):
netfilter: xtables: connlimit revision 1
Documentation/feature-removal-schedule.txt | 7 ++++
include/linux/netfilter/xt_connlimit.h | 12 +++++++
net/netfilter/xt_connlimit.c | 44 +++++++++++++++++++---------
3 files changed, 49 insertions(+), 14 deletions(-)
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH] netfilter: xtables: connlimit revision 1
2011-01-19 17:31 xtables: connlimit with dstaddr support Jan Engelhardt
@ 2011-01-19 17:31 ` Jan Engelhardt
2011-01-20 9:34 ` xtables: connlimit with dstaddr support Patrick McHardy
1 sibling, 0 replies; 3+ messages in thread
From: Jan Engelhardt @ 2011-01-19 17:31 UTC (permalink / raw)
To: kaber; +Cc: netfilter-devel, jan.rovner
This adds destination address-based selection. The old "inverse"
member is overloaded (memory-wise) with a new "flags" variable,
similar to how J.Park did it with xt_string rev 1. Since revision 0
userspace only sets flag 0x1, no great changes are made to explicitly
test for different revisions.
Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
---
Documentation/feature-removal-schedule.txt | 7 ++++
include/linux/netfilter/xt_connlimit.h | 12 +++++++
net/netfilter/xt_connlimit.c | 44 +++++++++++++++++++---------
3 files changed, 49 insertions(+), 14 deletions(-)
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt
index 22f1081..45cc804 100644
--- a/Documentation/feature-removal-schedule.txt
+++ b/Documentation/feature-removal-schedule.txt
@@ -576,3 +576,10 @@ Why: The functions have been superceded by cancel_delayed_work_sync()
Who: Tejun Heo <tj@kernel.org>
----------------------------
+
+What: xt_connlimit rev 0
+When: 2012
+Who: Jan Engelhardt <jengelh@medozas.de>
+Files: net/netfilter/xt_connlimit.c
+
+----------------------------
diff --git a/include/linux/netfilter/xt_connlimit.h b/include/linux/netfilter/xt_connlimit.h
index 7e3284b..8884efc 100644
--- a/include/linux/netfilter/xt_connlimit.h
+++ b/include/linux/netfilter/xt_connlimit.h
@@ -3,6 +3,11 @@
struct xt_connlimit_data;
+enum {
+ XT_CONNLIMIT_INVERT = 1 << 0,
+ XT_CONNLIMIT_DADDR = 1 << 1,
+};
+
struct xt_connlimit_info {
union {
union nf_inet_addr mask;
@@ -14,6 +19,13 @@ struct xt_connlimit_info {
#endif
};
unsigned int limit, inverse;
+ union {
+ /* revision 0 */
+ unsigned int inverse;
+
+ /* revision 1 */
+ __u32 flags;
+ };
/* Used internally by the kernel */
struct xt_connlimit_data *data __attribute__((aligned(8)));
diff --git a/net/netfilter/xt_connlimit.c b/net/netfilter/xt_connlimit.c
index 452bc16..7fd3fd5 100644
--- a/net/netfilter/xt_connlimit.c
+++ b/net/netfilter/xt_connlimit.c
@@ -193,10 +193,12 @@ connlimit_mt(const struct sk_buff *skb, struct xt_action_param *par)
if (par->family == NFPROTO_IPV6) {
const struct ipv6hdr *iph = ipv6_hdr(skb);
- memcpy(&addr.ip6, &iph->saddr, sizeof(iph->saddr));
+ memcpy(&addr.ip6, (info->flags & XT_CONNLIMIT_DADDR) ?
+ &iph->daddr : &iph->saddr, sizeof(addr.ip6));
} else {
const struct iphdr *iph = ip_hdr(skb);
- addr.ip = iph->saddr;
+ addr.ip = (info->flags & XT_CONNLIMIT_DADDR) ?
+ iph->daddr : iph->saddr;
}
spin_lock_bh(&info->data->lock);
@@ -208,7 +210,8 @@ connlimit_mt(const struct sk_buff *skb, struct xt_action_param *par)
/* kmalloc failed, drop it entirely */
goto hotdrop;
- return (connections > info->limit) ^ info->inverse;
+ return (connections > info->limit) ^
+ !!(info->flags & XT_CONNLIMIT_INVERT);
hotdrop:
par->hotdrop = true;
@@ -266,25 +269,38 @@ static void connlimit_mt_destroy(const struct xt_mtdtor_param *par)
kfree(info->data);
}
-static struct xt_match connlimit_mt_reg __read_mostly = {
- .name = "connlimit",
- .revision = 0,
- .family = NFPROTO_UNSPEC,
- .checkentry = connlimit_mt_check,
- .match = connlimit_mt,
- .matchsize = sizeof(struct xt_connlimit_info),
- .destroy = connlimit_mt_destroy,
- .me = THIS_MODULE,
+static struct xt_match connlimit_mt_reg[] __read_mostly = {
+ {
+ .name = "connlimit",
+ .revision = 0,
+ .family = NFPROTO_UNSPEC,
+ .checkentry = connlimit_mt_check,
+ .match = connlimit_mt,
+ .matchsize = sizeof(struct xt_connlimit_info),
+ .destroy = connlimit_mt_destroy,
+ .me = THIS_MODULE,
+ },
+ {
+ .name = "connlimit",
+ .revision = 1,
+ .family = NFPROTO_UNSPEC,
+ .checkentry = connlimit_mt_check,
+ .match = connlimit_mt,
+ .matchsize = sizeof(struct xt_connlimit_info),
+ .destroy = connlimit_mt_destroy,
+ .me = THIS_MODULE,
+ },
};
static int __init connlimit_mt_init(void)
{
- return xt_register_match(&connlimit_mt_reg);
+ return xt_register_matches(connlimit_mt_reg,
+ ARRAY_SIZE(connlimit_mt_reg));
}
static void __exit connlimit_mt_exit(void)
{
- xt_unregister_match(&connlimit_mt_reg);
+ xt_unregister_matches(connlimit_mt_reg, ARRAY_SIZE(connlimit_mt_reg));
}
module_init(connlimit_mt_init);
--
1.7.1
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: xtables: connlimit with dstaddr support
2011-01-19 17:31 xtables: connlimit with dstaddr support Jan Engelhardt
2011-01-19 17:31 ` [PATCH] netfilter: xtables: connlimit revision 1 Jan Engelhardt
@ 2011-01-20 9:34 ` Patrick McHardy
1 sibling, 0 replies; 3+ messages in thread
From: Patrick McHardy @ 2011-01-20 9:34 UTC (permalink / raw)
To: Jan Engelhardt; +Cc: netfilter-devel, jan.rovner
Am 19.01.2011 18:31, schrieb Jan Engelhardt:
> The following changes since commit 93557f53e1fbd9e2b6574ab0a9b5852628fde9e3:
>
> netfilter: nf_conntrack: nf_conntrack snmp helper (2011-01-18 18:12:24 +0100)
>
> are available in the git repository at:
> git://dev.medozas.de/linux connlimit
>
> Jan Engelhardt (1):
> netfilter: xtables: connlimit revision 1
>
Pulled, thanks Jan.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-01-20 9:34 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-19 17:31 xtables: connlimit with dstaddr support Jan Engelhardt
2011-01-19 17:31 ` [PATCH] netfilter: xtables: connlimit revision 1 Jan Engelhardt
2011-01-20 9:34 ` xtables: connlimit with dstaddr support Patrick McHardy
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.