1 #ifndef __NF_CONNTRACK_SIP_H__
2 #define __NF_CONNTRACK_SIP_H__
5 #include <net/netfilter/nf_conntrack_expect.h>
8 #define SIP_TIMEOUT 3600
10 struct nf_ct_sip_master
{
11 unsigned int register_cseq
;
12 unsigned int invite_cseq
;
15 enum sip_expectation_classes
{
16 SIP_EXPECT_SIGNALLING
,
22 #define SIP_EXPECT_MAX (__SIP_EXPECT_MAX - 1)
24 struct sdp_media_type
{
27 enum sip_expectation_classes
class;
30 #define SDP_MEDIA_TYPE(__name, __class) \
33 .len = sizeof(__name) - 1, \
40 int (*request
)(struct sk_buff
*skb
, unsigned int protoff
,
42 const char **dptr
, unsigned int *datalen
,
44 int (*response
)(struct sk_buff
*skb
, unsigned int protoff
,
46 const char **dptr
, unsigned int *datalen
,
47 unsigned int cseq
, unsigned int code
);
50 #define SIP_HANDLER(__method, __request, __response) \
52 .method = (__method), \
53 .len = sizeof(__method) - 1, \
54 .request = (__request), \
55 .response = (__response), \
65 int (*match_len
)(const struct nf_conn
*ct
,
66 const char *dptr
, const char *limit
,
70 #define __SIP_HDR(__name, __cname, __search, __match) \
73 .len = sizeof(__name) - 1, \
75 .clen = (__cname) ? sizeof(__cname) - 1 : 0, \
76 .search = (__search), \
77 .slen = (__search) ? sizeof(__search) - 1 : 0, \
78 .match_len = (__match), \
81 #define SIP_HDR(__name, __cname, __search, __match) \
82 __SIP_HDR(__name, __cname, __search, __match)
84 #define SDP_HDR(__name, __search, __match) \
85 __SIP_HDR(__name, NULL, __search, __match)
87 enum sip_header_types
{
95 SIP_HDR_CONTENT_LENGTH
,
99 enum sdp_header_types
{
103 SDP_HDR_CONNECTION_IP4
,
105 SDP_HDR_CONNECTION_IP6
,
109 extern unsigned int (*nf_nat_sip_hook
)(struct sk_buff
*skb
,
110 unsigned int protoff
,
111 unsigned int dataoff
,
113 unsigned int *datalen
);
114 extern void (*nf_nat_sip_seq_adjust_hook
)(struct sk_buff
*skb
, s16 off
);
115 extern unsigned int (*nf_nat_sip_expect_hook
)(struct sk_buff
*skb
,
116 unsigned int protoff
,
117 unsigned int dataoff
,
119 unsigned int *datalen
,
120 struct nf_conntrack_expect
*exp
,
121 unsigned int matchoff
,
122 unsigned int matchlen
);
123 extern unsigned int (*nf_nat_sdp_addr_hook
)(struct sk_buff
*skb
,
124 unsigned int protoff
,
125 unsigned int dataoff
,
127 unsigned int *datalen
,
129 enum sdp_header_types type
,
130 enum sdp_header_types term
,
131 const union nf_inet_addr
*addr
);
132 extern unsigned int (*nf_nat_sdp_port_hook
)(struct sk_buff
*skb
,
133 unsigned int protoff
,
134 unsigned int dataoff
,
136 unsigned int *datalen
,
137 unsigned int matchoff
,
138 unsigned int matchlen
,
140 extern unsigned int (*nf_nat_sdp_session_hook
)(struct sk_buff
*skb
,
141 unsigned int protoff
,
142 unsigned int dataoff
,
144 unsigned int *datalen
,
146 const union nf_inet_addr
*addr
);
147 extern unsigned int (*nf_nat_sdp_media_hook
)(struct sk_buff
*skb
,
148 unsigned int protoff
,
149 unsigned int dataoff
,
151 unsigned int *datalen
,
152 struct nf_conntrack_expect
*rtp_exp
,
153 struct nf_conntrack_expect
*rtcp_exp
,
154 unsigned int mediaoff
,
155 unsigned int medialen
,
156 union nf_inet_addr
*rtp_addr
);
158 extern int ct_sip_parse_request(const struct nf_conn
*ct
,
159 const char *dptr
, unsigned int datalen
,
160 unsigned int *matchoff
, unsigned int *matchlen
,
161 union nf_inet_addr
*addr
, __be16
*port
);
162 extern int ct_sip_get_header(const struct nf_conn
*ct
, const char *dptr
,
163 unsigned int dataoff
, unsigned int datalen
,
164 enum sip_header_types type
,
165 unsigned int *matchoff
, unsigned int *matchlen
);
166 extern int ct_sip_parse_header_uri(const struct nf_conn
*ct
, const char *dptr
,
167 unsigned int *dataoff
, unsigned int datalen
,
168 enum sip_header_types type
, int *in_header
,
169 unsigned int *matchoff
, unsigned int *matchlen
,
170 union nf_inet_addr
*addr
, __be16
*port
);
171 extern int ct_sip_parse_address_param(const struct nf_conn
*ct
, const char *dptr
,
172 unsigned int dataoff
, unsigned int datalen
,
174 unsigned int *matchoff
, unsigned int *matchlen
,
175 union nf_inet_addr
*addr
, bool delim
);
176 extern int ct_sip_parse_numerical_param(const struct nf_conn
*ct
, const char *dptr
,
177 unsigned int off
, unsigned int datalen
,
179 unsigned int *matchoff
, unsigned int *matchen
,
182 extern int ct_sip_get_sdp_header(const struct nf_conn
*ct
, const char *dptr
,
183 unsigned int dataoff
, unsigned int datalen
,
184 enum sdp_header_types type
,
185 enum sdp_header_types term
,
186 unsigned int *matchoff
, unsigned int *matchlen
);
188 #endif /* __KERNEL__ */
189 #endif /* __NF_CONNTRACK_SIP_H__ */