chan: Add configuration to handle paging any with TCH
It is possible that the MSC is not sending the channel type it needs for the operations it wants to do. Add a configuration option to assign a TCH in case of paging any requests. It can be a good idea to leave SDCCHs free for location updating requests and use the TCH for SMS-MT and CC-MT.
This commit is contained in:
parent
f0f37f1816
commit
b6b9d70448
|
@ -715,6 +715,9 @@ struct gsm_network {
|
|||
|
||||
enum gsm_chan_t ctype_by_chreq[16];
|
||||
|
||||
/* Use a TCH for handling requests of type paging any */
|
||||
int pag_any_tch;
|
||||
|
||||
int msc_prio;
|
||||
};
|
||||
|
||||
|
|
|
@ -164,6 +164,8 @@ static void net_dump_vty(struct vty *vty, struct gsm_network *net)
|
|||
VTY_NEWLINE);
|
||||
vty_out(vty, " NECI (TCH/H): %u%s", net->neci,
|
||||
VTY_NEWLINE);
|
||||
vty_out(vty, " Use TCH for Paging any: %d%s", net->pag_any_tch,
|
||||
VTY_NEWLINE);
|
||||
vty_out(vty, " RRLP Mode: %s%s", rrlp_mode_name(net->rrlp.mode),
|
||||
VTY_NEWLINE);
|
||||
vty_out(vty, " MM Info: %s%s", net->send_mm_info ? "On" : "Off",
|
||||
|
@ -478,6 +480,7 @@ static int config_write_net(struct vty *vty)
|
|||
gsmnet->reject_cause, VTY_NEWLINE);
|
||||
vty_out(vty, " encryption a5 %u%s", gsmnet->a5_encryption, VTY_NEWLINE);
|
||||
vty_out(vty, " neci %u%s", gsmnet->neci, VTY_NEWLINE);
|
||||
vty_out(vty, " paging any use tch %d%s", gsmnet->pag_any_tch, VTY_NEWLINE);
|
||||
vty_out(vty, " rrlp mode %s%s", rrlp_mode_name(gsmnet->rrlp.mode),
|
||||
VTY_NEWLINE);
|
||||
vty_out(vty, " mm info %u%s", gsmnet->send_mm_info, VTY_NEWLINE);
|
||||
|
@ -1247,6 +1250,16 @@ DEFUN(cfg_net_ho_max_distance, cfg_net_ho_max_distance_cmd,
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN(cfg_net_pag_any_tch,
|
||||
cfg_net_pag_any_tch_cmd,
|
||||
"paging any use tch (0|1)",
|
||||
"Assign a TCH when receiving a Paging Any request")
|
||||
{
|
||||
gsmnet->pag_any_tch = atoi(argv[0]);
|
||||
gsm_net_update_ctype(gsmnet);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
#define DECLARE_TIMER(number, doc) \
|
||||
DEFUN(cfg_net_T##number, \
|
||||
cfg_net_T##number##_cmd, \
|
||||
|
@ -2298,6 +2311,7 @@ int bsc_vty_init(void)
|
|||
install_element(GSMNET_NODE, &cfg_net_T3119_cmd);
|
||||
install_element(GSMNET_NODE, &cfg_net_T3141_cmd);
|
||||
install_element(GSMNET_NODE, &cfg_net_dtx_cmd);
|
||||
install_element(GSMNET_NODE, &cfg_net_pag_any_tch_cmd);
|
||||
|
||||
install_element(GSMNET_NODE, &cfg_bts_cmd);
|
||||
install_node(&bts_node, config_write_bts);
|
||||
|
|
|
@ -153,6 +153,16 @@ void gsm_net_update_ctype(struct gsm_network *network)
|
|||
*/
|
||||
if (network->neci)
|
||||
network->ctype_by_chreq[CHREQ_T_EMERG_CALL] = GSM_LCHAN_TCH_H;
|
||||
|
||||
if (network->pag_any_tch) {
|
||||
if (network->neci) {
|
||||
network->ctype_by_chreq[CHREQ_T_PAG_R_ANY_NECI0] = GSM_LCHAN_TCH_H;
|
||||
network->ctype_by_chreq[CHREQ_T_PAG_R_ANY_NECI1] = GSM_LCHAN_TCH_H;
|
||||
} else {
|
||||
network->ctype_by_chreq[CHREQ_T_PAG_R_ANY_NECI0] = GSM_LCHAN_TCH_F;
|
||||
network->ctype_by_chreq[CHREQ_T_PAG_R_ANY_NECI1] = GSM_LCHAN_TCH_F;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum gsm_chan_t get_ctype_by_chreq(struct gsm_network *network, u_int8_t ra)
|
||||
|
|
Loading…
Reference in New Issue