mirror of
				https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
				synced 2025-11-03 21:43:32 +00:00 
			
		
		
		
	doc: add call graphs from MSC to BSC or HNB-GW (wip)
This commit is contained in:
		
							
								
								
									
										608
									
								
								openbsc/doc/call-graphs-MSC-BSC-HNBGW.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										608
									
								
								openbsc/doc/call-graphs-MSC-BSC-HNBGW.txt
									
									
									
									
									
										Normal file
									
								
							@@ -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>|       |
 | 
			
		||||
   |      |       |<BSSMAP>|       |
 | 
			
		||||
   |      |       |        |       |
 | 
			
		||||
          |  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() <osmo-bsc/osmo_bsc_filter.c:212>:
 | 
			
		||||
  if GSM48_PDISC_MM, GSM48_MT_MM_LOC_UPD_REQUEST
 | 
			
		||||
    handle_lu_request() <osmo-bsc/osmo_bsc_filter.c:29>:
 | 
			
		||||
      gsm48_generate_lai()
 | 
			
		||||
  if GSM48_PDISC_RR, GSM48_MT_RR_PAG_RESP
 | 
			
		||||
    handle_page_resp() <osmo-bsc/osmo_bsc_filter.c:97>:
 | 
			
		||||
      extract_sub() <osmo-bsc/osmo_bsc_filter.c:57>
 | 
			
		||||
      paging_request_stop() <libbsc/paging.c:390>:
 | 
			
		||||
        log_set_context()
 | 
			
		||||
        _paging_request_stop() <libbsc/paging.c:359>:
 | 
			
		||||
          paging_init_if_needed() <libbsc/paging.c:224>:
 | 
			
		||||
            paging_worker() <libbsc/paging.c:217>:
 | 
			
		||||
              paging_handle_pending_requests() <libbsc/paging.c:169> (R):
 | 
			
		||||
                cb()
 | 
			
		||||
                paging_give_credit() <libbsc/paging.c:107> (R):
 | 
			
		||||
                  paging_handle_pending_requests() <libbsc/paging.c:169> (recursive: see 37)
 | 
			
		||||
                can_send_pag_req() <libbsc/paging.c:116>:
 | 
			
		||||
                page_ms() <libbsc/paging.c:69>:
 | 
			
		||||
                  gsm0808_page() <libbsc/bsc_api.c:415>:
 | 
			
		||||
                    rsl_paging_cmd() <libbsc/abis_rsl.c:751>:
 | 
			
		||||
                      abis_rsl_dchan_hdr = RSL_IE_CHAN_NR
 | 
			
		||||
                        mdisc_by_msgtype() <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
 | 
			
		||||
                      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() <libbsc/paging.c:60>:
 | 
			
		||||
            subscr_put() <libcommon/gsm_subscriber_base.c:89>
 | 
			
		||||
      subscr_put() <libcommon/gsm_subscriber_base.c:89>
 | 
			
		||||
 | 
			
		||||
(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",
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user