linux/net/netfilter/nf_conntrack_h323_main.c

// SPDX-License-Identifier: GPL-2.0-only
/*
 * H.323 connection tracking helper
 *
 * Copyright (c) 2006 Jing Min Zhao <[email protected]>
 * Copyright (c) 2006-2012 Patrick McHardy <[email protected]>
 *
 * Based on the 'brute force' H.323 connection tracking module by
 * Jozsef Kadlecsik <[email protected]>
 *
 * For more information, please see http://nath323.sourceforge.net/
 */

#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/ctype.h>
#include <linux/inet.h>
#include <linux/in.h>
#include <linux/ip.h>
#include <linux/slab.h>
#include <linux/udp.h>
#include <linux/tcp.h>
#include <linux/skbuff.h>
#include <net/route.h>
#include <net/ip6_route.h>
#include <linux/netfilter_ipv6.h>

#include <net/netfilter/nf_conntrack.h>
#include <net/netfilter/nf_conntrack_core.h>
#include <net/netfilter/nf_conntrack_tuple.h>
#include <net/netfilter/nf_conntrack_expect.h>
#include <net/netfilter/nf_conntrack_ecache.h>
#include <net/netfilter/nf_conntrack_helper.h>
#include <net/netfilter/nf_conntrack_zones.h>
#include <linux/netfilter/nf_conntrack_h323.h>

#define H323_MAX_SIZE

/* Parameters */
static unsigned int default_rrq_ttl __read_mostly =;
module_param(default_rrq_ttl, uint, 0600);
MODULE_PARM_DESC();

static int gkrouted_only __read_mostly =;
module_param(gkrouted_only, int, 0600);
MODULE_PARM_DESC();

static bool callforward_filter __read_mostly =;
module_param(callforward_filter, bool, 0600);
MODULE_PARM_DESC();

const struct nfct_h323_nat_hooks __rcu *nfct_h323_nat_hook __read_mostly;
EXPORT_SYMBOL_GPL();

static DEFINE_SPINLOCK(nf_h323_lock);
static char *h323_buffer;

static struct nf_conntrack_helper nf_conntrack_helper_h245;
static struct nf_conntrack_helper nf_conntrack_helper_q931[];
static struct nf_conntrack_helper nf_conntrack_helper_ras[];

static int get_tpkt_data(struct sk_buff *skb, unsigned int protoff,
			 struct nf_conn *ct, enum ip_conntrack_info ctinfo,
			 unsigned char **data, int *datalen, int *dataoff)
{}

static int get_h245_addr(struct nf_conn *ct, const unsigned char *data,
			 H245_TransportAddress *taddr,
			 union nf_inet_addr *addr, __be16 *port)
{}

static int expect_rtp_rtcp(struct sk_buff *skb, struct nf_conn *ct,
			   enum ip_conntrack_info ctinfo,
			   unsigned int protoff,
			   unsigned char **data, int dataoff,
			   H245_TransportAddress *taddr)
{}

static int expect_t120(struct sk_buff *skb,
		       struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff,
		       unsigned char **data, int dataoff,
		       H245_TransportAddress *taddr)
{}

static int process_h245_channel(struct sk_buff *skb,
				struct nf_conn *ct,
				enum ip_conntrack_info ctinfo,
				unsigned int protoff,
				unsigned char **data, int dataoff,
				H2250LogicalChannelParameters *channel)
{}

static int process_olc(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff,
		       unsigned char **data, int dataoff,
		       OpenLogicalChannel *olc)
{}

static int process_olca(struct sk_buff *skb, struct nf_conn *ct,
			enum ip_conntrack_info ctinfo,
			unsigned int protoff, unsigned char **data, int dataoff,
			OpenLogicalChannelAck *olca)
{}

static int process_h245(struct sk_buff *skb, struct nf_conn *ct,
			enum ip_conntrack_info ctinfo,
			unsigned int protoff, unsigned char **data, int dataoff,
			MultimediaSystemControlMessage *mscm)
{}

static int h245_help(struct sk_buff *skb, unsigned int protoff,
		     struct nf_conn *ct, enum ip_conntrack_info ctinfo)
{}

static const struct nf_conntrack_expect_policy h245_exp_policy =;

static struct nf_conntrack_helper nf_conntrack_helper_h245 __read_mostly =;

int get_h225_addr(struct nf_conn *ct, unsigned char *data,
		  TransportAddress *taddr,
		  union nf_inet_addr *addr, __be16 *port)
{}
EXPORT_SYMBOL_GPL();

static int expect_h245(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff, unsigned char **data, int dataoff,
		       TransportAddress *taddr)
{}

/* If the calling party is on the same side of the forward-to party,
 * we don't need to track the second call
 */
static int callforward_do_filter(struct net *net,
				 const union nf_inet_addr *src,
				 const union nf_inet_addr *dst,
				 u_int8_t family)
{}

static int expect_callforwarding(struct sk_buff *skb,
				 struct nf_conn *ct,
				 enum ip_conntrack_info ctinfo,
				 unsigned int protoff,
				 unsigned char **data, int dataoff,
				 TransportAddress *taddr)
{}

static int process_setup(struct sk_buff *skb, struct nf_conn *ct,
			 enum ip_conntrack_info ctinfo,
			 unsigned int protoff,
			 unsigned char **data, int dataoff,
			 Setup_UUIE *setup)
{}

static int process_callproceeding(struct sk_buff *skb,
				  struct nf_conn *ct,
				  enum ip_conntrack_info ctinfo,
				  unsigned int protoff,
				  unsigned char **data, int dataoff,
				  CallProceeding_UUIE *callproc)
{}

static int process_connect(struct sk_buff *skb, struct nf_conn *ct,
			   enum ip_conntrack_info ctinfo,
			   unsigned int protoff,
			   unsigned char **data, int dataoff,
			   Connect_UUIE *connect)
{}

static int process_alerting(struct sk_buff *skb, struct nf_conn *ct,
			    enum ip_conntrack_info ctinfo,
			    unsigned int protoff,
			    unsigned char **data, int dataoff,
			    Alerting_UUIE *alert)
{}

static int process_facility(struct sk_buff *skb, struct nf_conn *ct,
			    enum ip_conntrack_info ctinfo,
			    unsigned int protoff,
			    unsigned char **data, int dataoff,
			    Facility_UUIE *facility)
{}

static int process_progress(struct sk_buff *skb, struct nf_conn *ct,
			    enum ip_conntrack_info ctinfo,
			    unsigned int protoff,
			    unsigned char **data, int dataoff,
			    Progress_UUIE *progress)
{}

static int process_q931(struct sk_buff *skb, struct nf_conn *ct,
			enum ip_conntrack_info ctinfo,
			unsigned int protoff, unsigned char **data, int dataoff,
			Q931 *q931)
{}

static int q931_help(struct sk_buff *skb, unsigned int protoff,
		     struct nf_conn *ct, enum ip_conntrack_info ctinfo)
{}

static const struct nf_conntrack_expect_policy q931_exp_policy =;

static struct nf_conntrack_helper nf_conntrack_helper_q931[] __read_mostly =;

static unsigned char *get_udp_data(struct sk_buff *skb, unsigned int protoff,
				   int *datalen)
{}

static struct nf_conntrack_expect *find_expect(struct nf_conn *ct,
					       union nf_inet_addr *addr,
					       __be16 port)
{}

static int expect_q931(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff, unsigned char **data,
		       TransportAddress *taddr, int count)
{}

static int process_grq(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff,
		       unsigned char **data, GatekeeperRequest *grq)
{}

static int process_gcf(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff,
		       unsigned char **data, GatekeeperConfirm *gcf)
{}

static int process_rrq(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff,
		       unsigned char **data, RegistrationRequest *rrq)
{}

static int process_rcf(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff,
		       unsigned char **data, RegistrationConfirm *rcf)
{}

static int process_urq(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff,
		       unsigned char **data, UnregistrationRequest *urq)
{}

static int process_arq(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff,
		       unsigned char **data, AdmissionRequest *arq)
{}

static int process_acf(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff,
		       unsigned char **data, AdmissionConfirm *acf)
{}

static int process_lrq(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff,
		       unsigned char **data, LocationRequest *lrq)
{}

static int process_lcf(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff,
		       unsigned char **data, LocationConfirm *lcf)
{}

static int process_irr(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff,
		       unsigned char **data, InfoRequestResponse *irr)
{}

static int process_ras(struct sk_buff *skb, struct nf_conn *ct,
		       enum ip_conntrack_info ctinfo,
		       unsigned int protoff,
		       unsigned char **data, RasMessage *ras)
{}

static int ras_help(struct sk_buff *skb, unsigned int protoff,
		    struct nf_conn *ct, enum ip_conntrack_info ctinfo)
{}

static const struct nf_conntrack_expect_policy ras_exp_policy =;

static struct nf_conntrack_helper nf_conntrack_helper_ras[] __read_mostly =;

static int __init h323_helper_init(void)
{}

static void __exit h323_helper_exit(void)
{}

static void __exit nf_conntrack_h323_fini(void)
{}

static int __init nf_conntrack_h323_init(void)
{}

module_init();
module_exit(nf_conntrack_h323_fini);

MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_LICENSE();
MODULE_ALIAS();
MODULE_ALIAS_NFCT_HELPER();
MODULE_ALIAS_NFCT_HELPER();
MODULE_ALIAS_NFCT_HELPER();