aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2016-07-28trx: Enable EGPRS handling through burst lengthsTom Tsou7-93/+182
Existing interfaces are coded with the implicit expectation of using a burst sequence length of 148, which is constant with GSM and GPRS. That changes with EGPRS, where the burst length may be 444 due to the use of 8-PSK instead of GMSK modulation. Setup the interface to accept and return a length value with the burst sequence. This allows 444 length bit vectors to/from the EGPRS decoder/encoder. Length is explicitly used as a identifier for 8-PSK vs. GMSK modulated sequences. Change-Id: I90b46b46b11b6ce280e7f8232d5a2fccec2d4f18 Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2016-07-28trx: Add EGPRS coding and decoding proceduresTom Tsou2-8/+1028
Handles uplink decoding and downlink encoding procedures for MCS 1-9. Includes Type 1, 2, and 3 headers and tables from 3GPP TS 44.060 in order to independently recover coding and puncturing scheme (CPS) parameters for each coded message. Change-Id: I0f059ae34c6f36179553cbc972f8becf8179eb55 Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2016-07-27dyn TS: sysmo,lc15: chan_nr_by_sapi(): add missing assertionNeels Hofmeyr2-0/+2
Addition of GSM_PCHAN_TCH_F_TCH_H_PDCH should have added these assertions. They clarify that only 'real' pchan types are expected in this function. Change-Id: Ifd4b6820861ef716237e7eeed149b2add9e7d485
2016-07-27log typo: trx_sched_set_pchan()Neels Hofmeyr1-1/+1
Change-Id: Icdb193ec6dbb95cf0c3e441c196b309aa599efe6
2016-07-27comment typo: common/l1sap.cNeels Hofmeyr1-1/+1
Change-Id: I053766452ee01bed6136a9742551c664666a7989
2016-07-25dyn TS: implement litecell15 specificsNeels Hofmeyr2-9/+33
For chan_nr_by_sapi(), add GSM_PCHAN_TCH_F_TCH_H_PDCH to pick_pchan(). Add GSM_PCHAN_TCH_F_TCH_H_PDCH to pchan_to_logChComb[] for first pchan initialization. In ts_connect_as(), make sure that callers pass proper "real world" pchan types, i.e. reject the "meta" GSM_PCHAN_TCH_F_TCH_H_PDCH pchan constant. In ts_opstart(), connect as PCHAN_NONE since we will only know the desired pchan when the first RSL chan activ is received. Add GSM_PCHAN_TCH_F_TCH_H_PDCH to lchan_to_GsmL1_SubCh_t(), by using its current "real" pchan mode. Call cb_ts_[dis]connected() unconditionally, i.e. not only for TCH_F_PDCH when a pending flag is set. The cb_ts_[dis]connected() will be a no-op if the pchan type is not dynamic. Change-Id: Ie30323f968da25027045c42a7ae7f1e70ca711ae
2016-07-25lc15/oml.c: rename ts_connect() to ts_opstart()Neels Hofmeyr1-2/+2
ts_connect() is only called during OPSTART. Name it such because a special case for OPSTART will be added there for dyn TS. Change-Id: Iba6880d94142096a8371b08f7404035912cadbb0
2016-07-25dyn TS: implement SysmoBTS specificsNeels Hofmeyr2-9/+33
For chan_nr_by_sapi(), add GSM_PCHAN_TCH_F_TCH_H_PDCH to pick_pchan(). Add GSM_PCHAN_TCH_F_TCH_H_PDCH to pchan_to_logChComb[] for first pchan initialization. In ts_connect_as(), make sure that callers pass proper "real world" pchan types, i.e. reject the "meta" GSM_PCHAN_TCH_F_TCH_H_PDCH pchan constant. In ts_opstart(), connect as PCHAN_NONE since we will only know the desired pchan when the first RSL chan activ is received. Add GSM_PCHAN_TCH_F_TCH_H_PDCH to lchan_to_GsmL1_SubCh_t(), by using its current "real" pchan mode. Call cb_ts_[dis]connected() unconditionally, i.e. not only for TCH_F_PDCH when a pending flag is set. The cb_ts_[dis]connected() will be a no-op if the pchan type is not dynamic. Change-Id: Iaffd2fc0aa9fc6c4a2acbc534ce6384392e0635b
2016-07-25sysmo/oml.c: rename ts_connect() to ts_opstart()Neels Hofmeyr1-2/+2
ts_connect() is only called during OPSTART. Name it such because a special case for OPSTART will be added there for dyn TS. Change-Id: I09cc81e79661e8084aeebf8132435c207b2cf422
2016-07-25dyn TS: common TCH/F_TCH/H_PDCH implementationNeels Hofmeyr4-12/+235
common/l1sap: For dyn TS, the BSC will issue RSL Chan Activ requests with a non-standard chan_nr. While the rest of the code now understands that, the L1 phy will not. Translate to standard PDCH (== TCH/F). common/oml: use dyn TS' current pchan mode for lchans config. common/pcu_sock: detect desired PDCH mode of dyn TS. common/rsl: implement reconnection chain of a TS for changing its pchan: * rsl_rx_chan_activ(): ** Add dyn_pchan_from_chan_nr() to derive the requested pchan from the RSL chan_nr IE. ** Notice the need for a pchan change and invoke dyn_ts_l1_reconnect() (s.b.) ** Make Chan Mode IE presence optional, because the non-standard PDCH activation message is simpler and does not require it. ** Do PDCH activation via PCU. * Add dyn_ts_l1_reconnect(): store state and disconnect the L1 channel; then wait for cb_ts_disconnected(). * Add osmo_dyn_ts_disconnected() to cb_ts_disconnected(): verify state and connect with the new pchan type; then wait for cb_ts_connected(). * Add osmo_dyn_ts_connected() to cb_ts_connected(), which re-issues the cached chan activation message from before disconnecting the L1 channel. * Also send an rf chan rel/act ack for dyn TS upon PDCH de/act via PCU. * Add dyn_ts_pdch_release(): on channel release of a dyn TS in PDCH mode, release via the PCU. Call from rsl_rx_rd_chan_rel(). Change-Id: I463bb6b4e57674f091c3badba9257374961c52c7
2016-07-25code dup: join [rsl_]lchan_lookup() from libbsc and osmo-btsNeels Hofmeyr2-54/+12
lchan_lookup in openbsc abis_rsl.c and rsl_lchan_lookup() rsl.c are the same code, except for the log context, which is only set in abis_rsl.c. The common code was factored out to gsm_data_shared.c in openbsc.git. Use the *rc return code argument to keep the logging part in the newly introduced thin wrapper lchan_lookup() in common/rsl.c. This also removes code dup for logging The rsl_lchan_lookup() implementation is removed from osmo-bts, so a recent openbsc is needed to build this. Change-Id: Ibc469b75e31560271be8633d524366442d27e6fb
2016-07-25trx: Add EGPRS tables, sequences, and mappingsTom Tsou12-4/+2471
Includes EGPRS specific convolutional codes, interleaving tables and functions, burst mappings, training sequences, and parity checks from 3GPP TS 44.060 needed to handle MCS codings 1-9. Change-Id: Ie270398dd7a72f282ba53e646853d8de1eabee93 Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2016-07-25prepare dyn TS: split/replace conf_lchans_for_pchan()Neels Hofmeyr2-4/+13
Move the actual switch from static conf_lchans_for_pchan() into new 'public' function conf_lchans_as_pchan(), adding an explicit pchan argument. This allows passing a non-trivial pchan, for dynamic TS. conf_lchans_as_pchan() now takes a pchan argument, so distinguish the naming and drop the 'for_pchan' from conf_lchans_for_pchan(), which takes only a ts argument. Change-Id: I8e458501fff5503c243512aeb3469c12b1f2bbc4
2016-07-25dyn PDCH: code dup: use conf_lchans_as_pchan()Neels Hofmeyr1-2/+6
For ip.access dyn PDCH, call conf_lchans_as_pchan() instead of dup'ing the pchan-to-lchan switch. Change-Id: I979828e08953e83ae579a347334536f52939faf0
2016-07-25error log: rsl.c: typo x2Neels Hofmeyr0-0/+0
Change-Id: I285fdff8260f008d856b9cda811e9fbb936893eb
2016-07-25info log: l1sap.c: add '0x' to hex outputNeels Hofmeyr0-0/+0
Change-Id: If29895de238e586b8298d84b6f0b41e08bea8c91
2016-07-25fix compiler warning: msg_utils.c: fn_chk() constify argNeels Hofmeyr0-0/+0
The only caller dtx_sched_optional() passes const arrays and a warning was issued. Change-Id: I18e0788ef96489d2116a60cae57bd516fe6eae8e
2016-07-25cosmetic: pcu_sock.c: rename ts_is_pdch() to ts_should_be_pdch()Neels Hofmeyr0-0/+0
The function checks whether to switch a TS to/from PDCH, not whether it already is PDCH. Change-Id: Ib4036445d09792636bb2f1a8a665b6b28f32e1a0
2016-07-25cosmetic: clarify TCH/F_PDCH related naming and commentsNeels Hofmeyr6-29/+45
We're about to introduce a new kind of dynamic channel, which will also use parts of the ip.access mode dyn PDCH code paths. Make sure the general parts have general names and mark ip.access specific parts as such. Rename dyn_pdch_ts_[dis]connected() to cb_ts_[dis]connected(). Rename dyn_pdch_complete to ipacc_dyn_pdch_complete(). From cb_ts_[dis]connected(), factor out the current code into static functions ipacc_dyn_pdch_[dis]connected() -- this will make sense once the new dynamic kind is added to cb_ts_[dis]connected(). Change-Id: I7da5b7cb7b48572671f50e0dec97d9eec3083df1
2016-07-25cosmetic: pcu_sock.c: rename ts_is_pdch() to ts_should_be_pdch()Neels Hofmeyr1-2/+2
The function checks whether to switch a TS to/from PDCH, not whether it already is PDCH. Change-Id: Ib4036445d09792636bb2f1a8a665b6b28f32e1a0
2016-07-25fix compiler warning: msg_utils.c: fn_chk() constify argNeels Hofmeyr1-1/+1
The only caller dtx_sched_optional() passes const arrays and a warning was issued. Change-Id: I18e0788ef96489d2116a60cae57bd516fe6eae8e
2016-07-25info log: l1sap.c: add '0x' to hex outputNeels Hofmeyr1-2/+2
Change-Id: If29895de238e586b8298d84b6f0b41e08bea8c91
2016-07-25error log: rsl.c: typo x2Neels Hofmeyr1-2/+2
Change-Id: I285fdff8260f008d856b9cda811e9fbb936893eb
2016-07-25doc: move dyn_pdch.msc to osmo-gsm-manuals.gitNeels Hofmeyr4-44/+2
Also remove related cruft: .gitignore, msc-README and adjust an in-code comment that referenced dyn_pdch.msc. Change-Id: Ie41a453bb5070c1f18793f646dc053a978f43fba
2016-07-16sysmobts: dump PRACH and PTCCH parametersMax1-1/+6
Change-Id: I6b833b21d2bbbd45dfed6a094a674359762d02b7 Related: OS#1545
2016-07-14osmo-bts-trx: init OML only once by sending AVSTATE_OK with OPSTATE_ENABLEDNeels Hofmeyr1-11/+1
When receiving an OPSTART for the BTS object, also set the availability state to OK. Before, the availability would remain at NM_AVSTATE_DEPENDENCY, which caused an unfortunate chain reaction resulting in osmo-bts-trx going through the initialization sequence twice: BTS BSC |<-----| SITE_MANAGER OPSTART n |----->| BTS state change: OPSTATE_DISABLED, AVSTATE_DEPENDENCY o | | This signals to nm_statechg_event() in bts_ipaccess_nanobts.c r | | to (a) Set BTS Attributes and (b) send BTS OPSTART m |<-----| Set BTS Attributes (a) a | | When osmo-bts-trx receives a Set BTS Attributes, it sends l |----->| CHANNEL state change: OPSTATE_DISABLED x8 | | This signals the BSC to Set CHANNEL Attributes and OPSTART i |<-----| Set CHANNEL Attributes x8 n |<-----| CHANNEL OPSTART x8 i |----->| CHANNEL state change: OPSTATE_ENABLED, AVSTATE_OK x8 t | | |<-----| BTS OPSTART (b) | | osmo-bts-trx immediately replies with: |----->| BTS state change: OPSTATE_ENABLED, AVSTATE_DEPENDENCY | | Unfortunately, availability is left at DEPENDENCY, | | and the NM_OC_BTS case in nm_statechg_event() only | | checks for availability, not for the opstate. | | Hence nm_statechg_event() again feels inclined to | | to (a) Set BTS Attributes and (b) send BTS OPSTART, | | --+------+----- This is where the second round starts | | s |<-----| Set BTS Attributes (a) e | | When osmo-bts-trx receives a Set BTS Attributes, it sends c |----->| CHANNEL state change: OPSTATE_DISABLED x8 o | | All channels are disabled again, and then re-launched: n |<-----| Set CHANNEL Attributes x8 d |<-----| CHANNEL OPSTART x8 |----->| CHANNEL state change: OPSTATE_ENABLED, AVSTATE_OK x8 | | i |<-----| BTS OPSTART (b) n | | osmo-bts-trx again sets the OPSTATE_ENABLED, but since i | | this time it was already enabled, no further state change t | | is sent back to the BSC. This nightmare pivots on two hinges: 1. osmo-bts-trx fails to set BTS availability to AVSTATE_OK. 2. nm_statechg_event() fails to heed the OPSTATE_ENABLED of the BTS state change. Note, the configured channels from the first round were not actually taken down, only the OML OPSTATE_DISABLED were sent. In this commit, fix the osmo-bts-trx side: send AVSTATE_OK for the BTS object upon sending OPSTATE_ENABLED, so that only the part marked "normal init" above is run. This change applies the same fix to other OML objects, which should make sense in the same manner, within the current hackish OML implementation: * NM_OC_BTS * NM_OC_SITE_MANAGER * NM_OC_BASEB_TRANSC * NM_OC_GPRS_NSE * NM_OC_GPRS_CELL * NM_OC_GPRS_NSVC This means that the NM_OC_CHANNEL case just above is identical, and thus collapse NM_OC_CHANNEL onto the other cases. Drop the comments from NM_OC_CHANNEL since they merely rephrase the commands themselves. See OS#1770 for BTS and NITB logs. Fixes: OS#1770 Change-Id: I08aa861f6100568c79750f4fbc9a32e1557b9304
2016-07-09log: osmo-bts-trx: change PDTCH block logs to DEBUG levelNeels Hofmeyr1-2/+2
Many erratic PDTCH blocks are expected. To not bloat the log, notifications for this should be on debug level. See http://lists.osmocom.org/pipermail/openbsc/2016-June/009457.html (Thu, 30 Jun 2016 01:49:33 +0300 / Alexander Chemeris <alexander.chemeris@gmail.com> / Re: GPRS on osmo-trx not working) Change-Id: Ie318248aa2b8de455174e72a63c602c7aeae312c
2016-07-09log: osmo-bts-trx: change access burst logs to DEBUG levelNeels Hofmeyr1-2/+2
Many erratic bursts are expected. To not bloat the log, notifications for this should be on debug level. See http://lists.osmocom.org/pipermail/openbsc/2016-July/009482.html (Tue, 5 Jul 2016 15:38:27 -0700 / Tom Tsou <tom@tsou.cc> / Re: osmo-bts-trx error logs -- was: GPRS on osmo-trx not working) Change-Id: If591c087ba8fd48564139e32930050ee8ab07001
2016-07-09cosmetic: osmo-bts-trx: add comment, fix comment typoNeels Hofmeyr2-2/+3
Change-Id: Iea62bd98954d0219ba597613cea6db63f7a6b396
2016-07-07sysmobts: Fix eeprom padding before gpg keyHolger Hans Peter Freyther2-1/+7
Correct the too short padding I introduced in the commit a55b166c6c7af79cbefe8e65fe77b2d61c634d2d. The result needs to be 121 and not 120. Add static asserts to make sure it does not happen again. Change-Id: I3da7f3b8d3c8e12deb8b805cd15ff52a103d4e56
2016-07-05Mark array as static constMax1-3/+3
Change-Id: Ia70519c8f10d55084b53acb68e57debc70549246
2016-06-27sysmobts: screnrc/systemd-service: Use osmo-bts-sysmo instead of sysmobtsHarald Welte2-2/+2
Back in January in commit 634c3e46484a0932f8a04b894be215b9288eecff we changed the executable name from 'sysmobts' to 'osmo-bts-sysmo', which is a change that has not been propagated to the contributed screenrc and systemd init files. Change-Id: I875a0ce4f470226e1b06ed1b7c74ca9471ebb574
2016-06-27TRX: add Uplink DTX support for FR/HRMax1-3/+13
* detect SID and set RTP Marker accordingly (emulate ONSET events) * set proper FN in TCH_IND * detect speech pause and do not send dummy 'bad' frames during that time Change-Id: Id518e5c667df7773c281effb9e75b66bf898f6fc Related: OS#1750
2016-06-24Remove duplicated nibble shift codeMax3-117/+0
Those functions are now part of libosmocore. Change-Id: Iab3206e3b41caff23f656a727605032df9798953
2016-06-23DTXu: move copy-pasted code to common partMax4-36/+20
Abstract code for checking/setting lchan's UL SID flag and RTP Marker into generic function and use it for LC15 and sysmoBTS. Change-Id: Ica5392e92bab29164711163e7b01adb174272883 Related: OS#1750
2016-06-23Make get_lchan_by_chan_nr globally availableMax6-42/+21
* Remove static qualifier * Remove duplicated code - use generic function instead Change-Id: I37a312648771f58d3087471083cfcebbd97ccf1d
2016-06-23fix compiler warning: remove unused variable 'i' in calib_verify()Neels Hofmeyr1-1/+1
Change-Id: Iea6bc47182d021523285aea8d3f6a93ee4eec0eb
2016-06-23fix compiler warning: remove useless 'static' storage class for struct declNeels Hofmeyr1-1/+1
Change-Id: I4d5d11dd89449e4c9315f963576265bccad7e68c
2016-06-23fix compiler warnings: include bts_model.h in phy_link.cNeels Hofmeyr1-0/+1
The file calls bts_model_* API which was yet undeclared. Change-Id: Ib6b30d125906c3abae518fb76da3a158885e3354
2016-06-22vty: install orphaned trx nominal power commandNeels Hofmeyr1-0/+2
The cfg_trx_nominal_power_cmd added 12 days ago in 58e4e18206501c3bffa65f0b876bbc5ebe175d6e was floating. Actually add it to the TRX_NODE. Change-Id: I89d638b2e2bb1fb9baeabe566035ff171f4bfad0
2016-06-22dyn PDCH: safeguard: exit if nothing pending in dyn_pdch_ts_disconnected()Neels Hofmeyr1-1/+3
The function would currently only be called in cases where one of the if branches catches on, but for safety's and clarity's sake, don't ts_connect using as_pchan if no reconnect is pending. Change-Id: I52c34065254e902bb80662fc04540901b36cb4c3
2016-06-22dyn PDCH: lc15: complete for litecell15-bts: implement bts_model_ts_*()Neels Hofmeyr1-2/+49
Analogous to 63b296bdd9a25134ee61ce6f269750e796a8bfca on osmo-bts-sysmo. Implement bts_model_ts_disconnect() by sending an MphDisconnect message to L1. Pass a disconnect callback to invoke dyn_pdch_ts_disconnected() in common/rsl.c. Implement bts_model_ts_connect() by calling ts_connect_as(). Pass a connect cb to invoke dyn_pdch_connected() in common/rsl.c. Change-Id: I8c8c3244c726fd6055cedb22ee11706994ff9cd4
2016-06-22dyn PDCH: lc15: handle TCH/F_PDCH init like TCH/FNeels Hofmeyr1-1/+2
Analogous to 57fc1124e1649fa2b08ef143697689aca4677625 on osmo-bts-sysmo. Change-Id: If65c5a86cbc1b5556b71de8a6744d92113fbbcba
2016-06-22dyn PDCH: lc15: add ts_connect_as(), absorbing ts_connect() gutsNeels Hofmeyr1-3/+10
Analogous to 294fbe104b9fb12f06f7cebe68a4b7a6ed28d5ef on osmo-bts-sysmo. For upcoming dyn PDCH switching, I want to be able to set the pchan dynamically upon ts_connect() and not continue with OPSTART ACK, but with the dyn PDCH. Thus recoin ts_connect(ts) to ts_connect_as(ts, pchan, cb) and leave ts_connect() as a thin wrapper to leave init code unchanged. Change-Id: I7a27193168f83e8c40b6e54d1842f4502d0475e5
2016-06-22dyn PDCH: lc15: chan_nr_by_sapi(): handle TCH/F_PDCH according to ts->flagsNeels Hofmeyr1-3/+15
Analogous to 0d10f0e482cdd50acc916e75a8b3ba1beb94227c on osmo-bts-sysmo. According to the PDCH Active flag, handle a TS as TCH/F or PDCH. Change-Id: I0c97b360136f76bdae8d70d06af9a31fdf75c1ba
2016-06-22lc15: add L3 handle to l1prim messagesNeels Hofmeyr2-11/+127
Analogous to 7158c2ed082eaca6063a501e490e8d3c3b181560 in osmo-bts-sysmo. Place a layer 3 handle into GSM L1 messages to better match up confirmations to respective requests. This handle is a uint32_t transparently returned in the confirmation messages, so a match-up is easy to add. So far, a GSM L1 confirmation message received for a preceding L1 Request was matched only by the prim_id. That meant that only one instance of the same primitive could be waiting for a confirmation at any given time, or the responses would get mixed up: the struct wait_l1_conf instances entered into the fl1h->wlc_list queue would be returned to a possibly mismatching confirmation handler. (Seen during testing of dyn pdch switching.) Send the hLayer3 handle out via prim_init(), using new static functions to produce handles on different scopes: * l1p_handle_for_trx() * l1p_handle_for_ts() * l1p_handle_for_lchan() (These could possibly move to a more general .h/.c file later.) Remember the hLayer3 handle in * struct wait_l1_conf. Match the incoming confirmations' and stored hLayer3 handles up in, and remove a now obsolete comment from: * is_prim_compat() Since the hLayer3 members are at different byte offsets in GsmL1_Prim_t.u.*, use large switch statements to set/get the value: * In prim_init(), extend existing switch statement to set in GsmL1_Prim_t. * Add l1p_get_hLayer3() to retrieve from GsmL1_Prim_t (could possibly move to a more general .h/.c file later). Note that some messages are already using the hLayer3 handle, and will overwrite it after calling prim_init(), so those are not affected. Change-Id: I17f95ba744c3e944a2241809106506f8dd1b24f0
2016-06-22fix lc15 build: put src/common/libbts.a left of -losmogsmNeels Hofmeyr1-1/+1
When switching to the gsm_chan_t_names string list from libosmogsm, libosmogsm actually became a dependency of the local libbts.a. The breaking change is in openbsc.git 29048b2a80b5865ffc41fa4401113c5826227e23 and came in here because gsm_data_shared.h is included from openbsc. Change-Id: I70e5735fc2a212305182d46a7e8485d0199ade7b
2016-06-22Clarify logging messageMax1-1/+1
Change-Id: I3c7be592f4cbdd553f07c4a7084478706a7bd644 Related: OS#1648
2016-06-21Use error values instead of number for RSL errorMax1-2/+2
Change-Id: I0aa695c42a4399828fb8e9c08c905870175b7149
2016-06-21Use libosmocodec functions for AMRMax4-107/+21
Switch to using libosmocodec functions as a preparation step for DTX support as they expose necessary bits. Change-Id: Ie7423032fd06779d78876182ee63538d98906328 Related: OS#1750