mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
synced 2025-10-24 00:23:53 +00:00
libmsc/bsc: split rate counters into bsc and msc group
Tweaked-By: Neels Hofmeyr <nhofmeyr@sysmocom.de> Change-Id: I7361033cd1eb919ec3c2ea2652f40ab8c75b2f99
This commit is contained in:
committed by
Neels Hofmeyr
parent
d75864f6f5
commit
b847a21fa4
@@ -150,25 +150,49 @@ struct gsm_subscriber_connection {
|
|||||||
#include "gsm_data_shared.h"
|
#include "gsm_data_shared.h"
|
||||||
|
|
||||||
|
|
||||||
/* Some statistics of our network */
|
|
||||||
enum {
|
enum {
|
||||||
MSC_CTR_CHREQ_TOTAL,
|
BSC_CTR_CHREQ_TOTAL,
|
||||||
MSC_CTR_CHREQ_NO_CHANNEL,
|
BSC_CTR_CHREQ_NO_CHANNEL,
|
||||||
MSC_CTR_HANDOVER_ATTEMPTED,
|
BSC_CTR_HANDOVER_ATTEMPTED,
|
||||||
MSC_CTR_HANDOVER_NO_CHANNEL,
|
BSC_CTR_HANDOVER_NO_CHANNEL,
|
||||||
MSC_CTR_HANDOVER_TIMEOUT,
|
BSC_CTR_HANDOVER_TIMEOUT,
|
||||||
MSC_CTR_HANDOVER_COMPLETED,
|
BSC_CTR_HANDOVER_COMPLETED,
|
||||||
MSC_CTR_HANDOVER_FAILED,
|
BSC_CTR_HANDOVER_FAILED,
|
||||||
|
BSC_CTR_PAGING_ATTEMPTED,
|
||||||
|
BSC_CTR_PAGING_DETACHED,
|
||||||
|
BSC_CTR_PAGING_COMPLETED,
|
||||||
|
BSC_CTR_PAGING_EXPIRED,
|
||||||
|
BSC_CTR_CHAN_RF_FAIL,
|
||||||
|
BSC_CTR_CHAN_RLL_ERR,
|
||||||
|
BSC_CTR_BTS_OML_FAIL,
|
||||||
|
BSC_CTR_BTS_RSL_FAIL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct rate_ctr_desc bsc_ctr_description[] = {
|
||||||
|
[BSC_CTR_CHREQ_TOTAL] = {"chreq.total", "Received channel requests."},
|
||||||
|
[BSC_CTR_CHREQ_NO_CHANNEL] = {"chreq.no_channel", "Sent to MS no channel available."},
|
||||||
|
[BSC_CTR_HANDOVER_ATTEMPTED] = {"handover.attempted", "Received handover attempts."},
|
||||||
|
[BSC_CTR_HANDOVER_NO_CHANNEL] = {"handover.no_channel", "Sent no channel available responses."},
|
||||||
|
[BSC_CTR_HANDOVER_TIMEOUT] = {"handover.timeout", "Count the amount of timeouts of timer T3103."},
|
||||||
|
[BSC_CTR_HANDOVER_COMPLETED] = {"handover.completed", "Received handover completed."},
|
||||||
|
[BSC_CTR_HANDOVER_FAILED] = {"handover.failed", "Receive HO FAIL messages."},
|
||||||
|
[BSC_CTR_PAGING_ATTEMPTED] = {"paging.attempted", "Paging attempts for a MS."},
|
||||||
|
[BSC_CTR_PAGING_DETACHED] = {"paging.detached", "Counts the amount of paging attempts which couldn't sent out any paging request because no responsible bts found."},
|
||||||
|
[BSC_CTR_PAGING_COMPLETED] = {"paging.completed", "Paging successful completed."},
|
||||||
|
[BSC_CTR_PAGING_EXPIRED] = {"paging.expired", "Paging Request expired because of timeout T3113."},
|
||||||
|
[BSC_CTR_CHAN_RF_FAIL] = {"chan.rf_fail", "Received a RF failure indication from BTS."},
|
||||||
|
[BSC_CTR_CHAN_RLL_ERR] = {"chan.rll_err", "Received a RLL failure with T200 cause from BTS."},
|
||||||
|
[BSC_CTR_BTS_OML_FAIL] = {"bts.oml_fail", "Received a TEI down on a OML link."},
|
||||||
|
[BSC_CTR_BTS_RSL_FAIL] = {"bts.rsl_fail", "Received a TEI down on a OML link."},
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
MSC_CTR_LOC_UPDATE_TYPE_ATTACH,
|
MSC_CTR_LOC_UPDATE_TYPE_ATTACH,
|
||||||
MSC_CTR_LOC_UPDATE_TYPE_NORMAL,
|
MSC_CTR_LOC_UPDATE_TYPE_NORMAL,
|
||||||
MSC_CTR_LOC_UPDATE_TYPE_PERIODIC,
|
MSC_CTR_LOC_UPDATE_TYPE_PERIODIC,
|
||||||
MSC_CTR_LOC_UPDATE_TYPE_DETACH,
|
MSC_CTR_LOC_UPDATE_TYPE_DETACH,
|
||||||
MSC_CTR_LOC_UPDATE_RESP_REJECT,
|
MSC_CTR_LOC_UPDATE_RESP_REJECT,
|
||||||
MSC_CTR_LOC_UPDATE_RESP_ACCEPT,
|
MSC_CTR_LOC_UPDATE_RESP_ACCEPT,
|
||||||
MSC_CTR_PAGING_ATTEMPTED,
|
|
||||||
MSC_CTR_PAGING_DETACHED,
|
|
||||||
MSC_CTR_PAGING_COMPLETED,
|
|
||||||
MSC_CTR_PAGING_EXPIRED,
|
|
||||||
MSC_CTR_SMS_SUBMITTED,
|
MSC_CTR_SMS_SUBMITTED,
|
||||||
MSC_CTR_SMS_NO_RECEIVER,
|
MSC_CTR_SMS_NO_RECEIVER,
|
||||||
MSC_CTR_SMS_DELIVERED,
|
MSC_CTR_SMS_DELIVERED,
|
||||||
@@ -178,30 +202,15 @@ enum {
|
|||||||
MSC_CTR_CALL_MO_CONNECT_ACK,
|
MSC_CTR_CALL_MO_CONNECT_ACK,
|
||||||
MSC_CTR_CALL_MT_SETUP,
|
MSC_CTR_CALL_MT_SETUP,
|
||||||
MSC_CTR_CALL_MT_CONNECT,
|
MSC_CTR_CALL_MT_CONNECT,
|
||||||
MSC_CTR_CHAN_RF_FAIL,
|
|
||||||
MSC_CTR_CHAN_RLL_ERR,
|
|
||||||
MSC_CTR_BTS_OML_FAIL,
|
|
||||||
MSC_CTR_BTS_RSL_FAIL,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct rate_ctr_desc msc_ctr_description[] = {
|
static const struct rate_ctr_desc msc_ctr_description[] = {
|
||||||
[MSC_CTR_CHREQ_TOTAL] = {"chreq.total", "Received channel requests."},
|
|
||||||
[MSC_CTR_CHREQ_NO_CHANNEL] = {"chreq.no_channel", "Sent to MS no channel available."},
|
|
||||||
[MSC_CTR_HANDOVER_ATTEMPTED] = {"handover.attempted", "Received handover attempts."},
|
|
||||||
[MSC_CTR_HANDOVER_NO_CHANNEL] = {"handover.no_channel", "Sent no channel available responses."},
|
|
||||||
[MSC_CTR_HANDOVER_TIMEOUT] = {"handover.timeout", "Count the amount of timeouts of timer T3103."},
|
|
||||||
[MSC_CTR_HANDOVER_COMPLETED] = {"handover.completed", "Received handover completed."},
|
|
||||||
[MSC_CTR_HANDOVER_FAILED] = {"handover.failed", "Receive HO FAIL messages."},
|
|
||||||
[MSC_CTR_LOC_UPDATE_TYPE_ATTACH] = {"loc_update_type.attach", "Received location update imsi attach requests."},
|
[MSC_CTR_LOC_UPDATE_TYPE_ATTACH] = {"loc_update_type.attach", "Received location update imsi attach requests."},
|
||||||
[MSC_CTR_LOC_UPDATE_TYPE_NORMAL] = {"loc_update_type.normal", "Received location update normal requests."},
|
[MSC_CTR_LOC_UPDATE_TYPE_NORMAL] = {"loc_update_type.normal", "Received location update normal requests."},
|
||||||
[MSC_CTR_LOC_UPDATE_TYPE_PERIODIC] = {"loc_update_type.periodic", "Received location update periodic requests."},
|
[MSC_CTR_LOC_UPDATE_TYPE_PERIODIC] = {"loc_update_type.periodic", "Received location update periodic requests."},
|
||||||
[MSC_CTR_LOC_UPDATE_TYPE_DETACH] = {"loc_update_type.detach", "Received location update detach indication."},
|
[MSC_CTR_LOC_UPDATE_TYPE_DETACH] = {"loc_update_type.detach", "Received location update detach indication."},
|
||||||
[MSC_CTR_LOC_UPDATE_RESP_REJECT] = {"loc_update_resp.reject", "Sent location update reject responses."},
|
[MSC_CTR_LOC_UPDATE_RESP_REJECT] = {"loc_update_resp.reject", "Sent location update reject responses."},
|
||||||
[MSC_CTR_LOC_UPDATE_RESP_ACCEPT] = {"loc_update_resp.accept", "Sent location update accept responses."},
|
[MSC_CTR_LOC_UPDATE_RESP_ACCEPT] = {"loc_update_resp.accept", "Sent location update accept responses."},
|
||||||
[MSC_CTR_PAGING_ATTEMPTED] = {"paging.attempted", "Paging attempts for a MS."},
|
|
||||||
[MSC_CTR_PAGING_DETACHED] = {"paging.detached", "Counts the amount of paging attempts which couldn't sent out any paging request because no responsible bts found."},
|
|
||||||
[MSC_CTR_PAGING_COMPLETED] = {"paging.completed", "Paging successful completed."},
|
|
||||||
[MSC_CTR_PAGING_EXPIRED] = {"paging.expired", "Paging Request expired because of timeout T3113."},
|
|
||||||
[MSC_CTR_SMS_SUBMITTED] = {"sms.submitted", "Received a RPDU from a MS (MO)."},
|
[MSC_CTR_SMS_SUBMITTED] = {"sms.submitted", "Received a RPDU from a MS (MO)."},
|
||||||
[MSC_CTR_SMS_NO_RECEIVER] = {"sms.no_receiver", "Counts SMS which couldn't routed because no receiver found."},
|
[MSC_CTR_SMS_NO_RECEIVER] = {"sms.no_receiver", "Counts SMS which couldn't routed because no receiver found."},
|
||||||
[MSC_CTR_SMS_DELIVERED] = {"sms.delivered", "Global SMS Deliver attempts."},
|
[MSC_CTR_SMS_DELIVERED] = {"sms.delivered", "Global SMS Deliver attempts."},
|
||||||
@@ -212,10 +221,15 @@ static const struct rate_ctr_desc msc_ctr_description[] = {
|
|||||||
[MSC_CTR_CALL_MO_CONNECT_ACK] = {"call.mo_connect_ack", "Received a connect ack from MS of a MO call. Call is now succesful connected up."},
|
[MSC_CTR_CALL_MO_CONNECT_ACK] = {"call.mo_connect_ack", "Received a connect ack from MS of a MO call. Call is now succesful connected up."},
|
||||||
[MSC_CTR_CALL_MT_SETUP] = {"call.mt_setup", "Sent setup requests to the MS (MT)."},
|
[MSC_CTR_CALL_MT_SETUP] = {"call.mt_setup", "Sent setup requests to the MS (MT)."},
|
||||||
[MSC_CTR_CALL_MT_CONNECT] = {"call.mt_connect", "Sent a connect to the MS (MT)."},
|
[MSC_CTR_CALL_MT_CONNECT] = {"call.mt_connect", "Sent a connect to the MS (MT)."},
|
||||||
[MSC_CTR_CHAN_RF_FAIL] = {"chan.rf_fail", "Received a RF failure indication from BTS."},
|
};
|
||||||
[MSC_CTR_CHAN_RLL_ERR] = {"chan.rll_err", "Received a RLL failure with T200 cause from BTS."},
|
|
||||||
[MSC_CTR_BTS_OML_FAIL] = {"bts.oml_fail", "Received a TEI down on a OML link."},
|
|
||||||
[MSC_CTR_BTS_RSL_FAIL] = {"bts.rsl_fail", "Received a TEI down on a OML link."},
|
static const struct rate_ctr_group_desc bsc_ctrg_desc = {
|
||||||
|
"bsc",
|
||||||
|
"base station controller",
|
||||||
|
OSMO_STATS_CLASS_GLOBAL,
|
||||||
|
ARRAY_SIZE(bsc_ctr_description),
|
||||||
|
bsc_ctr_description,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct rate_ctr_group_desc msc_ctrg_desc = {
|
static const struct rate_ctr_group_desc msc_ctrg_desc = {
|
||||||
@@ -268,7 +282,8 @@ struct gsm_network {
|
|||||||
unsigned int max_distance; /* TA values */
|
unsigned int max_distance; /* TA values */
|
||||||
} handover;
|
} handover;
|
||||||
|
|
||||||
struct rate_ctr_group *ratectrs;
|
struct rate_ctr_group *bsc_ctrs;
|
||||||
|
struct rate_ctr_group *msc_ctrs;
|
||||||
|
|
||||||
|
|
||||||
/* layer 4 */
|
/* layer 4 */
|
||||||
|
|||||||
@@ -1229,7 +1229,7 @@ static int rsl_rx_conn_fail(struct msgb *msg)
|
|||||||
TLVP_LEN(&tp, RSL_IE_CAUSE));
|
TLVP_LEN(&tp, RSL_IE_CAUSE));
|
||||||
|
|
||||||
LOGPC(DRSL, LOGL_NOTICE, "\n");
|
LOGPC(DRSL, LOGL_NOTICE, "\n");
|
||||||
rate_ctr_inc(&msg->lchan->ts->trx->bts->network->ratectrs->ctr[MSC_CTR_CHAN_RF_FAIL]);
|
rate_ctr_inc(&msg->lchan->ts->trx->bts->network->bsc_ctrs->ctr[BSC_CTR_CHAN_RF_FAIL]);
|
||||||
return rsl_rf_chan_release_err(msg->lchan);
|
return rsl_rf_chan_release_err(msg->lchan);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1663,7 +1663,7 @@ static int rsl_rx_chan_rqd(struct msgb *msg)
|
|||||||
lctype = get_ctype_by_chreq(bts->network, rqd_ref->ra);
|
lctype = get_ctype_by_chreq(bts->network, rqd_ref->ra);
|
||||||
chreq_reason = get_reason_by_chreq(rqd_ref->ra, bts->network->neci);
|
chreq_reason = get_reason_by_chreq(rqd_ref->ra, bts->network->neci);
|
||||||
|
|
||||||
rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_CHREQ_TOTAL]);
|
rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CHREQ_TOTAL]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We want LOCATION UPDATES to succeed and will assign a TCH
|
* We want LOCATION UPDATES to succeed and will assign a TCH
|
||||||
@@ -1676,7 +1676,7 @@ static int rsl_rx_chan_rqd(struct msgb *msg)
|
|||||||
if (!lchan) {
|
if (!lchan) {
|
||||||
LOGP(DRSL, LOGL_NOTICE, "BTS %d CHAN RQD: no resources for %s 0x%x\n",
|
LOGP(DRSL, LOGL_NOTICE, "BTS %d CHAN RQD: no resources for %s 0x%x\n",
|
||||||
msg->lchan->ts->trx->bts->nr, gsm_lchant_name(lctype), rqd_ref->ra);
|
msg->lchan->ts->trx->bts->nr, gsm_lchant_name(lctype), rqd_ref->ra);
|
||||||
rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_CHREQ_NO_CHANNEL]);
|
rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CHREQ_NO_CHANNEL]);
|
||||||
/* FIXME gather multiple CHAN RQD and reject up to 4 at the same time */
|
/* FIXME gather multiple CHAN RQD and reject up to 4 at the same time */
|
||||||
if (bts->network->T3122)
|
if (bts->network->T3122)
|
||||||
rsl_send_imm_ass_rej(bts, 1, rqd_ref, bts->network->T3122 & 0xff);
|
rsl_send_imm_ass_rej(bts, 1, rqd_ref, bts->network->T3122 & 0xff);
|
||||||
@@ -1859,7 +1859,7 @@ static int rsl_rx_rll_err_ind(struct msgb *msg)
|
|||||||
rll_indication(msg->lchan, rllh->link_id, BSC_RLLR_IND_ERR_IND);
|
rll_indication(msg->lchan, rllh->link_id, BSC_RLLR_IND_ERR_IND);
|
||||||
|
|
||||||
if (rlm_cause == RLL_CAUSE_T200_EXPIRED) {
|
if (rlm_cause == RLL_CAUSE_T200_EXPIRED) {
|
||||||
rate_ctr_inc(&msg->lchan->ts->trx->bts->network->ratectrs->ctr[MSC_CTR_CHAN_RLL_ERR]);
|
rate_ctr_inc(&msg->lchan->ts->trx->bts->network->bsc_ctrs->ctr[BSC_CTR_CHAN_RLL_ERR]);
|
||||||
return rsl_rf_chan_release_err(msg->lchan);
|
return rsl_rf_chan_release_err(msg->lchan);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -340,9 +340,9 @@ static int inp_sig_cb(unsigned int subsys, unsigned int signal,
|
|||||||
LOGP(DLMI, LOGL_ERROR, "Lost some E1 TEI link: %d %p\n", isd->link_type, trx);
|
LOGP(DLMI, LOGL_ERROR, "Lost some E1 TEI link: %d %p\n", isd->link_type, trx);
|
||||||
|
|
||||||
if (isd->link_type == E1INP_SIGN_OML)
|
if (isd->link_type == E1INP_SIGN_OML)
|
||||||
rate_ctr_inc(&trx->bts->network->ratectrs->ctr[MSC_CTR_BTS_OML_FAIL]);
|
rate_ctr_inc(&trx->bts->network->bsc_ctrs->ctr[BSC_CTR_BTS_OML_FAIL]);
|
||||||
else if (isd->link_type == E1INP_SIGN_RSL)
|
else if (isd->link_type == E1INP_SIGN_RSL)
|
||||||
rate_ctr_inc(&trx->bts->network->ratectrs->ctr[MSC_CTR_BTS_RSL_FAIL]);
|
rate_ctr_inc(&trx->bts->network->bsc_ctrs->ctr[BSC_CTR_BTS_RSL_FAIL]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* free all allocated channels. change the nm_state so the
|
* free all allocated channels. change the nm_state so the
|
||||||
|
|||||||
@@ -3784,21 +3784,21 @@ DEFUN(cfg_ts_e1_subslot,
|
|||||||
void openbsc_vty_print_statistics(struct vty *vty, struct gsm_network *net)
|
void openbsc_vty_print_statistics(struct vty *vty, struct gsm_network *net)
|
||||||
{
|
{
|
||||||
vty_out(vty, "Channel Requests : %lu total, %lu no channel%s",
|
vty_out(vty, "Channel Requests : %lu total, %lu no channel%s",
|
||||||
net->ratectrs->ctr[MSC_CTR_CHREQ_TOTAL].current,
|
net->bsc_ctrs->ctr[BSC_CTR_CHREQ_TOTAL].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_CHREQ_NO_CHANNEL].current,
|
net->bsc_ctrs->ctr[BSC_CTR_CHREQ_NO_CHANNEL].current,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
vty_out(vty, "Channel Failures : %lu rf_failures, %lu rll failures%s",
|
vty_out(vty, "Channel Failures : %lu rf_failures, %lu rll failures%s",
|
||||||
net->ratectrs->ctr[MSC_CTR_CHAN_RF_FAIL].current,
|
net->bsc_ctrs->ctr[BSC_CTR_CHAN_RF_FAIL].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_CHAN_RLL_ERR].current,
|
net->bsc_ctrs->ctr[BSC_CTR_CHAN_RLL_ERR].current,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
vty_out(vty, "Paging : %lu attempted, %lu complete, %lu expired%s",
|
vty_out(vty, "Paging : %lu attempted, %lu complete, %lu expired%s",
|
||||||
net->ratectrs->ctr[MSC_CTR_PAGING_ATTEMPTED].current,
|
net->bsc_ctrs->ctr[BSC_CTR_PAGING_ATTEMPTED].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_PAGING_COMPLETED].current,
|
net->bsc_ctrs->ctr[BSC_CTR_PAGING_COMPLETED].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_PAGING_EXPIRED].current,
|
net->bsc_ctrs->ctr[BSC_CTR_PAGING_EXPIRED].current,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
vty_out(vty, "BTS failures : %lu OML, %lu RSL%s",
|
vty_out(vty, "BTS failures : %lu OML, %lu RSL%s",
|
||||||
net->ratectrs->ctr[MSC_CTR_BTS_OML_FAIL].current,
|
net->bsc_ctrs->ctr[BSC_CTR_BTS_OML_FAIL].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_BTS_RSL_FAIL].current,
|
net->bsc_ctrs->ctr[BSC_CTR_BTS_RSL_FAIL].current,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -304,7 +304,7 @@ int gsm48_handle_paging_resp(struct gsm_subscriber_connection *conn,
|
|||||||
subscr = conn->subscr;
|
subscr = conn->subscr;
|
||||||
}
|
}
|
||||||
|
|
||||||
rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_PAGING_COMPLETED]);
|
rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_PAGING_COMPLETED]);
|
||||||
|
|
||||||
/* Stop paging on the bts we received the paging response */
|
/* Stop paging on the bts we received the paging response */
|
||||||
paging_request_stop(conn->bts, subscr, conn, msg);
|
paging_request_stop(conn->bts, subscr, conn, msg);
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ int bsc_handover_start(struct gsm_lchan *old_lchan, struct gsm_bts *bts)
|
|||||||
DEBUGP(DHO, "(old_lchan on BTS %u, new BTS %u)\n",
|
DEBUGP(DHO, "(old_lchan on BTS %u, new BTS %u)\n",
|
||||||
old_lchan->ts->trx->bts->nr, bts->nr);
|
old_lchan->ts->trx->bts->nr, bts->nr);
|
||||||
|
|
||||||
rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_HANDOVER_ATTEMPTED]);
|
rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_HANDOVER_ATTEMPTED]);
|
||||||
|
|
||||||
if (!old_lchan->conn) {
|
if (!old_lchan->conn) {
|
||||||
LOGP(DHO, LOGL_ERROR, "Old lchan lacks connection data.\n");
|
LOGP(DHO, LOGL_ERROR, "Old lchan lacks connection data.\n");
|
||||||
@@ -113,7 +113,7 @@ int bsc_handover_start(struct gsm_lchan *old_lchan, struct gsm_bts *bts)
|
|||||||
new_lchan = lchan_alloc(bts, old_lchan->type, 0);
|
new_lchan = lchan_alloc(bts, old_lchan->type, 0);
|
||||||
if (!new_lchan) {
|
if (!new_lchan) {
|
||||||
LOGP(DHO, LOGL_NOTICE, "No free channel\n");
|
LOGP(DHO, LOGL_NOTICE, "No free channel\n");
|
||||||
rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_HANDOVER_NO_CHANNEL]);
|
rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_HANDOVER_NO_CHANNEL]);
|
||||||
return -ENOSPC;
|
return -ENOSPC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,7 +188,7 @@ static void ho_T3103_cb(void *_ho)
|
|||||||
struct gsm_network *net = ho->new_lchan->ts->trx->bts->network;
|
struct gsm_network *net = ho->new_lchan->ts->trx->bts->network;
|
||||||
|
|
||||||
DEBUGP(DHO, "HO T3103 expired\n");
|
DEBUGP(DHO, "HO T3103 expired\n");
|
||||||
rate_ctr_inc(&net->ratectrs->ctr[MSC_CTR_HANDOVER_TIMEOUT]);
|
rate_ctr_inc(&net->bsc_ctrs->ctr[BSC_CTR_HANDOVER_TIMEOUT]);
|
||||||
|
|
||||||
ho->new_lchan->conn->ho_lchan = NULL;
|
ho->new_lchan->conn->ho_lchan = NULL;
|
||||||
ho->new_lchan->conn = NULL;
|
ho->new_lchan->conn = NULL;
|
||||||
@@ -265,7 +265,7 @@ static int ho_gsm48_ho_compl(struct gsm_lchan *new_lchan)
|
|||||||
ho->old_lchan->ts->trx->bts->nr, new_lchan->ts->trx->bts->nr,
|
ho->old_lchan->ts->trx->bts->nr, new_lchan->ts->trx->bts->nr,
|
||||||
ho->old_lchan->ts->trx->arfcn, new_lchan->ts->trx->arfcn);
|
ho->old_lchan->ts->trx->arfcn, new_lchan->ts->trx->arfcn);
|
||||||
|
|
||||||
rate_ctr_inc(&net->ratectrs->ctr[MSC_CTR_HANDOVER_COMPLETED]);
|
rate_ctr_inc(&net->bsc_ctrs->ctr[BSC_CTR_HANDOVER_COMPLETED]);
|
||||||
|
|
||||||
osmo_timer_del(&ho->T3103);
|
osmo_timer_del(&ho->T3103);
|
||||||
|
|
||||||
@@ -303,7 +303,7 @@ static int ho_gsm48_ho_fail(struct gsm_lchan *old_lchan)
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
rate_ctr_inc(&net->ratectrs->ctr[MSC_CTR_HANDOVER_FAILED]);
|
rate_ctr_inc(&net->bsc_ctrs->ctr[BSC_CTR_HANDOVER_FAILED]);
|
||||||
|
|
||||||
new_lchan = ho->new_lchan;
|
new_lchan = ho->new_lchan;
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,8 @@ struct gsm_network *gsm_network_init(uint16_t country_code, uint16_t network_cod
|
|||||||
INIT_LLIST_HEAD(&net->bts_list);
|
INIT_LLIST_HEAD(&net->bts_list);
|
||||||
|
|
||||||
/* init statistics */
|
/* init statistics */
|
||||||
net->ratectrs = rate_ctr_group_alloc(net, &msc_ctrg_desc, 0);
|
net->bsc_ctrs = rate_ctr_group_alloc(net, &bsc_ctrg_desc, 0);
|
||||||
|
net->bsc_ctrs = rate_ctr_group_alloc(net, &msc_ctrg_desc, 0);
|
||||||
|
|
||||||
net->mncc_recv = mncc_recv;
|
net->mncc_recv = mncc_recv;
|
||||||
net->ext_min = GSM_MIN_EXTEN;
|
net->ext_min = GSM_MIN_EXTEN;
|
||||||
|
|||||||
@@ -260,7 +260,7 @@ static void paging_T3113_expired(void *data)
|
|||||||
req, req->subscr->imsi);
|
req, req->subscr->imsi);
|
||||||
|
|
||||||
/* must be destroyed before calling cbfn, to prevent double free */
|
/* must be destroyed before calling cbfn, to prevent double free */
|
||||||
rate_ctr_inc(&req->bts->network->ratectrs->ctr[MSC_CTR_PAGING_EXPIRED]);
|
rate_ctr_inc(&req->bts->network->bsc_ctrs->ctr[BSC_CTR_PAGING_EXPIRED]);
|
||||||
cbfn_param = req->cbfn_param;
|
cbfn_param = req->cbfn_param;
|
||||||
cbfn = req->cbfn;
|
cbfn = req->cbfn;
|
||||||
|
|
||||||
@@ -330,7 +330,7 @@ int paging_request(struct gsm_network *network, struct gsm_subscriber *subscr,
|
|||||||
struct gsm_bts *bts = NULL;
|
struct gsm_bts *bts = NULL;
|
||||||
int num_pages = 0;
|
int num_pages = 0;
|
||||||
|
|
||||||
rate_ctr_inc(&network->ratectrs->ctr[MSC_CTR_PAGING_ATTEMPTED]);
|
rate_ctr_inc(&network->bsc_ctrs->ctr[BSC_CTR_PAGING_ATTEMPTED]);
|
||||||
|
|
||||||
/* start paging subscriber on all BTS within Location Area */
|
/* start paging subscriber on all BTS within Location Area */
|
||||||
do {
|
do {
|
||||||
@@ -349,7 +349,7 @@ int paging_request(struct gsm_network *network, struct gsm_subscriber *subscr,
|
|||||||
} while (1);
|
} while (1);
|
||||||
|
|
||||||
if (num_pages == 0)
|
if (num_pages == 0)
|
||||||
rate_ctr_inc(&network->ratectrs->ctr[MSC_CTR_PAGING_DETACHED]);
|
rate_ctr_inc(&network->bsc_ctrs->ctr[BSC_CTR_PAGING_DETACHED]);
|
||||||
|
|
||||||
return num_pages;
|
return num_pages;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -457,7 +457,7 @@ int gsm0408_loc_upd_rej(struct gsm_subscriber_connection *conn, uint8_t cause)
|
|||||||
struct gsm_bts *bts = conn->bts;
|
struct gsm_bts *bts = conn->bts;
|
||||||
struct msgb *msg;
|
struct msgb *msg;
|
||||||
|
|
||||||
rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_LOC_UPDATE_RESP_REJECT]);
|
rate_ctr_inc(&bts->network->msc_ctrs->ctr[MSC_CTR_LOC_UPDATE_RESP_REJECT]);
|
||||||
|
|
||||||
msg = gsm48_create_loc_upd_rej(cause);
|
msg = gsm48_create_loc_upd_rej(cause);
|
||||||
if (!msg) {
|
if (!msg) {
|
||||||
@@ -506,7 +506,7 @@ static int gsm0408_loc_upd_acc(struct gsm_subscriber_connection *conn)
|
|||||||
|
|
||||||
DEBUGP(DMM, "-> LOCATION UPDATE ACCEPT\n");
|
DEBUGP(DMM, "-> LOCATION UPDATE ACCEPT\n");
|
||||||
|
|
||||||
rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_LOC_UPDATE_RESP_ACCEPT]);
|
rate_ctr_inc(&bts->network->msc_ctrs->ctr[MSC_CTR_LOC_UPDATE_RESP_ACCEPT]);
|
||||||
|
|
||||||
return gsm48_conn_sendmsg(msg, conn, NULL);
|
return gsm48_conn_sendmsg(msg, conn, NULL);
|
||||||
}
|
}
|
||||||
@@ -637,13 +637,13 @@ static int mm_rx_loc_upd_req(struct gsm_subscriber_connection *conn, struct msgb
|
|||||||
|
|
||||||
switch (lu->type) {
|
switch (lu->type) {
|
||||||
case GSM48_LUPD_NORMAL:
|
case GSM48_LUPD_NORMAL:
|
||||||
rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_NORMAL]);
|
rate_ctr_inc(&bts->network->msc_ctrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_NORMAL]);
|
||||||
break;
|
break;
|
||||||
case GSM48_LUPD_IMSI_ATT:
|
case GSM48_LUPD_IMSI_ATT:
|
||||||
rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_ATTACH]);
|
rate_ctr_inc(&bts->network->msc_ctrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_ATTACH]);
|
||||||
break;
|
break;
|
||||||
case GSM48_LUPD_PERIODIC:
|
case GSM48_LUPD_PERIODIC:
|
||||||
rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_PERIODIC]);
|
rate_ctr_inc(&bts->network->msc_ctrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_PERIODIC]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1063,7 +1063,7 @@ static int gsm48_rx_mm_imsi_detach_ind(struct gsm_subscriber_connection *conn, s
|
|||||||
DEBUGP(DMM, "IMSI DETACH INDICATION: MI(%s)=%s",
|
DEBUGP(DMM, "IMSI DETACH INDICATION: MI(%s)=%s",
|
||||||
gsm48_mi_type_name(mi_type), mi_string);
|
gsm48_mi_type_name(mi_type), mi_string);
|
||||||
|
|
||||||
rate_ctr_inc(&bts->network->ratectrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_DETACH]);
|
rate_ctr_inc(&bts->network->msc_ctrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_DETACH]);
|
||||||
|
|
||||||
switch (mi_type) {
|
switch (mi_type) {
|
||||||
case GSM_MI_TYPE_TMSI:
|
case GSM_MI_TYPE_TMSI:
|
||||||
@@ -2002,7 +2002,7 @@ static int gsm48_cc_rx_setup(struct gsm_trans *trans, struct msgb *msg)
|
|||||||
subscr_name(trans->subscr), trans->subscr->extension,
|
subscr_name(trans->subscr), trans->subscr->extension,
|
||||||
setup.called.number);
|
setup.called.number);
|
||||||
|
|
||||||
rate_ctr_inc(&trans->net->ratectrs->ctr[MSC_CTR_CALL_MO_SETUP]);
|
rate_ctr_inc(&trans->net->msc_ctrs->ctr[MSC_CTR_CALL_MO_SETUP]);
|
||||||
|
|
||||||
/* indicate setup to MNCC */
|
/* indicate setup to MNCC */
|
||||||
mncc_recvmsg(trans->net, trans, MNCC_SETUP_IND, &setup);
|
mncc_recvmsg(trans->net, trans, MNCC_SETUP_IND, &setup);
|
||||||
@@ -2080,7 +2080,7 @@ static int gsm48_cc_tx_setup(struct gsm_trans *trans, void *arg)
|
|||||||
|
|
||||||
new_cc_state(trans, GSM_CSTATE_CALL_PRESENT);
|
new_cc_state(trans, GSM_CSTATE_CALL_PRESENT);
|
||||||
|
|
||||||
rate_ctr_inc(&trans->net->ratectrs->ctr[MSC_CTR_CALL_MT_SETUP]);
|
rate_ctr_inc(&trans->net->msc_ctrs->ctr[MSC_CTR_CALL_MT_SETUP]);
|
||||||
|
|
||||||
return gsm48_conn_sendmsg(msg, trans->conn, trans);
|
return gsm48_conn_sendmsg(msg, trans->conn, trans);
|
||||||
}
|
}
|
||||||
@@ -2306,7 +2306,7 @@ static int gsm48_cc_rx_connect(struct gsm_trans *trans, struct msgb *msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
new_cc_state(trans, GSM_CSTATE_CONNECT_REQUEST);
|
new_cc_state(trans, GSM_CSTATE_CONNECT_REQUEST);
|
||||||
rate_ctr_inc(&trans->net->ratectrs->ctr[MSC_CTR_CALL_MT_CONNECT]);
|
rate_ctr_inc(&trans->net->msc_ctrs->ctr[MSC_CTR_CALL_MT_CONNECT]);
|
||||||
|
|
||||||
return mncc_recvmsg(trans->net, trans, MNCC_SETUP_CNF, &connect);
|
return mncc_recvmsg(trans->net, trans, MNCC_SETUP_CNF, &connect);
|
||||||
}
|
}
|
||||||
@@ -2319,7 +2319,7 @@ static int gsm48_cc_rx_connect_ack(struct gsm_trans *trans, struct msgb *msg)
|
|||||||
gsm48_stop_cc_timer(trans);
|
gsm48_stop_cc_timer(trans);
|
||||||
|
|
||||||
new_cc_state(trans, GSM_CSTATE_ACTIVE);
|
new_cc_state(trans, GSM_CSTATE_ACTIVE);
|
||||||
rate_ctr_inc(&trans->net->ratectrs->ctr[MSC_CTR_CALL_MO_CONNECT_ACK]);
|
rate_ctr_inc(&trans->net->msc_ctrs->ctr[MSC_CTR_CALL_MO_CONNECT_ACK]);
|
||||||
|
|
||||||
memset(&connect_ack, 0, sizeof(struct gsm_mncc));
|
memset(&connect_ack, 0, sizeof(struct gsm_mncc));
|
||||||
connect_ack.callref = trans->callref;
|
connect_ack.callref = trans->callref;
|
||||||
|
|||||||
@@ -310,21 +310,21 @@ try_local:
|
|||||||
#ifdef BUILD_SMPP
|
#ifdef BUILD_SMPP
|
||||||
/* Avoid a second look-up */
|
/* Avoid a second look-up */
|
||||||
if (smpp_first) {
|
if (smpp_first) {
|
||||||
rate_ctr_inc(&conn->bts->network->ratectrs->ctr[MSC_CTR_SMS_NO_RECEIVER]);
|
rate_ctr_inc(&conn->bts->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]);
|
||||||
return 1; /* cause 1: unknown subscriber */
|
return 1; /* cause 1: unknown subscriber */
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = smpp_try_deliver(gsms, conn);
|
rc = smpp_try_deliver(gsms, conn);
|
||||||
if (rc == 1) {
|
if (rc == 1) {
|
||||||
rc = 1; /* cause 1: unknown subscriber */
|
rc = 1; /* cause 1: unknown subscriber */
|
||||||
rate_ctr_inc(&conn->bts->network->ratectrs->ctr[MSC_CTR_SMS_NO_RECEIVER]);
|
rate_ctr_inc(&conn->bts->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]);
|
||||||
} else if (rc < 0) {
|
} else if (rc < 0) {
|
||||||
rc = 21; /* cause 21: short message transfer rejected */
|
rc = 21; /* cause 21: short message transfer rejected */
|
||||||
/* FIXME: handle the error somehow? */
|
/* FIXME: handle the error somehow? */
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
rc = 1; /* cause 1: unknown subscriber */
|
rc = 1; /* cause 1: unknown subscriber */
|
||||||
rate_ctr_inc(&conn->bts->network->ratectrs->ctr[MSC_CTR_SMS_NO_RECEIVER]);
|
rate_ctr_inc(&conn->bts->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]);
|
||||||
#endif
|
#endif
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@@ -365,7 +365,7 @@ static int gsm340_rx_tpdu(struct gsm_subscriber_connection *conn, struct msgb *m
|
|||||||
uint8_t address_lv[12]; /* according to 03.40 / 9.1.2.5 */
|
uint8_t address_lv[12]; /* according to 03.40 / 9.1.2.5 */
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
rate_ctr_inc(&conn->bts->network->ratectrs->ctr[MSC_CTR_SMS_SUBMITTED]);
|
rate_ctr_inc(&conn->bts->network->msc_ctrs->ctr[MSC_CTR_SMS_SUBMITTED]);
|
||||||
|
|
||||||
gsms = sms_alloc();
|
gsms = sms_alloc();
|
||||||
if (!gsms)
|
if (!gsms)
|
||||||
@@ -635,10 +635,10 @@ static int gsm411_rx_rp_error(struct msgb *msg, struct gsm_trans *trans,
|
|||||||
* to store this in our database and wait for a SMMA message */
|
* to store this in our database and wait for a SMMA message */
|
||||||
/* FIXME */
|
/* FIXME */
|
||||||
send_signal(S_SMS_MEM_EXCEEDED, trans, sms, 0);
|
send_signal(S_SMS_MEM_EXCEEDED, trans, sms, 0);
|
||||||
rate_ctr_inc(&net->ratectrs->ctr[MSC_CTR_SMS_RP_ERR_MEM]);
|
rate_ctr_inc(&net->msc_ctrs->ctr[MSC_CTR_SMS_RP_ERR_MEM]);
|
||||||
} else {
|
} else {
|
||||||
send_signal(S_SMS_UNKNOWN_ERROR, trans, sms, 0);
|
send_signal(S_SMS_UNKNOWN_ERROR, trans, sms, 0);
|
||||||
rate_ctr_inc(&net->ratectrs->ctr[MSC_CTR_SMS_RP_ERR_OTHER]);
|
rate_ctr_inc(&net->msc_ctrs->ctr[MSC_CTR_SMS_RP_ERR_OTHER]);
|
||||||
}
|
}
|
||||||
|
|
||||||
sms_free(sms);
|
sms_free(sms);
|
||||||
@@ -934,7 +934,7 @@ int gsm411_send_sms(struct gsm_subscriber_connection *conn, struct gsm_sms *sms)
|
|||||||
|
|
||||||
DEBUGP(DLSMS, "TX: SMS DELIVER\n");
|
DEBUGP(DLSMS, "TX: SMS DELIVER\n");
|
||||||
|
|
||||||
rate_ctr_inc(&conn->bts->network->ratectrs->ctr[MSC_CTR_SMS_DELIVERED]);
|
rate_ctr_inc(&conn->bts->network->msc_ctrs->ctr[MSC_CTR_SMS_DELIVERED]);
|
||||||
db_sms_inc_deliver_attempts(trans->sms.sms);
|
db_sms_inc_deliver_attempts(trans->sms.sms);
|
||||||
|
|
||||||
return gsm411_rp_sendmsg(&trans->sms.smr_inst, msg,
|
return gsm411_rp_sendmsg(&trans->sms.smr_inst, msg,
|
||||||
|
|||||||
@@ -795,41 +795,41 @@ DEFUN(show_stats,
|
|||||||
|
|
||||||
openbsc_vty_print_statistics(vty, net);
|
openbsc_vty_print_statistics(vty, net);
|
||||||
vty_out(vty, "Location Update : %lu attach, %lu normal, %lu periodic%s",
|
vty_out(vty, "Location Update : %lu attach, %lu normal, %lu periodic%s",
|
||||||
net->ratectrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_ATTACH].current,
|
net->msc_ctrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_ATTACH].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_NORMAL].current,
|
net->msc_ctrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_NORMAL].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_PERIODIC].current,
|
net->msc_ctrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_PERIODIC].current,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
vty_out(vty, "IMSI Detach Indications : %lu%s",
|
vty_out(vty, "IMSI Detach Indications : %lu%s",
|
||||||
net->ratectrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_DETACH].current,
|
net->msc_ctrs->ctr[MSC_CTR_LOC_UPDATE_TYPE_DETACH].current,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
vty_out(vty, "Location Update Response: %lu accept, %lu reject%s",
|
vty_out(vty, "Location Update Response: %lu accept, %lu reject%s",
|
||||||
net->ratectrs->ctr[MSC_CTR_LOC_UPDATE_RESP_ACCEPT].current,
|
net->msc_ctrs->ctr[MSC_CTR_LOC_UPDATE_RESP_ACCEPT].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_LOC_UPDATE_RESP_REJECT].current,
|
net->msc_ctrs->ctr[MSC_CTR_LOC_UPDATE_RESP_REJECT].current,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
vty_out(vty, "Handover : %lu attempted, %lu no_channel, %lu timeout, "
|
vty_out(vty, "Handover : %lu attempted, %lu no_channel, %lu timeout, "
|
||||||
"%lu completed, %lu failed%s",
|
"%lu completed, %lu failed%s",
|
||||||
net->ratectrs->ctr[MSC_CTR_HANDOVER_ATTEMPTED].current,
|
net->msc_ctrs->ctr[BSC_CTR_HANDOVER_ATTEMPTED].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_HANDOVER_NO_CHANNEL].current,
|
net->msc_ctrs->ctr[BSC_CTR_HANDOVER_NO_CHANNEL].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_HANDOVER_TIMEOUT].current,
|
net->msc_ctrs->ctr[BSC_CTR_HANDOVER_TIMEOUT].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_HANDOVER_COMPLETED].current,
|
net->msc_ctrs->ctr[BSC_CTR_HANDOVER_COMPLETED].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_HANDOVER_FAILED].current,
|
net->msc_ctrs->ctr[BSC_CTR_HANDOVER_FAILED].current,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
vty_out(vty, "SMS MO : %lu submitted, %lu no receiver%s",
|
vty_out(vty, "SMS MO : %lu submitted, %lu no receiver%s",
|
||||||
net->ratectrs->ctr[MSC_CTR_SMS_SUBMITTED].current,
|
net->msc_ctrs->ctr[MSC_CTR_SMS_SUBMITTED].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_SMS_NO_RECEIVER].current,
|
net->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER].current,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
vty_out(vty, "SMS MT : %lu delivered, %lu no memory, %lu other error%s",
|
vty_out(vty, "SMS MT : %lu delivered, %lu no memory, %lu other error%s",
|
||||||
net->ratectrs->ctr[MSC_CTR_SMS_DELIVERED].current,
|
net->msc_ctrs->ctr[MSC_CTR_SMS_DELIVERED].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_SMS_RP_ERR_MEM].current,
|
net->msc_ctrs->ctr[MSC_CTR_SMS_RP_ERR_MEM].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_SMS_RP_ERR_OTHER].current,
|
net->msc_ctrs->ctr[MSC_CTR_SMS_RP_ERR_OTHER].current,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
vty_out(vty, "MO Calls : %lu setup, %lu connect ack%s",
|
vty_out(vty, "MO Calls : %lu setup, %lu connect ack%s",
|
||||||
net->ratectrs->ctr[MSC_CTR_CALL_MO_SETUP].current,
|
net->msc_ctrs->ctr[MSC_CTR_CALL_MO_SETUP].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_CALL_MO_CONNECT_ACK].current,
|
net->msc_ctrs->ctr[MSC_CTR_CALL_MO_CONNECT_ACK].current,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
vty_out(vty, "MT Calls : %lu setup, %lu connect%s",
|
vty_out(vty, "MT Calls : %lu setup, %lu connect%s",
|
||||||
net->ratectrs->ctr[MSC_CTR_CALL_MT_SETUP].current,
|
net->msc_ctrs->ctr[MSC_CTR_CALL_MT_SETUP].current,
|
||||||
net->ratectrs->ctr[MSC_CTR_CALL_MT_CONNECT].current,
|
net->msc_ctrs->ctr[MSC_CTR_CALL_MT_CONNECT].current,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user