Home | History | Annotate | Line # | Download | only in netinet
      1 /*	$NetBSD: ip_scan.h,v 1.3 2012/07/22 14:27:51 darrenr Exp $	*/
      2 
      3 /*
      4  * Copyright (C) 2012 by Darren Reed.
      5  *
      6  * See the IPFILTER.LICENCE file for details on licencing.
      7  *
      8  * @(#)ip_fil.h	1.35 6/5/96
      9  * Id: ip_scan.h,v 1.1.1.2 2012/07/22 13:45:34 darrenr Exp
     10  */
     11 
     12 #ifndef __IP_SCAN_H__
     13 #define __IP_SCAN_H__ 1
     14 
     15 #ifdef sun
     16 # include <sys/ioccom.h>
     17 #endif
     18 
     19 #define	IPSCAN_NAME	"/dev/ipscan"
     20 #define	IPL_SCAN	IPSCAN_NAME
     21 #define	ISC_TLEN	16
     22 
     23 
     24 struct fr_info;
     25 struct frentry;
     26 struct ip;
     27 struct ipstate;
     28 
     29 
     30 #if defined(__STDC__) || defined(__GNUC__) || defined(_AIX51)
     31 # define	SIOCADSCA	_IOWR('r', 60, struct ipscan *)
     32 # define	SIOCRMSCA	_IOWR('r', 61, struct ipscan *)
     33 # define	SIOCGSCST	_IOWR('r', 62, struct ipscan *)
     34 #else
     35 # define	SIOCADSCA	_IOWR(r, 60, struct ipscan *)
     36 # define	SIOCRMSCA	_IOWR(r, 61, struct ipscan *)
     37 # define	SIOCGSCST	_IOWR(r, 62, struct ipscan *)
     38 #endif
     39 
     40 struct	action	{
     41 	int		act_val;	/* what to do */
     42 	struct	in_addr	act_ip;		/* redirect IP# */
     43 	u_short		act_port;	/* redirect port number */
     44 	int		act_else;	/* what to do */
     45 	struct	in_addr	act_eip;	/* redirect IP# */
     46 	u_short		act_eport;	/* redirect port number */
     47 };
     48 
     49 
     50 typedef	struct	sinfo {
     51 	char	s_txt[ISC_TLEN];	/* text to match */
     52 	char	s_msk[ISC_TLEN];	/* mask of the above to check */
     53 	int	s_len;			/* length of server text */
     54 } sinfo_t;
     55 
     56 
     57 typedef	struct	ipscan	{
     58 	struct	ipscan	*ipsc_next;
     59 	struct	ipscan	**ipsc_pnext;
     60 	char		ipsc_tag[ISC_TLEN];	/* table entry protocol tag */
     61 	sinfo_t		ipsc_si[2];	/* client/server side information */
     62 	int		ipsc_hits;	/* times this has been matched */
     63 	int		ipsc_active;	/* # of active matches */
     64 	int		ipsc_fref;	/* # of references from filter rules */
     65 	int		ipsc_sref;	/* # of references from state entries */
     66 	struct	action	ipsc_act;
     67 } ipscan_t;
     68 
     69 
     70 #define	ipsc_cl		ipsc_si[0]
     71 #define	ipsc_sl		ipsc_si[1]
     72 #define	ipsc_ctxt	ipsc_cl.s_txt
     73 #define	ipsc_cmsk	ipsc_cl.s_msk
     74 #define	ipsc_clen	ipsc_cl.s_len
     75 #define	ipsc_stxt	ipsc_sl.s_txt
     76 #define	ipsc_smsk	ipsc_sl.s_msk
     77 #define	ipsc_slen	ipsc_sl.s_len
     78 #define	ipsc_action	ipsc_act.act_val
     79 #define	ipsc_ip		ipsc_act.act_ip
     80 #define	ipsc_port	ipsc_act.act_port
     81 #define	ipsc_else	ipsc_act.act_else
     82 #define	ipsc_eip	ipsc_act.act_eip
     83 #define	ipsc_eport	ipsc_act.act_eport
     84 
     85 #define	ISC_A_NONE	0
     86 #define	ISC_A_TRACK	1
     87 #define	ISC_A_CLOSE	2
     88 #define	ISC_A_REDIRECT	3
     89 
     90 
     91 typedef	struct	ipscanstat	{
     92 	struct	ipscan	*iscs_list;
     93 	u_long		iscs_acted;
     94 	u_long		iscs_else;
     95 	int		iscs_entries;
     96 } ipscanstat_t;
     97 
     98 
     99 extern	int ipf_scan_ioctl(ipf_main_softc_t *, void *, ioctlcmd_t, int, int, void *);
    100 extern	int ipf_scan_init(void);
    101 extern	int ipf_scan_attachis(struct ipstate *);
    102 extern	int ipf_scan_attachfr(struct frentry *);
    103 extern	int ipf_scan_detachis(struct ipstate *);
    104 extern	int ipf_scan_detachfr(struct frentry *);
    105 extern	int ipf_scan_packet(struct fr_info *, struct ipstate *);
    106 extern	void ipf_scan_unload(ipf_main_softc_t *);
    107 
    108 #endif /* __IP_SCAN_H__ */
    109