From a234287d092fcb59337bd7afa23cf08cda15e336 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Sat, 26 Dec 2015 03:02:20 +0100 Subject: doc: add call graphs from MSC to BSC or HNB-GW (wip) --- openbsc/doc/call-graphs-MSC-BSC-HNBGW.txt | 608 ++++++++++++++++++++++++++++++ 1 file changed, 608 insertions(+) create mode 100644 openbsc/doc/call-graphs-MSC-BSC-HNBGW.txt diff --git a/openbsc/doc/call-graphs-MSC-BSC-HNBGW.txt b/openbsc/doc/call-graphs-MSC-BSC-HNBGW.txt new file mode 100644 index 000000000..0fd37f3da --- /dev/null +++ b/openbsc/doc/call-graphs-MSC-BSC-HNBGW.txt @@ -0,0 +1,608 @@ +gprs_iu_tx + +-- WORK IN PROGRESS -- + +This is an incomplete collection of call graphs between MSC and Osmo-BSC, +partly including Osmo-BTS. These traces helped understanding the separation of +the BSC part from Osmo-NITB. The aim: obtain a clearly separated "A" interface +towards the BSC, and have an Iu-CS interface to operate with HNB-GW and hNodeB. +The working title for the result is Osmo-CSCN (Circuit Switched Core Network), +combining an MSC with various other core network components, but without the +BSC parts. + + +Some Specs and Overview + +0408: Radio interface +0411: PP-SMS on Radio interface +0802: A Interface MSC<->BSS (BSS = BSC + BTS) +0804: A Interface L1 MSC<->BSS +0806: A Interface L2 MSC<->BSS +0808: A Interface L3 MSC<->BSS +0808: Figure 1: A MSC<->BSS +0820: RA (Rate Adaption) MSC<->BSS + +0851,0852: A-bis general BSC<->BTS +1221: A-bis NM BSC<->BTS +1201: Figure 9: A-bis BSC<->BTS + + MS <-> BTS <-> BSC <-> MSC <-> cn + | | | | | + |<-------0408=DTAP----->| | + |<-------0411---------->| | + | | |<--0808>| | + | | || | + | | | | | + | Abis | A | + + MS <-> hNodeB <-> HNB-GW <-> MSC <-> cn + | | | | | + |<-0408->|<--Iu--->|<-Iu-cs->| | + |<-0411->| | | | + | | | | | + +Entry/Exit points + + Osmo-BSC <--A--> MSC or Osmo-CSCN + format: BSSAP/SCCP (where BSSAP = DTAP + BSSMAP) + Osmo-BSC + read from MSC: sccp_system_incoming_ctx() + write to MSC: sccp_connection_write() <-- osmo-bsc/osmo_bsc_sccp.c:bsc_queue_for_msc() + MSC: + third party + Osmo-CSCN: + read: does not exist yet + write: does not exist yet + + HNB-GW <--Iu-CS--> Osmo-CSCN + format: CC+MM/RANAP/SUA + HNB-GW: + read: does not exist yet + write: does not exist yet + Osmo-CSCN: + read: does not exist yet + write: does not exist yet + + Osmo-BTS <-Abis-> Osmo-BSC + Osmo-BSC: + read: libbsc/abis_rsl.c:abis_rsl_rcvmsg(msg) + write: libosmo-abis/src/e1_input.c:abis_sendmsg() (e1inp_sign_link*)msg->dst; + + Osmo-BTS <-Abis-> Osmo-NITB + Osmo-NITB: + read: + osmo_signal_dispatch(): + from on_dso_load_token() libmsc/token_auth.c + SS_SUBSCR: token_subscr_cb() libmsc/token_auth.c + SS_SMS: token_sms_cb() libmsc/token_auth.c + from subscr_sig_cb() libmsc/rrlp.c + SS_SUBSCR: subscr_sig_cb() libmsc/rrlp.c + SS_PAGING: paging_sig_cb() libmsc/rrlp.c + from on_dso_load_ho_dec() libbsc/handover_decision.c + SS_LCHAN: ho_dec_sig_cb() libbsc/handover_decision.c + from e1inp_init() libosmo-abis/src/e1_input.c + SS_L_GLOBAL: e1i_sig_cb() libosmo-abis/src/e1_input.c + + bts_model_bs11_init(); + bts_model_rbs2k_init(); + bts_model_nanobts_init(); + bts_model_nokia_site_init(); + bts_model_sysmobts_init(); + + bsc_bootstrap_network(): + osmo_signal_register_handler(SS_NM, nm_sig_cb, NULL); + osmo_signal_register_handler(SS_L_INPUT, inp_sig_cb, NULL); + + +Call Trees + +- A Interface + + Osmo-BSC sends to MSC: + + sccp_connection_write(conn->sccp, msg); + ^ bsc_queue_for_msc() + ^ + | osmo-bsc/osmo_bsc_api.c: + | bsc_clear_request() + | queue_msg_or_return() osmo-bsc/osmo_bsc_api.c + | ^ bsc_sapi_n_reject() + | | ^send_sapi_reject() + | | ^ gsm0808_submit_dtap() libbsc/bsc_api.c + | | | ^ gsm48_conn_sendmsg() libmsc/gsm_04_08.c + | | | | ^ gsm48_cc_tx_notify_ss() libmsc/gsm_04_08.c + | | | | | mm_tx_identity_req() libmsc/gsm_04_08.c + | | | | | gsm48_tx_mm_info() libmsc/gsm_04_08.c + | | | | | gsm48_tx_mm_auth_req() + | | | | | gsm48_send_rr_app_info() + | | | | | gsm48_cc_tx_status() + | | | | | gsm48_tx_simple() + | | | | | ^ gsm48_tx_mm_auth_rej() + | | | | | gsm48_cc_tx_setup() + | | | | | gsm48_cc_tx_call_proc() + | | | | | gsm48_cc_tx_alerting() + | | | | | gsm48_cc_tx_progress() + | | | | | gsm48_cc_tx_connect() + | | | | | gsm48_cc_tx_connect_ack() + | | | | | gsm48_cc_tx_disconnect() + | | | | | gsm48_cc_tx_release() + | | | | | gsm48_cc_tx_release_compl() + | | | | | gsm48_cc_tx_facility() + | | | | | gsm48_cc_tx_hold_ack() + | | | | | gsm48_cc_tx_hold_rej() + | | | | | gsm48_cc_tx_retrieve_ack() + | | | | | gsm48_cc_tx_retrieve_rej() + | | | | | gsm48_cc_tx_start_dtmf_ack() + | | | | | gsm48_cc_tx_start_dtmf_rej() + | | | | | gsm48_cc_tx_stop_dtmf_ack() + | | | | | gsm48_cc_tx_modify() + | | | | | gsm48_cc_tx_modify_complete() + | | | | | gsm48_cc_tx_modify_reject() + | | | | | gsm48_cc_tx_notify() + | | | | | gsm48_cc_tx_userinfo() + | | | | + | | | | gsm0480_send_ussd_response() libmsc/gsm_04_80.c + | | | | gsm0480_send_ussd_reject() libmsc/gsm_04_80.c + | | | | gsm0480_send_ussdNotify() libmsc/gsm_04_80.c + | | | | ^ bsc_send_ussd_no_srv() osmo-bsc/osmo_bsc_api.c + | | | | gsm0480_send_releaseComplete() libmsc/gsm_04_80.c + | | | | ^ bsc_send_ussd_no_srv() osmo-bsc/osmo_bsc_api.c + | | | | + | | | | gsm411_sendmsg() libmsc/gsm_04_11.c + | | | | + | | | | bsc_maybe_lu_reject() osmo-bsc/osmo_bsc_api.c + | | | | ^ complete_layer3() + | | | | | bsc_dtap() + | | | | + | | | | dtap_rcvmsg() osmo-bsc/osmo_bsc_bssap.c + | | | | + | | | | gsm48_tx_mm_serv_ack() libbsc/gsm_04_08_utils.c + | | | | ^ _gsm48_rx_mm_serv_req_sec_cb() + | | | | | bsc_send_ussd_no_srv() osmo-bsc/osmo_bsc_api.c + | | | | + | | | | gsm48_tx_mm_serv_rej() libbsc/gsm_04_08_utils.c + | | | + | | | bsc_rll_req.cb = rll_ind_cb() from rll_establish() from gsm0808_submit_dtap() + | | | ^ complete_rllr() libbsc/bsc_rll.c + | | | | ^ timer_cb() libbsc/bsc_rll.c + | | | | | rll_indication() libbsc/bsc_rll.c + | | | | | rll_lchan_signal() libbsc/bsc_rll.c + | | + | | bsc_cipher_mode_compl() + | | ^ bsc_api.cipher_mode_compl() + | | | dispatch_dtap() (2) + | | | with GSM48_MT_RR_CIPH_M_COMPL + | | + | | bsc_dtap() + | | ^ cb from osmo-bsc/osmo_bsc_api.c + | | bsc_api.dtap() + | | ^ libbsc/bsc_api.c: + | | | dispatch_dtap() (2) + | | | case GSM48_MT_RR_APP_INFO + | | | case unknown 04.08 RR + | | + | | bsc_assign_compl() + | | ^ osmo-bsc/osmo_bsc_api.c + | | bsc_api.assign_compl() + | | ^ libbsc/bsc_api.c: + | | | dispatch_dtap() (2) + | | | case GSM48_MT_RR_CHAN_MODE_MODIF_ACK + | | | handle_ass_compl() + | | | ^ dispatch_dtap() (2) + | | | | case GSM48_MT_RR_ASS_COMPL + | | + | | bsc_assign_fail() + | | + | | bsc_cm_update() + | + | osmo-bsc/osmo_bsc_bssap.c: + | bssmap_handle_clear_command() + | bssmap_handle_cipher_mode() + | bssmap_handle_assignm_req() + | + + + Osmo-BSC receives from MSC: + sccp_system_incoming_ctx() (libosmo-sccp) + | L2 type: + v SCCP_MSG_TYPE_CR: _sccp_handle_connection_request(msgb, ctx); + SCCP_MSG_TYPE_RLSD: _sccp_handle_connection_released(msgb); + SCCP_MSG_TYPE_CREF: _sccp_handle_connection_refused(msgb); + SCCP_MSG_TYPE_CC: _sccp_handle_connection_confirm(msgb); + SCCP_MSG_TYPE_RLC: _sccp_handle_connection_release_complete(msgb); + + SCCP_MSG_TYPE_DT1: _sccp_handle_connection_dt1(msgb); + Note: a dt1 target entry was created during one of: + - bsc_open_connection() (SCCP connections are established by the BSC, exclusively) + sccp_connection_connect() + _sccp_send_connection_request() + llist_add_tail(&connection->list, &sccp_connections); + - sccp_system_incoming_ctx() + SCCP_MSG_TYPE_CR: + _sccp_handle_connection_request(struct msgb *msgb, void *ctx) + cb->accept_cb() = msc_sccp_accept() + + SCCP_MSG_TYPE_UDT: _sccp_handle_read(msgb) --read_cb--> osmo-bsc/osmo_bsc_sccp.c:msc_sccp_read() + msc_sccp_read() + | bsc_handle_udt() ./openbsc/openbsc/src/osmo-bsc/osmo_bsc_bssap.c:494 + v bssmap_rcvmsg_udt() ./openbsc/openbsc/src/osmo-bsc/osmo_bsc_bssap.c:387 + gsm0808_bssmap_name() ./libosmocore/src/gsm/gsm0808.c:535 + bssmap_handle_reset_ack() ./openbsc/openbsc/src/osmo-bsc/osmo_bsc_bssap.c:91 + LOGP() + bssmap_handle_paging() ./openbsc/openbsc/src/osmo-bsc/osmo_bsc_bssap.c:99 + GSM0808_IE_IMSI + GSM0808_IE_CELL_IDENTIFIER_LIST + GSM0808_IE_TMSI + CELL_IDENT_LAC + CELL_IDENT_BSS + GSM0808_IE_CHANNEL_NEEDED + GSM0808_IE_EMLPP_PRIORITY + subscr_get_or_create() ./openbsc/openbsc/src/libcommon/gsm_subscriber_base.c:101 + subscr_group + LOGL_INFO + bsc_grace_paging_request() ./openbsc/openbsc/src/osmo-bsc/osmo_bsc_grace.c:87 + normal_paging() ./openbsc/openbsc/src/osmo-bsc/osmo_bsc_grace.c:37 + if (msc->core_lac != -1) + paging_request_bts() ./openbsc/openbsc/src/libbsc/paging.c:307 + trx_is_usable() ./openbsc/openbsc/src/libbsc/chan_alloc.c:49 + if is_ipaccess_bts() and nm_is_running(): 0 + else: 1 + paging_init_if_needed() ./openbsc/openbsc/src/libbsc/paging.c:224 + LAUNCH TIMER: + bts->paging.work_timer.cb = paging_worker; + paging_worker() ./openbsc/openbsc/src/libbsc/paging.c:217 + paging_handle_pending_requests() ./openbsc/openbsc/src/libbsc/paging.c:169 (R): + paging_give_credit() ./openbsc/openbsc/src/libbsc/paging.c:107 (R): + recurse paging_handle_pending_requests() + can_send_pag_req() ./openbsc/openbsc/src/libbsc/paging.c:116 + page_ms() ./openbsc/openbsc/src/libbsc/paging.c:69 + gsm0808_page() ./openbsc/openbsc/src/libbsc/bsc_api.c:415 + rsl_paging_cmd() ./openbsc/openbsc/src/libbsc/abis_rsl.c:751 + abis_rsl_dchan_hdr + RSL_MT_PAGING_CMD + RSL_CHAN_PCH_AGCH + init_dchan_hdr() ./openbsc/openbsc/src/libbsc/abis_rsl.c:99 + mdisc_by_msgtype() ./openbsc/openbsc/src/libbsc/abis_rsl.c:80 + ABIS_RSL_MDISC_RLL + ABIS_RSL_MDISC_TRX + ABIS_RSL_MDISC_COM_CHAN + ABIS_RSL_MDISC_DED_CHAN + ABIS_RSL_MDISC_LOC + RSL_IE_CHAN_NR + RSL_IE_PAGING_GROUP + RSL_IE_MS_IDENTITY + RSL_IE_CHAN_NEEDED + abis_rsl_sendmsg() ./libosmo-abis/src/e1_input.c:258 + _paging_request() ./openbsc/openbsc/src/libbsc/paging.c:279 + llist_add_tail(&req->entry, &bts_entry->pending_requests); + paging_schedule_if_needed() ./openbsc/openbsc/src/libbsc/paging.c:96 + if (msc->core_lac == -1) + paging_request() + gsm_bts_by_lac() ./openbsc/openbsc/src/libcommon/gsm_data.c:135 + paging_request_bts() ./openbsc/openbsc/src/libbsc/paging.c:307 + (see above) + if err + paging_request_stop() + (see below) + locked_paging() ./openbsc/openbsc/src/osmo-bsc/osmo_bsc_grace.c:54 + paging_request_bts() ./openbsc/openbsc/src/libbsc/paging.c:307 + (see above) + + +- A-bis Interface + + Osmo-BSC to BTS: + abis_sendmsg() + ^ + | libosmo-abis/src/e1_input.c:abis_rsl_sendmsg() + | ^ + | | libbsc/abis_rsl.c: 23 callers + | | rsl_bcch_info() + | | rsl_sacch_filling() + | | rsl_sacch_info_modify() + | | rsl_chan_bs_power_ctrl() + | | rsl_chan_ms_power_ctrl() + | | rsl_chan_activate_lchan() + | | rsl_chan_mode_modify_req() + | | rsl_encryption_cmd() + | | rsl_deact_sacch() + | | rsl_rf_chan_release() + | | rsl_paging_cmd() + | | rsl_imm_assign_cmd() + | | rsl_siemens_mrpci() + | | rsl_data_request() + | | rsl_establish_request() + | | rsl_release_request() + | | rsl_ipacc_crcx() + | | rsl_ipacc_mdcx() + | | rsl_ipacc_pdch_activate() + | | rsl_sms_cb_command() + | | rsl_nokia_si_begin() + | | rsl_nokia_si_end() + | | rsl_bs_power_control() + | + | libbsc/bts_nokia_site.c:nokia_abis_nm_queue_send_next() + | + | libbsc/abis_nm.c:_abis_nm_sendmsg() + | ^ abis_nm_sendmsg() + | | abis_nm_sendmsg_direct() + | + | osmo-bts/src/common/abis.c:abis_oml_sendmsg() + | osmo-bts/src/common/abis.c:abis_bts_rsl_sendmsg() + + + +libbsc/e1_config.c:bts_isdn_e1inp_line_ops.sign_link = + libbsc/e1_config.c:bts_isdn_sign_link(struct msgb *msg) + case E1INP_SIGN_RSL: + libbsc/abis_rsl.c:abis_rsl_rcvmsg(msg) (1) + case E1INP_SIGN_OML: + ret = bts->model->oml_rcvmsg(msg); + +libbsc/bts_ipaccess_nanobts.c:ipaccess_e1inp_line_ops.sign_link = + ipaccess_sign_link(struct msgb *msg) + case E1INP_SIGN_RSL: + libbsc/abis_rsl.c:abis_rsl_rcvmsg(msg) (1) + case E1INP_SIGN_OML: + libbsc/abis_nm.c:abis_nm_rcvmsg(msg); + + +(1) +libbsc/abis_rsl.c:abis_rsl_rcvmsg(msg) + case ABIS_RSL_MDISC_RLL: + libbsc/abis_rsl.c:abis_rsl_rx_rll(msg) + case DATA_IND, EST_IND: + libbsc/bsc_api.c:gsm0408_rcvmsg(struct msgb *msg, uint8_t link_id) + msg->lchan->ts->trx->bts->network->bsc_api; + if (lchan->conn) + libbsc/bsc_api.c:dispatch_dtap() (2) + else + lchan->conn = subscr_con_allocate(msg->lchan); + rc = api->compl_l3(lchan->conn, msg, 0); (3) + + case ABIS_RSL_MDISC_DED_CHAN: + rc = abis_rsl_rx_dchan(msg); + + case ABIS_RSL_MDISC_COM_CHAN: + rc = abis_rsl_rx_cchan(msg); + + case ABIS_RSL_MDISC_TRX: + rc = abis_rsl_rx_trx(msg); + + case ABIS_RSL_MDISC_IPACCESS: + rc = abis_rsl_rx_ipacc(msg); + break; + + case ABIS_RSL_MDISC_LOC: + LOGP(DRSL, LOGL_NOTICE, "unimplemented RSL msg disc 0x%02x\n", + + +(2) +libbsc/bsc_api.c:dispatch_dtap() + struct bsc_api *api = msg->lchan->ts->trx->bts->network->bsc_api; + + default: + if (api->dtap) + api->dtap(conn, link_id, msg); (5) + + case GSM48_PDISC_RR: + case GSM48_MT_RR_HANDO_COMPL: + handle_rr_ho_compl(msg); + + case GSM48_MT_RR_HANDO_FAIL: + handle_rr_ho_fail(msg); + + case GSM48_MT_RR_CIPH_M_COMPL: + if (api->cipher_mode_compl) + api->cipher_mode_compl(conn, msg, (4) + conn->lchan->encr.alg_id); + + case GSM48_MT_RR_ASS_COMPL: + handle_ass_compl(conn, msg); + + case GSM48_MT_RR_ASS_FAIL: + handle_ass_fail(conn, msg); + + case GSM48_MT_RR_CHAN_MODE_MODIF_ACK: + rc = gsm48_rx_rr_modif_ack(msg); + if (rc < 0) { + api->assign_fail(conn, GSM0808_CAUSE_NO_RADIO_RESOURCE_AVAILABLE) + else + api->assign_compl() + + case GSM48_MT_RR_CLSM_CHG: + handle_classmark_chg(conn, msg); + + case GSM48_MT_RR_APP_INFO: + if (api->dtap) + api->dtap(conn, link_id, msg); (5) + + default: + if (api->dtap) + api->dtap(conn, link_id, msg); (5) + + case GSM48_MT_RR_GPRS_SUSP_REQ: + DEBUGP(DRR, "GRPS SUSPEND REQUEST\n"); + + case GSM48_MT_RR_STATUS: + LOGP(DRR, LOGL_NOTICE, "RR STATUS (cause: %s)\n", + + case GSM48_MT_RR_MEAS_REP: + LOGP(DMEAS, LOGL_ERROR, "DIRECT GSM48 MEASUREMENT REPORT ?!? "); + + +(3)[0] +msc_bsc_api().compl_l3 = + libmsc/osmo_msc.c: msc_compl_l3(struct gsm_subscriber_connection *conn, struct msgb *msg, + libmsc/gsm0408.c: gsm0408_dispatch() (6) + +(3)[1] +osmo_bsc_api().compl_l3 = + osmo-bsc/osmo_bsc_api.c:bsc_compl_l3() + msc = bsc_find_msc(conn, msg); + complete_layer3(conn, msg, msc) + bsc_filter_initial(msc->network->bsc_data, msc, conn, msg, + &imsi, &con_type, &lu_cause); + bsc_create_new_connection(conn, msc, send_ping); + sccp->state_cb = msc_outgoing_sccp_state() + sccp->data_cb = msc_outgoing_sccp_data() + bsc_con->send_ping = send_ping() + bsc_con->sccp_it_timeout.cb = sccp_it_timeout() + bsc_con->sccp_cc_timeout.cb = sccp_cc_timeout() + bsc_scan_bts_msg(conn, msg); (7) + resp = gsm0808_create_layer3(msg, network_code, country_code, lac, ci); + +(5)[0] +msc_bsc_api().dtap = + libmsc/osmo_msc.c: msc_dtap(conn, link_id, msg) + gsm0408_dispatch(conn, msg) (6) + +(5)[1] +osmo_bsc_api().dtap = + osmo-bsc/osmo_bsc_api.c: bsc_dtap(conn, link_id, msg) + if (handle_cc_setup(conn, msg) >= 1) return; + if (bsc_filter_data(conn, msg, &lu_cause) < 0) + bsc_maybe_lu_reject() + return; + bsc_scan_bts_msg(conn, msg); (7) + resp = gsm0808_create_dtap(msg, link_id); + queue_msg_or_return(resp); + +(7) +bsc_scan_bts_msg() : + if GSM48_PDISC_MM, GSM48_MT_MM_LOC_UPD_REQUEST + handle_lu_request() : + gsm48_generate_lai() + if GSM48_PDISC_RR, GSM48_MT_RR_PAG_RESP + handle_page_resp() : + extract_sub() + paging_request_stop() : + log_set_context() + _paging_request_stop() : + paging_init_if_needed() : + paging_worker() : + paging_handle_pending_requests() (R): + cb() + paging_give_credit() (R): + paging_handle_pending_requests() (recursive: see 37) + can_send_pag_req() : + page_ms() : + gsm0808_page() : + rsl_paging_cmd() : + abis_rsl_dchan_hdr = RSL_IE_CHAN_NR + mdisc_by_msgtype() : + ABIS_RSL_MDISC_RLL + ABIS_RSL_MDISC_TRX + ABIS_RSL_MDISC_COM_CHAN + ABIS_RSL_MDISC_DED_CHAN + ABIS_RSL_MDISC_LOC + msgb_tv_put(msg, RSL_IE_PAGING_GROUP, paging_group); + msgb_tlv_put(msg, RSL_IE_MS_IDENTITY, len-2, ms_ident+2); + msgb_tv_put(msg, RSL_IE_CHAN_NEEDED, chan_needed); + rsl_link + abis_rsl_sendmsg() + cbfn() (8) + paging_remove_request() : + subscr_put() + subscr_put() + +(8)[0] +libmsc/gsm_04_08.c:mncc_tx_to_cc() + req->cbfn = + libmsc/gsm_04_08.c:setup_trig_pag_evt + +(8)[1] +libmsc/gsm_04_11.c:gsm411_send_sms_subscr() + req->cbfn = + libmsc/gsm_04_11.c:paging_cb_send_sms + +(9) +bsc_scan_msc_msg() ./osmo-bsc/osmo_bsc_filter.c:330 + gsm48_hdr + send_welcome_ussd() ./osmo-bsc/osmo_bsc_filter.c:229 + LOGP() + DMSC + LOGL_DEBUG + ussd_welcome_txt + BSS_SEND_USSD + GSM48_MT_MM_INFO + bsc_patch_mm_info() ./osmo-bsc/osmo_bsc_filter.c:255 + uint8_t + tzbsd + dst + tlv_parse() + gsm48_mm_att_tlvdef + override + hr + mn + TLVP_PRESENT() + GSM48_IE_UTC + LOGP() + DMSC + LOGL_DEBUG + TLVP_VAL() + GSM48_IE_NET_TIME_TZ + GSM48_IE_NET_DST + + +(6) +libmsc/gsm0408.c: gsm0408_dispatch() (MSC rx from BSC) + if (silent_call_reroute(conn, msg)) + return silent_call_rx(conn, msg); + + case gsm48_pdisc_cc: + rc = gsm0408_rcv_cc(conn, msg); + + case gsm48_pdisc_mm: + rc = gsm0408_rcv_mm(conn, msg); + + case gsm48_pdisc_rr: + rc = gsm0408_rcv_rr(conn, msg); + + case gsm48_pdisc_sms: + rc = gsm0411_rcv_sms(conn, msg); + + case gsm48_pdisc_nc_ss: + rc = handle_rcv_ussd(conn, msg); + + case gsm48_pdisc_mm_gprs: + case gsm48_pdisc_sm_gprs: + logp(drll, logl_notice, "unimplemented " + +msc_bsc_api().assign_compl = + msc_assign_compl() + nothing + +(4)[0] +libmsc/osmo_msc.c:msc_bsc_api().cipher_mode_compl = + msc_ciph_m_compl(conn, msg, alg_id) + conn->sec_operation->cb(GSM_HOOK_RR_SECURITY, GSM_SECURITY_SUCCEEDED, + NULL, conn, conn->sec_operation->cb_data) + release_security_operation(conn); + msc_release_connection(conn) + bsc_api.c:gsm0808_clear(conn) + libbsc/handover_logic.c:bsc_clear_handover(conn, 1) + libbsc/chan_alloc.c:lchan_release(ho->new_lchan, 0, RSL_REL_LOCAL_END); + libbsc/chan_alloc.c:lchan_release(conn->secondary_lchan, 0, RSL_REL_LOCAL_END), + (conn->lchan, 1, RSL_REL_NORMAL) + bsc_api.c:subscr_con_free(conn) + libcommon/gsm_subscriber_base.c:subscr_put(conn->subscr); + +(4)[1] +osmo-bsc/osmo_bsc_api.c:osmo_bsc_api().cipher_mode_compl = + bsc_cipher_mode_compl() + queue_msg_or_return() osmo-bsc/osmo_bsc_api.c + bsc_queue_for_msc() + + +libbsc/abis_nm.c:abis_nm_rcvmsg(msg); + case ABIS_OM_MDISC_FOM: + rc = abis_nm_rcvmsg_fom(msg); + + case ABIS_OM_MDISC_MANUF: + rc = abis_nm_rcvmsg_manuf(msg); + + case ABIS_OM_MDISC_MMI: + case ABIS_OM_MDISC_TRAU: + LOGP(DNM, LOGL_ERROR, "unimplemented ABIS OML message discriminator 0x%x\n", + -- cgit v1.2.3