aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2018-07-16vty: fix 'show lchan'Neels Hofmeyr2-5/+5
In the vty, do not show lchan info for uninitialized lchans. For lchan->fi == NULL, lchan_state_is(UNUSED) returned false, and hence the vty interpreted all lchans as interesting. Change-Id: Iec855f1bbecfe5600fc943d815623e73dd70ff6a
2018-07-16handover_fsm: don't imply EST_INDNeels Hofmeyr2-4/+23
Change-Id: I030d7b5338deda05dd612e079753234874f6482e
2018-07-16fix RTP: remember port info from CRCX, not MDCXNeels Hofmeyr1-6/+0
On MDCX, we tell the endpoint where the MGW should send RTP. In rtp_info we want to remember what the MGW's own ip and port are, so we must only store the CRCX response, not the MDCX verb_info. Change-Id: Iddea6fd2c6a5974a029736075fdb25d49fcbba35
2018-07-16fix RTP: keep old lchan MGW CI on handover failureNeels Hofmeyr2-6/+30
When handover fails, do not tear down the old lchan's MGW endpoint ci. Change-Id: Id590c2b4e8cffbf2635b9af340ec2832f7f49ebd
2018-07-16fix RTP: send to MGW's IP:port, not back to the BTS itselfNeels Hofmeyr1-12/+6
Change-Id: I277908b451ef2d3b34ba1cccd24d884898f6425a
2018-07-16fix assignment FSM: allow early EV_LCHAN_ESTABLISHEDNeels Hofmeyr1-7/+20
Change-Id: Ia03d7b503f7425df038718be35a9ac3e40a90f8e
2018-07-16cosmetic: assignment_fsm: update ID after pchan switchNeels Hofmeyr1-0/+4
Change-Id: Ifc71bd8d4b214a114ddb8e2b5ee848fd466ddaf9
2018-07-16timeslot FSM: fix ts_fsm_in_use_onenter() for TCH/F_TCH/H_PDCHNeels Hofmeyr3-7/+134
Change-Id: I73947cc846e36558e48903e5445d81f7120837af
2018-07-16timeslot_fsm: fix name str of TS_ST_WAIT_PDCH_DEACTNeels Hofmeyr1-1/+1
Change-Id: I879f4e77490a251f7803febcbc464ecff55dfc71
2018-07-16large refactoring: use FSMs for lchans; add inter-BSC HONeels Hofmeyr73-4868/+8391
Add FSMs: - timeslot_fsm: handle dynamic timeslots and OML+RSL availability. - lchan_fsm: handle an individual lchan activation, RTP stream and release, signal the appropriate calling FSMs on success, failure, release. - mgw_endpoint_fsm: handle one entire endpoint with several CI. - assignment_fsm: BSSMAP Assignment Request. - handover_fsm: all of intra, inter-MO and inter-MT handover. Above FSMs absorb large parts of the gscon FSM. The gscon FSM was surpassing the maximum amount events (32), and it is more logical to treat assignment, handover and MGW procedures in separate FSMs. - Add logging macros for each FSM type: - LOG_TS() - LOG_LCHAN() - LOG_MGWEP(), LOG_CI() - LOG_ASSIGNMENT() - LOG_HO() These log with the osmo_fsm_inst where present. New style decision: logging without a final newline char is awkward, especially for gsmtap logging and when other logs interleave LOGPC() calls; we have various cases where the final \n goes missing, and also this invokes the log category checking N times instead of once. So I decided to make these macros *always* append a newline, but only if there is no final newline yet. I hope that the compiler optimizes the strlen() of the constant format strings away. Thus I can log with or without typing "\n" and always get an \n termination anyway. General: - replace osmo_timers, state enums and program-wide osmo_signal_dispatch() with dedicated FSM timeouts, states and events. - introduce a common way to handle Tnnn timers: gsm_timers.h/.c: struct T_def. These can be used (with some macro magic) to define a state's timeout once, and not make mistakes for each osmo_fsm_inst_state_chg(). Details: bsc_subscr_conn_fsm.c: - move most states of this FSM to lchan_fsm, assignment_fsm, handover_fsm and mgw_endpoint_fsm. - There is exactly one state for an ongoing Assignment, with all details handled in conn->assignment.fi. The state relies on the assignment_fsm's timeout. - There is one state for an ongoing Handover; except for an incoming Handover from a remote BSS, the gscon remains in ST_INIT until the new lchan and conn are both established. - move bssmap_add_lcls_status() to osmo_bsc_lcls.c abis_rsl.c: - move all dynamic timeslot logic away into timeslot_fsm. Only keep plain send/receive functions in abis_rsl.c - reduce some rsl functions to merely send a message, rename to "_tx_". - rsl_ipacc_mdcx(): add '_tx_' in the name; move parts that change the lchan state out into the lchan_fsm, the lchan->abis_ip.* are now set there prior to invoking this function. - move all timers and error/release handling away into various FSMs. - tweak ipa_smod_s_for_lchan() and ipa_rtp_pt_for_lchan() to not require an lchan passed, but just mode,type that they require. Rename to ipacc_speech_mode*() and ipacc_payload_type(). - add rsl_forward_layer3_info, used for inter-BSC HO MO, to just send the RR message received during BSSMAP Handover Command. - move various logging to LOG_LCHAN() in order to log with the lchan FSM instance. One drawback is that the lchan FSM is limited to one logging category, i.e. this moves some logging from DRR to DRSL. It might actually make sense to combine those categories. - lose LOGP...LOGPC logging cascades: they are bad for gsmtap logging and for performance. - handle_classmark_chg(): change logging, move cm2 len check out of the cm3 condition (I hope that's correct). - gsm48_send_ho_cmd(): split off gsm48_make_ho_cmd() which doesn't send right away, so that during inter-bsc HO we can make an RR Handover Command to send via the MSC to the remote BSS. assignment_fsm.c: - the Chan Mode Modify in case of re-using the same lchan is not implemented yet, because this was also missing in the previous implementation (OS#3357). osmo_bsc_api.c: - simplify bsc_mr_config() and move to lchan_fsm.c, the only caller; rename to lchan_mr_config(). (bsc_mr_config() used to copy the values to mr_bts_lv twice, once by member assignment and then again with a memcpy.) - During handover, we used to copy the MR config from the old lchan. Since we may handover between FR and HR, rather set the MR Config anew every time, so that FR rates are always available on FR lchans, and never on HR lchans. Depends: I03ee7ce840ecfa0b6a33358e7385528aabd4873f Change-Id: I82e3f918295daa83274a4cf803f046979f284366
2018-07-11add gsm_timers, for Tnnn definitions usable by FSMsNeels Hofmeyr23-180/+513
Change-Id: If212fcd042051b6fa53484254223614c5b93a9c6
2018-07-11move RSL and RR related functions to abis_rsl.[hc]Neels Hofmeyr6-593/+594
It doesn't make sense to spread them all over the place, and introduces odd dependencies from utility programs or regression test linkages. This is a cosmetic patch preparing for lchan activation refactoring. Change-Id: Ie8ee334145bf7bc3a601d395ea7ab9b2009b61c7
2018-07-11fix / clarify rsl dtap cacheNeels Hofmeyr9-161/+186
In certain situations like handover or assignment, DTAP must not go out via RSL directly but is cached to be submitted later. Make sure that all RSL DTAP sending adheres to this: gscon_submit_rsl_dtap() is the new "public" API to request an RSL DTAP to be sent. Depending on the gscon's state, this ends up in the cache or is sent directly. When caching, there is no way to tell whether sending will succeed or not, so semantically it does not make sense to even return a result code. Just return void. Change all "public" callers to gscon_submit_rsl_dtap(). Merge gsm0808_submit_dtap() and submit_dtap() guts to gsm0808_send_rsl_dtap(), static in bsc_subscr_conn_fsm.c: directly send DTAP, assume a conn->lchan to be present, or otherwise trigger a BSSMAP Clear Request. The static submit_dtap() becomes a thin convenience wrapper. Move ho_dtap_cache* functions to bsc_subscr_conn_fsm.c and rename to gscon_dtap_cache_* -- they are not only for handover, also for assignment. Function gsm0808_submit_dtap() m Introduce function gscon_submit_rsl_dtap() Change-Id: I6ffd7aa641c8905292c769400048c96aa0949585
2018-07-11doc: update/fix FSM chartsNeels Hofmeyr14-35/+194
Change-Id: I29e31b753e23a4207662e0e385a337e7df836f45
2018-07-11inter-BSC HO: add neighbor_ident API to manage neighbor-BSS-cellsNeels Hofmeyr21-5/+1968
Depends: Ia71ba742108b5ff020997bfb612ad5eb30d04fcd (libosmocore) Change-Id: I0153d7069817fba9146ddc11214de2757d7d37bf
2018-07-11call osmo_xua_msg_tall_ctx_init()Neels Hofmeyr1-0/+3
xua_msg allocations should not go unnoticed by our root ctx. libosmo-sigtran recently added this API to fix that. Depends: I618878680a096a7f7fc2d83098590f2e4cb08870 (libosmo-sccp) Change-Id: I8d5edda17be82e0cb4a1af3e2a62cbcb3a2ddda3
2018-07-11cosmetic: name osmo-bsc's root ctx 'osmo-bsc', not 'openbsc'Neels Hofmeyr1-1/+1
Change-Id: Ie038bbed436069e7849ba78c3c77c80a68bc3dad
2018-06-28filter: Allocate each ctr group with a different idxPau Espin Pedrol1-2/+18
Fixes following runtime warning: libosmocore/src/rate_ctr.c:219 counter group 'nat:filter' already exists for index 0, instead using index 1. This is a software bug that needs fixing. Forward-port from openbsc.git c08d58802e03a45f95b8f7d28b29dc7026f664ba. Change-Id: I7c5054c374281bb1d4bd1ecd76ddcca7a010d50a
2018-06-28filter: Replace '.' in counter names with ':'Pau Espin Pedrol1-3/+3
The '.' is illegal character in counter names, as they are exported via CTRL interface, where '.' has a special meaning that cannot be used by strings comprising the variable name. Forward-port from openbsc.git 360284d4d797519faed33559b0ae746b6c17e68a. Change-Id: I57b78162701a6a101b5cbaf68aaea89d17a0f819
2018-06-28filter: vty: Print policy list in cmd show access-listPau Espin Pedrol1-16/+17
Change-Id: I3761819fb29f6fe49995ce4c1ae0e9bf92f993cd
2018-06-28Rename bsc_msg_acc_lst_vty_init to have more uniform prefixPau Espin Pedrol3-3/+3
Change-Id: I6f125d040a8f511590ef67ba8babbd2e01c6bf21
2018-06-28Init access_lists before passing it as a parameterPau Espin Pedrol1-3/+1
Previous state is harmless because the pointer is stored but not used in that function. However, it's more clear this way. Change-Id: I048ebc120306ea30ea973d6ee16ed84c9f341183
2018-06-28bsc_vty: Write access list entries when storing bsc configPau Espin Pedrol3-2/+12
Change-Id: Ice8ce203a52b918e1eddb56ea437d082efd634bc
2018-06-28bsc-filter: Remove unused func barr_adapt and set barr_find staticPau Espin Pedrol2-68/+1
bar_find is set as static because it's still being used internally by other functions. Change-Id: I2db8f0ba60cf01929ce2c63edd9859612724de48
2018-06-26lcls: set codec info when performing MGW operationPhilipp Maier3-6/+10
While GSCON is setting the codec info when operating on the MGW, LCLS is not doing that yet. This means that the MDCX messages that are sent by LCLS do not contain any payload type and also no ptime or rtpmap fields. This also causes the following TTCN3 tests to fail: TC_lcls_connect_break TC_lcls_connect_clear TC_lcls_gcr_bway_connect TC_lcls_gcr_bway_dont_connect_csc - Make mgcp_pick_codec() public as bsc_subscr_pick_codec() - use bsc_subscr_pick_codec() to set codec info in osmo_bsc_lcls.c Change-Id: I383d55fa602cda0926dd701ee517a299db578260 Closes: OS#3358
2018-06-25gscon: pick suitable payload type / encoding name for MGCPPhilipp Maier1-0/+34
The GSCON FSM does not care about the codec information when performing interactions with the MGW. Before upgrading the client the codec information was hardcoded to AMR inside the client. Now the client offers APIs to set the codec information. Since this feature is new, osmo-bsc does not set any codec information yet, which causes many of the TTCN3 tests to fail. So lets add some logic to pick suitable codec info. - Hardcode ptime to 20 (is the same for all possible codecs) - Select a codec according to the flags in userplane Change-Id: Ibddc3492572b39f166e3a1b8b8120813ce2dadc2 Related: OS#2728
2018-06-25debian: Move meas related binaries into new package osmo-bsc-meas-utilsPau Espin Pedrol2-0/+7
Only meas_json is added so far, since the other related ones are conditionally built. Change-Id: I35ba3c19fcdfb5663691a67c9876537765963c5d
2018-06-18cosmetic / linking: move str_to_imsi() out of abis_rsl.cNeels Hofmeyr6-11/+14
Move to gsm_04_08_utils.c so that it's possible to use it without linking/stubbing all of RSL. Change-Id: I6e90831d7e618ce3c8e7417082a82c97f6681668
2018-06-15fix dyn TS init: properly identify BTS on OML OPSTART ACKNeels Hofmeyr4-27/+37
Commit "dyn ts, bts_ipaccess_nanobts.c: init PDCH on Chan OPSTART ACK" bf7099262adf0f27e71a08387747c5cb0d459360 Icf6e25ff068e8a2600562d52726ead65e864ec02 introduced signal S_NM_OPSTART_ACK and passed the FOM header to identify the BTS by. But the FOM header's BTS number is zero on each Abis/IP link, and the BTS and TRX are actually identified by msgb->dst == e1inp_sign_link, member trx. So the initial implementation associated *all* Channel OPSTART ACKs with BTS 0. Pass the entire msgb as S_NM_OPSTART_ACK signal argument, implement a abis_nm_get_ts() to retrieve the proper timeslot and use that during timeslot init. Related: OS#3351 OS#3205 Change-Id: I45ce5c24cb62d00f350df1af1be6c11104d74193
2018-06-15osmo-bsc: Add -V param to print versionPau Espin Pedrol1-1/+8
Change-Id: I74e0e40ee6b2ce66d76f151528d9a958683944c7
2018-06-15osmo-bsc: Clean help description of cmd line parametersPau Espin Pedrol1-10/+10
Change-Id: I2ce242e97445785c3f1d965d89e3f1b6ca6a37ab
2018-06-15pcu_sock: Log event pcu_sock createdPau Espin Pedrol1-0/+2
Change-Id: If5691d8e8bae7166e06382db589850ce94c20a30
2018-06-14absi_rsl: Fix segfault in rsl_rx_conn_fail()Harald Welte1-1/+2
When we receive a RSL CONN FAIL IND, it may be that this happens before any RLL is established (and hence a lchan->conn exists), or after the RLLs have been shut down (and hence a lchan->conn doesn't exist anymore). So in this function, it is not legal to unconditionally dereference lchan->conn. Change-Id: I6380f5d2cd9364560ce3947517c84247cf4af0d4 Closes: OS#3182
2018-06-11bsc_subscr_conn_fsm: BSC must not release SCCP connectionHarald Welte1-1/+3
3GPP TS 48.006 section 9.2 states clearly that any SCCP connection release must be initiated by the MSC. for bsc_subscr_conn_fsm, this means that even after sending the BSSMAP CLEAR COMPLETE, we must not terminate the FSM, as this would cause a N-DISCONNET.req to be sent to the stack for the associated SCCP connection. The bsc_subscr_conn_fsm instances will hence stay alive until the MSC eventually decises to release them. Change-Id: Iaaca220b598609b77b600fcfc2f9a78b221c1fbb Closes: OS#3331
2018-06-11Add missing event string name for GSCON_EV_LCLS_FAILHarald Welte1-0/+1
Change-Id: Ia8c8303a87412ce6456c38ae29e3c55de9522ac0
2018-06-10remove traces of osmo-bsc_nat in python test (osmoappdesc/test_runner)Harald Welte2-82/+2
Change-Id: I9127ddb7b29eb82defd3a8afac9c1dbfd424fb72
2018-06-09Remove unused logging subsystems DCC and DMGCPHarald Welte2-14/+4
We use the newly-introduced logging_vty_add_deprecated_subsys() from libosmovty to make sure old config files will still parse even after this change. Change-Id: Ib4f67bb00e1d5460e643717b53f6a4d81278dc5d
2018-06-08Explicitly register CTRL-over-IPA callback with libosmo-sigtranHarald Welte1-1/+5
In Change-Id OSI6b7354f3b23a26bb4eab12213ca3d3b614c8154f we introduced a function called osmo_ss7_asp_rx_unknown() which was supposed ot override a weak symbol in libosmo-sigtran. However, the related change in libosmo-sigtran (I8616f914192000df0ec6547ff4ada80e0f9042a2) was modified later on to use explicit registration of a call-back function instead of weak symbol override. Let's adopt the osmo-bsc code to make use of this explict call-back registration. Change-Id: Id5880ec90dfa00b29cbb0ffea8c8dd50e24742bd Related: OS#2012
2018-06-08Ignore "dest" command in MSC nodeHarald Welte1-0/+12
In Change-Id I6b7354f3b23a26bb4eab12213ca3d3b614c8154f we removed the "dest" vty command, but we should simply ignore it and print a related warning during start. Change-Id: I531825061031918bbb1380e1b485b711e81bcd75
2018-06-08make T10 configurable like the rest of themNeels Hofmeyr4-6/+9
Change-Id: I112c0db17d355d57eb08bc67121ccf49fbf53943
2018-06-08drop dead code: conn->T10, handled by gscon insteadNeels Hofmeyr2-10/+0
Change-Id: Ief20cb0f46dd93f46dd765dca307724dc2b3487c
2018-06-08HO: introduce T7, T8, T101 timersNeels Hofmeyr3-1/+20
Will be used in upcoming inter-BSC handover. Change-Id: If9ecccc793426d214019f299b19d6ffa5a186546
2018-06-08cosmetic: gscon: drop odd use of OSMO_STRINGIFYNeels Hofmeyr1-14/+14
Do not invoke OSMO_STRINGIFY() with arbitrary names, just quote instead. The idea was that OSMO_STRINGIFY() avoids typos by ensuring well-defined names are stringified, but this highlights that OSMO_STRINGIFY() is in fact usable with completely arbitrary arguments and actually lacks the validation part :/ Change-Id: I458cd2cd0d6ddb0e6db3bb8d546a20336ae8c5f1
2018-06-08doc: charts: illustrate new plan for ts and lchansNeels Hofmeyr12-465/+1097
Add lchan and timeslot FSM charts to illustrate planning of how osmo-bsc should handle lchan assignment and release. Modify assignment, handover, lchan-release charts according to the new plan. Change-Id: I18d60de5ee932c962aad0a532965a55d570bb936
2018-06-08doc: add ms-channel-request.mscNeels Hofmeyr2-0/+64
Change-Id: Iab22b8ae85a1a54d2f4002733e6068356368101b
2018-06-08doc: add lchan-release.mscNeels Hofmeyr2-0/+150
Change-Id: Ibcf2326cbc5a5f3f249ae15564825c83b5a063c8
2018-06-08doc: tweak msc charts on Assignment/Handover: act_timerNeels Hofmeyr2-2/+17
Change-Id: I6205e43c227652432548c5c99bed5a197c095da2
2018-06-08cosmetic: handover_test: add IMSI to subscr for loggingNeels Hofmeyr1-1/+11
Change-Id: I52fa8f3183c93ed362d8252d20daf00c60a117c8
2018-06-08store subscriber identity on pagingNeels Hofmeyr1-0/+1
Another small step towards being aware of the subscriber identity. Any connection initiated by paging will subsequently log the subscriber's identity -- of course not necessarily the IMSI, if paging was done by TMSI. This is only for Paging, not the Paging Response; for that see, L3 Complete. Related: OS#2969 Change-Id: I0ab7bedfe693bb4e42a04fb0585b94a730ff2d9b
2018-06-08try to pick up subsrc IMSI on l3-complNeels Hofmeyr1-1/+16
This is a tiny step towards being aware of a connection's subscriber identity. Iff the Layer 3 Complete message contains an IMSI, associate a bsc_subscr with the conn, so that subsequent logging and possibly meas_feed contains the IMSI. For any L3 Complete using TMSI, this has no effect whatsoever. Related: OS#2969 Change-Id: I3b696a0c0932e3abcb682ba231db65755d8c27a6