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