xref: /linux/include/linux/netfilter/nf_conntrack_h323.h (revision 91ec2035134982b98fab0609a9fd8480e8217dc1)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _NF_CONNTRACK_H323_H
3 #define _NF_CONNTRACK_H323_H
4 
5 #include <linux/netfilter.h>
6 #include <linux/skbuff.h>
7 #include <linux/types.h>
8 #include <linux/netfilter/nf_conntrack_h323_asn1.h>
9 #include <net/netfilter/nf_conntrack_expect.h>
10 #include <uapi/linux/netfilter/nf_conntrack_tuple_common.h>
11 
12 #define H323_RTP_CHANNEL_MAX 4	/* Audio, video, FAX and other */
13 
14 /* This structure exists only once per master */
15 struct nf_ct_h323_master {
16 
17 	/* Original and NATed Q.931 or H.245 signal ports */
18 	__be16 sig_port[IP_CT_DIR_MAX];
19 
20 	/* Original and NATed RTP ports */
21 	__be16 rtp_port[H323_RTP_CHANNEL_MAX][IP_CT_DIR_MAX];
22 
23 	union {
24 		/* RAS connection timeout */
25 		u_int32_t timeout;
26 
27 		/* Next TPKT length (for separate TPKT header and data) */
28 		u_int16_t tpkt_len[IP_CT_DIR_MAX];
29 	};
30 };
31 
32 int get_h225_addr(struct nf_conn *ct, unsigned char *data,
33 		  TransportAddress *taddr, union nf_inet_addr *addr,
34 		  __be16 *port);
35 
36 struct nfct_h323_nat_hooks {
37 	int (*set_h245_addr)(struct sk_buff *skb, unsigned int protoff,
38 			     unsigned char **data, int dataoff,
39 			     H245_TransportAddress *taddr,
40 			     union nf_inet_addr *addr, __be16 port);
41 	int (*set_h225_addr)(struct sk_buff *skb, unsigned int protoff,
42 			     unsigned char **data, int dataoff,
43 			     TransportAddress *taddr,
44 			     union nf_inet_addr *addr, __be16 port);
45 	int (*set_sig_addr)(struct sk_buff *skb,
46 			    struct nf_conn *ct,
47 			    enum ip_conntrack_info ctinfo,
48 			    unsigned int protoff, unsigned char **data,
49 			    TransportAddress *taddr, int count);
50 	int (*set_ras_addr)(struct sk_buff *skb,
51 			    struct nf_conn *ct,
52 			    enum ip_conntrack_info ctinfo,
53 			    unsigned int protoff, unsigned char **data,
54 			    TransportAddress *taddr, int count);
55 	int (*nat_rtp_rtcp)(struct sk_buff *skb,
56 			    struct nf_conn *ct,
57 			    enum ip_conntrack_info ctinfo,
58 			    unsigned int protoff,
59 			    unsigned char **data, int dataoff,
60 			    H245_TransportAddress *taddr,
61 			    __be16 port, __be16 rtp_port,
62 			    struct nf_conntrack_expect *rtp_exp,
63 			    struct nf_conntrack_expect *rtcp_exp);
64 	int (*nat_t120)(struct sk_buff *skb,
65 			struct nf_conn *ct,
66 			enum ip_conntrack_info ctinfo,
67 			unsigned int protoff,
68 			unsigned char **data, int dataoff,
69 			H245_TransportAddress *taddr, __be16 port,
70 			struct nf_conntrack_expect *exp);
71 	int (*nat_h245)(struct sk_buff *skb,
72 			struct nf_conn *ct,
73 			enum ip_conntrack_info ctinfo,
74 			unsigned int protoff,
75 			unsigned char **data, int dataoff,
76 			TransportAddress *taddr, __be16 port,
77 			struct nf_conntrack_expect *exp);
78 	int (*nat_callforwarding)(struct sk_buff *skb,
79 				  struct nf_conn *ct,
80 				  enum ip_conntrack_info ctinfo,
81 				  unsigned int protoff,
82 				  unsigned char **data, int dataoff,
83 				  TransportAddress *taddr, __be16 port,
84 				  struct nf_conntrack_expect *exp);
85 	int (*nat_q931)(struct sk_buff *skb,
86 			struct nf_conn *ct,
87 			enum ip_conntrack_info ctinfo,
88 			unsigned int protoff,
89 			unsigned char **data, TransportAddress *taddr, int idx,
90 			__be16 port, struct nf_conntrack_expect *exp);
91 };
92 extern const struct nfct_h323_nat_hooks __rcu *nfct_h323_nat_hook;
93 
94 #endif
95