Add 'capi show resources'
This commit is contained in:
parent
90557f5ced
commit
6c7ba82edf
6
README
6
README
|
@ -138,6 +138,12 @@ capi show channels:
|
||||||
capi chatinfo:
|
capi chatinfo:
|
||||||
Show status of CAPI CHAT.
|
Show status of CAPI CHAT.
|
||||||
|
|
||||||
|
capi ifcstate:
|
||||||
|
Show state of interfaces. (Diva only, chan_capi
|
||||||
|
compiled with 'make DIVA_STATUS=1')
|
||||||
|
|
||||||
|
capi show resources:
|
||||||
|
Show resources in use.
|
||||||
|
|
||||||
CAPI command application
|
CAPI command application
|
||||||
========================================
|
========================================
|
||||||
|
|
112
chan_capi_cli.c
112
chan_capi_cli.c
|
@ -28,34 +28,38 @@
|
||||||
/*
|
/*
|
||||||
* usages
|
* usages
|
||||||
*/
|
*/
|
||||||
static char info_usage[] =
|
static char info_usage[] =
|
||||||
"Usage: " CC_MESSAGE_NAME " info\n"
|
"Usage: " CC_MESSAGE_NAME " info\n"
|
||||||
" Show info about B channels on controllers.\n";
|
" Show info about B channels on controllers.\n";
|
||||||
|
|
||||||
static char show_channels_usage[] =
|
static char show_channels_usage[] =
|
||||||
"Usage: " CC_MESSAGE_NAME " show channels\n"
|
"Usage: " CC_MESSAGE_NAME " show channels\n"
|
||||||
" Show info about B channels.\n";
|
" Show info about B channels.\n";
|
||||||
|
|
||||||
static char debug_usage[] =
|
static char show_resources_usage[] =
|
||||||
|
"Usage: " CC_MESSAGE_NAME " show ressources\n"
|
||||||
|
" Show info about used by channels resources.\n";
|
||||||
|
|
||||||
|
static char debug_usage[] =
|
||||||
"Usage: " CC_MESSAGE_NAME " debug\n"
|
"Usage: " CC_MESSAGE_NAME " debug\n"
|
||||||
" Enables dumping of " CC_MESSAGE_BIGNAME " packets for debugging purposes\n";
|
" Enables dumping of " CC_MESSAGE_BIGNAME " packets for debugging purposes\n";
|
||||||
|
|
||||||
static char no_debug_usage[] =
|
static char no_debug_usage[] =
|
||||||
"Usage: " CC_MESSAGE_NAME " no debug\n"
|
"Usage: " CC_MESSAGE_NAME " no debug\n"
|
||||||
" Disables dumping of " CC_MESSAGE_BIGNAME " packets for debugging purposes\n";
|
" Disables dumping of " CC_MESSAGE_BIGNAME " packets for debugging purposes\n";
|
||||||
|
|
||||||
static char qsig_debug_usage[] =
|
static char qsig_debug_usage[] =
|
||||||
"Usage: " CC_MESSAGE_NAME " qsig debug\n"
|
"Usage: " CC_MESSAGE_NAME " qsig debug\n"
|
||||||
" Enables dumping of QSIG facilities for debugging purposes\n";
|
" Enables dumping of QSIG facilities for debugging purposes\n";
|
||||||
|
|
||||||
static char qsig_no_debug_usage[] =
|
static char qsig_no_debug_usage[] =
|
||||||
"Usage: " CC_MESSAGE_NAME " qsig no debug\n"
|
"Usage: " CC_MESSAGE_NAME " qsig no debug\n"
|
||||||
" Disables dumping of QSIG facilities for debugging purposes\n";
|
" Disables dumping of QSIG facilities for debugging purposes\n";
|
||||||
|
|
||||||
#ifndef CC_AST_HAS_VERSION_1_6
|
#ifndef CC_AST_HAS_VERSION_1_6
|
||||||
static
|
static
|
||||||
#endif
|
#endif
|
||||||
char chatinfo_usage[] =
|
char chatinfo_usage[] =
|
||||||
"Usage: " CC_MESSAGE_NAME " chatinfo\n"
|
"Usage: " CC_MESSAGE_NAME " chatinfo\n"
|
||||||
" Show info about chat status.\n";
|
" Show info about chat status.\n";
|
||||||
|
|
||||||
|
@ -66,6 +70,7 @@ char chatinfo_usage[] =
|
||||||
#define CC_CLI_TEXT_QSIG_DEBUG "Enable QSIG debugging"
|
#define CC_CLI_TEXT_QSIG_DEBUG "Enable QSIG debugging"
|
||||||
#define CC_CLI_TEXT_QSIG_NO_DEBUG "Disable QSIG debugging"
|
#define CC_CLI_TEXT_QSIG_NO_DEBUG "Disable QSIG debugging"
|
||||||
#define CC_CLI_TEXT_CHATINFO "Show " CC_MESSAGE_BIGNAME " chat info"
|
#define CC_CLI_TEXT_CHATINFO "Show " CC_MESSAGE_BIGNAME " chat info"
|
||||||
|
#define CC_CLI_TEXT_SHOW_RESOURCES "Show used resources"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* helper functions to convert conf value to string
|
* helper functions to convert conf value to string
|
||||||
|
@ -226,6 +231,94 @@ static int pbxcli_capi_show_channels(int fd, int argc, char *argv[])
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* do command capi show resources
|
||||||
|
*/
|
||||||
|
#ifdef CC_AST_HAS_VERSION_1_6
|
||||||
|
static char *pbxcli_capi_show_resources(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
|
||||||
|
#else
|
||||||
|
static int pbxcli_capi_show_ressources(int fd, int argc, char *argv[])
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
int ifc_type;
|
||||||
|
const struct capi_pvt *i;
|
||||||
|
int required_args;
|
||||||
|
int provided_args;
|
||||||
|
const char* required_channel_name = NULL;
|
||||||
|
struct {
|
||||||
|
const struct capi_pvt *head;
|
||||||
|
void (*lock_proc)(void);
|
||||||
|
void (*unlock_proc)(void);
|
||||||
|
} data[2];
|
||||||
|
|
||||||
|
data[0].head = capi_iflist;
|
||||||
|
data[0].lock_proc = pbx_capi_lock_interfaces;
|
||||||
|
data[0].unlock_proc = pbx_capi_unlock_interfaces;
|
||||||
|
data[1].head = pbx_capi_get_nulliflist();
|
||||||
|
data[1].lock_proc = pbx_capi_nulliflist_lock;
|
||||||
|
data[1].unlock_proc = pbx_capi_nulliflist_unlock;
|
||||||
|
|
||||||
|
#ifdef CC_AST_HAS_VERSION_1_6
|
||||||
|
int fd = a->fd;
|
||||||
|
|
||||||
|
if (cmd == CLI_INIT) {
|
||||||
|
e->command = CC_MESSAGE_NAME " show resources";
|
||||||
|
e->usage = show_resources_usage;
|
||||||
|
return NULL;
|
||||||
|
} else if (cmd == CLI_GENERATE)
|
||||||
|
return NULL;
|
||||||
|
required_args = e->args;
|
||||||
|
provided_args = a->argc;
|
||||||
|
if (required_args < provided_args) {
|
||||||
|
required_channel_name = a->argv[required_args];
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
required_args = 3;
|
||||||
|
provided_args = argc;
|
||||||
|
if (required_args < provided_args) {
|
||||||
|
required_channel_name = argv[required_args];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ast_cli(fd, CC_MESSAGE_BIGNAME " resources in use:\n");
|
||||||
|
ast_cli(fd, "%-40s %-6s %-4s %-10s %-9s %-5s %-5s %-6s %-6s\n",
|
||||||
|
"Line-Name", "Domain", "DTMF", "EchoCancel", "NoiseSupp", "RxAGC", "TxAGC", "RxGain", "TxGain");
|
||||||
|
ast_cli(fd, "------------------------------------------------------------------------------------------------------\n");
|
||||||
|
|
||||||
|
for (ifc_type = 0; ifc_type < sizeof(data)/sizeof(data[0]); ifc_type++) {
|
||||||
|
data[ifc_type].lock_proc();
|
||||||
|
|
||||||
|
for (i = data[ifc_type].head; i; i = i->next) {
|
||||||
|
if ((i->used == 0) || ((i->channeltype != CAPI_CHANNELTYPE_B) &&
|
||||||
|
(i->channeltype != CAPI_CHANNELTYPE_NULL)))
|
||||||
|
continue;
|
||||||
|
if (i->data_plci != 0)
|
||||||
|
continue;
|
||||||
|
if ((required_channel_name != NULL) && (strcmp(required_channel_name, i->vname) != 0))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ast_cli(fd, "%-40s %-6s %-4s %-10s %-9s %-5s %-5s %-.1f%-3s %-.1f%-3s\n",
|
||||||
|
i->vname,
|
||||||
|
(i->channeltype == CAPI_CHANNELTYPE_B) ? "TDM" : "IP",
|
||||||
|
(i->isdnstate & CAPI_ISDN_STATE_DTMF) ? "Y" : "N",
|
||||||
|
(i->isdnstate & CAPI_ISDN_STATE_EC) ? "Y" : "N",
|
||||||
|
(i->divaAudioFlags & 0x0080) ? "Y" : "N", /* Noise supression */
|
||||||
|
(i->divaAudioFlags & 0x0008) ? "Y" : "N", /* Rx AGC */
|
||||||
|
(i->divaAudioFlags & 0x0004) ? "Y" : "N", /* Tx AGC */
|
||||||
|
i->divaDigitalRxGainDB, "dB",
|
||||||
|
i->divaDigitalTxGainDB, "dB");
|
||||||
|
}
|
||||||
|
|
||||||
|
data[ifc_type].unlock_proc();
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CC_AST_HAS_VERSION_1_6
|
||||||
|
return CLI_SUCCESS;
|
||||||
|
#else
|
||||||
|
return RESULT_SUCCESS;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* do command capi info
|
* do command capi info
|
||||||
*/
|
*/
|
||||||
|
@ -426,6 +519,7 @@ static struct ast_cli_entry cc_cli_cmd[] = {
|
||||||
#ifdef DIVA_STATUS
|
#ifdef DIVA_STATUS
|
||||||
AST_CLI_DEFINE(pbxcli_capi_ifc_status, CC_CLI_TEXT_IFC_STATUSINFO),
|
AST_CLI_DEFINE(pbxcli_capi_ifc_status, CC_CLI_TEXT_IFC_STATUSINFO),
|
||||||
#endif
|
#endif
|
||||||
|
AST_CLI_DEFINE(pbxcli_capi_show_resources, CC_CLI_TEXT_SHOW_RESOURCES),
|
||||||
};
|
};
|
||||||
#else
|
#else
|
||||||
static struct ast_cli_entry cli_info =
|
static struct ast_cli_entry cli_info =
|
||||||
|
@ -446,6 +540,8 @@ static struct ast_cli_entry cli_chatinfo =
|
||||||
static struct ast_cli_entry cli_ifcstate =
|
static struct ast_cli_entry cli_ifcstate =
|
||||||
{ { CC_MESSAGE_NAME, "ifcstate", NULL }, pbxcli_capi_ifc_status, CC_CLI_TEXT_IFC_STATUSINFO, diva_status_ifc_state_usage };
|
{ { CC_MESSAGE_NAME, "ifcstate", NULL }, pbxcli_capi_ifc_status, CC_CLI_TEXT_IFC_STATUSINFO, diva_status_ifc_state_usage };
|
||||||
#endif
|
#endif
|
||||||
|
static struct ast_cli_entry cli_show_resources =
|
||||||
|
{ { CC_MESSAGE_NAME, "show", "resources", NULL }, pbxcli_capi_show_resources, CC_CLI_TEXT_SHOW_RESOURCES, show_resources_usage };
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -465,6 +561,7 @@ void pbx_capi_cli_register(void)
|
||||||
#ifdef DIVA_STATUS
|
#ifdef DIVA_STATUS
|
||||||
ast_cli_register(&cli_ifcstate);
|
ast_cli_register(&cli_ifcstate);
|
||||||
#endif
|
#endif
|
||||||
|
ast_cli_register(&cli_show_resources);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -483,5 +580,6 @@ void pbx_capi_cli_unregister(void)
|
||||||
#ifdef DIVA_STATUS
|
#ifdef DIVA_STATUS
|
||||||
ast_cli_unregister(&cli_ifcstate);
|
ast_cli_unregister(&cli_ifcstate);
|
||||||
#endif
|
#endif
|
||||||
|
ast_cli_unregister(&cli_show_resources);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -1631,3 +1631,18 @@ const char* pbx_capi_get_connectedname(struct ast_channel* c)
|
||||||
return (name);
|
return (name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const struct capi_pvt *pbx_capi_get_nulliflist(void)
|
||||||
|
{
|
||||||
|
return nulliflist;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pbx_capi_nulliflist_lock(void)
|
||||||
|
{
|
||||||
|
cc_mutex_lock(&nullif_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
void pbx_capi_nulliflist_unlock(void)
|
||||||
|
{
|
||||||
|
cc_mutex_unlock(&nullif_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,4 +80,17 @@ extern MESSAGE_EXCHANGE_ERROR capi_sendf(
|
||||||
struct capi_pvt *capii, int waitconf,
|
struct capi_pvt *capii, int waitconf,
|
||||||
_cword command, _cdword Id, _cword Number, char * format, ...);
|
_cword command, _cdword Id, _cword Number, char * format, ...);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief nulliflist
|
||||||
|
*/
|
||||||
|
const struct capi_pvt *pbx_capi_get_nulliflist(void);
|
||||||
|
/*!
|
||||||
|
\brief cc_mutex_lock(&nullif_lock)
|
||||||
|
*/
|
||||||
|
void pbx_capi_nulliflist_lock(void);
|
||||||
|
/*!
|
||||||
|
\brief cc_mutex_unlock(&nullif_lock)
|
||||||
|
*/
|
||||||
|
void pbx_capi_nulliflist_unlock(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue