drop CC 'local-prefix' feature

It is not entirely clear to me what this used to do once, but I've stumbled
upon this before. By now I am certain that this is a non-standard legacy
feature. The BSC does *not* redirect connections during CC transactions.

Along with this, a bunch of legacy utility functions can be dropped. All of
this is unused code.

(Preparing for MSC pooling.)

Change-Id: Id54afe8ccf0e11b9121a733224054c9565eafb58
This commit is contained in:
Neels Hofmeyr 2020-05-22 00:29:16 +02:00 committed by neels
parent 962cb637fc
commit bf4134edaf
5 changed files with 0 additions and 180 deletions

View File

@ -45,7 +45,6 @@
#include <osmocom/core/fsm.h>
#include <osmocom/gsm/gsm23003.h>
#include <regex.h>
#include <errno.h>
struct osmo_bsc_rf;
@ -121,11 +120,6 @@ struct bsc_msc_data {
int allow_emerg;
int type;
/* local call routing */
char *local_pref;
regex_t local_pref_reg;
/* Connection data */
struct osmo_plmn_id core_plmn;
int core_lac;

View File

@ -2,7 +2,6 @@
#define _GSM_DATA_H
#include <stdint.h>
#include <regex.h>
#include <sys/types.h>
#include <stdbool.h>
#include <stdint.h>
@ -1362,12 +1361,6 @@ void gsm48_lchan2chan_desc_as_configured(struct gsm48_chan_desc *cd, const struc
/* return the gsm_lchan for the CBCH (if it exists at all) */
struct gsm_lchan *gsm_bts_get_cbch(struct gsm_bts *bts);
/*
* help with parsing regexps
*/
int gsm_parse_reg(void *ctx, regex_t *reg, char **str,
int argc, const char **argv) __attribute__ ((warn_unused_result));
static inline uint8_t gsm_ts_tsc(const struct gsm_bts_trx_ts *ts)
{
if (ts->tsc != -1)

View File

@ -475,96 +475,6 @@ early_fail:
return false;
}
static int bsc_clear_request(struct gsm_subscriber_connection *conn, uint32_t cause);
/*
* Plastic surgery... we want to give up the current connection
*/
static int move_to_msc(struct gsm_subscriber_connection *_conn,
struct msgb *msg, struct bsc_msc_data *msc)
{
/*
* 1. Give up the old connection.
* This happens by sending a clear request to the MSC,
* it should end with the MSC releasing the connection.
*/
bsc_clear_request(_conn, 0);
/*
* 2. Attempt to create a new connection to the local
* MSC. If it fails the caller will need to handle this
* properly.
*/
if (!complete_layer3(_conn, msg, msc)) {
/* FIXME: I have not the slightest idea what move_to_msc() intends to do; during lchan
* FSM introduction, I changed this and hope it is the appropriate action. I actually
* assume this is unused legacy code for osmo-bsc_nat?? */
gscon_release_lchans(_conn, false);
return 1;
}
return 2;
}
static int handle_cc_setup(struct gsm_subscriber_connection *conn,
struct msgb *msg)
{
struct gsm48_hdr *gh = msgb_l3(msg);
uint8_t pdisc = gsm48_hdr_pdisc(gh);
uint8_t mtype = gsm48_hdr_msg_type(gh);
struct bsc_msc_data *msc;
struct gsm_mncc_number called;
struct tlv_parsed tp;
unsigned payload_len;
char _dest_nr[35];
/*
* Do we have a setup message here? if not return fast.
*/
if (pdisc != GSM48_PDISC_CC || mtype != GSM48_MT_CC_SETUP)
return 0;
payload_len = msgb_l3len(msg) - sizeof(*gh);
tlv_parse(&tp, &gsm48_att_tlvdef, gh->data, payload_len, 0, 0);
if (!TLVP_PRESENT(&tp, GSM48_IE_CALLED_BCD)) {
LOGP(DMSC, LOGL_ERROR, "Called BCD not present in setup.\n");
return -1;
}
memset(&called, 0, sizeof(called));
gsm48_decode_called(&called,
TLVP_VAL(&tp, GSM48_IE_CALLED_BCD) - 1);
if (called.plan != 1 && called.plan != 0)
return 0;
if (called.plan == 1 && called.type == 1) {
_dest_nr[0] = _dest_nr[1] = '0';
memcpy(_dest_nr + 2, called.number, sizeof(called.number));
} else
memcpy(_dest_nr, called.number, sizeof(called.number));
/*
* Check if the connection should be moved...
*/
llist_for_each_entry(msc, &conn_get_bts(conn)->network->bsc_data->mscs, entry) {
if (msc->type != MSC_CON_TYPE_LOCAL)
continue;
if (!msc->local_pref)
continue;
if (regexec(&msc->local_pref_reg, _dest_nr, 0, NULL, 0) != 0)
continue;
return move_to_msc(conn, msg, msc);
}
return 0;
}
/*! MS->BSC/MSC: Um L3 message. */
void bsc_dtap(struct gsm_subscriber_connection *conn, uint8_t link_id, struct msgb *msg)
{
@ -575,13 +485,6 @@ void bsc_dtap(struct gsm_subscriber_connection *conn, uint8_t link_id, struct ms
LOGP(DMSC, LOGL_INFO, "Tx MSC DTAP LINK_ID=0x%02x\n", link_id);
/*
* We might want to move this connection to a new MSC. Ask someone
* to handle it. If it was handled we will return.
*/
if (handle_cc_setup(conn, msg) >= 1)
goto done;
bsc_scan_bts_msg(conn, msg);
/* Store link_id in msg->cb */
@ -592,31 +495,6 @@ done:
return;
}
/*! BSSMAP Clear Request for legacy code paths, instead see gscon_bssmap_clear(). */
static int bsc_clear_request(struct gsm_subscriber_connection *conn, uint32_t cause)
{
int rc;
struct msgb *resp;
if (!msc_connected(conn))
return 1;
LOGP(DMSC, LOGL_INFO, "Tx MSC CLEAR REQUEST\n");
resp = gsm0808_create_clear_rqst(GSM0808_CAUSE_RADIO_INTERFACE_FAILURE);
if (!resp) {
LOGP(DMSC, LOGL_ERROR, "Failed to allocate response.\n");
return 1;
}
rate_ctr_inc(&conn->sccp.msc->msc_ctrs->ctr[MSC_CTR_BSSMAP_TX_DT1_CLEAR_RQST]);
rc = osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_TX_SCCP, resp);
if (rc != 0)
msgb_free(resp);
return 1;
}
/*! BSC->MSC: Classmark Update. */
void bsc_cm_update(struct gsm_subscriber_connection *conn,
const uint8_t *cm2, uint8_t cm2_len,

View File

@ -248,31 +248,6 @@ void gsm48_ra_id_by_bts(struct gsm48_ra_id *buf, struct gsm_bts *bts)
gsm48_encode_ra(buf, &raid);
}
int gsm_parse_reg(void *ctx, regex_t *reg, char **str, int argc, const char **argv)
{
int ret;
ret = 0;
if (*str) {
talloc_free(*str);
*str = NULL;
}
regfree(reg);
if (argc > 0) {
*str = talloc_strdup(ctx, argv[0]);
ret = regcomp(reg, argv[0], REG_NOSUB);
/* handle compilation failures */
if (ret != 0) {
talloc_free(*str);
*str = NULL;
}
}
return ret;
}
/* Assume there are only 256 possible bts */
osmo_static_assert(sizeof(((struct gsm_bts *) 0)->nr) == 1, _bts_nr_is_256);
static void depends_calc_index_bit(int bts_nr, int *idx, int *bit)

View File

@ -157,9 +157,6 @@ static void write_msc(struct vty *vty, struct bsc_msc_data *msc)
vty_out(vty, " allow-emergency %s%s", msc->allow_emerg ?
"allow" : "deny", VTY_NEWLINE);
if (msc->local_pref)
vty_out(vty, " local-prefix %s%s", msc->local_pref, VTY_NEWLINE);
/* write amr options */
write_msc_amr_options(vty, msc);
@ -482,22 +479,6 @@ DEFUN(cfg_net_msc_emerg,
return CMD_SUCCESS;
}
DEFUN(cfg_net_msc_local_prefix,
cfg_net_msc_local_prefix_cmd,
"local-prefix REGEXP",
"Prefix for local numbers\n" "REGEXP used\n")
{
struct bsc_msc_data *msc = bsc_msc_data(vty);
if (gsm_parse_reg(msc, &msc->local_pref_reg, &msc->local_pref, argc, argv) != 0) {
vty_out(vty, "%%Failed to parse the regexp: '%s'%s",
argv[0], VTY_NEWLINE);
return CMD_WARNING;
}
return CMD_SUCCESS;
}
#define AMR_CONF_STR "AMR Multirate Configuration\n"
#define AMR_COMMAND(name) \
DEFUN(cfg_net_msc_amr_##name, \
@ -961,7 +942,6 @@ int bsc_vty_init_extra(void)
install_element(MSC_NODE, &cfg_net_msc_no_grace_ussd_cmd);
install_element(MSC_NODE, &cfg_net_msc_type_cmd);
install_element(MSC_NODE, &cfg_net_msc_emerg_cmd);
install_element(MSC_NODE, &cfg_net_msc_local_prefix_cmd);
install_element(MSC_NODE, &cfg_net_msc_amr_12_2_cmd);
install_element(MSC_NODE, &cfg_net_msc_amr_10_2_cmd);
install_element(MSC_NODE, &cfg_net_msc_amr_7_95_cmd);