From 2677218846ebd1c99ddc8de69e07b1a6495d66b4 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Mon, 15 Aug 2011 15:53:00 +0200 Subject: bsc: Create a osmo_bsc_data and embed osmo_msc_data We want to have multiple MSCs but we also have some data that is only present on a per BSC basis. Right now the MSC data is not allocated with talloc, so we have some change in the talloc contexts. --- openbsc/include/openbsc/gsm_data.h | 2 +- openbsc/include/openbsc/gsm_data_shared.h | 2 +- openbsc/include/openbsc/osmo_msc_data.h | 16 +++++-- openbsc/src/libbsc/bsc_vty.c | 4 +- openbsc/src/libcommon/gsm_data.c | 19 ++++---- openbsc/src/osmo-bsc/osmo_bsc_api.c | 12 ++--- openbsc/src/osmo-bsc/osmo_bsc_bssap.c | 13 +++--- openbsc/src/osmo-bsc/osmo_bsc_ctrl.c | 2 +- openbsc/src/osmo-bsc/osmo_bsc_filter.c | 12 ++--- openbsc/src/osmo-bsc/osmo_bsc_grace.c | 8 ++-- openbsc/src/osmo-bsc/osmo_bsc_main.c | 12 ++--- openbsc/src/osmo-bsc/osmo_bsc_msc.c | 2 +- openbsc/src/osmo-bsc/osmo_bsc_rf.c | 10 ++-- openbsc/src/osmo-bsc/osmo_bsc_sccp.c | 12 ++--- openbsc/src/osmo-bsc/osmo_bsc_vty.c | 78 +++++++++++++++++-------------- 15 files changed, 112 insertions(+), 92 deletions(-) diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h index a5244da81..a08f831ad 100644 --- a/openbsc/include/openbsc/gsm_data.h +++ b/openbsc/include/openbsc/gsm_data.h @@ -282,7 +282,7 @@ struct gsm_network { int pag_any_tch; /* MSC data in case we are a true BSC */ - struct osmo_msc_data *msc_data; + struct osmo_bsc_data *bsc_data; int hardcoded_rtp_payload; /* subscriber related features */ diff --git a/openbsc/include/openbsc/gsm_data_shared.h b/openbsc/include/openbsc/gsm_data_shared.h index 80e953ff0..3b074b85f 100644 --- a/openbsc/include/openbsc/gsm_data_shared.h +++ b/openbsc/include/openbsc/gsm_data_shared.h @@ -17,7 +17,7 @@ #include #include -struct osmo_msc_data; +struct osmo_bsc_data; struct osmo_bsc_sccp_con; struct gsm_sms_queue; diff --git a/openbsc/include/openbsc/osmo_msc_data.h b/openbsc/include/openbsc/osmo_msc_data.h index 59b75c303..6f9f3a2b0 100644 --- a/openbsc/include/openbsc/osmo_msc_data.h +++ b/openbsc/include/openbsc/osmo_msc_data.h @@ -57,20 +57,30 @@ struct osmo_msc_data { /* destinations */ struct llist_head dests; + /* ussd welcome text */ + char *ussd_welcome_txt; /* mgcp agent */ struct osmo_wqueue mgcp_agent; +}; + +/* + * Per BSC data. + */ +struct osmo_bsc_data { + struct gsm_network *network; + + /* msc configuration */ + struct osmo_msc_data msc; /* rf ctl related bits */ char *mid_call_txt; int mid_call_timeout; char *rf_ctrl_name; struct osmo_bsc_rf *rf_ctrl; - - /* ussd welcome text */ - char *ussd_welcome_txt; }; + int osmo_bsc_msc_init(struct gsm_network *network); int osmo_bsc_sccp_init(struct gsm_network *gsmnet); int msc_queue_write(struct bsc_msc_connection *conn, struct msgb *msg, int proto); diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c index 26ed7d9f4..b3ad5c2b0 100644 --- a/openbsc/src/libbsc/bsc_vty.c +++ b/openbsc/src/libbsc/bsc_vty.c @@ -189,9 +189,9 @@ static void net_dump_vty(struct vty *vty, struct gsm_network *net) dump_pchan_load_vty(vty, " ", &pl); /* show rf */ - if (net->msc_data && net->msc_data->rf_ctrl) + if (net->bsc_data && net->bsc_data->rf_ctrl) vty_out(vty, " Last RF Command: %s%s", - net->msc_data->rf_ctrl->last_state_command, + net->bsc_data->rf_ctrl->last_state_command, VTY_NEWLINE); } diff --git a/openbsc/src/libcommon/gsm_data.c b/openbsc/src/libcommon/gsm_data.c index 3cc0c13bc..1f5b86456 100644 --- a/openbsc/src/libcommon/gsm_data.c +++ b/openbsc/src/libcommon/gsm_data.c @@ -79,14 +79,14 @@ struct gsm_network *gsm_network_init(uint16_t country_code, uint16_t network_cod if (!net) return NULL; - net->msc_data = talloc_zero(net, struct osmo_msc_data); - if (!net->msc_data) { + net->bsc_data = talloc_zero(net, struct osmo_bsc_data); + if (!net->bsc_data) { talloc_free(net); return NULL; } /* Init back pointer */ - net->msc_data->network = net; + net->bsc_data->network = net; net->country_code = country_code; net->network_code = network_code; @@ -141,12 +141,13 @@ struct gsm_network *gsm_network_init(uint16_t country_code, uint16_t network_cod net->mncc_recv = mncc_recv; - INIT_LLIST_HEAD(&net->msc_data->dests); - net->msc_data->ping_timeout = 20; - net->msc_data->pong_timeout = 5; - net->msc_data->core_ncc = -1; - net->msc_data->core_mcc = -1; - net->msc_data->rtp_base = 4000; + INIT_LLIST_HEAD(&net->bsc_data->msc.dests); + net->bsc_data->msc.ping_timeout = 20; + net->bsc_data->msc.pong_timeout = 5; + net->bsc_data->msc.core_ncc = -1; + net->bsc_data->msc.core_mcc = -1; + net->bsc_data->msc.rtp_base = 4000; + net->bsc_data->msc.network = net; gsm_net_update_ctype(net); diff --git a/openbsc/src/osmo-bsc/osmo_bsc_api.c b/openbsc/src/osmo-bsc/osmo_bsc_api.c index d02b0b5e4..9cb0f9ee3 100644 --- a/openbsc/src/osmo-bsc/osmo_bsc_api.c +++ b/openbsc/src/osmo-bsc/osmo_bsc_api.c @@ -1,5 +1,5 @@ -/* (C) 2009-2010 by Holger Hans Peter Freyther - * (C) 2009-2010 by On-Waves +/* (C) 2009-2011 by Holger Hans Peter Freyther + * (C) 2009-2011 by On-Waves * All Rights Reserved * * This program is free software; you can redistribute it and/or modify @@ -47,15 +47,15 @@ static uint16_t get_network_code_for_msc(struct gsm_network *net) { - if (net->msc_data->core_ncc != -1) - return net->msc_data->core_ncc; + if (net->bsc_data->msc.core_ncc != -1) + return net->bsc_data->msc.core_ncc; return net->network_code; } static uint16_t get_country_code_for_msc(struct gsm_network *net) { - if (net->msc_data->core_mcc != -1) - return net->msc_data->core_mcc; + if (net->bsc_data->msc.core_mcc != -1) + return net->bsc_data->msc.core_mcc; return net->country_code; } diff --git a/openbsc/src/osmo-bsc/osmo_bsc_bssap.c b/openbsc/src/osmo-bsc/osmo_bsc_bssap.c index 495a31325..cda2bbec8 100644 --- a/openbsc/src/osmo-bsc/osmo_bsc_bssap.c +++ b/openbsc/src/osmo-bsc/osmo_bsc_bssap.c @@ -1,6 +1,6 @@ /* GSM 08.08 BSSMAP handling */ -/* (C) 2009-2010 by Holger Hans Peter Freyther - * (C) 2009-2010 by On-Waves +/* (C) 2009-2011 by Holger Hans Peter Freyther + * (C) 2009-2011 by On-Waves * All Rights Reserved * * This program is free software; you can redistribute it and/or modify @@ -298,6 +298,7 @@ static int bssmap_handle_assignm_req(struct osmo_bsc_sccp_con *conn, struct msgb *msg, unsigned int length) { struct msgb *resp; + struct osmo_msc_data *msc; struct gsm_network *network; struct tlv_parsed tp; uint8_t *data; @@ -364,11 +365,12 @@ static int bssmap_handle_assignm_req(struct osmo_bsc_sccp_con *conn, * the correct value. */ full_rate = 0; + msc = &network->bsc_data->msc; for (supported = 0; - chan_mode == GSM48_CMODE_SIGN && supported < network->msc_data->audio_length; + chan_mode == GSM48_CMODE_SIGN && supported < msc->audio_length; ++supported) { - int perm_val = audio_support_to_gsm88(network->msc_data->audio_support[supported]); + int perm_val = audio_support_to_gsm88(msc->audio_support[supported]); for (i = 2; i < TLVP_LEN(&tp, GSM0808_IE_CHANNEL_TYPE); ++i) { if ((data[i] & 0x7f) == perm_val) { chan_mode = gsm88_to_chan_mode(perm_val); @@ -387,8 +389,7 @@ static int bssmap_handle_assignm_req(struct osmo_bsc_sccp_con *conn, /* map it to a MGCP Endpoint and a RTP port */ port = mgcp_timeslot_to_endpoint(multiplex, timeslot); - conn->rtp_port = rtp_calculate_port(port, - network->msc_data->rtp_base); + conn->rtp_port = rtp_calculate_port(port, msc->rtp_base); return gsm0808_assign_req(conn->conn, chan_mode, full_rate); diff --git a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c index c231e6927..889f85a30 100644 --- a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c +++ b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c @@ -325,7 +325,7 @@ static int set_bts_loc(struct ctrl_cmd *cmd, void *data) ret = get_bts_loc(cmd, data); if (!location_equal(curloc, lastloc)) - generate_location_state_trap(bts, gsmnet->msc_data->msc_con); + generate_location_state_trap(bts, gsmnet->bsc_data->msc.msc_con); cleanup_locations(&bts->loc_list); diff --git a/openbsc/src/osmo-bsc/osmo_bsc_filter.c b/openbsc/src/osmo-bsc/osmo_bsc_filter.c index d2735a63a..fce38ce81 100644 --- a/openbsc/src/osmo-bsc/osmo_bsc_filter.c +++ b/openbsc/src/osmo-bsc/osmo_bsc_filter.c @@ -1,5 +1,5 @@ -/* (C) 2009-2010 by Holger Hans Peter Freyther - * (C) 2009-2010 by On-Waves +/* (C) 2009-2011 by Holger Hans Peter Freyther + * (C) 2009-2011 by On-Waves * All Rights Reserved * * This program is free software; you can redistribute it and/or modify @@ -125,10 +125,10 @@ static void send_welcome_ussd(struct gsm_subscriber_connection *conn) struct gsm_network *net; net = conn->bts->network; - if (!net->msc_data->ussd_welcome_txt) + if (!net->bsc_data->msc.ussd_welcome_txt) return; - gsm0480_send_ussdNotify(conn, 1, net->msc_data->ussd_welcome_txt); + gsm0480_send_ussdNotify(conn, 1, net->bsc_data->msc.ussd_welcome_txt); gsm0480_send_releaseComplete(conn); } @@ -152,8 +152,8 @@ int bsc_scan_msc_msg(struct gsm_subscriber_connection *conn, struct msgb *msg) net = conn->bts->network; if (mtype == GSM48_MT_MM_LOC_UPD_ACCEPT) { - if (net->msc_data->core_ncc != -1 || - net->msc_data->core_mcc != -1) { + if (net->bsc_data->msc.core_ncc != -1 || + net->bsc_data->msc.core_mcc != -1) { if (msgb_l3len(msg) >= sizeof(*gh) + sizeof(*lai)) { lai = (struct gsm48_loc_area_id *) &gh->data[0]; gsm48_generate_lai(lai, net->country_code, diff --git a/openbsc/src/osmo-bsc/osmo_bsc_grace.c b/openbsc/src/osmo-bsc/osmo_bsc_grace.c index fbc26acb3..3f73b5018 100644 --- a/openbsc/src/osmo-bsc/osmo_bsc_grace.c +++ b/openbsc/src/osmo-bsc/osmo_bsc_grace.c @@ -26,9 +26,9 @@ int bsc_grace_allow_new_connection(struct gsm_network *network) { - if (!network->msc_data->rf_ctrl) + if (!network->bsc_data->rf_ctrl) return 1; - return network->msc_data->rf_ctrl->policy == S_RF_ON; + return network->bsc_data->rf_ctrl->policy == S_RF_ON; } static int handle_sub(struct gsm_lchan *lchan, const char *text) @@ -68,7 +68,7 @@ static int handle_grace(struct gsm_network *network) struct gsm_bts *bts; struct gsm_bts_trx *trx; - if (!network->msc_data->mid_call_txt) + if (!network->bsc_data->mid_call_txt) return 0; llist_for_each_entry(bts, &network->bts_list, list) { @@ -77,7 +77,7 @@ static int handle_grace(struct gsm_network *network) struct gsm_bts_trx_ts *ts = &trx->ts[ts_nr]; for (lchan_nr = 0; lchan_nr < TS_MAX_LCHAN; ++lchan_nr) { handle_sub(&ts->lchan[lchan_nr], - network->msc_data->mid_call_txt); + network->bsc_data->mid_call_txt); } } } diff --git a/openbsc/src/osmo-bsc/osmo_bsc_main.c b/openbsc/src/osmo-bsc/osmo_bsc_main.c index f7ebb40c4..4665a62ef 100644 --- a/openbsc/src/osmo-bsc/osmo_bsc_main.c +++ b/openbsc/src/osmo-bsc/osmo_bsc_main.c @@ -158,13 +158,13 @@ static void signal_handler(int signal) talloc_report_full(tall_bsc_ctx, stderr); break; case SIGUSR2: - if (!bsc_gsmnet->msc_data) + if (!bsc_gsmnet->bsc_data) return; - if (!bsc_gsmnet->msc_data->msc_con) + if (!bsc_gsmnet->bsc_data->msc.msc_con) return; - if (!bsc_gsmnet->msc_data->msc_con->is_connected) + if (!bsc_gsmnet->bsc_data->msc.msc_con->is_connected) return; - bsc_msc_lost(bsc_gsmnet->msc_data->msc_con); + bsc_msc_lost(bsc_gsmnet->bsc_data->msc.msc_con); break; default: break; @@ -173,7 +173,7 @@ static void signal_handler(int signal) int main(int argc, char **argv) { - struct osmo_msc_data *data; + struct osmo_bsc_data *data; int rc; tall_bsc_ctx = talloc_named_const(NULL, 1, "openbsc"); @@ -219,7 +219,7 @@ int main(int argc, char **argv) exit(1); } - data = bsc_gsmnet->msc_data; + data = bsc_gsmnet->bsc_data; if (rf_ctrl) bsc_replace_string(data, &data->rf_ctrl_name, rf_ctrl); diff --git a/openbsc/src/osmo-bsc/osmo_bsc_msc.c b/openbsc/src/osmo-bsc/osmo_bsc_msc.c index f4d6cf2eb..604f00b86 100644 --- a/openbsc/src/osmo-bsc/osmo_bsc_msc.c +++ b/openbsc/src/osmo-bsc/osmo_bsc_msc.c @@ -428,7 +428,7 @@ static void send_id_get_response(struct osmo_msc_data *data, int fd) int osmo_bsc_msc_init(struct gsm_network *network) { - struct osmo_msc_data *data = network->msc_data; + struct osmo_msc_data *data = &network->bsc_data->msc; if (mgcp_create_port(data) != 0) return -1; diff --git a/openbsc/src/osmo-bsc/osmo_bsc_rf.c b/openbsc/src/osmo-bsc/osmo_bsc_rf.c index b774a5db8..e637271af 100644 --- a/openbsc/src/osmo-bsc/osmo_bsc_rf.c +++ b/openbsc/src/osmo-bsc/osmo_bsc_rf.c @@ -106,12 +106,12 @@ enum osmo_bsc_rf_adminstate osmo_bsc_rf_get_adminstate_by_bts(struct gsm_bts *bt enum osmo_bsc_rf_policy osmo_bsc_rf_get_policy_by_bts(struct gsm_bts *bts) { - struct osmo_msc_data *msc_data = bts->network->msc_data; + struct osmo_bsc_data *bsc_data = bts->network->bsc_data; - if (!msc_data || !msc_data->rf_ctrl) + if (!bsc_data || !bsc_data->rf_ctrl) return OSMO_BSC_RF_POLICY_UNKNOWN; - switch (msc_data->rf_ctrl->policy) { + switch (bsc_data->rf_ctrl->policy) { case S_RF_ON: return OSMO_BSC_RF_POLICY_ON; case S_RF_OFF: @@ -241,9 +241,9 @@ static int enter_grace(struct osmo_bsc_rf *rf) { rf->grace_timeout.cb = grace_timeout; rf->grace_timeout.data = rf; - osmo_timer_schedule(&rf->grace_timeout, rf->gsm_network->msc_data->mid_call_timeout, 0); + osmo_timer_schedule(&rf->grace_timeout, rf->gsm_network->bsc_data->mid_call_timeout, 0); LOGP(DINP, LOGL_NOTICE, "Going to switch RF off in %d seconds.\n", - rf->gsm_network->msc_data->mid_call_timeout); + rf->gsm_network->bsc_data->mid_call_timeout); send_signal(rf, S_RF_GRACE); return 0; diff --git a/openbsc/src/osmo-bsc/osmo_bsc_sccp.c b/openbsc/src/osmo-bsc/osmo_bsc_sccp.c index 4f03b52ff..fbccfbfe5 100644 --- a/openbsc/src/osmo-bsc/osmo_bsc_sccp.c +++ b/openbsc/src/osmo-bsc/osmo_bsc_sccp.c @@ -1,7 +1,7 @@ /* Interaction with the SCCP subsystem */ /* - * (C) 2009-2010 by Holger Hans Peter Freyther - * (C) 2009-2010 by On-Waves + * (C) 2009-2011 by Holger Hans Peter Freyther + * (C) 2009-2011 by On-Waves * All Rights Reserved * * This program is free software; you can redistribute it and/or modify @@ -141,7 +141,7 @@ static void msc_sccp_write_ipa(struct sccp_connection *conn, struct msgb *msg, void *global_ctx, void *ctx) { struct gsm_network *net = (struct gsm_network *) global_ctx; - msc_queue_write(net->msc_data->msc_con, msg, IPAC_PROTO_SCCP); + msc_queue_write(net->bsc_data->msc.msc_con, msg, IPAC_PROTO_SCCP); } static int msc_sccp_accept(struct sccp_connection *connection, void *data) @@ -153,7 +153,7 @@ static int msc_sccp_accept(struct sccp_connection *connection, void *data) static int msc_sccp_read(struct msgb *msgb, unsigned int length, void *data) { struct gsm_network *net = (struct gsm_network *) data; - return bsc_handle_udt(net, net->msc_data->msc_con, msgb, length); + return bsc_handle_udt(net, net->bsc_data->msc.msc_con, msgb, length); } int bsc_queue_for_msc(struct osmo_bsc_sccp_con *conn, struct msgb *msg) @@ -186,7 +186,7 @@ int bsc_create_new_connection(struct gsm_subscriber_connection *conn) struct sccp_connection *sccp; net = conn->bts->network; - if (!net->msc_data->msc_con->is_authenticated) { + if (!net->bsc_data->msc.msc_con->is_authenticated) { LOGP(DMSC, LOGL_ERROR, "Not connected to a MSC. Not forwarding data.\n"); return -1; } @@ -223,7 +223,7 @@ int bsc_create_new_connection(struct gsm_subscriber_connection *conn) INIT_LLIST_HEAD(&bsc_con->sccp_queue); bsc_con->sccp = sccp; - bsc_con->msc_con = net->msc_data->msc_con; + bsc_con->msc_con = net->bsc_data->msc.msc_con; bsc_con->conn = conn; llist_add(&bsc_con->entry, &active_connections); conn->sccp_con = bsc_con; diff --git a/openbsc/src/osmo-bsc/osmo_bsc_vty.c b/openbsc/src/osmo-bsc/osmo_bsc_vty.c index 0b1698e41..8e687e308 100644 --- a/openbsc/src/osmo-bsc/osmo_bsc_vty.c +++ b/openbsc/src/osmo-bsc/osmo_bsc_vty.c @@ -29,9 +29,14 @@ extern struct gsm_network *bsc_gsmnet; +static struct osmo_bsc_data *osmo_bsc_data(struct vty *vty) +{ + return bsc_gsmnet->bsc_data; +} + static struct osmo_msc_data *osmo_msc_data(struct vty *vty) { - return bsc_gsmnet->msc_data; + return &bsc_gsmnet->bsc_data->msc; } static struct cmd_node msc_node = { @@ -52,50 +57,52 @@ DEFUN(cfg_net_msc, cfg_net_msc_cmd, static int config_write_msc(struct vty *vty) { struct bsc_msc_dest *dest; - struct osmo_msc_data *data = osmo_msc_data(vty); + struct osmo_bsc_data *bsc = osmo_bsc_data(vty); + struct osmo_msc_data *msc = &bsc->msc; vty_out(vty, "msc%s", VTY_NEWLINE); - if (data->bsc_token) - vty_out(vty, " token %s%s", data->bsc_token, VTY_NEWLINE); - if (data->core_ncc != -1) + if (msc->bsc_token) + vty_out(vty, " token %s%s", msc->bsc_token, VTY_NEWLINE); + if (msc->core_ncc != -1) vty_out(vty, " core-mobile-network-code %d%s", - data->core_ncc, VTY_NEWLINE); - if (data->core_mcc != -1) + msc->core_ncc, VTY_NEWLINE); + if (msc->core_mcc != -1) vty_out(vty, " core-mobile-country-code %d%s", - data->core_mcc, VTY_NEWLINE); - vty_out(vty, " ip.access rtp-base %d%s", data->rtp_base, VTY_NEWLINE); - vty_out(vty, " timeout-ping %d%s", data->ping_timeout, VTY_NEWLINE); - vty_out(vty, " timeout-pong %d%s", data->pong_timeout, VTY_NEWLINE); - if (data->mid_call_txt) - vty_out(vty, " mid-call-text %s%s", data->mid_call_txt, VTY_NEWLINE); - vty_out(vty, " mid-call-timeout %d%s", data->mid_call_timeout, VTY_NEWLINE); - if (data->ussd_welcome_txt) - vty_out(vty, " bsc-welcome-text %s%s", data->ussd_welcome_txt, VTY_NEWLINE); - if (data->rf_ctrl_name) - vty_out(vty, " bsc-rf-socket %s%s", - data->rf_ctrl_name, VTY_NEWLINE); - - if (data->audio_length != 0) { + msc->core_mcc, VTY_NEWLINE); + vty_out(vty, " ip.access rtp-base %d%s", msc->rtp_base, VTY_NEWLINE); + vty_out(vty, " timeout-ping %d%s", msc->ping_timeout, VTY_NEWLINE); + vty_out(vty, " timeout-pong %d%s", msc->pong_timeout, VTY_NEWLINE); + if (msc->ussd_welcome_txt) + vty_out(vty, " bsc-welcome-text %s%s", msc->ussd_welcome_txt, VTY_NEWLINE); + + if (msc->audio_length != 0) { int i; vty_out(vty, " codec-list "); - for (i = 0; i < data->audio_length; ++i) { + for (i = 0; i < msc->audio_length; ++i) { if (i != 0) vty_out(vty, ", "); - if (data->audio_support[i]->hr) - vty_out(vty, "hr%.1u", data->audio_support[i]->ver); + if (msc->audio_support[i]->hr) + vty_out(vty, "hr%.1u", msc->audio_support[i]->ver); else - vty_out(vty, "fr%.1u", data->audio_support[i]->ver); + vty_out(vty, "fr%.1u", msc->audio_support[i]->ver); } vty_out(vty, "%s", VTY_NEWLINE); } - llist_for_each_entry(dest, &data->dests, list) + llist_for_each_entry(dest, &msc->dests, list) vty_out(vty, " dest %s %d %d%s", dest->ip, dest->port, dest->dscp, VTY_NEWLINE); + if (bsc->mid_call_txt) + vty_out(vty, " mid-call-text %s%s", bsc->mid_call_txt, VTY_NEWLINE); + vty_out(vty, " mid-call-timeout %d%s", bsc->mid_call_timeout, VTY_NEWLINE); + if (bsc->rf_ctrl_name) + vty_out(vty, " bsc-rf-socket %s%s", + bsc->rf_ctrl_name, VTY_NEWLINE); + return CMD_SUCCESS; } @@ -106,7 +113,7 @@ DEFUN(cfg_net_bsc_token, { struct osmo_msc_data *data = osmo_msc_data(vty); - bsc_replace_string(data, &data->bsc_token, argv[0]); + bsc_replace_string(osmo_bsc_data(vty), &data->bsc_token, argv[0]); return CMD_SUCCESS; } @@ -163,7 +170,7 @@ DEFUN(cfg_net_bsc_codec_list, /* create a new array */ data->audio_support = - talloc_zero_array(data, struct gsm_audio_support *, argc); + talloc_zero_array(osmo_bsc_data(vty), struct gsm_audio_support *, argc); data->audio_length = argc; for (i = 0; i < argc; ++i) { @@ -211,13 +218,13 @@ DEFUN(cfg_net_msc_dest, struct bsc_msc_dest *dest; struct osmo_msc_data *data = osmo_msc_data(vty); - dest = talloc_zero(data, struct bsc_msc_dest); + dest = talloc_zero(osmo_bsc_data(vty), struct bsc_msc_dest); if (!dest) { vty_out(vty, "%%Failed to create structure.%s", VTY_NEWLINE); return CMD_WARNING; } - dest->ip = talloc_strdup(data, argv[0]); + dest->ip = talloc_strdup(dest, argv[0]); if (!dest->ip) { vty_out(vty, "%%Failed to copy dest ip.%s", VTY_NEWLINE); talloc_free(dest); @@ -279,7 +286,7 @@ DEFUN(cfg_net_msc_mid_call_text, "mid-call-text .TEXT", "Set the USSD notifcation to be send.\n" "Text to be sent\n") { - struct osmo_msc_data *data = osmo_msc_data(vty); + struct osmo_bsc_data *data = osmo_bsc_data(vty); char *txt = argv_concat(argv, argc, 0); if (!txt) return CMD_WARNING; @@ -294,7 +301,7 @@ DEFUN(cfg_net_msc_mid_call_timeout, "mid-call-timeout NR", "Switch from Grace to Off in NR seconds.\n" "Timeout in seconds\n") { - struct osmo_msc_data *data = osmo_msc_data(vty); + struct osmo_bsc_data *data = osmo_bsc_data(vty); data->mid_call_timeout = atoi(argv[0]); return CMD_SUCCESS; } @@ -309,7 +316,7 @@ DEFUN(cfg_net_msc_welcome_ussd, if (!str) return CMD_WARNING; - bsc_replace_string(data, &data->ussd_welcome_txt, str); + bsc_replace_string(osmo_bsc_data(vty), &data->ussd_welcome_txt, str); talloc_free(str); return CMD_SUCCESS; } @@ -319,7 +326,7 @@ DEFUN(cfg_net_rf_socket, "bsc-rf-socket PATH", "Set the filename for the RF control interface.\n" "RF Control path\n") { - struct osmo_msc_data *data = osmo_msc_data(vty); + struct osmo_bsc_data *data = osmo_bsc_data(vty); bsc_replace_string(data, &data->rf_ctrl_name, argv[0]); return CMD_SUCCESS; @@ -348,9 +355,10 @@ int bsc_vty_init_extra(void) install_element(MSC_NODE, &cfg_net_msc_no_dest_cmd); install_element(MSC_NODE, &cfg_net_msc_ping_time_cmd); install_element(MSC_NODE, &cfg_net_msc_pong_time_cmd); + install_element(MSC_NODE, &cfg_net_msc_welcome_ussd_cmd); + install_element(MSC_NODE, &cfg_net_msc_mid_call_text_cmd); install_element(MSC_NODE, &cfg_net_msc_mid_call_timeout_cmd); - install_element(MSC_NODE, &cfg_net_msc_welcome_ussd_cmd); install_element(MSC_NODE, &cfg_net_rf_socket_cmd); install_element_ve(&show_statistics_cmd); -- cgit v1.2.3