~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to include/net/netfilter/nf_conntrack_l3proto.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C)2003,2004 USAGI/WIDE Project
 
3
 *
 
4
 * Header for use in defining a given L3 protocol for connection tracking.
 
5
 *
 
6
 * Author:
 
7
 *      Yasuyuki Kozakai @USAGI <yasuyuki.kozakai@toshiba.co.jp>
 
8
 *
 
9
 * Derived from include/netfilter_ipv4/ip_conntrack_protocol.h
 
10
 */
 
11
 
 
12
#ifndef _NF_CONNTRACK_L3PROTO_H
 
13
#define _NF_CONNTRACK_L3PROTO_H
 
14
#include <linux/netlink.h>
 
15
#include <net/netlink.h>
 
16
#include <linux/seq_file.h>
 
17
#include <net/netfilter/nf_conntrack.h>
 
18
 
 
19
struct nf_conntrack_l3proto {
 
20
        /* L3 Protocol Family number. ex) PF_INET */
 
21
        u_int16_t l3proto;
 
22
 
 
23
        /* Protocol name */
 
24
        const char *name;
 
25
 
 
26
        /*
 
27
         * Try to fill in the third arg: nhoff is offset of l3 proto
 
28
         * hdr.  Return true if possible.
 
29
         */
 
30
        bool (*pkt_to_tuple)(const struct sk_buff *skb, unsigned int nhoff,
 
31
                             struct nf_conntrack_tuple *tuple);
 
32
 
 
33
        /*
 
34
         * Invert the per-proto part of the tuple: ie. turn xmit into reply.
 
35
         * Some packets can't be inverted: return 0 in that case.
 
36
         */
 
37
        bool (*invert_tuple)(struct nf_conntrack_tuple *inverse,
 
38
                             const struct nf_conntrack_tuple *orig);
 
39
 
 
40
        /* Print out the per-protocol part of the tuple. */
 
41
        int (*print_tuple)(struct seq_file *s,
 
42
                           const struct nf_conntrack_tuple *);
 
43
 
 
44
        /*
 
45
         * Called before tracking. 
 
46
         *      *dataoff: offset of protocol header (TCP, UDP,...) in skb
 
47
         *      *protonum: protocol number
 
48
         */
 
49
        int (*get_l4proto)(const struct sk_buff *skb, unsigned int nhoff,
 
50
                           unsigned int *dataoff, u_int8_t *protonum);
 
51
 
 
52
        int (*tuple_to_nlattr)(struct sk_buff *skb,
 
53
                               const struct nf_conntrack_tuple *t);
 
54
 
 
55
        /*
 
56
         * Calculate size of tuple nlattr
 
57
         */
 
58
        int (*nlattr_tuple_size)(void);
 
59
 
 
60
        int (*nlattr_to_tuple)(struct nlattr *tb[],
 
61
                               struct nf_conntrack_tuple *t);
 
62
        const struct nla_policy *nla_policy;
 
63
 
 
64
        size_t nla_size;
 
65
 
 
66
#ifdef CONFIG_SYSCTL
 
67
        struct ctl_table_header *ctl_table_header;
 
68
        struct ctl_path         *ctl_table_path;
 
69
        struct ctl_table        *ctl_table;
 
70
#endif /* CONFIG_SYSCTL */
 
71
 
 
72
        /* Module (if any) which this is connected to. */
 
73
        struct module *me;
 
74
};
 
75
 
 
76
extern struct nf_conntrack_l3proto __rcu *nf_ct_l3protos[AF_MAX];
 
77
 
 
78
/* Protocol registration. */
 
79
extern int nf_conntrack_l3proto_register(struct nf_conntrack_l3proto *proto);
 
80
extern void nf_conntrack_l3proto_unregister(struct nf_conntrack_l3proto *proto);
 
81
extern struct nf_conntrack_l3proto *nf_ct_l3proto_find_get(u_int16_t l3proto);
 
82
extern void nf_ct_l3proto_put(struct nf_conntrack_l3proto *p);
 
83
 
 
84
/* Existing built-in protocols */
 
85
extern struct nf_conntrack_l3proto nf_conntrack_l3proto_generic;
 
86
 
 
87
static inline struct nf_conntrack_l3proto *
 
88
__nf_ct_l3proto_find(u_int16_t l3proto)
 
89
{
 
90
        if (unlikely(l3proto >= AF_MAX))
 
91
                return &nf_conntrack_l3proto_generic;
 
92
        return rcu_dereference(nf_ct_l3protos[l3proto]);
 
93
}
 
94
 
 
95
#endif /*_NF_CONNTRACK_L3PROTO_H*/