* [PATCH 1/2] libxt_cgroup: prepare for multi revisions
@ 2015-12-22 18:56 Tejun Heo
2015-12-22 18:57 ` [PATCH 2/2] libxt_cgroup2: add support for cgroup2 path matching Tejun Heo
2015-12-25 12:18 ` [PATCH 1/2] libxt_cgroup: prepare for multi revisions Pablo Neira Ayuso
0 siblings, 2 replies; 8+ messages in thread
From: Tejun Heo @ 2015-12-22 18:56 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
libxt_cgroup will grow cgroup2 path based match. Postfix existing
symbols with _v0 and prepare for multi revision registration. While
at it, rename O_CGROUP to O_CLASSID and fwid to classid.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Daniel Borkmann <dborkman@redhat.com>
Cc: Jan Engelhardt <jengelh@inai.de>
Cc: Pablo Neira Ayuso <pablo@netfilter.org>
---
extensions/libxt_cgroup.c | 51 +++++++++++++++++++-----------------
include/linux/netfilter/xt_cgroup.h | 2 -
2 files changed, 28 insertions(+), 25 deletions(-)
--- a/extensions/libxt_cgroup.c
+++ b/extensions/libxt_cgroup.c
@@ -3,30 +3,30 @@
#include <linux/netfilter/xt_cgroup.h>
enum {
- O_CGROUP = 0,
+ O_CLASSID = 0,
};
-static void cgroup_help(void)
+static void cgroup_help_v0(void)
{
printf(
"cgroup match options:\n"
-"[!] --cgroup fwid Match cgroup fwid\n");
+"[!] --cgroup classid Match cgroup classid\n");
}
-static const struct xt_option_entry cgroup_opts[] = {
+static const struct xt_option_entry cgroup_opts_v0[] = {
{
.name = "cgroup",
- .id = O_CGROUP,
+ .id = O_CLASSID,
.type = XTTYPE_UINT32,
.flags = XTOPT_INVERT | XTOPT_MAND | XTOPT_PUT,
- XTOPT_POINTER(struct xt_cgroup_info, id)
+ XTOPT_POINTER(struct xt_cgroup_info_v0, id)
},
XTOPT_TABLEEND,
};
-static void cgroup_parse(struct xt_option_call *cb)
+static void cgroup_parse_v0(struct xt_option_call *cb)
{
- struct xt_cgroup_info *cgroupinfo = cb->data;
+ struct xt_cgroup_info_v0 *cgroupinfo = cb->data;
xtables_option_parse(cb);
if (cb->invert)
@@ -34,34 +34,37 @@ static void cgroup_parse(struct xt_optio
}
static void
-cgroup_print(const void *ip, const struct xt_entry_match *match, int numeric)
+cgroup_print_v0(const void *ip, const struct xt_entry_match *match, int numeric)
{
- const struct xt_cgroup_info *info = (void *) match->data;
+ const struct xt_cgroup_info_v0 *info = (void *) match->data;
printf(" cgroup %s%u", info->invert ? "! ":"", info->id);
}
-static void cgroup_save(const void *ip, const struct xt_entry_match *match)
+static void cgroup_save_v0(const void *ip, const struct xt_entry_match *match)
{
- const struct xt_cgroup_info *info = (void *) match->data;
+ const struct xt_cgroup_info_v0 *info = (void *) match->data;
printf("%s --cgroup %u", info->invert ? " !" : "", info->id);
}
-static struct xtables_match cgroup_match = {
- .family = NFPROTO_UNSPEC,
- .name = "cgroup",
- .version = XTABLES_VERSION,
- .size = XT_ALIGN(sizeof(struct xt_cgroup_info)),
- .userspacesize = XT_ALIGN(sizeof(struct xt_cgroup_info)),
- .help = cgroup_help,
- .print = cgroup_print,
- .save = cgroup_save,
- .x6_parse = cgroup_parse,
- .x6_options = cgroup_opts,
+static struct xtables_match cgroup_match[] = {
+ {
+ .family = NFPROTO_UNSPEC,
+ .revision = 0,
+ .name = "cgroup",
+ .version = XTABLES_VERSION,
+ .size = XT_ALIGN(sizeof(struct xt_cgroup_info_v0)),
+ .userspacesize = XT_ALIGN(sizeof(struct xt_cgroup_info_v0)),
+ .help = cgroup_help_v0,
+ .print = cgroup_print_v0,
+ .save = cgroup_save_v0,
+ .x6_parse = cgroup_parse_v0,
+ .x6_options = cgroup_opts_v0,
+ },
};
void _init(void)
{
- xtables_register_match(&cgroup_match);
+ xtables_register_matches(cgroup_match, ARRAY_SIZE(cgroup_match));
}
--- a/include/linux/netfilter/xt_cgroup.h
+++ b/include/linux/netfilter/xt_cgroup.h
@@ -3,7 +3,7 @@
#include <linux/types.h>
-struct xt_cgroup_info {
+struct xt_cgroup_info_v0 {
__u32 id;
__u32 invert;
};
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/2] libxt_cgroup2: add support for cgroup2 path matching
2015-12-22 18:56 [PATCH 1/2] libxt_cgroup: prepare for multi revisions Tejun Heo
@ 2015-12-22 18:57 ` Tejun Heo
2015-12-25 12:18 ` Pablo Neira Ayuso
2015-12-25 12:18 ` [PATCH 1/2] libxt_cgroup: prepare for multi revisions Pablo Neira Ayuso
1 sibling, 1 reply; 8+ messages in thread
From: Tejun Heo @ 2015-12-22 18:57 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
This patch updates xt_cgroup so that it supports revision 1 interface
which includes cgroup2 path based matching.
v3: Folded into xt_cgroup as a new revision interface as suggested by
Pablo.
v2: cgroup2_match->userspacesize and ->save and man page updated as
per Jan.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Daniel Borkmann <dborkman@redhat.com>
Cc: Jan Engelhardt <jengelh@inai.de>
Cc: Pablo Neira Ayuso <pablo@netfilter.org>
---
extensions/libxt_cgroup.c | 86 ++++++++++++++++++++++++++++++++++++
extensions/libxt_cgroup.man | 33 ++++++++-----
include/linux/netfilter/xt_cgroup.h | 13 +++++
3 files changed, 119 insertions(+), 13 deletions(-)
--- a/extensions/libxt_cgroup.c
+++ b/extensions/libxt_cgroup.c
@@ -4,6 +4,7 @@
enum {
O_CLASSID = 0,
+ O_PATH = 1,
};
static void cgroup_help_v0(void)
@@ -13,6 +14,14 @@ static void cgroup_help_v0(void)
"[!] --cgroup classid Match cgroup classid\n");
}
+static void cgroup_help_v1(void)
+{
+ printf(
+"cgroup match options:\n"
+"[!] --path path Recursively match path relative to cgroup2 root\n"
+"[!] --cgroup claasid Match cgroup classid, can't be used with --path\n");
+}
+
static const struct xt_option_entry cgroup_opts_v0[] = {
{
.name = "cgroup",
@@ -24,6 +33,24 @@ static const struct xt_option_entry cgro
XTOPT_TABLEEND,
};
+static const struct xt_option_entry cgroup_opts_v1[] = {
+ {
+ .name = "path",
+ .id = O_PATH,
+ .type = XTTYPE_STRING,
+ .flags = XTOPT_INVERT | XTOPT_PUT,
+ XTOPT_POINTER(struct xt_cgroup_info_v1, path)
+ },
+ {
+ .name = "cgroup",
+ .id = O_CLASSID,
+ .type = XTTYPE_UINT32,
+ .flags = XTOPT_INVERT | XTOPT_PUT,
+ XTOPT_POINTER(struct xt_cgroup_info_v1, classid)
+ },
+ XTOPT_TABLEEND,
+};
+
static void cgroup_parse_v0(struct xt_option_call *cb)
{
struct xt_cgroup_info_v0 *cgroupinfo = cb->data;
@@ -33,6 +60,26 @@ static void cgroup_parse_v0(struct xt_op
cgroupinfo->invert = true;
}
+static void cgroup_parse_v1(struct xt_option_call *cb)
+{
+ struct xt_cgroup_info_v1 *info = cb->data;
+
+ xtables_option_parse(cb);
+
+ switch (cb->entry->id) {
+ case O_PATH:
+ info->has_path = true;
+ if (cb->invert)
+ info->invert_path = true;
+ break;
+ case O_CLASSID:
+ info->has_classid = true;
+ if (cb->invert)
+ info->invert_classid = true;
+ break;
+ }
+}
+
static void
cgroup_print_v0(const void *ip, const struct xt_entry_match *match, int numeric)
{
@@ -48,6 +95,32 @@ static void cgroup_save_v0(const void *i
printf("%s --cgroup %u", info->invert ? " !" : "", info->id);
}
+static void
+cgroup_print_v1(const void *ip, const struct xt_entry_match *match, int numeric)
+{
+ const struct xt_cgroup_info_v1 *info = (void *)match->data;
+
+ printf(" cgroup");
+ if (info->has_path)
+ printf(" %s%s", info->invert_path ? "! ":"", info->path);
+ if (info->has_classid)
+ printf(" %s%u", info->invert_classid ? "! ":"", info->classid);
+}
+
+static void cgroup_save_v1(const void *ip, const struct xt_entry_match *match)
+{
+ const struct xt_cgroup_info_v1 *info = (void *)match->data;
+
+ if (info->has_path) {
+ printf("%s --path", info->invert_path ? " !" : "");
+ xtables_save_string(info->path);
+ }
+
+ if (info->has_classid)
+ printf("%s --cgroup %u", info->invert_classid ? " !" : "",
+ info->classid);
+}
+
static struct xtables_match cgroup_match[] = {
{
.family = NFPROTO_UNSPEC,
@@ -62,6 +135,19 @@ static struct xtables_match cgroup_match
.x6_parse = cgroup_parse_v0,
.x6_options = cgroup_opts_v0,
},
+ {
+ .family = NFPROTO_UNSPEC,
+ .revision = 1,
+ .name = "cgroup",
+ .version = XTABLES_VERSION,
+ .size = XT_ALIGN(sizeof(struct xt_cgroup_info_v1)),
+ .userspacesize = offsetof(struct xt_cgroup_info_v1, priv),
+ .help = cgroup_help_v1,
+ .print = cgroup_print_v1,
+ .save = cgroup_save_v1,
+ .x6_parse = cgroup_parse_v1,
+ .x6_options = cgroup_opts_v1,
+ },
};
void _init(void)
--- a/extensions/libxt_cgroup.man
+++ b/extensions/libxt_cgroup.man
@@ -1,23 +1,30 @@
.TP
-[\fB!\fP] \fB\-\-cgroup\fP \fIfwid\fP
-Match corresponding cgroup for this packet.
+[\fB!\fP] \fB\-\-path\fP \fIpath\fP
+Match cgroup2 membership.
-Can be used in the OUTPUT chain to assign particular firewall
-policies for aggregated task/jobs on the system. This allows
-for more fine-grained firewall policies that only match for a
-subset of the system's processes. fwid is the maker set through
-the net_cls cgroup's id.
+Each socket is associated with the v2 cgroup of the creating process.
+This matches packets coming from or going to all sockets in the
+sub-hierarchy of the specified path. The path should be relative to
+the root of the cgroup2 hierarchy.
+.TP
+[\fB!\fP] \fB\-\-cgroup\fP \fIclassid\fP
+Match cgroup net_cls classid.
-\fBIMPORTANT\fP: when being used in the INPUT chain, the cgroup
-matcher is currently only of limited functionality, meaning it
-will only match on packets that are processed for local sockets
-through early socket demuxing. Therefore, general usage on the
-INPUT chain is disadviced unless the implications are well
-understood.
+classid is the marker set through the cgroup net_cls controller. This
+option and \-\-path can't be used together.
.PP
Example:
.IP
+iptables \-A OUTPUT \-p tcp \-\-sport 80 \-m cgroup ! \-\-path service/http-server \-j DROP
+.IP
iptables \-A OUTPUT \-p tcp \-\-sport 80 \-m cgroup ! \-\-cgroup 1
\-j DROP
.PP
+\fBIMPORTANT\fP: when being used in the INPUT chain, the cgroup
+matcher is currently only of limited functionality, meaning it
+will only match on packets that are processed for local sockets
+through early socket demuxing. Therefore, general usage on the
+INPUT chain is not advised unless the implications are well
+understood.
+.PP
Available since Linux 3.14.
--- a/include/linux/netfilter/xt_cgroup.h
+++ b/include/linux/netfilter/xt_cgroup.h
@@ -2,10 +2,23 @@
#define _XT_CGROUP_H
#include <linux/types.h>
+#include <linux/limits.h>
struct xt_cgroup_info_v0 {
__u32 id;
__u32 invert;
};
+struct xt_cgroup_info_v1 {
+ __u8 has_path;
+ __u8 has_classid;
+ __u8 invert_path;
+ __u8 invert_classid;
+ char path[PATH_MAX];
+ __u32 classid;
+
+ /* kernel internal data */
+ void *priv __attribute__((aligned(8)));
+};
+
#endif /* _XT_CGROUP_H */
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] libxt_cgroup: prepare for multi revisions
2015-12-22 18:56 [PATCH 1/2] libxt_cgroup: prepare for multi revisions Tejun Heo
2015-12-22 18:57 ` [PATCH 2/2] libxt_cgroup2: add support for cgroup2 path matching Tejun Heo
@ 2015-12-25 12:18 ` Pablo Neira Ayuso
1 sibling, 0 replies; 8+ messages in thread
From: Pablo Neira Ayuso @ 2015-12-25 12:18 UTC (permalink / raw)
To: Tejun Heo; +Cc: netfilter-devel
On Tue, Dec 22, 2015 at 01:56:26PM -0500, Tejun Heo wrote:
> libxt_cgroup will grow cgroup2 path based match. Postfix existing
> symbols with _v0 and prepare for multi revision registration. While
> at it, rename O_CGROUP to O_CLASSID and fwid to classid.
Applied, thanks Tejun.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] libxt_cgroup2: add support for cgroup2 path matching
2015-12-22 18:57 ` [PATCH 2/2] libxt_cgroup2: add support for cgroup2 path matching Tejun Heo
@ 2015-12-25 12:18 ` Pablo Neira Ayuso
2015-12-25 12:19 ` Pablo Neira Ayuso
0 siblings, 1 reply; 8+ messages in thread
From: Pablo Neira Ayuso @ 2015-12-25 12:18 UTC (permalink / raw)
To: Tejun Heo; +Cc: netfilter-devel
On Tue, Dec 22, 2015 at 01:57:07PM -0500, Tejun Heo wrote:
> This patch updates xt_cgroup so that it supports revision 1 interface
> which includes cgroup2 path based matching.
Also applied, thanks.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] libxt_cgroup2: add support for cgroup2 path matching
2015-12-25 12:18 ` Pablo Neira Ayuso
@ 2015-12-25 12:19 ` Pablo Neira Ayuso
2015-12-28 16:20 ` Tejun Heo
2015-12-28 21:41 ` [PATCH iptables] extensions: libxt_cgroup: add unit test Tejun Heo
0 siblings, 2 replies; 8+ messages in thread
From: Pablo Neira Ayuso @ 2015-12-25 12:19 UTC (permalink / raw)
To: Tejun Heo; +Cc: netfilter-devel
On Fri, Dec 25, 2015 at 01:18:22PM +0100, Pablo Neira Ayuso wrote:
> On Tue, Dec 22, 2015 at 01:57:07PM -0500, Tejun Heo wrote:
> > This patch updates xt_cgroup so that it supports revision 1 interface
> > which includes cgroup2 path based matching.
>
> Also applied, thanks.
BTW, we have a regression test infrastructure for iptables. Have a
look at our .t files under extensions.
Would you add tests for the cgroup match for us?
Thanks!
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] libxt_cgroup2: add support for cgroup2 path matching
2015-12-25 12:19 ` Pablo Neira Ayuso
@ 2015-12-28 16:20 ` Tejun Heo
2015-12-28 21:41 ` [PATCH iptables] extensions: libxt_cgroup: add unit test Tejun Heo
1 sibling, 0 replies; 8+ messages in thread
From: Tejun Heo @ 2015-12-28 16:20 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
On Fri, Dec 25, 2015 at 01:19:14PM +0100, Pablo Neira Ayuso wrote:
> On Fri, Dec 25, 2015 at 01:18:22PM +0100, Pablo Neira Ayuso wrote:
> > On Tue, Dec 22, 2015 at 01:57:07PM -0500, Tejun Heo wrote:
> > > This patch updates xt_cgroup so that it supports revision 1 interface
> > > which includes cgroup2 path based matching.
> >
> > Also applied, thanks.
>
> BTW, we have a regression test infrastructure for iptables. Have a
> look at our .t files under extensions.
>
> Would you add tests for the cgroup match for us?
Sure, will look into it.
Thanks.
--
tejun
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH iptables] extensions: libxt_cgroup: add unit test
2015-12-25 12:19 ` Pablo Neira Ayuso
2015-12-28 16:20 ` Tejun Heo
@ 2015-12-28 21:41 ` Tejun Heo
2016-01-03 20:00 ` Pablo Neira Ayuso
1 sibling, 1 reply; 8+ messages in thread
From: Tejun Heo @ 2015-12-28 21:41 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
Add basic tests which depend only on the root cgroup.
Signed-off-by: Tejun Heo <tj@kernel.org>
---
extensions/libxt_cgroup.t | 8 ++++++++
1 file changed, 8 insertions(+)
--- /dev/null
+++ b/extensions/libxt_cgroup.t
@@ -0,0 +1,8 @@
+:INPUT,OUTPUT,POSTROUTING
+*mangle
+-m cgroup --cgroup 1;=;OK
+-m cgroup ! --cgroup 1;=;OK
+-m cgroup --path "/";=;OK
+-m cgroup ! --path "/";=;OK
+-m cgroup --cgroup 1 --path "/";;FAIL
+-m cgroup ;;FAIL
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH iptables] extensions: libxt_cgroup: add unit test
2015-12-28 21:41 ` [PATCH iptables] extensions: libxt_cgroup: add unit test Tejun Heo
@ 2016-01-03 20:00 ` Pablo Neira Ayuso
0 siblings, 0 replies; 8+ messages in thread
From: Pablo Neira Ayuso @ 2016-01-03 20:00 UTC (permalink / raw)
To: Tejun Heo; +Cc: netfilter-devel
On Mon, Dec 28, 2015 at 04:41:20PM -0500, Tejun Heo wrote:
> Add basic tests which depend only on the root cgroup.
Applied, thanks.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2016-01-03 20:00 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-22 18:56 [PATCH 1/2] libxt_cgroup: prepare for multi revisions Tejun Heo
2015-12-22 18:57 ` [PATCH 2/2] libxt_cgroup2: add support for cgroup2 path matching Tejun Heo
2015-12-25 12:18 ` Pablo Neira Ayuso
2015-12-25 12:19 ` Pablo Neira Ayuso
2015-12-28 16:20 ` Tejun Heo
2015-12-28 21:41 ` [PATCH iptables] extensions: libxt_cgroup: add unit test Tejun Heo
2016-01-03 20:00 ` Pablo Neira Ayuso
2015-12-25 12:18 ` [PATCH 1/2] libxt_cgroup: prepare for multi revisions Pablo Neira Ayuso
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.