38 #ifdef PACKAGE_BUGREPORT
39 #undef PACKAGE_BUGREPORT
44 #ifdef PACKAGE_TARNAME
45 #undef PACKAGE_TARNAME
47 #ifdef PACKAGE_VERSION
48 #undef PACKAGE_VERSION
50 #ifndef HAVE_DMALLOC_H
51 #define HAVE_DMALLOC_H 0
54 #if defined(__OpenBSD__)
59 #define __NetBSD_Version__ 0
62 #include <net-snmp/net-snmp-config.h>
63 #include <net-snmp/net-snmp-includes.h>
64 #include <net-snmp/agent/net-snmp-agent-includes.h>
75 #define unload_module ast_unload_module
82 int header_generic(
struct variable *, oid *,
size_t *,
int,
size_t *, WriteMethod **);
83 int header_simple_table(
struct variable *, oid *,
size_t *,
int,
size_t *, WriteMethod **,
int);
101 #define ASTVERSTRING 1
104 #define ASTCONFIGURATION 2
105 #define ASTCONFUPTIME 1
106 #define ASTCONFRELOADTIME 2
108 #define ASTCONFSOCKET 4
109 #define ASTCONFACTIVECALLS 5
110 #define ASTCONFPROCESSEDCALLS 6
113 #define ASTMODCOUNT 1
115 #define ASTINDICATIONS 4
116 #define ASTINDCOUNT 1
117 #define ASTINDCURRENT 2
119 #define ASTINDTABLE 3
120 #define ASTINDINDEX 1
121 #define ASTINDCOUNTRY 2
122 #define ASTINDALIAS 3
123 #define ASTINDDESCRIPTION 4
125 #define ASTCHANNELS 5
126 #define ASTCHANCOUNT 1
128 #define ASTCHANTABLE 2
129 #define ASTCHANINDEX 1
130 #define ASTCHANNAME 2
131 #define ASTCHANLANGUAGE 3
132 #define ASTCHANTYPE 4
133 #define ASTCHANMUSICCLASS 5
134 #define ASTCHANBRIDGE 6
135 #define ASTCHANMASQ 7
136 #define ASTCHANMASQR 8
137 #define ASTCHANWHENHANGUP 9
138 #define ASTCHANAPP 10
139 #define ASTCHANDATA 11
140 #define ASTCHANCONTEXT 12
141 #define ASTCHANMACROCONTEXT 13
142 #define ASTCHANMACROEXTEN 14
143 #define ASTCHANMACROPRI 15
144 #define ASTCHANEXTEN 16
145 #define ASTCHANPRI 17
146 #define ASTCHANACCOUNTCODE 18
147 #define ASTCHANFORWARDTO 19
148 #define ASTCHANUNIQUEID 20
149 #define ASTCHANCALLGROUP 21
150 #define ASTCHANPICKUPGROUP 22
151 #define ASTCHANSTATE 23
152 #define ASTCHANMUTED 24
153 #define ASTCHANRINGS 25
154 #define ASTCHANCIDDNID 26
155 #define ASTCHANCIDNUM 27
156 #define ASTCHANCIDNAME 28
157 #define ASTCHANCIDANI 29
158 #define ASTCHANCIDRDNIS 30
159 #define ASTCHANCIDPRES 31
160 #define ASTCHANCIDANI2 32
161 #define ASTCHANCIDTON 33
162 #define ASTCHANCIDTNS 34
163 #define ASTCHANAMAFLAGS 35
164 #define ASTCHANADSI 36
165 #define ASTCHANTONEZONE 37
166 #define ASTCHANHANGUPCAUSE 38
167 #define ASTCHANVARIABLES 39
168 #define ASTCHANFLAGS 40
169 #define ASTCHANTRANSFERCAP 41
171 #define ASTCHANTYPECOUNT 3
173 #define ASTCHANTYPETABLE 4
174 #define ASTCHANTYPEINDEX 1
175 #define ASTCHANTYPENAME 2
176 #define ASTCHANTYPEDESC 3
177 #define ASTCHANTYPEDEVSTATE 4
178 #define ASTCHANTYPEINDICATIONS 5
179 #define ASTCHANTYPETRANSFER 6
180 #define ASTCHANTYPECHANNELS 7
182 #define ASTCHANSCALARS 5
183 #define ASTCHANBRIDGECOUNT 1
189 snmp_enable_stderrlog();
192 netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
193 NETSNMP_DS_AGENT_ROLE,
196 init_agent(
"asterisk");
200 init_snmp(
"asterisk");
206 agent_check_and_process(1);
208 snmp_shutdown(
"asterisk");
217 int exact,
size_t *var_len, WriteMethod **write_method)
219 static unsigned long long_ret;
221 if (
header_generic(vp, name, length, exact, var_len, write_method))
229 return (u_char *)&long_ret;
233 int exact,
size_t *var_len, WriteMethod **write_method)
235 static unsigned long long_ret;
236 static u_char bits_ret[2];
237 static char string_ret[256];
248 i = name[*length - 1] - 1;
265 *var_len =
sizeof(long_ret);
271 long_ret = name[*length - 1];
272 ret = (u_char *)&long_ret;
276 strncpy(string_ret, chan->
name,
sizeof(string_ret));
277 string_ret[
sizeof(string_ret) - 1] =
'\0';
278 *var_len = strlen(string_ret);
279 ret = (u_char *)string_ret;
284 strncpy(string_ret, chan->
language,
sizeof(string_ret));
285 string_ret[
sizeof(string_ret) - 1] =
'\0';
286 *var_len = strlen(string_ret);
287 ret = (u_char *)string_ret;
291 strncpy(string_ret, chan->
tech->
type,
sizeof(string_ret));
292 string_ret[
sizeof(string_ret) - 1] =
'\0';
293 *var_len = strlen(string_ret);
294 ret = (u_char *)string_ret;
298 strncpy(string_ret, chan->
musicclass,
sizeof(string_ret));
299 string_ret[
sizeof(string_ret) - 1] =
'\0';
300 *var_len = strlen(string_ret);
301 ret = (u_char *)string_ret;
306 strncpy(string_ret, bridge->
name,
sizeof(string_ret));
307 string_ret[
sizeof(string_ret) - 1] =
'\0';
308 *var_len = strlen(string_ret);
309 ret = (u_char *)string_ret;
314 strncpy(string_ret, chan->
masq->
name,
sizeof(string_ret));
315 string_ret[
sizeof(string_ret) - 1] =
'\0';
316 *var_len = strlen(string_ret);
317 ret = (u_char *)string_ret;
322 strncpy(string_ret, chan->
masqr->
name,
sizeof(string_ret));
323 string_ret[
sizeof(string_ret) - 1] =
'\0';
324 *var_len = strlen(string_ret);
325 ret = (u_char *)string_ret;
330 gettimeofday(&tval, NULL);
331 long_ret = difftime(chan->
whentohangup.tv_sec, tval.tv_sec) * 100 - tval.tv_usec / 10000;
332 ret= (u_char *)&long_ret;
337 strncpy(string_ret, chan->
appl,
sizeof(string_ret));
338 string_ret[
sizeof(string_ret) - 1] =
'\0';
339 *var_len = strlen(string_ret);
340 ret = (u_char *)string_ret;
345 strncpy(string_ret, chan->
data,
sizeof(string_ret));
346 string_ret[
sizeof(string_ret) - 1] =
'\0';
347 *var_len = strlen(string_ret);
348 ret = (u_char *)string_ret;
352 strncpy(string_ret, chan->
context,
sizeof(string_ret));
353 string_ret[
sizeof(string_ret) - 1] =
'\0';
354 *var_len = strlen(string_ret);
355 ret = (u_char *)string_ret;
358 strncpy(string_ret, chan->
macrocontext,
sizeof(string_ret));
359 string_ret[
sizeof(string_ret) - 1] =
'\0';
360 *var_len = strlen(string_ret);
361 ret = (u_char *)string_ret;
364 strncpy(string_ret, chan->
macroexten,
sizeof(string_ret));
365 string_ret[
sizeof(string_ret) - 1] =
'\0';
366 *var_len = strlen(string_ret);
367 ret = (u_char *)string_ret;
371 ret = (u_char *)&long_ret;
374 strncpy(string_ret, chan->
exten,
sizeof(string_ret));
375 string_ret[
sizeof(string_ret) - 1] =
'\0';
376 *var_len = strlen(string_ret);
377 ret = (u_char *)string_ret;
381 ret = (u_char *)&long_ret;
385 strncpy(string_ret, chan->
accountcode,
sizeof(string_ret));
386 string_ret[
sizeof(string_ret) - 1] =
'\0';
387 *var_len = strlen(string_ret);
388 ret = (u_char *)string_ret;
393 strncpy(string_ret, chan->
call_forward,
sizeof(string_ret));
394 string_ret[
sizeof(string_ret) - 1] =
'\0';
395 *var_len = strlen(string_ret);
396 ret = (u_char *)string_ret;
400 strncpy(string_ret, chan->
uniqueid,
sizeof(string_ret));
401 string_ret[
sizeof(string_ret) - 1] =
'\0';
402 *var_len = strlen(string_ret);
403 ret = (u_char *)string_ret;
407 ret = (u_char *)&long_ret;
411 ret = (u_char *)&long_ret;
414 long_ret = chan->
_state & 0xffff;
415 ret = (u_char *)&long_ret;
419 ret = (u_char *)&long_ret;
422 long_ret = chan->
rings;
423 ret = (u_char *)&long_ret;
428 string_ret[
sizeof(string_ret) - 1] =
'\0';
429 *var_len = strlen(string_ret);
430 ret = (u_char *)string_ret;
436 string_ret[
sizeof(string_ret) - 1] =
'\0';
437 *var_len = strlen(string_ret);
438 ret = (u_char *)string_ret;
444 string_ret[
sizeof(string_ret) - 1] =
'\0';
445 *var_len = strlen(string_ret);
446 ret = (u_char *)string_ret;
452 string_ret[
sizeof(string_ret) - 1] =
'\0';
453 *var_len = strlen(string_ret);
454 ret = (u_char *)string_ret;
460 string_ret[
sizeof(string_ret) - 1] =
'\0';
461 *var_len = strlen(string_ret);
462 ret = (u_char *)string_ret;
467 ret = (u_char *)&long_ret;
471 ret = (u_char *)&long_ret;
475 ret = (u_char *)&long_ret;
479 ret = (u_char *)&long_ret;
483 ret = (u_char *)&long_ret;
487 ret = (u_char *)&long_ret;
491 strncpy(string_ret, chan->
zone->
country,
sizeof(string_ret));
492 string_ret[
sizeof(string_ret) - 1] =
'\0';
493 *var_len = strlen(string_ret);
494 ret = (u_char *)string_ret;
499 ret = (u_char *)&long_ret;
509 for (bit = 0; bit < 8; bit++)
510 bits_ret[0] |= ((chan->
flags & (1 << bit)) >> bit) << (7 - bit);
512 for (bit = 0; bit < 8; bit++)
513 bits_ret[1] |= (((chan->
flags >> 8) & (1 << bit)) >> bit) << (7 - bit);
519 ret = (u_char *)&long_ret;
531 int exact,
size_t *var_len, WriteMethod **write_method)
533 static unsigned long long_ret;
536 if (
header_generic(vp, name, length, exact, var_len, write_method))
546 return (u_char *)&long_ret;
550 int exact,
size_t *var_len, WriteMethod **write_method)
554 static unsigned long long_ret;
562 for (i = 1, next = channel_types; next && i != name[*length - 1]; next = next->
next, i++)
567 if (next == NULL || tech == NULL)
572 long_ret = name[*length - 1];
573 return (u_char *)&long_ret;
575 *var_len = strlen(tech->
type);
576 return (u_char *)tech->
type;
582 return (u_char *)&long_ret;
585 return (u_char *)&long_ret;
588 return (u_char *)&long_ret;
600 if (chan->
tech == tech) {
608 return (u_char *)&long_ret;
617 int exact,
size_t *var_len, WriteMethod **write_method)
619 static unsigned long long_ret;
625 if (
header_generic(vp, name, length, exact, var_len, write_method)) {
644 *var_len =
sizeof(long_ret);
650 int exact,
size_t *var_len, WriteMethod **write_method)
652 static unsigned long long_ret;
655 if (
header_generic(vp, name, length, exact, var_len, write_method))
660 gettimeofday(&tval, NULL);
662 return (u_char *)&long_ret;
664 gettimeofday(&tval, NULL);
669 return (u_char *)&long_ret;
672 return (u_char *)&long_ret;
678 return (u_char *)&long_ret;
681 return (u_char *)&long_ret;
689 int exact,
size_t *var_len, WriteMethod **write_method)
691 static unsigned long long_ret;
692 static char ret_buf[128];
695 if (
header_generic(vp, name, length, exact, var_len, write_method))
712 return (u_char *) &long_ret;
718 *var_len = strlen(ret_buf);
720 return (u_char *) ret_buf;
731 int exact,
size_t *var_len, WriteMethod **write_method)
733 static unsigned long long_ret;
734 static char ret_buf[256];
743 i = name[*length - 1] - 1;
760 long_ret = name[*length - 1];
761 return (u_char *)&long_ret;
765 *var_len = strlen(ret_buf);
766 return (u_char *) ret_buf;
776 *var_len = strlen(ret_buf);
777 return (u_char *) ret_buf;
791 int exact,
size_t *var_len, WriteMethod **write_method)
793 static unsigned long long_ret;
795 if (
header_generic(vp, name, length, exact, var_len, write_method))
803 return (u_char *)&long_ret;
807 int exact,
size_t *var_len, WriteMethod **write_method)
809 static unsigned long long_ret;
811 if (
header_generic(vp, name, length, exact, var_len, write_method))
818 *var_len = strlen(version);
823 return (u_char *)&long_ret;
838 static struct variable4 asterisk_vars[] = {
908 "ASTERISK-MIB implementation for Asterisk.");
910 REGISTER_MIB(
"res_snmp", asterisk_vars, variable4, asterisk_oid);
912 snmp_register_callback(SNMP_CALLBACK_LIBRARY,
913 SNMP_CALLBACK_SHUTDOWN,
static u_char * ast_var_indications(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method)
struct ast_channel * masqr
#define ast_channel_lock(chan)
static int countmodule(const char *mod, const char *desc, int use, const char *like)
void * agent_thread(void *arg)
Main Channel structure associated with a channel.
char * str
Subscriber phone number (Malloced)
struct ast_channel * masq
static u_char * ast_var_Modules(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method)
struct ast_channel * ast_channel_iterator_next(struct ast_channel_iterator *i)
Get the next channel for a channel iterator.
Asterisk main include file. File version handling, generic pbx functions.
char description[40]
Text description of the given country.
char * str
Subscriber phone number (Malloced)
int ast_active_calls(void)
Retrieve the number of active calls.
struct ast_party_caller caller
Channel Caller ID information.
struct ast_tone_zone * zone
static struct ast_tone_zone * ast_tone_zone_unref(struct ast_tone_zone *tz)
Release a reference to an ast_tone_zone.
struct ast_channel_tech * ast_get_channel_tech(const char *name)
Get a channel technology structure by name.
const ast_string_field uniqueid
Asterisk version information.
#define ast_channel_unref(c)
Decrease channel reference count.
struct ast_party_name name
Subscriber name.
struct ast_party_id from
Who is redirecting the call (Sent to the party the call is redirected toward)
const char * ast_get_version(void)
Retrieve the Asterisk version string.
static u_char * ast_var_channel_types_table(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method)
char context[AST_MAX_CONTEXT]
struct ast_variable * ast_channeltype_list(void)
return an ast_variable list of channeltypes
#define ao2_iterator_next(arg1)
char * ast_str_buffer(const struct ast_str *buf)
Returns the string buffer within the ast_str buf.
#define ast_tone_zone_unlock(tz)
Unlock an ast_tone_zone.
int ast_party_id_presentation(const struct ast_party_id *id)
Determine the overall presentation value for the given party.
Structure for variables, used for configurations and for channel variables.
int ast_tvzero(const struct timeval t)
Returns true if the argument is 0,0.
struct ast_party_redirecting redirecting
Redirecting/Diversion information.
char * str
Subscriber name (Malloced)
#define ASTCHANWHENHANGUP
static u_char * ast_var_indications_table(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method)
unsigned short transfercapability
#define ast_str_alloca(init_len)
static int term_asterisk_mib(int majorID, int minorID, void *serverarg, void *clientarg)
void ast_variables_destroy(struct ast_variable *var)
Free variable list.
#define ASTCHANMACROEXTEN
#define ASTCHANHANGUPCAUSE
static oid asterisk_oid[]
enum ast_channel_adsicpe adsicpe
#define ast_verb(level,...)
#define ASTCHANACCOUNTCODE
#define ASTCONFRELOADTIME
struct ast_party_id id
Caller party ID.
struct ast_party_id ani
Automatic Number Identification (ANI)
General Asterisk PBX channel definitions.
struct ast_party_dialed::@155 number
Dialed/Called number.
Asterisk file paths, configured in asterisk.conf.
A set of tones for a given locale.
static force_inline int attribute_pure ast_strlen_zero(const char *s)
#define ASTCHANBRIDGECOUNT
struct timeval ast_lastreloadtime
int header_generic(struct variable *, oid *, size_t *, int, size_t *, WriteMethod **)
Structure to describe a channel "technology", ie a channel driver See for examples: ...
Core PBX routines and definitions.
#define ASTCHANMUSICCLASS
struct ast_party_dialed dialed
Dialed/Called information.
static u_char * ast_var_Config(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method)
int ast_processed_calls(void)
Retrieve the total number of calls processed through the PBX since last restart.
#define ASTCONFACTIVECALLS
#define ASTINDDESCRIPTION
The descriptor of a dynamic string XXX storage will be optimized later if needed We use the ts field ...
int plan
Q.931 Type-Of-Number and Numbering-Plan encoded fields.
#define ASTCHANTRANSFERCAP
const ast_string_field call_forward
struct ast_tone_zone * ast_get_indication_zone(const char *country)
locate ast_tone_zone
#define ASTCHANTYPECHANNELS
#define ASTCHANTYPEDEVSTATE
int ani2
Automatic Number Identification 2 (Info Digits)
enum ast_channel_state _state
struct ast_channel * ast_bridged_channel(struct ast_channel *chan)
Find bridged channel.
const ast_string_field name
static u_char * ast_var_channel_bridge(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method)
struct ast_bridge * bridge
static u_char * ast_var_channels_table(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method)
#define ASTCHANTYPETRANSFER
static u_char * ast_var_channels(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method)
#define ast_channel_unlock(chan)
int(*const transfer)(struct ast_channel *chan, const char *newdest)
Blind transfer other side (see app_transfer.c and ast_transfer()
char macrocontext[AST_MAX_CONTEXT]
static u_char * ast_var_channel_types(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method)
#define ASTCHANMACROCONTEXT
char country[16]
Country code that this set of tones is for.
const char *const description
void ao2_iterator_destroy(struct ao2_iterator *i)
Destroy a container iterator.
Support for logging to various files, console and syslog Configuration in file logger.conf.
const char * ast_get_version_num(void)
Retrieve the numeric Asterisk version.
char macroexten[AST_MAX_EXTENSION]
int res_snmp_agentx_subagent
struct timeval ast_startuptime
size_t ast_str_strlen(const struct ast_str *buf)
Returns the current length of the string stored within buf.
int transit_network_select
Transit Network Select.
int(*const devicestate)(void *data)
SNMP Agent / SubAgent support for Asterisk.
When we need to walk through a container, we use an ao2_iterator to keep track of the current positio...
int ast_update_module_list(int(*modentry)(const char *module, const char *description, int usecnt, const char *like), const char *like)
Ask for a list of modules, descriptions, and use counts.
void ast_copy_string(char *dst, const char *src, size_t size)
Size-limited null-terminating string copy.
struct ao2_iterator ast_tone_zone_iterator_init(void)
Get an iterator for the available tone zones.
struct ast_channel_iterator * ast_channel_iterator_destroy(struct ast_channel_iterator *i)
Destroy a channel iterator.
const char * ast_config_AST_SOCKET
const ast_string_field musicclass
const ast_string_field accountcode
Options provided by main asterisk program.
static u_char * ast_var_Version(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method)
#define ASTCHANPICKUPGROUP
struct timeval whentohangup
#define ast_tone_zone_lock(tz)
Lock an ast_tone_zone.
struct ast_variable * next
unsigned char valid
TRUE if the name information is valid/present.
struct ast_channel_iterator * ast_channel_iterator_all_new(void)
Create a new channel iterator.
Asterisk module definitions.
struct ast_channel_tech * tech
int ast_active_channels(void)
returns number of active/allocated channels
int header_simple_table(struct variable *, oid *, size_t *, int, size_t *, WriteMethod **, int)
int(*const indicate)(struct ast_channel *c, int condition, const void *data, size_t datalen)
Indicate a particular condition (e.g. AST_CONTROL_BUSY or AST_CONTROL_RINGING or AST_CONTROL_CONGESTI...
unsigned char valid
TRUE if the number information is valid/present.
#define ASTCHANTYPEINDICATIONS
const ast_string_field language
static void init_asterisk_mib(void)
char exten[AST_MAX_EXTENSION]
int register_sysORTable(oid *, size_t, const char *)
#define ASTCONFPROCESSEDCALLS
#define ASTERISK_FILE_VERSION(file, version)
Register/unregister a source code file with the core.
int pbx_builtin_serialize_variables(struct ast_channel *chan, struct ast_str **buf)
Create a human-readable string, specifying all variables and their corresponding values.
struct ast_party_number number
Subscriber phone number.
int unregister_sysORTable(oid *, size_t)