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