/* * Copyright (C) 2012 by Darren Reed. * * See the IPFILTER.LICENCE file for details on licencing. * * @(#)ip_fil.h 1.35 6/5/96 * $Id$ */ typedef struct ipmon_msg_s { int imm_msglen; char *imm_msg; int imm_dsize; void *imm_data; time_t imm_when; int imm_loglevel; } ipmon_msg_t; typedef void (*ims_destroy_func_t)(void *); typedef void *(*ims_dup_func_t)(void *); typedef int (*ims_match_func_t)(void *, void *); typedef void *(*ims_parse_func_t)(char **); typedef void (*ims_print_func_t)(void *); typedef int (*ims_store_func_t)(void *, ipmon_msg_t *); typedef struct ipmon_saver_s { char *ims_name; ims_destroy_func_t ims_destroy; ims_dup_func_t ims_dup; ims_match_func_t ims_match; ims_parse_func_t ims_parse; ims_print_func_t ims_print; ims_store_func_t ims_store; } ipmon_saver_t; typedef struct ipmon_saver_int_s { struct ipmon_saver_int_s *imsi_next; ipmon_saver_t *imsi_stor; void *imsi_handle; } ipmon_saver_int_t; typedef struct ipmon_doing_s { struct ipmon_doing_s *ipmd_next; void *ipmd_token; ipmon_saver_t *ipmd_saver; /* * ipmd_store is "cached" in this structure to avoid a double * deref when doing saves.... */ int (*ipmd_store)(void *, ipmon_msg_t *); } ipmon_doing_t; typedef struct ipmon_action { struct ipmon_action *ac_next; int ac_mflag; /* collection of things to compare */ int ac_dflag; /* flags to compliment the doing fields */ int ac_logpri; int ac_direction; char ac_group[FR_GROUPLEN]; char ac_nattag[16]; u_32_t ac_logtag; int ac_type; /* nat/state/ipf */ int ac_proto; int ac_rule; int ac_packet; int ac_second; int ac_result; u_32_t ac_sip; u_32_t ac_smsk; u_32_t ac_dip; u_32_t ac_dmsk; u_short ac_sport; u_short ac_dport; char *ac_iface; /* * used with ac_packet/ac_second */ struct timeval ac_last; int ac_pktcnt; /* * What to do with matches */ ipmon_doing_t *ac_doing; } ipmon_action_t; #define ac_lastsec ac_last.tv_sec #define ac_lastusec ac_last.tv_usec /* * Flags indicating what fields to do matching upon (ac_mflag). */ #define IPMAC_DIRECTION 0x0001 #define IPMAC_DSTIP 0x0002 #define IPMAC_DSTPORT 0x0004 #define IPMAC_EVERY 0x0008 #define IPMAC_GROUP 0x0010 #define IPMAC_INTERFACE 0x0020 #define IPMAC_LOGTAG 0x0040 #define IPMAC_NATTAG 0x0080 #define IPMAC_PROTOCOL 0x0100 #define IPMAC_RESULT 0x0200 #define IPMAC_RULE 0x0400 #define IPMAC_SRCIP 0x0800 #define IPMAC_SRCPORT 0x1000 #define IPMAC_TYPE 0x2000 #define IPMAC_WITH 0x4000 #define IPMR_BLOCK 1 #define IPMR_PASS 2 #define IPMR_NOMATCH 3 #define IPMR_LOG 4 #define IPMON_SYSLOG 0x001 #define IPMON_RESOLVE 0x002 #define IPMON_HEXBODY 0x004 #define IPMON_HEXHDR 0x010 #define IPMON_TAIL 0x020 #define IPMON_VERBOSE 0x040 #define IPMON_NAT 0x080 #define IPMON_STATE 0x100 #define IPMON_FILTER 0x200 #define IPMON_PORTNUM 0x400 #define IPMON_LOGALL (IPMON_NAT|IPMON_STATE|IPMON_FILTER) #define IPMON_LOGBODY 0x800 #define HOSTNAME_V4(a,b) hostname((a), 4, (u_32_t *)&(b)) #ifndef LOGFAC #define LOGFAC LOG_LOCAL0 #endif extern void dump_config(void); extern int load_config(char *); extern void unload_config(void); extern void dumphex(FILE *, int, char *, int); extern int check_action(char *, char *, int, int); extern char *getword(int); extern void *add_doing(ipmon_saver_t *);