]>
git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blob - include/linux/netfilter/nf_conntrack_sip.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __NF_CONNTRACK_SIP_H__
3 #define __NF_CONNTRACK_SIP_H__
6 #include <net/netfilter/nf_conntrack_expect.h>
8 #include <linux/types.h>
11 #define SIP_TIMEOUT 3600
13 struct nf_ct_sip_master
{
14 unsigned int register_cseq
;
15 unsigned int invite_cseq
;
19 enum sip_expectation_classes
{
20 SIP_EXPECT_SIGNALLING
,
26 #define SIP_EXPECT_MAX (__SIP_EXPECT_MAX - 1)
28 struct sdp_media_type
{
31 enum sip_expectation_classes
class;
34 #define SDP_MEDIA_TYPE(__name, __class) \
37 .len = sizeof(__name) - 1, \
44 int (*request
)(struct sk_buff
*skb
, unsigned int protoff
,
46 const char **dptr
, unsigned int *datalen
,
48 int (*response
)(struct sk_buff
*skb
, unsigned int protoff
,
50 const char **dptr
, unsigned int *datalen
,
51 unsigned int cseq
, unsigned int code
);
54 #define SIP_HANDLER(__method, __request, __response) \
56 .method = (__method), \
57 .len = sizeof(__method) - 1, \
58 .request = (__request), \
59 .response = (__response), \
69 int (*match_len
)(const struct nf_conn
*ct
,
70 const char *dptr
, const char *limit
,
74 #define __SIP_HDR(__name, __cname, __search, __match) \
77 .len = sizeof(__name) - 1, \
79 .clen = (__cname) ? sizeof(__cname) - 1 : 0, \
80 .search = (__search), \
81 .slen = (__search) ? sizeof(__search) - 1 : 0, \
82 .match_len = (__match), \
85 #define SIP_HDR(__name, __cname, __search, __match) \
86 __SIP_HDR(__name, __cname, __search, __match)
88 #define SDP_HDR(__name, __search, __match) \
89 __SIP_HDR(__name, NULL, __search, __match)
91 enum sip_header_types
{
99 SIP_HDR_CONTENT_LENGTH
,
103 enum sdp_header_types
{
111 struct nf_nat_sip_hooks
{
112 unsigned int (*msg
)(struct sk_buff
*skb
,
113 unsigned int protoff
,
114 unsigned int dataoff
,
116 unsigned int *datalen
);
118 void (*seq_adjust
)(struct sk_buff
*skb
,
119 unsigned int protoff
, s16 off
);
121 unsigned int (*expect
)(struct sk_buff
*skb
,
122 unsigned int protoff
,
123 unsigned int dataoff
,
125 unsigned int *datalen
,
126 struct nf_conntrack_expect
*exp
,
127 unsigned int matchoff
,
128 unsigned int matchlen
);
130 unsigned int (*sdp_addr
)(struct sk_buff
*skb
,
131 unsigned int protoff
,
132 unsigned int dataoff
,
134 unsigned int *datalen
,
136 enum sdp_header_types type
,
137 enum sdp_header_types term
,
138 const union nf_inet_addr
*addr
);
140 unsigned int (*sdp_port
)(struct sk_buff
*skb
,
141 unsigned int protoff
,
142 unsigned int dataoff
,
144 unsigned int *datalen
,
145 unsigned int matchoff
,
146 unsigned int matchlen
,
149 unsigned int (*sdp_session
)(struct sk_buff
*skb
,
150 unsigned int protoff
,
151 unsigned int dataoff
,
153 unsigned int *datalen
,
155 const union nf_inet_addr
*addr
);
157 unsigned int (*sdp_media
)(struct sk_buff
*skb
,
158 unsigned int protoff
,
159 unsigned int dataoff
,
161 unsigned int *datalen
,
162 struct nf_conntrack_expect
*rtp_exp
,
163 struct nf_conntrack_expect
*rtcp_exp
,
164 unsigned int mediaoff
,
165 unsigned int medialen
,
166 union nf_inet_addr
*rtp_addr
);
168 extern const struct nf_nat_sip_hooks
*nf_nat_sip_hooks
;
170 int ct_sip_parse_request(const struct nf_conn
*ct
, const char *dptr
,
171 unsigned int datalen
, unsigned int *matchoff
,
172 unsigned int *matchlen
, union nf_inet_addr
*addr
,
174 int ct_sip_get_header(const struct nf_conn
*ct
, const char *dptr
,
175 unsigned int dataoff
, unsigned int datalen
,
176 enum sip_header_types type
, unsigned int *matchoff
,
177 unsigned int *matchlen
);
178 int ct_sip_parse_header_uri(const struct nf_conn
*ct
, const char *dptr
,
179 unsigned int *dataoff
, unsigned int datalen
,
180 enum sip_header_types type
, int *in_header
,
181 unsigned int *matchoff
, unsigned int *matchlen
,
182 union nf_inet_addr
*addr
, __be16
*port
);
183 int ct_sip_parse_address_param(const struct nf_conn
*ct
, const char *dptr
,
184 unsigned int dataoff
, unsigned int datalen
,
185 const char *name
, unsigned int *matchoff
,
186 unsigned int *matchlen
, union nf_inet_addr
*addr
,
188 int ct_sip_parse_numerical_param(const struct nf_conn
*ct
, const char *dptr
,
189 unsigned int off
, unsigned int datalen
,
190 const char *name
, unsigned int *matchoff
,
191 unsigned int *matchen
, unsigned int *val
);
193 int ct_sip_get_sdp_header(const struct nf_conn
*ct
, const char *dptr
,
194 unsigned int dataoff
, unsigned int datalen
,
195 enum sdp_header_types type
,
196 enum sdp_header_types term
,
197 unsigned int *matchoff
, unsigned int *matchlen
);
199 #endif /* __KERNEL__ */
200 #endif /* __NF_CONNTRACK_SIP_H__ */