1 2 /* 3 ** Copyright (C) 2002-2009 Sourcefire, Inc. 4 ** Copyright (C) 1998-2002 Martin Roesch <roesch@sourcefire.com> 5 ** 6 ** This program is free software; you can redistribute it and/or modify 7 ** it under the terms of the GNU General Public License Version 2 as 8 ** published by the Free Software Foundation. You may not use, modify or 9 ** distribute this program under any other version of the GNU General 10 ** Public License. 11 ** 12 ** This program is distributed in the hope that it will be useful, 13 ** but WITHOUT ANY WARRANTY; without even the implied warranty of 14 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 ** GNU General Public License for more details. 16 ** 17 ** You should have received a copy of the GNU General Public License 18 ** along with this program; if not, write to the Free Software 19 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 20 */ 21 22 /* $Id$ */ 23 #ifndef __PLUGBASE_H__ 24 #define __PLUGBASE_H__ 25 26 #ifdef HAVE_CONFIG_H 27 # include "config.h" 28 #endif 29 30 //#include "rules.h" 31 #include "sf_types.h" 32 #include "debug.h" 33 34 #ifndef WIN32 35 # include <sys/ioctl.h> 36 #endif /* !WIN32 */ 37 38 #ifdef ENABLE_SSL 39 # ifdef Free 40 /* Free macro in radix.h if defined, will conflict with OpenSSL definition */ 41 # undef Free 42 # endif 43 #endif 44 45 #if defined(FREEBSD) || defined(OPENBSD) 46 # include <sys/socket.h> 47 #endif 48 49 #if !defined(__SOLARIS__) && !defined(__CYGWIN32__) && !defined(__CYGWIN__) && \ 50 !defined( __CYGWIN64__) 51 #include <net/route.h> 52 #endif 53 54 #ifdef ENABLE_SSL 55 # undef Free 56 #endif 57 58 #if defined(SOLARIS) || defined(FREEBSD) || defined(OPENBSD) 59 # include <sys/param.h> 60 #endif 61 62 #if defined(FREEBSD) || defined(OPENBSD) || defined(NETBSD) || defined(OSF1) 63 # include <sys/mbuf.h> 64 #endif 65 66 #ifndef IFNAMSIZ /* IFNAMSIZ is defined in all platforms I checked.. */ 67 # include <net/if.h> 68 #endif 69 70 #include "decode.h" 71 72 #define SMALLBUFFER 32 73 74 typedef enum _InputType 75 { 76 INPUT_TYPE__UNIFIED_LOG = 1, 77 INPUT_TYPE__UNIFIED_ALERT, 78 INPUT_TYPE__UNIFIED, 79 INPUT_TYPE__UNIFIED2, 80 INPUT_TYPE__MAX 81 82 } InputType; 83 84 typedef enum _OutputType 85 { 86 OUTPUT_TYPE__ALERT = 1, 87 OUTPUT_TYPE__LOG, 88 OUTPUT_TYPE__SPECIAL, 89 OUTPUT_TYPE__MAX 90 91 } OutputType; 92 93 typedef enum _OutputTypeFlag 94 { 95 OUTPUT_TYPE_FLAG__ALERT = 0x00000001, 96 OUTPUT_TYPE_FLAG__LOG = 0x00000002, 97 OUTPUT_TYPE_FLAG__ALL = 0x7fffffff 98 99 } OutputTypeFlag; 100 101 102 /***************************** Input Plugin API ******************************/ 103 typedef void (*InputConfigFunc)(char *); 104 typedef int (*InputReadHeaderFunc)(void *); 105 typedef int (*InputReadRecordFunc)(void *); 106 107 typedef struct _InputConfigFuncNode 108 { 109 char *keyword; 110 InputConfigFunc func; 111 struct _InputConfigFuncNode *next; 112 113 } InputConfigFuncNode; 114 115 typedef struct _InputFuncNode 116 { 117 char *keyword; 118 int configured_flag; 119 120 void *arg; 121 int (*readRecordHeader)(void *); 122 int (*readRecord)(void *); 123 124 struct _InputFuncNode *next; 125 } InputFuncNode; 126 127 void RegisterInputPlugins(void); 128 void InitInputPlugins(); 129 int ActivateInputPlugin(char *plugin_name, char *plugin_options); 130 void RegisterInputPlugin(char *, InputConfigFunc); 131 InputConfigFunc GetInputConfigFunc(char *); 132 InputFuncNode *GetInputPlugin(char *); 133 void DumpInputPlugins(); 134 int AddArgToInputList(char *plugin_name, void *arg); 135 136 int AddReadRecordHeaderFuncToInputList(char *plugin_name, int (*readRecordHeader)(void *)); 137 int AddReadRecordFuncToInputList(char *plugin_name, int (*readRecord)(void *)); 138 139 int InputFuncNodeConfigured(InputFuncNode *ifn); 140 141 142 /***************************** Output Plugin API *****************************/ 143 typedef void (*OutputConfigFunc)(char *); 144 typedef void (*OutputFunc)(Packet *, void *, uint32_t, void *); 145 146 typedef struct _OutputConfigFuncNode 147 { 148 char *keyword; 149 int output_type_flags; 150 OutputConfigFunc func; 151 struct _OutputConfigFuncNode *next; 152 153 } OutputConfigFuncNode; 154 155 typedef struct _OutputFuncNode 156 { 157 void *arg; 158 OutputFunc func; 159 struct _OutputFuncNode *next; 160 161 } OutputFuncNode; 162 163 void RegisterOutputPlugins(void); 164 void RegisterOutputPlugin(char *, int, OutputConfigFunc); 165 OutputConfigFunc GetOutputConfigFunc(char *); 166 int GetOutputTypeFlags(char *); 167 void DumpOutputPlugins(void); 168 void AddFuncToOutputList(OutputFunc, OutputType, void *); 169 void FreeOutputConfigFuncs(void); 170 void FreeOutputList(OutputFuncNode *); 171 void CallOutputPlugins(OutputType, Packet *, void *, uint32_t); 172 173 174 /*************************** Miscellaneous API ***************************/ 175 typedef void (*PluginSignalFunc)(int, void *); 176 177 typedef struct _PluginSignalFuncNode 178 { 179 void *arg; 180 PluginSignalFunc func; 181 struct _PluginSignalFuncNode *next; 182 183 } PluginSignalFuncNode; 184 185 /* Used for both rule options and output. Preprocessors have their own */ 186 void AddFuncToRestartList(PluginSignalFunc, void *); 187 void AddFuncToCleanExitList(PluginSignalFunc, void *); 188 void AddFuncToShutdownList(PluginSignalFunc, void *); 189 void AddFuncToPostConfigList(PluginSignalFunc, void *); 190 void AddFuncToSignalList(PluginSignalFunc, void *, PluginSignalFuncNode **); 191 void PostConfigInitPlugins(PluginSignalFuncNode *); 192 void FreePluginSigFuncs(PluginSignalFuncNode *); 193 void FreeInputPlugins(void); 194 #endif /* __PLUGBASE_H__ */ 195 196