]> bbs.cooldavid.org Git - net-next-2.6.git/blame - include/linux/netfilter/nf_conntrack_sip.h
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[net-next-2.6.git] / include / linux / netfilter / nf_conntrack_sip.h
CommitLineData
9fafcd7b
PM
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
0f32a40f
PM
8struct nf_ct_sip_master {
9 unsigned int register_cseq;
10};
11
12enum sip_expectation_classes {
13 SIP_EXPECT_SIGNALLING,
14 SIP_EXPECT_AUDIO,
0d0ab037 15 SIP_EXPECT_VIDEO,
0f32a40f
PM
16 __SIP_EXPECT_MAX
17};
18#define SIP_EXPECT_MAX (__SIP_EXPECT_MAX - 1)
19
0d0ab037
PM
20struct 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
30f33e6d
PM
33struct 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
3e9b4600
PM
52struct 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
ea45f12a
PM
75#define SIP_HDR(__name, __cname, __search, __match) \
76 __SIP_HDR(__name, __cname, __search, __match)
77
3e9b4600
PM
78#define SDP_HDR(__name, __search, __match) \
79 __SIP_HDR(__name, NULL, __search, __match)
80
ea45f12a 81enum sip_header_types {
30f33e6d 82 SIP_HDR_CSEQ,
ea45f12a
PM
83 SIP_HDR_FROM,
84 SIP_HDR_TO,
85 SIP_HDR_CONTACT,
86 SIP_HDR_VIA,
0f32a40f 87 SIP_HDR_EXPIRES,
ea45f12a
PM
88 SIP_HDR_CONTENT_LENGTH,
89};
90
3e9b4600
PM
91enum 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,
9fafcd7b
PM
99};
100
3db05fea 101extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb,
2a6cfb22
PM
102 const char **dptr,
103 unsigned int *datalen);
0f32a40f
PM
104extern 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);
4ab9e64e
PM
110extern 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);
c7f485ab
PM
117extern 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);
4ab9e64e
PM
123extern 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);
128extern 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);
9fafcd7b 136
ac367740
PM
137extern int ct_sip_parse_request(const struct nf_conn *ct,
138 const char *dptr, unsigned int datalen,
624f8b7b
PM
139 unsigned int *matchoff, unsigned int *matchlen,
140 union nf_inet_addr *addr, __be16 *port);
ea45f12a
PM
141extern 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);
05e3ced2
PM
145extern 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);
2bbb2116
PM
150extern 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);
155extern 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);
3e9b4600
PM
160
161extern 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
9fafcd7b
PM
167#endif /* __KERNEL__ */
168#endif /* __NF_CONNTRACK_SIP_H__ */