]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - include/linux/netfilter/nf_conntrack_sip.h
5da04e586a3fb399fcda285cb23f6046bc8e447b
[linux-2.6-omap-h63xx.git] / include / linux / netfilter / nf_conntrack_sip.h
1 #ifndef __NF_CONNTRACK_SIP_H__
2 #define __NF_CONNTRACK_SIP_H__
3 #ifdef __KERNEL__
4
5 #define SIP_PORT        5060
6 #define SIP_TIMEOUT     3600
7
8 struct nf_ct_sip_master {
9         unsigned int    register_cseq;
10 };
11
12 enum sip_expectation_classes {
13         SIP_EXPECT_SIGNALLING,
14         SIP_EXPECT_AUDIO,
15         SIP_EXPECT_VIDEO,
16         __SIP_EXPECT_MAX
17 };
18 #define SIP_EXPECT_MAX  (__SIP_EXPECT_MAX - 1)
19
20 struct sdp_media_type {
21         const char                      *name;
22         unsigned int                    len;
23         enum sip_expectation_classes    class;
24 };
25
26 #define SDP_MEDIA_TYPE(__name, __class)                                 \
27 {                                                                       \
28         .name   = (__name),                                             \
29         .len    = sizeof(__name) - 1,                                   \
30         .class  = (__class),                                            \
31 }
32
33 struct sip_handler {
34         const char      *method;
35         unsigned int    len;
36         int             (*request)(struct sk_buff *skb,
37                                    const char **dptr, unsigned int *datalen,
38                                    unsigned int cseq);
39         int             (*response)(struct sk_buff *skb,
40                                     const char **dptr, unsigned int *datalen,
41                                     unsigned int cseq, unsigned int code);
42 };
43
44 #define SIP_HANDLER(__method, __request, __response)                    \
45 {                                                                       \
46         .method         = (__method),                                   \
47         .len            = sizeof(__method) - 1,                         \
48         .request        = (__request),                                  \
49         .response       = (__response),                                 \
50 }
51
52 struct sip_header {
53         const char      *name;
54         const char      *cname;
55         const char      *search;
56         unsigned int    len;
57         unsigned int    clen;
58         unsigned int    slen;
59         int             (*match_len)(const struct nf_conn *ct,
60                                      const char *dptr, const char *limit,
61                                      int *shift);
62 };
63
64 #define __SIP_HDR(__name, __cname, __search, __match)                   \
65 {                                                                       \
66         .name           = (__name),                                     \
67         .len            = sizeof(__name) - 1,                           \
68         .cname          = (__cname),                                    \
69         .clen           = (__cname) ? sizeof(__cname) - 1 : 0,          \
70         .search         = (__search),                                   \
71         .slen           = (__search) ? sizeof(__search) - 1 : 0,        \
72         .match_len      = (__match),                                    \
73 }
74
75 #define SIP_HDR(__name, __cname, __search, __match) \
76         __SIP_HDR(__name, __cname, __search, __match)
77
78 #define SDP_HDR(__name, __search, __match) \
79         __SIP_HDR(__name, NULL, __search, __match)
80
81 enum sip_header_types {
82         SIP_HDR_CSEQ,
83         SIP_HDR_FROM,
84         SIP_HDR_TO,
85         SIP_HDR_CONTACT,
86         SIP_HDR_VIA,
87         SIP_HDR_EXPIRES,
88         SIP_HDR_CONTENT_LENGTH,
89 };
90
91 enum sdp_header_types {
92         SDP_HDR_UNSPEC,
93         SDP_HDR_VERSION,
94         SDP_HDR_OWNER_IP4,
95         SDP_HDR_CONNECTION_IP4,
96         SDP_HDR_OWNER_IP6,
97         SDP_HDR_CONNECTION_IP6,
98         SDP_HDR_MEDIA,
99 };
100
101 extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb,
102                                        const char **dptr,
103                                        unsigned int *datalen);
104 extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb,
105                                               const char **dptr,
106                                               unsigned int *datalen,
107                                               struct nf_conntrack_expect *exp,
108                                               unsigned int matchoff,
109                                               unsigned int matchlen);
110 extern unsigned int (*nf_nat_sdp_addr_hook)(struct sk_buff *skb,
111                                             const char **dptr,
112                                             unsigned int dataoff,
113                                             unsigned int *datalen,
114                                             enum sdp_header_types type,
115                                             enum sdp_header_types term,
116                                             const union nf_inet_addr *addr);
117 extern unsigned int (*nf_nat_sdp_port_hook)(struct sk_buff *skb,
118                                             const char **dptr,
119                                             unsigned int *datalen,
120                                             unsigned int matchoff,
121                                             unsigned int matchlen,
122                                             u_int16_t port);
123 extern unsigned int (*nf_nat_sdp_session_hook)(struct sk_buff *skb,
124                                                const char **dptr,
125                                                unsigned int dataoff,
126                                                unsigned int *datalen,
127                                                const union nf_inet_addr *addr);
128 extern unsigned int (*nf_nat_sdp_media_hook)(struct sk_buff *skb,
129                                              const char **dptr,
130                                              unsigned int *datalen,
131                                              struct nf_conntrack_expect *rtp_exp,
132                                              struct nf_conntrack_expect *rtcp_exp,
133                                              unsigned int mediaoff,
134                                              unsigned int medialen,
135                                              union nf_inet_addr *rtp_addr);
136
137 extern int ct_sip_parse_request(const struct nf_conn *ct,
138                                 const char *dptr, unsigned int datalen,
139                                 unsigned int *matchoff, unsigned int *matchlen,
140                                 union nf_inet_addr *addr, __be16 *port);
141 extern int ct_sip_get_header(const struct nf_conn *ct, const char *dptr,
142                              unsigned int dataoff, unsigned int datalen,
143                              enum sip_header_types type,
144                              unsigned int *matchoff, unsigned int *matchlen);
145 extern int ct_sip_parse_header_uri(const struct nf_conn *ct, const char *dptr,
146                                    unsigned int *dataoff, unsigned int datalen,
147                                    enum sip_header_types type, int *in_header,
148                                    unsigned int *matchoff, unsigned int *matchlen,
149                                    union nf_inet_addr *addr, __be16 *port);
150 extern int ct_sip_parse_address_param(const struct nf_conn *ct, const char *dptr,
151                                       unsigned int dataoff, unsigned int datalen,
152                                       const char *name,
153                                       unsigned int *matchoff, unsigned int *matchlen,
154                                       union nf_inet_addr *addr);
155 extern int ct_sip_parse_numerical_param(const struct nf_conn *ct, const char *dptr,
156                                         unsigned int off, unsigned int datalen,
157                                         const char *name,
158                                         unsigned int *matchoff, unsigned int *matchen,
159                                         unsigned int *val);
160
161 extern int ct_sip_get_sdp_header(const struct nf_conn *ct, const char *dptr,
162                                  unsigned int dataoff, unsigned int datalen,
163                                  enum sdp_header_types type,
164                                  enum sdp_header_types term,
165                                  unsigned int *matchoff, unsigned int *matchlen);
166
167 #endif /* __KERNEL__ */
168 #endif /* __NF_CONNTRACK_SIP_H__ */