]> bbs.cooldavid.org Git - net-next-2.6.git/blame - include/linux/netfilter/nf_conntrack_sip.h
[NETFILTER]: nf_conntrack_sip: create RTCP expectations
[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,
15 __SIP_EXPECT_MAX
16};
17#define SIP_EXPECT_MAX (__SIP_EXPECT_MAX - 1)
18
30f33e6d
PM
19struct sip_handler {
20 const char *method;
21 unsigned int len;
22 int (*request)(struct sk_buff *skb,
23 const char **dptr, unsigned int *datalen,
24 unsigned int cseq);
25 int (*response)(struct sk_buff *skb,
26 const char **dptr, unsigned int *datalen,
27 unsigned int cseq, unsigned int code);
28};
29
30#define SIP_HANDLER(__method, __request, __response) \
31{ \
32 .method = (__method), \
33 .len = sizeof(__method) - 1, \
34 .request = (__request), \
35 .response = (__response), \
36}
37
3e9b4600
PM
38struct sip_header {
39 const char *name;
40 const char *cname;
41 const char *search;
42 unsigned int len;
43 unsigned int clen;
44 unsigned int slen;
45 int (*match_len)(const struct nf_conn *ct,
46 const char *dptr, const char *limit,
47 int *shift);
48};
49
50#define __SIP_HDR(__name, __cname, __search, __match) \
51{ \
52 .name = (__name), \
53 .len = sizeof(__name) - 1, \
54 .cname = (__cname), \
55 .clen = (__cname) ? sizeof(__cname) - 1 : 0, \
56 .search = (__search), \
57 .slen = (__search) ? sizeof(__search) - 1 : 0, \
58 .match_len = (__match), \
59}
60
ea45f12a
PM
61#define SIP_HDR(__name, __cname, __search, __match) \
62 __SIP_HDR(__name, __cname, __search, __match)
63
3e9b4600
PM
64#define SDP_HDR(__name, __search, __match) \
65 __SIP_HDR(__name, NULL, __search, __match)
66
ea45f12a 67enum sip_header_types {
30f33e6d 68 SIP_HDR_CSEQ,
ea45f12a
PM
69 SIP_HDR_FROM,
70 SIP_HDR_TO,
71 SIP_HDR_CONTACT,
72 SIP_HDR_VIA,
0f32a40f 73 SIP_HDR_EXPIRES,
ea45f12a
PM
74 SIP_HDR_CONTENT_LENGTH,
75};
76
3e9b4600
PM
77enum sdp_header_types {
78 SDP_HDR_UNSPEC,
79 SDP_HDR_VERSION,
80 SDP_HDR_OWNER_IP4,
81 SDP_HDR_CONNECTION_IP4,
82 SDP_HDR_OWNER_IP6,
83 SDP_HDR_CONNECTION_IP6,
84 SDP_HDR_MEDIA,
9fafcd7b
PM
85};
86
3db05fea 87extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb,
2a6cfb22
PM
88 const char **dptr,
89 unsigned int *datalen);
0f32a40f
PM
90extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb,
91 const char **dptr,
92 unsigned int *datalen,
93 struct nf_conntrack_expect *exp,
94 unsigned int matchoff,
95 unsigned int matchlen);
3db05fea 96extern unsigned int (*nf_nat_sdp_hook)(struct sk_buff *skb,
2a6cfb22 97 const char **dptr,
212440a7 98 unsigned int *datalen,
a9c1d359
PM
99 struct nf_conntrack_expect *rtp_exp,
100 struct nf_conntrack_expect *rtcp_exp);
9fafcd7b 101
ac367740
PM
102extern int ct_sip_parse_request(const struct nf_conn *ct,
103 const char *dptr, unsigned int datalen,
624f8b7b
PM
104 unsigned int *matchoff, unsigned int *matchlen,
105 union nf_inet_addr *addr, __be16 *port);
ea45f12a
PM
106extern int ct_sip_get_header(const struct nf_conn *ct, const char *dptr,
107 unsigned int dataoff, unsigned int datalen,
108 enum sip_header_types type,
109 unsigned int *matchoff, unsigned int *matchlen);
05e3ced2
PM
110extern int ct_sip_parse_header_uri(const struct nf_conn *ct, const char *dptr,
111 unsigned int *dataoff, unsigned int datalen,
112 enum sip_header_types type, int *in_header,
113 unsigned int *matchoff, unsigned int *matchlen,
114 union nf_inet_addr *addr, __be16 *port);
2bbb2116
PM
115extern int ct_sip_parse_address_param(const struct nf_conn *ct, const char *dptr,
116 unsigned int dataoff, unsigned int datalen,
117 const char *name,
118 unsigned int *matchoff, unsigned int *matchlen,
119 union nf_inet_addr *addr);
120extern int ct_sip_parse_numerical_param(const struct nf_conn *ct, const char *dptr,
121 unsigned int off, unsigned int datalen,
122 const char *name,
123 unsigned int *matchoff, unsigned int *matchen,
124 unsigned int *val);
3e9b4600
PM
125
126extern int ct_sip_get_sdp_header(const struct nf_conn *ct, const char *dptr,
127 unsigned int dataoff, unsigned int datalen,
128 enum sdp_header_types type,
129 enum sdp_header_types term,
130 unsigned int *matchoff, unsigned int *matchlen);
131
9fafcd7b
PM
132#endif /* __KERNEL__ */
133#endif /* __NF_CONNTRACK_SIP_H__ */