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