dessert_internal.h

00001 /******************************************************************************
00002  Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
00003  All rights reserved.
00004 
00005  These sources were originally developed by Philipp Schmidt
00006  at Freie Universitaet Berlin (http://www.fu-berlin.de/),
00007  Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
00008  (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
00009  ------------------------------------------------------------------------------
00010  This program is free software: you can redistribute it and/or modify it under
00011  the terms of the GNU General Public License as published by the Free Software
00012  Foundation, either version 3 of the License, or (at your option) any later
00013  version.
00014 
00015  This program is distributed in the hope that it will be useful, but WITHOUT
00016  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00017  FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
00018 
00019  You should have received a copy of the GNU General Public License along with
00020  this program. If not, see http://www.gnu.org/licenses/ .
00021  ------------------------------------------------------------------------------
00022  For further information and questions please use the web site
00023         http://www.des-testbed.net/
00024 *******************************************************************************/
00025 
00026 #ifndef DESSERT_INTERNAL_H
00027 #define DESSERT_INTERNAL_H
00028 
00029 /* load needed libs - quite dirty */
00030 #include <stdlib.h>
00031 #include <stdio.h>
00032 #include <fcntl.h>
00033 #include <string.h>
00034 #include <stdarg.h>
00035 #include <unistd.h>
00036 #include <errno.h>
00037 #include <pthread.h>
00038 #include <syslog.h>
00039 #include <sys/socket.h>
00040 #include <sys/ioctl.h>
00041 #include <sys/sysctl.h>
00042 #include <net/route.h>
00043 #include <net/if_arp.h>
00044 #include <arpa/inet.h>
00045 #include <netinet/in.h>
00046 #include <libcli.h>
00047 #include <net-snmp/net-snmp-config.h>
00048 #include <net-snmp/net-snmp-includes.h>
00049 #include <net-snmp/agent/net-snmp-agent-includes.h>
00050 #include <uthash.h>
00051 #include <utlist.h>
00052 
00053 #include "dessertObjects.h"
00054 #include "dessertMeshifTable.h"
00055 #include "dessertSysifTable.h"
00056 #include "dessertAppStatsTable.h"
00057 #include "dessertAppParamsTable.h"
00058 
00059 /******************************************************************************
00060  *
00061  * INTERNAL / PRIVATE
00062  *
00063  * C O R E
00064  *
00065  ******************************************************************************/
00066 
00068 #define _DESSERT_STATUS_DAEMON   0x1
00069 
00071 extern int         _dessert_status;
00072 
00073 dessert_frameid_t _dessert_newframeid(void);
00074 
00075 int _dessert_cli_cmd_shutdown(struct cli_def *cli, char *command, char *argv[], int argc);
00076 
00077 /******************************************************************************
00078  *
00079  * INTERNAL / PRIVATE
00080  *
00081  * C L I - C O M M A N D   L I N E   I N T E R F A C E
00082  *
00083  ******************************************************************************/
00084 
00085 int _dessert_cli_init(void);
00086 
00087 /******************************************************************************
00088  *
00089  * INTERNAL / PRIVATE
00090  *
00091  * S I G N A L   H A N D L I N G
00092  *
00093  ******************************************************************************/
00094 
00095 int _dessert_signals_init(void);
00096 
00097 /******************************************************************************
00098  *
00099  * INTERNAL / PRIVATE
00100  *
00101  * L O G   F A C I L I T Y
00102  *
00103  ******************************************************************************/
00104 
00106 #define DESSERT_LOGLINE_MAX 1024
00107 
00109 extern FILE *dessert_logfd;
00110 
00111 int _dessert_cli_cmd_set_loglevel(struct cli_def *cli, char *command, char *argv[], int argc);
00112 int _dessert_cli_cmd_show_loglevel(struct cli_def *cli, char *command, char *argv[], int argc);
00113 int _dessert_cli_cmd_logging(struct cli_def *cli, char *command, char *argv[], int argc);
00114 int _dessert_cli_logging_file(struct cli_def *cli, char *command, char *argv[], int argc);
00115 int _dessert_cli_no_logging_file(struct cli_def *cli, char *command, char *argv[], int argc);
00116 int _dessert_cli_logging_ringbuffer(struct cli_def *cli, char *command, char *argv[], int argc);
00117 int _dessert_cli_no_logging_ringbuffer(struct cli_def *cli, char *command, char *argv[], int argc);
00118 
00119 /******************************************************************************
00120  *
00121  * INTERNAL / PRIVATE
00122  *
00123  * M E S H - I N T E R F A C E S
00124  *
00125  ******************************************************************************/
00126 
00128 typedef struct dessert_meshrxcbe {
00130     dessert_meshrxcb_t *c;
00132     int prio;
00134     struct dessert_meshrxcbe *next;
00135 } dessert_meshrxcbe_t;
00136 
00137 int _dessert_meshif_gethwaddr(dessert_meshif_t *meshif);
00138 int _dessert_meshrxcb_runall(dessert_msg_t* msg_in, size_t len, dessert_msg_proc_t *proc_in, const dessert_meshif_t *meshif, dessert_frameid_t id);
00139 
00140 /******************************************************************************
00141  *
00142  * INTERNAL / PRIVATE
00143  *
00144  * S Y S - I N T E R F A C E S
00145  *
00146  ******************************************************************************/
00147 
00148 int _dessert_getHWAddr(char* device, char* hwaddr);
00149 
00151 typedef struct dessert_sysrxcbe {
00153     dessert_sysrxcb_t *c;
00155     int prio;
00157     struct dessert_sysrxcbe *next;
00158 } dessert_sysrxcbe_t;
00159 
00160 extern dessert_sysif_t *_dessert_sysif;
00161 
00162 /******************************************************************************
00163  *
00164  * INTERNAL / PRIVATE
00165  *
00166  * M E S S A G E   H A N D L I N G
00167  *
00168  ******************************************************************************/
00169 
00171 #define DESSERT_MSGLEN sizeof(struct dessert_msg)
00172 
00174 #define DESSERT_MSGPROCLEN sizeof(struct dessert_msg_proc)
00175 
00177 #define DESSERT_MAXFRAMEBUFLEN DESSERT_MAXFRAMELEN
00178 
00179 /******************************************************************************
00180  *
00181  * INTERNAL / PRIVATE
00182  *
00183  * P E R I O D I C   T A S K S
00184  *
00185  ******************************************************************************/
00186 
00187 void _dessert_periodic_init(void);
00188 
00189 /******************************************************************************
00190  *
00191  * INTERNAL / PRIVATE
00192  *
00193  * NET - S N M P // A G E N T _ X
00194  *
00195  ******************************************************************************/
00196 
00197 /******************************************************************************
00198  * #defines
00199  ******************************************************************************/
00200 
00201 #define AGENT "dessertAGENTX"
00202 
00203 #define DESSERT_AGENTX_SYSIFTABLE_CACHE_TIMEOUT     10
00204 #define DESSERT_AGENTX_MESHIFTABLE_CACHE_TIMEOUT    10
00205 #define DESSERT_AGENTX_APPSTATSTABLE_CACHE_TIMEOUT  10
00206 #define DESSERT_AGENTX_APPPARAMTABLE_CACHE_TIMEOUT   1
00207 
00208 /******************************************************************************
00209  * globals
00210  ******************************************************************************/
00211 
00212 extern pthread_rwlock_t _dessert_appstats_cblist_lock;
00213 extern dessert_agentx_appstats_cb_entry_t *_dessert_appstats_cblist;
00214 
00215 extern pthread_rwlock_t _dessert_appparams_cblist_lock;
00216 extern dessert_agentx_appparams_cb_entry_t *_dessert_appparams_cblist;
00217 
00218 /******************************************************************************
00219  * functions
00220  ******************************************************************************/
00221 int _dessert_agentx_appstats_harvest_callbacks(dessert_agentx_appstats_t **appstats_list);
00222 void _dessert_agentx_appstats_free(dessert_agentx_appstats_t *appstat);
00223 void _dessert_agentx_appstats_free_list(dessert_agentx_appstats_t **appstats_list);
00224 
00225 int _dessert_agentx_appparams_harvest_callbacks(dessert_agentx_appparams_t **appparams_list);
00226 void _dessert_agentx_appparams_free(dessert_agentx_appparams_t *appparam);
00227 void _dessert_agentx_appparams_free_list(dessert_agentx_appparams_t **appparams_list);
00228 dessert_agentx_appparamscb_set_t *_dessert_agentx_appparams_getsettercbforindex(int index);
00229 
00230 void _dessert_agentx_init_subagent(void);
00231 void dessert_agentx_stop_subagent(void);
00232 
00233 
00234 #endif /* DESSERT_INTERNAL_H */