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 dataoff,
41 const char **dptr, unsigned int *datalen,
43 int (*response)(struct sk_buff *skb, unsigned int dataoff,
44 const char **dptr, unsigned int *datalen,
45 unsigned int cseq, unsigned int code);
48 #define SIP_HANDLER(__method, __request, __response) \
50 .method = (__method), \
51 .len = sizeof(__method) - 1, \
52 .request = (__request), \
53 .response = (__response), \
63 int (*match_len)(const struct nf_conn *ct,
64 const char *dptr, const char *limit,
68 #define __SIP_HDR(__name, __cname, __search, __match) \
71 .len = sizeof(__name) - 1, \
73 .clen = (__cname) ? sizeof(__cname) - 1 : 0, \
74 .search = (__search), \
75 .slen = (__search) ? sizeof(__search) - 1 : 0, \
76 .match_len = (__match), \
79 #define SIP_HDR(__name, __cname, __search, __match) \
80 __SIP_HDR(__name, __cname, __search, __match)
82 #define SDP_HDR(__name, __search, __match) \
83 __SIP_HDR(__name, NULL, __search, __match)
85 enum sip_header_types {
93 SIP_HDR_CONTENT_LENGTH,
97 enum sdp_header_types {
101 SDP_HDR_CONNECTION_IP4,
103 SDP_HDR_CONNECTION_IP6,
107 extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb,
108 unsigned int dataoff,
110 unsigned int *datalen);
111 extern void (*nf_nat_sip_seq_adjust_hook)(struct sk_buff *skb, s16 off);
112 extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb,
113 unsigned int dataoff,
115 unsigned int *datalen,
116 struct nf_conntrack_expect *exp,
117 unsigned int matchoff,
118 unsigned int matchlen);
119 extern unsigned int (*nf_nat_sdp_addr_hook)(struct sk_buff *skb,
120 unsigned int dataoff,
122 unsigned int *datalen,
124 enum sdp_header_types type,
125 enum sdp_header_types term,
126 const union nf_inet_addr *addr);
127 extern unsigned int (*nf_nat_sdp_port_hook)(struct sk_buff *skb,
128 unsigned int dataoff,
130 unsigned int *datalen,
131 unsigned int matchoff,
132 unsigned int matchlen,
134 extern unsigned int (*nf_nat_sdp_session_hook)(struct sk_buff *skb,
135 unsigned int dataoff,
137 unsigned int *datalen,
139 const union nf_inet_addr *addr);
140 extern unsigned int (*nf_nat_sdp_media_hook)(struct sk_buff *skb,
141 unsigned int dataoff,
143 unsigned int *datalen,
144 struct nf_conntrack_expect *rtp_exp,
145 struct nf_conntrack_expect *rtcp_exp,
146 unsigned int mediaoff,
147 unsigned int medialen,
148 union nf_inet_addr *rtp_addr);
150 extern int ct_sip_parse_request(const struct nf_conn *ct,
151 const char *dptr, unsigned int datalen,
152 unsigned int *matchoff, unsigned int *matchlen,
153 union nf_inet_addr *addr, __be16 *port);
154 extern int ct_sip_get_header(const struct nf_conn *ct, const char *dptr,
155 unsigned int dataoff, unsigned int datalen,
156 enum sip_header_types type,
157 unsigned int *matchoff, unsigned int *matchlen);
158 extern int ct_sip_parse_header_uri(const struct nf_conn *ct, const char *dptr,
159 unsigned int *dataoff, unsigned int datalen,
160 enum sip_header_types type, int *in_header,
161 unsigned int *matchoff, unsigned int *matchlen,
162 union nf_inet_addr *addr, __be16 *port);
163 extern int ct_sip_parse_address_param(const struct nf_conn *ct, const char *dptr,
164 unsigned int dataoff, unsigned int datalen,
166 unsigned int *matchoff, unsigned int *matchlen,
167 union nf_inet_addr *addr, bool delim);
168 extern int ct_sip_parse_numerical_param(const struct nf_conn *ct, const char *dptr,
169 unsigned int off, unsigned int datalen,
171 unsigned int *matchoff, unsigned int *matchen,
174 extern int ct_sip_get_sdp_header(const struct nf_conn *ct, const char *dptr,
175 unsigned int dataoff, unsigned int datalen,
176 enum sdp_header_types type,
177 enum sdp_header_types term,
178 unsigned int *matchoff, unsigned int *matchlen);
180 #endif /* __KERNEL__ */
181 #endif /* __NF_CONNTRACK_SIP_H__ */