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