Thu Apr 28 2011 17:14:02

Asterisk developer's documentation


res_snmp.c File Reference

SNMP Agent / SubAgent support for Asterisk. More...

#include "asterisk.h"
#include "asterisk/channel.h"
#include "asterisk/module.h"
#include "snmp/agent.h"
Include dependency graph for res_snmp.c:

Go to the source code of this file.

Defines

#define MODULE_DESCRIPTION   "SNMP [Sub]Agent for Asterisk"

Functions

static void __reg_module (void)
static void __unreg_module (void)
static int load_config (void)
 Load res_snmp.conf config file.
static int load_module (void)
static int unload_module (void)

Variables

static struct ast_module_info
__MODULE_INFO_SECTION 
__mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_GLOBAL_SYMBOLS , .description = "SNMP [Sub]Agent for Asterisk" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, }
static struct ast_module_infoast_module_info = &__mod_info
int res_snmp_agentx_subagent
int res_snmp_dont_stop
int res_snmp_enabled
static pthread_t thread = AST_PTHREADT_NULL

Detailed Description

SNMP Agent / SubAgent support for Asterisk.

Author:
Thorsten Lockert <tholo@voop.as>
ExtRef:
Uses the Net-SNMP libraries available at http://net-snmp.sourceforge.net/

Definition in file res_snmp.c.


Define Documentation

#define MODULE_DESCRIPTION   "SNMP [Sub]Agent for Asterisk"

Definition at line 33 of file res_snmp.c.


Function Documentation

static void __reg_module ( void  ) [static]

Definition at line 121 of file res_snmp.c.

static void __unreg_module ( void  ) [static]

Definition at line 121 of file res_snmp.c.

static int load_config ( void  ) [static]

Load res_snmp.conf config file.

Returns:
1 on load, 0 file does not exist

Definition at line 45 of file res_snmp.c.

References ast_category_browse(), ast_config_destroy(), ast_config_load, ast_false(), ast_log(), ast_true(), ast_variable_browse(), CONFIG_STATUS_FILEINVALID, CONFIG_STATUS_FILEMISSING, LOG_ERROR, LOG_WARNING, ast_variable::name, ast_variable::next, ast_variable::value, and var.

Referenced by load_module().

{
   struct ast_variable *var;
   struct ast_config *cfg;
   struct ast_flags config_flags = { 0 };
   char *cat;

   res_snmp_enabled = 0;
   res_snmp_agentx_subagent = 1;
   cfg = ast_config_load("res_snmp.conf", config_flags);
   if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEINVALID) {
      ast_log(LOG_WARNING, "Could not load res_snmp.conf\n");
      return 0;
   }
   cat = ast_category_browse(cfg, NULL);
   while (cat) {
      var = ast_variable_browse(cfg, cat);

      if (strcasecmp(cat, "general") == 0) {
         while (var) {
            if (strcasecmp(var->name, "subagent") == 0) {
               if (ast_true(var->value))
                  res_snmp_agentx_subagent = 1;
               else if (ast_false(var->value))
                  res_snmp_agentx_subagent = 0;
               else {
                  ast_log(LOG_ERROR, "Value '%s' does not evaluate to true or false.\n", var->value);
                  ast_config_destroy(cfg);
                  return 1;
               }
            } else if (strcasecmp(var->name, "enabled") == 0) {
               res_snmp_enabled = ast_true(var->value);
            } else {
               ast_log(LOG_ERROR, "Unrecognized variable '%s' in category '%s'\n", var->name, cat);
               ast_config_destroy(cfg);
               return 1;
            }
            var = var->next;
         }
      } else {
         ast_log(LOG_ERROR, "Unrecognized category '%s'\n", cat);
         ast_config_destroy(cfg);
         return 1;
      }

      cat = ast_category_browse(cfg, cat);
   }
   ast_config_destroy(cfg);
   return 1;
}
static int load_module ( void  ) [static]

Definition at line 96 of file res_snmp.c.

References agent_thread(), AST_MODULE_LOAD_DECLINE, ast_pthread_create_background, ast_verb, and load_config().

{
   if(!load_config())
      return AST_MODULE_LOAD_DECLINE;

   ast_verb(1, "Loading [Sub]Agent Module\n");

   res_snmp_dont_stop = 1;
   if (res_snmp_enabled)
      return ast_pthread_create_background(&thread, NULL, agent_thread, NULL);
   else
      return 0;
}
static int unload_module ( void  ) [static]

Definition at line 110 of file res_snmp.c.

References AST_PTHREADT_NULL, and ast_verb.

{
   ast_verb(1, "Unloading [Sub]Agent Module\n");

   res_snmp_dont_stop = 0;
   return ((thread != AST_PTHREADT_NULL) ? pthread_join(thread, NULL) : 0);
}

Variable Documentation

struct ast_module_info __MODULE_INFO_SECTION __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_GLOBAL_SYMBOLS , .description = "SNMP [Sub]Agent for Asterisk" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } [static]

Definition at line 121 of file res_snmp.c.

Definition at line 121 of file res_snmp.c.

Definition at line 35 of file res_snmp.c.

Referenced by agent_thread().

Definition at line 36 of file res_snmp.c.

Referenced by agent_thread().

Definition at line 37 of file res_snmp.c.

pthread_t thread = AST_PTHREADT_NULL [static]

Definition at line 39 of file res_snmp.c.