1139823Simp/*
2133578Sharti * Copyright (C) 1993-2001 by Darren Reed.
3133578Sharti *
4133578Sharti * See the IPFILTER.LICENCE file for details on licencing.
5133578Sharti *
6133578Sharti * @(#)ip_fil.h	1.35 6/5/96
7133578Sharti * $Id: ip_scan.h,v 2.9.2.2 2006/07/14 06:12:19 darrenr Exp $
8133578Sharti */
9133578Sharti
10133578Sharti#ifndef __IP_SCAN_H__
11133578Sharti#define __IP_SCAN_H__ 1
12133578Sharti
13133578Sharti#ifdef sun
14133578Sharti# include <sys/ioccom.h>
15133578Sharti#endif
16133578Sharti
17133578Sharti#define	IPSCAN_NAME	"/dev/ipscan"
18133578Sharti#define	IPL_SCAN	IPSCAN_NAME
19133578Sharti#define	ISC_TLEN	16
20133578Sharti
21133578Sharti
22133578Shartistruct fr_info;
23133578Shartistruct frentry;
24133578Shartistruct ip;
25133578Shartistruct ipstate;
26133578Sharti
27133578Sharti
28133578Sharti#if defined(__STDC__) || defined(__GNUC__) || defined(_AIX51)
29133578Sharti# define	SIOCADSCA	_IOWR('r', 60, struct ipscan *)
30133578Sharti# define	SIOCRMSCA	_IOWR('r', 61, struct ipscan *)
31133578Sharti# define	SIOCGSCST	_IOWR('r', 62, struct ipscan *)
32133578Sharti#else
33133578Sharti# define	SIOCADSCA	_IOWR(r, 60, struct ipscan *)
34133578Sharti# define	SIOCRMSCA	_IOWR(r, 61, struct ipscan *)
35133578Sharti# define	SIOCGSCST	_IOWR(r, 62, struct ipscan *)
36133578Sharti#endif
37133578Sharti
38133578Shartistruct	action	{
39133578Sharti	int		act_val;	/* what to do */
40133578Sharti	struct	in_addr	act_ip;		/* redirect IP# */
41133578Sharti	u_short		act_port;	/* redirect port number */
42133578Sharti	int		act_else;	/* what to do */
43133578Sharti	struct	in_addr	act_eip;	/* redirect IP# */
44133578Sharti	u_short		act_eport;	/* redirect port number */
45133578Sharti};
46133578Sharti
47133578Sharti
48133578Shartitypedef	struct	sinfo {
49133578Sharti	char	s_txt[ISC_TLEN];	/* text to match */
50133578Sharti	char	s_msk[ISC_TLEN];	/* mask of the above to check */
51133578Sharti	int	s_len;			/* length of server text */
52133578Sharti} sinfo_t;
53133578Sharti
54133578Sharti
55133578Shartitypedef	struct	ipscan	{
56133578Sharti	struct	ipscan	*ipsc_next;
57133578Sharti	struct	ipscan	**ipsc_pnext;
58133578Sharti	char		ipsc_tag[ISC_TLEN];	/* table entry protocol tag */
59133578Sharti	sinfo_t		ipsc_si[2];	/* client/server side information */
60133578Sharti	int		ipsc_hits;	/* times this has been matched */
61133578Sharti	int		ipsc_active;	/* # of active matches */
62133578Sharti	int		ipsc_fref;	/* # of references from filter rules */
63133578Sharti	int		ipsc_sref;	/* # of references from state entries */
64133578Sharti	struct	action	ipsc_act;
65133578Sharti} ipscan_t;
66133578Sharti
67133578Sharti
68133578Sharti#define	ipsc_cl		ipsc_si[0]
69133578Sharti#define	ipsc_sl		ipsc_si[1]
70133578Sharti#define	ipsc_ctxt	ipsc_cl.s_txt
71133578Sharti#define	ipsc_cmsk	ipsc_cl.s_msk
72133578Sharti#define	ipsc_clen	ipsc_cl.s_len
73133578Sharti#define	ipsc_stxt	ipsc_sl.s_txt
74133578Sharti#define	ipsc_smsk	ipsc_sl.s_msk
75133578Sharti#define	ipsc_slen	ipsc_sl.s_len
76133578Sharti#define	ipsc_action	ipsc_act.act_val
77133578Sharti#define	ipsc_ip		ipsc_act.act_ip
78133578Sharti#define	ipsc_port	ipsc_act.act_port
79133578Sharti#define	ipsc_else	ipsc_act.act_else
80133578Sharti#define	ipsc_eip	ipsc_act.act_eip
81133578Sharti#define	ipsc_eport	ipsc_act.act_eport
82133578Sharti
83133578Sharti#define	ISC_A_NONE	0
84133578Sharti#define	ISC_A_TRACK	1
85133578Sharti#define	ISC_A_CLOSE	2
86133578Sharti#define	ISC_A_REDIRECT	3
87133578Sharti
88133578Sharti
89133578Shartitypedef	struct	ipscanstat	{
90133578Sharti	struct	ipscan	*iscs_list;
91133578Sharti	u_long		iscs_acted;
92133578Sharti	u_long		iscs_else;
93133578Sharti	int		iscs_entries;
94133578Sharti} ipscanstat_t;
95133578Sharti
96133578Sharti
97133578Shartiextern	int fr_scan_ioctl __P((caddr_t, ioctlcmd_t, int, int, void *));
98133578Shartiextern	int ipsc_init __P((void));
99133578Shartiextern	int ipsc_attachis __P((struct ipstate *));
100133578Shartiextern	int ipsc_attachfr __P((struct frentry *));
101133578Shartiextern	int ipsc_detachis __P((struct ipstate *));
102133578Shartiextern	int ipsc_detachfr __P((struct frentry *));
103133578Shartiextern	int ipsc_packet __P((struct fr_info *, struct ipstate *));
104133578Shartiextern	void fr_scanunload __P((void));
105133578Sharti
106133578Sharti#endif /* __IP_SCAN_H__ */
107133578Sharti