1145519Sdarrenr/*	$FreeBSD$	*/
2145510Sdarrenr
3145510Sdarrenr/*
4255332Scy * Copyright (C) 2012 by Darren Reed.
5145510Sdarrenr *
6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing.
7145510Sdarrenr *
8145510Sdarrenr * @(#)ip_fil.h	1.35 6/5/96
9255332Scy * $Id$
10145510Sdarrenr */
11145510Sdarrenr
12255332Scytypedef struct ipmon_msg_s {
13255332Scy	int	imm_msglen;
14255332Scy	char	*imm_msg;
15255332Scy	int	imm_dsize;
16255332Scy	void	*imm_data;
17255332Scy	time_t	imm_when;
18255332Scy	int	imm_loglevel;
19255332Scy} ipmon_msg_t;
20145510Sdarrenr
21255332Scytypedef	void	(*ims_destroy_func_t)(void *);
22255332Scytypedef	void	*(*ims_dup_func_t)(void *);
23255332Scytypedef	int	(*ims_match_func_t)(void *, void *);
24255332Scytypedef	void	*(*ims_parse_func_t)(char **);
25255332Scytypedef	void	(*ims_print_func_t)(void *);
26255332Scytypedef	int	(*ims_store_func_t)(void *, ipmon_msg_t *);
27255332Scy
28255332Scytypedef struct ipmon_saver_s {
29255332Scy	char			*ims_name;
30255332Scy	ims_destroy_func_t	ims_destroy;
31255332Scy	ims_dup_func_t		ims_dup;
32255332Scy	ims_match_func_t	ims_match;
33255332Scy	ims_parse_func_t	ims_parse;
34255332Scy	ims_print_func_t	ims_print;
35255332Scy	ims_store_func_t	ims_store;
36255332Scy} ipmon_saver_t;
37255332Scy
38255332Scytypedef struct	ipmon_saver_int_s {
39255332Scy	struct ipmon_saver_int_s	*imsi_next;
40255332Scy	ipmon_saver_t			*imsi_stor;
41255332Scy	void				*imsi_handle;
42255332Scy} ipmon_saver_int_t;
43255332Scy
44255332Scytypedef	struct	ipmon_doing_s {
45255332Scy	struct ipmon_doing_s	*ipmd_next;
46255332Scy	void			*ipmd_token;
47255332Scy	ipmon_saver_t		*ipmd_saver;
48255332Scy	/*
49255332Scy	 * ipmd_store is "cached" in this structure to avoid a double
50255332Scy	 * deref when doing saves....
51255332Scy	 */
52255332Scy	int			(*ipmd_store)(void *, ipmon_msg_t *);
53255332Scy} ipmon_doing_t;
54255332Scy
55255332Scy
56255332Scytypedef	struct	ipmon_action {
57145510Sdarrenr	struct	ipmon_action	*ac_next;
58145510Sdarrenr	int	ac_mflag;	/* collection of things to compare */
59145510Sdarrenr	int	ac_dflag;	/* flags to compliment the doing fields */
60255332Scy	int	ac_logpri;
61145510Sdarrenr	int	ac_direction;
62145510Sdarrenr	char	ac_group[FR_GROUPLEN];
63145510Sdarrenr	char	ac_nattag[16];
64145510Sdarrenr	u_32_t	ac_logtag;
65145510Sdarrenr	int	ac_type;	/* nat/state/ipf */
66145510Sdarrenr	int	ac_proto;
67145510Sdarrenr	int	ac_rule;
68145510Sdarrenr	int	ac_packet;
69145510Sdarrenr	int	ac_second;
70145510Sdarrenr	int	ac_result;
71145510Sdarrenr	u_32_t	ac_sip;
72255332Scy	u_32_t	ac_smsk;
73145510Sdarrenr	u_32_t	ac_dip;
74255332Scy	u_32_t	ac_dmsk;
75145510Sdarrenr	u_short	ac_sport;
76145510Sdarrenr	u_short	ac_dport;
77145510Sdarrenr	char	*ac_iface;
78145510Sdarrenr	/*
79145510Sdarrenr	 * used with ac_packet/ac_second
80145510Sdarrenr	 */
81145510Sdarrenr	struct	timeval	ac_last;
82145510Sdarrenr	int	ac_pktcnt;
83255332Scy	/*
84255332Scy	 * What to do with matches
85255332Scy	 */
86255332Scy	ipmon_doing_t	*ac_doing;
87145510Sdarrenr} ipmon_action_t;
88145510Sdarrenr
89145510Sdarrenr#define	ac_lastsec	ac_last.tv_sec
90145510Sdarrenr#define	ac_lastusec	ac_last.tv_usec
91145510Sdarrenr
92145510Sdarrenr/*
93145510Sdarrenr * Flags indicating what fields to do matching upon (ac_mflag).
94145510Sdarrenr */
95145510Sdarrenr#define	IPMAC_DIRECTION	0x0001
96145510Sdarrenr#define	IPMAC_DSTIP	0x0002
97145510Sdarrenr#define	IPMAC_DSTPORT	0x0004
98145510Sdarrenr#define	IPMAC_EVERY	0x0008
99145510Sdarrenr#define	IPMAC_GROUP	0x0010
100145510Sdarrenr#define	IPMAC_INTERFACE	0x0020
101145510Sdarrenr#define	IPMAC_LOGTAG	0x0040
102145510Sdarrenr#define	IPMAC_NATTAG	0x0080
103145510Sdarrenr#define	IPMAC_PROTOCOL	0x0100
104145510Sdarrenr#define	IPMAC_RESULT	0x0200
105145510Sdarrenr#define	IPMAC_RULE	0x0400
106145510Sdarrenr#define	IPMAC_SRCIP	0x0800
107145510Sdarrenr#define	IPMAC_SRCPORT	0x1000
108145510Sdarrenr#define	IPMAC_TYPE	0x2000
109145510Sdarrenr#define	IPMAC_WITH	0x4000
110145510Sdarrenr
111145510Sdarrenr#define	IPMR_BLOCK	1
112145510Sdarrenr#define	IPMR_PASS	2
113145510Sdarrenr#define	IPMR_NOMATCH	3
114145510Sdarrenr#define	IPMR_LOG	4
115145510Sdarrenr
116255332Scy#define	IPMON_SYSLOG	0x001
117255332Scy#define	IPMON_RESOLVE	0x002
118255332Scy#define	IPMON_HEXBODY	0x004
119255332Scy#define	IPMON_HEXHDR	0x010
120255332Scy#define	IPMON_TAIL	0x020
121255332Scy#define	IPMON_VERBOSE	0x040
122255332Scy#define	IPMON_NAT	0x080
123255332Scy#define	IPMON_STATE	0x100
124255332Scy#define	IPMON_FILTER	0x200
125255332Scy#define	IPMON_PORTNUM	0x400
126255332Scy#define	IPMON_LOGALL	(IPMON_NAT|IPMON_STATE|IPMON_FILTER)
127255332Scy#define	IPMON_LOGBODY	0x800
128145510Sdarrenr
129145510Sdarrenr#define	HOSTNAME_V4(a,b)	hostname((a), 4, (u_32_t *)&(b))
130145510Sdarrenr
131145510Sdarrenr#ifndef	LOGFAC
132145510Sdarrenr#define	LOGFAC	LOG_LOCAL0
133145510Sdarrenr#endif
134145510Sdarrenr
135255332Scyextern	void	dump_config __P((void));
136145510Sdarrenrextern	int	load_config __P((char *));
137255332Scyextern	void	unload_config __P((void));
138145510Sdarrenrextern	void	dumphex __P((FILE *, int, char *, int));
139145510Sdarrenrextern	int	check_action __P((char *, char *, int, int));
140145510Sdarrenrextern	char	*getword __P((int));
141255332Scyextern	void	*add_doing __P((ipmon_saver_t *));
142255332Scy
143