[NETFILTER]: x_tables: per-netns xt_tables
In fact all we want is per-netns set of rules, however doing that will unnecessary complicate routines such as ipt_hook()/ipt_do_table, so make full xt_table array per-netns. Every user stubbed with init_net for a while. Signed-off-by: Alexey Dobriyan <adobriyan@sw.ru> Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
a98da11d88
commit
8d87005207
@@ -335,7 +335,8 @@ extern int xt_check_target(const struct xt_target *target, unsigned short family
|
||||
unsigned int size, const char *table, unsigned int hook,
|
||||
unsigned short proto, int inv_proto);
|
||||
|
||||
extern struct xt_table *xt_register_table(struct xt_table *table,
|
||||
extern struct xt_table *xt_register_table(struct net *net,
|
||||
struct xt_table *table,
|
||||
struct xt_table_info *bootstrap,
|
||||
struct xt_table_info *newinfo);
|
||||
extern void *xt_unregister_table(struct xt_table *table);
|
||||
@@ -352,7 +353,8 @@ extern struct xt_target *xt_request_find_target(int af, const char *name,
|
||||
extern int xt_find_revision(int af, const char *name, u8 revision, int target,
|
||||
int *err);
|
||||
|
||||
extern struct xt_table *xt_find_table_lock(int af, const char *name);
|
||||
extern struct xt_table *xt_find_table_lock(struct net *net, int af,
|
||||
const char *name);
|
||||
extern void xt_table_unlock(struct xt_table *t);
|
||||
|
||||
extern int xt_proto_init(int af);
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <net/netns/packet.h>
|
||||
#include <net/netns/ipv4.h>
|
||||
#include <net/netns/ipv6.h>
|
||||
#include <net/netns/x_tables.h>
|
||||
|
||||
struct proc_dir_entry;
|
||||
struct net_device;
|
||||
@@ -56,6 +57,9 @@ struct net {
|
||||
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||
struct netns_ipv6 ipv6;
|
||||
#endif
|
||||
#ifdef CONFIG_NETFILTER
|
||||
struct netns_xt xt;
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_NET
|
||||
|
||||
10
include/net/netns/x_tables.h
Normal file
10
include/net/netns/x_tables.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#ifndef __NETNS_X_TABLES_H
|
||||
#define __NETNS_X_TABLES_H
|
||||
|
||||
#include <linux/list.h>
|
||||
#include <linux/net.h>
|
||||
|
||||
struct netns_xt {
|
||||
struct list_head tables[NPROTO];
|
||||
};
|
||||
#endif
|
||||
Reference in New Issue
Block a user