ipmon.h revision 255332
1/* $FreeBSD: head/contrib/ipfilter/ipmon.h 255332 2013-09-06 23:11:19Z cy $ */ 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$ 10 */ 11 12typedef struct ipmon_msg_s { 13 int imm_msglen; 14 char *imm_msg; 15 int imm_dsize; 16 void *imm_data; 17 time_t imm_when; 18 int imm_loglevel; 19} ipmon_msg_t; 20 21typedef void (*ims_destroy_func_t)(void *); 22typedef void *(*ims_dup_func_t)(void *); 23typedef int (*ims_match_func_t)(void *, void *); 24typedef void *(*ims_parse_func_t)(char **); 25typedef void (*ims_print_func_t)(void *); 26typedef int (*ims_store_func_t)(void *, ipmon_msg_t *); 27 28typedef struct ipmon_saver_s { 29 char *ims_name; 30 ims_destroy_func_t ims_destroy; 31 ims_dup_func_t ims_dup; 32 ims_match_func_t ims_match; 33 ims_parse_func_t ims_parse; 34 ims_print_func_t ims_print; 35 ims_store_func_t ims_store; 36} ipmon_saver_t; 37 38typedef struct ipmon_saver_int_s { 39 struct ipmon_saver_int_s *imsi_next; 40 ipmon_saver_t *imsi_stor; 41 void *imsi_handle; 42} ipmon_saver_int_t; 43 44typedef struct ipmon_doing_s { 45 struct ipmon_doing_s *ipmd_next; 46 void *ipmd_token; 47 ipmon_saver_t *ipmd_saver; 48 /* 49 * ipmd_store is "cached" in this structure to avoid a double 50 * deref when doing saves.... 51 */ 52 int (*ipmd_store)(void *, ipmon_msg_t *); 53} ipmon_doing_t; 54 55 56typedef struct ipmon_action { 57 struct ipmon_action *ac_next; 58 int ac_mflag; /* collection of things to compare */ 59 int ac_dflag; /* flags to compliment the doing fields */ 60 int ac_logpri; 61 int ac_direction; 62 char ac_group[FR_GROUPLEN]; 63 char ac_nattag[16]; 64 u_32_t ac_logtag; 65 int ac_type; /* nat/state/ipf */ 66 int ac_proto; 67 int ac_rule; 68 int ac_packet; 69 int ac_second; 70 int ac_result; 71 u_32_t ac_sip; 72 u_32_t ac_smsk; 73 u_32_t ac_dip; 74 u_32_t ac_dmsk; 75 u_short ac_sport; 76 u_short ac_dport; 77 char *ac_iface; 78 /* 79 * used with ac_packet/ac_second 80 */ 81 struct timeval ac_last; 82 int ac_pktcnt; 83 /* 84 * What to do with matches 85 */ 86 ipmon_doing_t *ac_doing; 87} ipmon_action_t; 88 89#define ac_lastsec ac_last.tv_sec 90#define ac_lastusec ac_last.tv_usec 91 92/* 93 * Flags indicating what fields to do matching upon (ac_mflag). 94 */ 95#define IPMAC_DIRECTION 0x0001 96#define IPMAC_DSTIP 0x0002 97#define IPMAC_DSTPORT 0x0004 98#define IPMAC_EVERY 0x0008 99#define IPMAC_GROUP 0x0010 100#define IPMAC_INTERFACE 0x0020 101#define IPMAC_LOGTAG 0x0040 102#define IPMAC_NATTAG 0x0080 103#define IPMAC_PROTOCOL 0x0100 104#define IPMAC_RESULT 0x0200 105#define IPMAC_RULE 0x0400 106#define IPMAC_SRCIP 0x0800 107#define IPMAC_SRCPORT 0x1000 108#define IPMAC_TYPE 0x2000 109#define IPMAC_WITH 0x4000 110 111#define IPMR_BLOCK 1 112#define IPMR_PASS 2 113#define IPMR_NOMATCH 3 114#define IPMR_LOG 4 115 116#define IPMON_SYSLOG 0x001 117#define IPMON_RESOLVE 0x002 118#define IPMON_HEXBODY 0x004 119#define IPMON_HEXHDR 0x010 120#define IPMON_TAIL 0x020 121#define IPMON_VERBOSE 0x040 122#define IPMON_NAT 0x080 123#define IPMON_STATE 0x100 124#define IPMON_FILTER 0x200 125#define IPMON_PORTNUM 0x400 126#define IPMON_LOGALL (IPMON_NAT|IPMON_STATE|IPMON_FILTER) 127#define IPMON_LOGBODY 0x800 128 129#define HOSTNAME_V4(a,b) hostname((a), 4, (u_32_t *)&(b)) 130 131#ifndef LOGFAC 132#define LOGFAC LOG_LOCAL0 133#endif 134 135extern void dump_config __P((void)); 136extern int load_config __P((char *)); 137extern void unload_config __P((void)); 138extern void dumphex __P((FILE *, int, char *, int)); 139extern int check_action __P((char *, char *, int, int)); 140extern char *getword __P((int)); 141extern void *add_doing __P((ipmon_saver_t *)); 142 143