netfilter: xtables: add struct xt_mtdtor_param::net
[safe/jmp/linux-2.6] / include / linux / netfilter_bridge / ebtables.h
index 82f854b..1c6f0c5 100644 (file)
  * The 4 lsb are more than enough to store the verdict. */
 #define EBT_VERDICT_BITS 0x0000000F
 
-struct ebt_counter
-{
+struct xt_match;
+struct xt_target;
+
+struct ebt_counter {
        uint64_t pcnt;
        uint64_t bcnt;
 };
 
-struct ebt_replace
-{
+struct ebt_replace {
        char name[EBT_TABLE_MAXNAMELEN];
        unsigned int valid_hooks;
        /* nr of rules in the table */
@@ -54,8 +55,7 @@ struct ebt_replace
        char __user *entries;
 };
 
-struct ebt_replace_kernel
-{
+struct ebt_replace_kernel {
        char name[EBT_TABLE_MAXNAMELEN];
        unsigned int valid_hooks;
        /* nr of rules in the table */
@@ -117,33 +117,30 @@ struct ebt_entries {
 #define EBT_INV_MASK (EBT_IPROTO | EBT_IIN | EBT_IOUT | EBT_ILOGICALIN \
    | EBT_ILOGICALOUT | EBT_ISOURCE | EBT_IDEST)
 
-struct ebt_entry_match
-{
+struct ebt_entry_match {
        union {
                char name[EBT_FUNCTION_MAXNAMELEN];
-               struct ebt_match *match;
+               struct xt_match *match;
        } u;
        /* size of data */
        unsigned int match_size;
        unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
 };
 
-struct ebt_entry_watcher
-{
+struct ebt_entry_watcher {
        union {
                char name[EBT_FUNCTION_MAXNAMELEN];
-               struct ebt_watcher *watcher;
+               struct xt_target *watcher;
        } u;
        /* size of data */
        unsigned int watcher_size;
        unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
 };
 
-struct ebt_entry_target
-{
+struct ebt_entry_target {
        union {
                char name[EBT_FUNCTION_MAXNAMELEN];
-               struct ebt_target *target;
+               struct xt_target *target;
        } u;
        /* size of data */
        unsigned int target_size;
@@ -151,8 +148,7 @@ struct ebt_entry_target
 };
 
 #define EBT_STANDARD_TARGET "standard"
-struct ebt_standard_target
-{
+struct ebt_standard_target {
        struct ebt_entry_target target;
        int verdict;
 };
@@ -203,49 +199,52 @@ struct ebt_entry {
 #define EBT_MATCH 0
 #define EBT_NOMATCH 1
 
-struct ebt_match
-{
+struct ebt_match {
        struct list_head list;
        const char name[EBT_FUNCTION_MAXNAMELEN];
        bool (*match)(const struct sk_buff *skb, const struct net_device *in,
-          const struct net_device *out, const void *matchdata,
-          unsigned int datalen);
-       bool (*check)(const char *tablename, unsigned int hookmask,
-          const struct ebt_entry *e, void *matchdata, unsigned int datalen);
-       void (*destroy)(void *matchdata, unsigned int datalen);
+               const struct net_device *out, const struct xt_match *match,
+               const void *matchinfo, int offset, unsigned int protoff,
+               bool *hotdrop);
+       bool (*checkentry)(const char *table, const void *entry,
+               const struct xt_match *match, void *matchinfo,
+               unsigned int hook_mask);
+       void (*destroy)(const struct xt_match *match, void *matchinfo);
        unsigned int matchsize;
        u_int8_t revision;
        u_int8_t family;
        struct module *me;
 };
 
-struct ebt_watcher
-{
+struct ebt_watcher {
        struct list_head list;
        const char name[EBT_FUNCTION_MAXNAMELEN];
-       unsigned int (*watcher)(const struct sk_buff *skb, unsigned int hooknr,
-          const struct net_device *in, const struct net_device *out,
-          const void *watcherdata, unsigned int datalen);
-       bool (*check)(const char *tablename, unsigned int hookmask,
-          const struct ebt_entry *e, void *watcherdata, unsigned int datalen);
-       void (*destroy)(void *watcherdata, unsigned int datalen);
+       unsigned int (*target)(struct sk_buff *skb,
+               const struct net_device *in, const struct net_device *out,
+               unsigned int hook_num, const struct xt_target *target,
+               const void *targinfo);
+       bool (*checkentry)(const char *table, const void *entry,
+               const struct xt_target *target, void *targinfo,
+               unsigned int hook_mask);
+       void (*destroy)(const struct xt_target *target, void *targinfo);
        unsigned int targetsize;
        u_int8_t revision;
        u_int8_t family;
        struct module *me;
 };
 
-struct ebt_target
-{
+struct ebt_target {
        struct list_head list;
        const char name[EBT_FUNCTION_MAXNAMELEN];
        /* returns one of the standard EBT_* verdicts */
-       unsigned int (*target)(struct sk_buff *skb, unsigned int hooknr,
-          const struct net_device *in, const struct net_device *out,
-          const void *targetdata, unsigned int datalen);
-       bool (*check)(const char *tablename, unsigned int hookmask,
-          const struct ebt_entry *e, void *targetdata, unsigned int datalen);
-       void (*destroy)(void *targetdata, unsigned int datalen);
+       unsigned int (*target)(struct sk_buff *skb,
+               const struct net_device *in, const struct net_device *out,
+               unsigned int hook_num, const struct xt_target *target,
+               const void *targinfo);
+       bool (*checkentry)(const char *table, const void *entry,
+               const struct xt_target *target, void *targinfo,
+               unsigned int hook_mask);
+       void (*destroy)(const struct xt_target *target, void *targinfo);
        unsigned int targetsize;
        u_int8_t revision;
        u_int8_t family;
@@ -253,15 +252,13 @@ struct ebt_target
 };
 
 /* used for jumping from and into user defined chains (udc) */
-struct ebt_chainstack
-{
+struct ebt_chainstack {
        struct ebt_entries *chaininfo; /* pointer to chain data */
        struct ebt_entry *e; /* pointer to entry data */
        unsigned int n; /* n'th entry */
 };
 
-struct ebt_table_info
-{
+struct ebt_table_info {
        /* total size of the entries */
        unsigned int entries_size;
        unsigned int nentries;
@@ -273,8 +270,7 @@ struct ebt_table_info
        struct ebt_counter counters[0] ____cacheline_aligned;
 };
 
-struct ebt_table
-{
+struct ebt_table {
        struct list_head list;
        char name[EBT_TABLE_MAXNAMELEN];
        struct ebt_replace_kernel *table;
@@ -291,14 +287,9 @@ struct ebt_table
 
 #define EBT_ALIGN(s) (((s) + (__alignof__(struct ebt_replace)-1)) & \
                     ~(__alignof__(struct ebt_replace)-1))
-extern int ebt_register_table(struct ebt_table *table);
-extern void ebt_unregister_table(struct ebt_table *table);
-extern int ebt_register_match(struct ebt_match *match);
-extern void ebt_unregister_match(struct ebt_match *match);
-extern int ebt_register_watcher(struct ebt_watcher *watcher);
-extern void ebt_unregister_watcher(struct ebt_watcher *watcher);
-extern int ebt_register_target(struct ebt_target *target);
-extern void ebt_unregister_target(struct ebt_target *target);
+extern struct ebt_table *ebt_register_table(struct net *net,
+                                           const struct ebt_table *table);
+extern void ebt_unregister_table(struct net *net, struct ebt_table *table);
 extern unsigned int ebt_do_table(unsigned int hook, struct sk_buff *skb,
    const struct net_device *in, const struct net_device *out,
    struct ebt_table *table);
@@ -307,9 +298,9 @@ extern unsigned int ebt_do_table(unsigned int hook, struct sk_buff *skb,
 #define FWINV(bool,invflg) ((bool) ^ !!(info->invflags & invflg))
 /* True if the hook mask denotes that the rule is in a base chain,
  * used in the check() functions */
-#define BASE_CHAIN (hookmask & (1 << NF_BR_NUMHOOKS))
+#define BASE_CHAIN (par->hook_mask & (1 << NF_BR_NUMHOOKS))
 /* Clear the bit in the hook mask that tells if the rule is on a base chain */
-#define CLEAR_BASE_CHAIN_BIT (hookmask &= ~(1 << NF_BR_NUMHOOKS))
+#define CLEAR_BASE_CHAIN_BIT (par->hook_mask &= ~(1 << NF_BR_NUMHOOKS))
 /* True if the target is not a standard target */
 #define INVALID_TARGET (info->target < -NUM_STANDARD_TARGETS || info->target >= 0)