Commit 3b6b9fab authored by Patrick McHardy's avatar Patrick McHardy

netfilter: nf_conntrack_sip: pass data offset to NAT functions

When using TCP multiple SIP messages might be present in a single packet.
A following patch will parse them by setting the dptr to the beginning of
each message. The NAT helper needs to reload the dptr value after mangling
the packet however, so it needs to know the offset of the message to the
beginning of the packet.
Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
parent 54101f4f
...@@ -34,10 +34,10 @@ struct sdp_media_type { ...@@ -34,10 +34,10 @@ struct sdp_media_type {
struct sip_handler { struct sip_handler {
const char *method; const char *method;
unsigned int len; unsigned int len;
int (*request)(struct sk_buff *skb, int (*request)(struct sk_buff *skb, unsigned int dataoff,
const char **dptr, unsigned int *datalen, const char **dptr, unsigned int *datalen,
unsigned int cseq); unsigned int cseq);
int (*response)(struct sk_buff *skb, int (*response)(struct sk_buff *skb, unsigned int dataoff,
const char **dptr, unsigned int *datalen, const char **dptr, unsigned int *datalen,
unsigned int cseq, unsigned int code); unsigned int cseq, unsigned int code);
}; };
...@@ -100,33 +100,39 @@ enum sdp_header_types { ...@@ -100,33 +100,39 @@ enum sdp_header_types {
}; };
extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb, extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb,
unsigned int dataoff,
const char **dptr, const char **dptr,
unsigned int *datalen); unsigned int *datalen);
extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb, extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb,
unsigned int dataoff,
const char **dptr, const char **dptr,
unsigned int *datalen, unsigned int *datalen,
struct nf_conntrack_expect *exp, struct nf_conntrack_expect *exp,
unsigned int matchoff, unsigned int matchoff,
unsigned int matchlen); unsigned int matchlen);
extern unsigned int (*nf_nat_sdp_addr_hook)(struct sk_buff *skb, extern unsigned int (*nf_nat_sdp_addr_hook)(struct sk_buff *skb,
const char **dptr,
unsigned int dataoff, unsigned int dataoff,
const char **dptr,
unsigned int *datalen, unsigned int *datalen,
unsigned int sdpoff,
enum sdp_header_types type, enum sdp_header_types type,
enum sdp_header_types term, enum sdp_header_types term,
const union nf_inet_addr *addr); const union nf_inet_addr *addr);
extern unsigned int (*nf_nat_sdp_port_hook)(struct sk_buff *skb, extern unsigned int (*nf_nat_sdp_port_hook)(struct sk_buff *skb,
unsigned int dataoff,
const char **dptr, const char **dptr,
unsigned int *datalen, unsigned int *datalen,
unsigned int matchoff, unsigned int matchoff,
unsigned int matchlen, unsigned int matchlen,
u_int16_t port); u_int16_t port);
extern unsigned int (*nf_nat_sdp_session_hook)(struct sk_buff *skb, extern unsigned int (*nf_nat_sdp_session_hook)(struct sk_buff *skb,
const char **dptr,
unsigned int dataoff, unsigned int dataoff,
const char **dptr,
unsigned int *datalen, unsigned int *datalen,
unsigned int sdpoff,
const union nf_inet_addr *addr); const union nf_inet_addr *addr);
extern unsigned int (*nf_nat_sdp_media_hook)(struct sk_buff *skb, extern unsigned int (*nf_nat_sdp_media_hook)(struct sk_buff *skb,
unsigned int dataoff,
const char **dptr, const char **dptr,
unsigned int *datalen, unsigned int *datalen,
struct nf_conntrack_expect *rtp_exp, struct nf_conntrack_expect *rtp_exp,
......
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment