113547Sjulian/*
213547Sjulian * Copyright (C) 2012 by Darren Reed.
335025Sjb *
413547Sjulian * See the IPFILTER.LICENCE file for details on licencing.
513547Sjulian *
613547Sjulian * @(#)ip_fil.h	1.35 6/5/96
713547Sjulian * $Id$
813547Sjulian */
913547Sjulian
1013547Sjulian#ifndef __IP_SCAN_H__
1113547Sjulian#define __IP_SCAN_H__ 1
1213547Sjulian
1313547Sjulian#ifdef sun
1413547Sjulian# include <sys/ioccom.h>
1513547Sjulian#endif
1613547Sjulian
1713547Sjulian#define	IPSCAN_NAME	"/dev/ipscan"
1813547Sjulian#define	IPL_SCAN	IPSCAN_NAME
1913547Sjulian#define	ISC_TLEN	16
2013547Sjulian
2113547Sjulian
2213547Sjulianstruct fr_info;
2313547Sjulianstruct frentry;
2413547Sjulianstruct ip;
2513547Sjulianstruct ipstate;
2613547Sjulian
2713547Sjulian
2813547Sjulian#if defined(__STDC__) || defined(__GNUC__) || defined(_AIX51)
2913547Sjulian# define	SIOCADSCA	_IOWR('r', 60, struct ipscan *)
3013547Sjulian# define	SIOCRMSCA	_IOWR('r', 61, struct ipscan *)
3113547Sjulian# define	SIOCGSCST	_IOWR('r', 62, struct ipscan *)
3213547Sjulian#else
3350473Speter# define	SIOCADSCA	_IOWR(r, 60, struct ipscan *)
3413547Sjulian# define	SIOCRMSCA	_IOWR(r, 61, struct ipscan *)
3513547Sjulian# define	SIOCGSCST	_IOWR(r, 62, struct ipscan *)
3613547Sjulian#endif
3713547Sjulian
3813547Sjulianstruct	action	{
3913547Sjulian	int		act_val;	/* what to do */
4013547Sjulian	struct	in_addr	act_ip;		/* redirect IP# */
4113547Sjulian	u_short		act_port;	/* redirect port number */
42146824Srodrigc	int		act_else;	/* what to do */
43149692Sstefanf	struct	in_addr	act_eip;	/* redirect IP# */
44149692Sstefanf	u_short		act_eport;	/* redirect port number */
45149692Sstefanf};
4644965Sjb
47149692Sstefanf
4813547Sjuliantypedef	struct	sinfo {
4913547Sjulian	char	s_txt[ISC_TLEN];	/* text to match */
5017706Sjulian	char	s_msk[ISC_TLEN];	/* mask of the above to check */
5113547Sjulian	int	s_len;			/* length of server text */
5217706Sjulian} sinfo_t;
5317706Sjulian
54149692Sstefanf
55149692Sstefanftypedef	struct	ipscan	{
56119736Sdavidxu	struct	ipscan	*ipsc_next;
5713547Sjulian	struct	ipscan	**ipsc_pnext;
5813547Sjulian	char		ipsc_tag[ISC_TLEN];	/* table entry protocol tag */
5922315Sjulian	sinfo_t		ipsc_si[2];	/* client/server side information */
6022315Sjulian	int		ipsc_hits;	/* times this has been matched */
6122315Sjulian	int		ipsc_active;	/* # of active matches */
6222315Sjulian	int		ipsc_fref;	/* # of references from filter rules */
6322315Sjulian	int		ipsc_sref;	/* # of references from state entries */
6422315Sjulian	struct	action	ipsc_act;
6522315Sjulian} ipscan_t;
6622315Sjulian
6722315Sjulian
6822315Sjulian#define	ipsc_cl		ipsc_si[0]
6922315Sjulian#define	ipsc_sl		ipsc_si[1]
7022315Sjulian#define	ipsc_ctxt	ipsc_cl.s_txt
7122315Sjulian#define	ipsc_cmsk	ipsc_cl.s_msk
7238919Salex#define	ipsc_clen	ipsc_cl.s_len
7338919Salex#define	ipsc_stxt	ipsc_sl.s_txt
7438919Salex#define	ipsc_smsk	ipsc_sl.s_msk
7538919Salex#define	ipsc_slen	ipsc_sl.s_len
7638919Salex#define	ipsc_action	ipsc_act.act_val
7738919Salex#define	ipsc_ip		ipsc_act.act_ip
7853812Salfred#define	ipsc_port	ipsc_act.act_port
7953812Salfred#define	ipsc_else	ipsc_act.act_else
8053812Salfred#define	ipsc_eip	ipsc_act.act_eip
8153812Salfred#define	ipsc_eport	ipsc_act.act_eport
8253812Salfred
8353812Salfred#define	ISC_A_NONE	0
8453812Salfred#define	ISC_A_TRACK	1
8553812Salfred#define	ISC_A_CLOSE	2
8653812Salfred#define	ISC_A_REDIRECT	3
8713547Sjulian
8813547Sjulian
8913547Sjuliantypedef	struct	ipscanstat	{
9013547Sjulian	struct	ipscan	*iscs_list;
9113547Sjulian	u_long		iscs_acted;
9213547Sjulian	u_long		iscs_else;
9313547Sjulian	int		iscs_entries;
9413547Sjulian} ipscanstat_t;
9517706Sjulian
9613547Sjulian
9713547Sjulianextern	int ipf_scan_ioctl __P((ipf_main_softc_t *, caddr_t, ioctlcmd_t, int, int, void *));
9835025Sjbextern	int ipf_scan_init __P((void));
9913547Sjulianextern	int ipf_scan_attachis __P((struct ipstate *));
10035025Sjbextern	int ipf_scan_attachfr __P((struct frentry *));
101213241Sdavidxuextern	int ipf_scan_detachis __P((struct ipstate *));
10235025Sjbextern	int ipf_scan_detachfr __P((struct frentry *));
10338919Salexextern	int ipf_scan_packet __P((struct fr_info *, struct ipstate *));
10435025Sjbextern	void ipf_scan_unload __P((ipf_main_softc_t *));
10535025Sjb
10635025Sjb#endif /* __IP_SCAN_H__ */
10735025Sjb