From 3b9a36109ff97b29d935614ffdf07e86c3002b1c Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Fri, 8 Jun 2007 21:31:33 +0000 Subject: Add support for retrieving the number of channels that are currently bridged via SNMP. (closes issue #9637, initial patch from jeffg, modified by me) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@68507 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/snmp/agent.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'res/snmp') diff --git a/res/snmp/agent.c b/res/snmp/agent.c index 3fd1eb2d0..b282d8b57 100644 --- a/res/snmp/agent.c +++ b/res/snmp/agent.c @@ -138,6 +138,8 @@ static oid asterisk_oid[] = { 1, 3, 6, 1, 4, 1, 22736, 1 }; #define ASTCHANTYPETRANSFER 6 #define ASTCHANTYPECHANNELS 7 +#define ASTCHANBRIDGECOUNT 5 + void *agent_thread(void *arg) { ast_verbose(VERBOSE_PREFIX_2 "Starting %sAgent\n", res_snmp_agentx_subagent ? "Sub" : ""); @@ -585,6 +587,26 @@ static u_char *ast_var_channel_types_table(struct variable *vp, oid *name, size_ return NULL; } +static u_char *ast_var_channel_bridge(struct variable *vp, oid *name, size_t *length, + int exact, size_t *var_len, WriteMethod **write_method) +{ + unsigned long long_ret = 0; + struct ast_channel *chan = NULL; + + if (header_generic(vp, name, length, exact, var_len, write_method)) + return NULL; + + while ((chan = ast_channel_walk_locked(chan))) { + if (ast_bridged_channel(chan) != NULL) + long_ret++; + ast_channel_unlock(chan); + } + + *var_len = sizeof(long_ret); + + return (vp->magic == ASTCHANBRIDGECOUNT) ? (u_char *) &long_ret : NULL; +} + static u_char *ast_var_Config(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method) { @@ -802,6 +824,7 @@ static void init_asterisk_mib(void) {ASTCHANTYPEINDICATIONS, ASN_INTEGER, RONLY, ast_var_channel_types_table, 4, {ASTCHANNELS, ASTCHANTYPETABLE, 1, ASTCHANTYPEINDICATIONS}}, {ASTCHANTYPETRANSFER, ASN_INTEGER, RONLY, ast_var_channel_types_table, 4, {ASTCHANNELS, ASTCHANTYPETABLE, 1, ASTCHANTYPETRANSFER}}, {ASTCHANTYPECHANNELS, ASN_GAUGE, RONLY, ast_var_channel_types_table, 4, {ASTCHANNELS, ASTCHANTYPETABLE, 1, ASTCHANTYPECHANNELS}}, + {ASTCHANBRIDGECOUNT, ASN_GAUGE, RONLY, ast_var_channel_bridge, 2, {ASTCHANNELS, ASTCHANBRIDGECOUNT}}, }; register_sysORTable(asterisk_oid, OID_LENGTH(asterisk_oid), -- cgit v1.2.3