path: root/openbsc/src
AgeCommit message (Collapse)AuthorFilesLines
2016-06-17dyn PDCH: add do_pdch_defrag() in new pdch_defrag.[hc]Andreas Eversberg2-1/+161
Will be used in the subsequent commit. Original patch by jolly (1c8a3d828612a6bea343a268072a7dddf4a22480), with extensive review and changes by nhofmeyr: * remove code dup: common find_lchan() replaces find_shared_forward() and find_shared_reverse() and simplifies invocation. * use LOGTSP() instead of debug_bts_trx_ts(), tweak debug logging (missing \n, in-code line breaking). * reword comment for do_pdch_defrag(). * remove code dup: calculate move direction by maths instead of 4 conditionals, and have only a single debug log for "does not lower fragmentation". * add two FIXME comments. Change-Id: Idcaf7ac40cbaf83593946cfe24a6a18a6a688fd5 Patch-by: Andreas Eversberg <> Tweaked-by: Neels Hofmeyr <>
2016-06-17dyn PDCH: Add new_lchan argument to bsc_handover_start()Andreas Eversberg3-9/+13
This is useful if the caller already allocated a new lchan, which will be used to dynamically re-assign lchans. The old behavior is maintained by passing NULL. Change-Id: I2b7151f32f0c04c22f294eb5dd3c7d7dfddf35e7
2016-06-17add DHODEC debug category, tweak DHO nameAndreas Eversberg1-1/+8
Change-Id: If19caca84327ac0267a7e1f0efc84a614b154486
2016-06-17bsc_version.c: update copyright date, add contributorNeels Hofmeyr1-3/+3
Change-Id: Ib3f6763448457915d7473ec5039ab406fd4bdb48
2016-06-16dyn PDCH: set lchan->state after PDCH DEACT / before PDCH ACTNeels Hofmeyr2-23/+12
Do the PDCH DE/ACT before we set the lchan->state to De-/Activation Requested. It makes more sense semantically to change PDCH mode while the lchan is still in NONE status. Thus slightly move some invocations: PDCH ACT: Free the lchan before PDCH activation. Hence remove the lchan_free() call from the rsl_rx_pdch_act_ack() code path; it used to do the PDCH activation first and call lchan_free() in the callback. PDCH DEACT: Set the (TCH) Activation Requested state only within rsl_chan_activate_lchan(), after the PDCH deact is complete. Channel allocator: don't pick channels that have a PDCH PENDING flag set, to avoid using channels that are still in PDCH switchover (despite their state being NONE). The lchan_may_change_pdch() sanity checks are becoming a lot simpler. Change-Id: I4206dd4808e21c3e59393ea7f5ab4f438afff066
2016-06-16dyn PDCH: add lchan sanity checks in PDCH DE/ACT ACKNeels Hofmeyr1-0/+54
Change-Id: I0456cfb88860823c37c14688673e9cbc8d0085d8
2016-06-16dyn PDCH: track pending PDCH de-/activationNeels Hofmeyr1-2/+18
Set and clear pending flags on the TS according to PDCH de-/activation. This will allow changing the time we set the channel state to after PDCH DEACT and before PDCH ACT, in a subsequent commit. Also add a sanity check on whether we're sending conflicting or superfluous PDCH de-/activations on the same TS. Change-Id: Ieae73271df749ded3d90585116aae01f3ad4ee74
2016-06-16dyn PDCH: fix: clear PDCH flags on TS reconnect (e.g. BTS re-connect)Neels Hofmeyr1-0/+2
Change-Id: I89a0ef1794f343fdd06a62237f5732e73f4d2704
2016-06-16dyn PDCH: TS flags: rename one, add three, as enumNeels Hofmeyr2-4/+4
Rename TS_F_PDCH_MODE to TS_F_PDCH_ACTIVE, to more accurately reflect the truth value's meaning. Add TS_F_PDCH_ACT_PENDING and TS_F_PDCH_DEACT_PENDING for sysmoBTS (and possibly other BTS implementations) to remember what to do when the PCU replies with a channel de/activation. Also add TS_F_PDCH_PENDING_MASK to test for both. Change from #define to an enum. Note: These flags are also used in the upcoming osmo-bts-sysmo dyn PDCH commits, so osmo-bts submission depends on this commit. Change-Id: I391a103ab599648b0c5d4f3ad613a6d7c48834b3
2016-06-14Make random extension range configurableMax6-10/+46
Previously if subscriber was automatically created it got assigned random MSISDN number between 20000 and 49999. Make it configurable with new vty command "subscriber-create-on-demand random" and expand vty tests to check it. Change-Id: I040a1d227b0c7a1601dc7c33eccb0007941408a6 Related: OS#1658
2016-06-14Fix SIGABRT on wrong AMR payloadMax1-1/+3
Previously length check have not considered AMR format which requires extra byte for in-band length leading to SIGABRT on incorrect payload from BTS. Change-Id: I800f756fc803accace8c7e0b4a42b3744fe78bb6 Fixes: OS#1731
2016-06-14dyn PDCH: send PDCH ACT for each TCH/F_PDCH on TS EnableNeels Hofmeyr4-4/+48
Add dyn_pdch_init() in new file bsc_dyn_pdch.c (new file to avoid linking issues; bsc_init.c would create undefined references, and putting in a new file is the easiest solution). Call dyn_pdch_init() from nm_statechg_event() whenever a TS is enabled. Revert the |= TS_F_PDCH_MODE chunk from previous commit, since this flag will now be set after dyn_pdch_init() sent out the PDCH ACT and when subsequently the PDCH ACT ACK messages are received in rsl_rx_pdch_act_ack(). Change-Id: I0cad93dec59d546b3f3b19e332e0833496031575
2016-06-14dyn PDCH: Automatically deactivate/activate PDCH on TCH/F+PDCH channelAndreas Eversberg2-3/+39
Handle shared TCH/F+PDCH channels as regular TCH/F channels. Prior to activation, deactivate PDCH mode. After deactivation, restore PDCH mode. Change-Id: I59712b8769cc3959ef114a6e12e77801816fe8b6
2016-06-13add DSUA debug constantDaniel Willmann2-0/+10
Change-Id: I4a3a8189564345700ea4825983ab39a8411227f4
2016-06-12dyn PDCH: allow allocating TCH/F on TCH/F_PDCH slotsNeels Hofmeyr1-9/+29
Remove check for dyn PDCH in _lc_find_trx(), instead call _lc_find_trx() via _lc_find_bts() several times, so that pure TCH/F is preferred to TCH/F_PDCH. Add this logic next to the other channel match decisions in chan_alloc(). BTW, the removed check in _lc_find_trx() whether PDCH is active is not necessary, as described in the added comment for lchan_alloc(). Original patch idea by jolly, but split in two and implemented differently by nhofmeyr. Change-Id: I0c728b922656be03588b775638b610a93f8187d5
2016-06-12dyn PDCH: Fix free slot search for chan_alloc_reverse == trueAndreas Eversberg1-2/+14
For chan_alloc_reverse, _lc_find_trx() should return the last free slot instead of the first. Original patch by jolly, but split in two by nhofmeyr. Change-Id: Iff980242b9b5cb39345aaad0350ee368537677cd
2016-06-10add DRANAP debug constantDaniel Willmann2-0/+10
Change-Id: I6132198ea86979e0ed84df32f2b7117feba497f2
2016-06-07lchan_alloc(): on alloc failure, report original typeNeels Hofmeyr1-4/+8
In lchan_alloc(), there are several decisions to fall back to another type of channel, followed by setting the channel type to the fall back type. So far, this was set regardless of allocation success or failure. If such fall back type is not available, do not modify the local type variable and thus report an S_CHALLOC_ALLOC_FAIL on the type originally requested (report is at the end of lchan_alloc()). Change-Id: Ie3d4cb74f91db0b8c4f5e595a963099de339ad1a
2016-06-06Add warning for unsupported DTX configurationsMax1-2/+6
libosmo-abis do not consider DTX bits while processing TRAU frames. As I do not have equipment to test it, I'm not sure if/how non-IP BTS will work in case of DTX - warn users about it. Change-Id: I94ee69cd309fc343a428ddc66942cd57f2a34c05 Related: OS#22
2016-06-05gprs_gmm.c: don't transmit NOTEXIST when mmctx is NULLNeels Hofmeyr1-1/+4
Add missing mmctx NULL check in gsm0408_rcv_gmm(). gsm48_tx_gmm_status() would dereference mmctx without checking, so we can't call it if mmctx == NULL. Follows up on recent e98ba82d2b07c835: "gprs_gmm.c: Don't try to de-reference NULL mmctx". Change-Id: If59efbde86c76ffe91a0b33be87273783a2a4a02
2016-06-05debug log: cosmetic fixesNeels Hofmeyr1-2/+2
Drop erroneous C from a DEBUGPC, should be on a new line. Drop underscores from IPAC_PDCH_[DE]ACT: all other log messages for IPAC PDCH are without underscores -- git grep "P(.*IPAC.PDCH.*ACT" Change-Id: I8fb7a1c1beabb1f4388517383fd0bdc082d557ca
2016-06-05comment tweak for bsc_handover_start()Neels Hofmeyr1-3/+3
Have a comment only in the .c file to remove dup, tweak wording, use doxygen style. Change-Id: If054dad877a1ca750cd72be9c9d90bcf087bf741
2016-06-05Add regexp authorization policy for IMSIMax4-10/+66
* extend "auth policy" vty command with new option "regexp" * add vty command "authorized-regexp" for setting arbitrary POSIX regular expression * add basic vty test * add optional "regexp" argument to subscriber-create-on-demand vty command With those in place we can now set the regexp against which MS's IMSI will be matched. If IMSI match the regexp than MS is allowed to access the network. If subscriber is already marked as authorized in HLR than it'll be allowed regardless of IMSI matching. The same way we can decide whether to create subscribers on-demand basesd on IMSI regexp match. Similar to authorization this restriction can be overridden by manually creating subscriber via vty, ctrl interface or directly in HLR. Change-Id: I525f4b80676de47d1d422686da2ca012301b0129 Fixes: OS#1647
2016-06-02gprs: more conditionals for Gb specific actionsDaniel Willmann3-8/+14
Change-Id: I213d21b9ddbf19e56269defcc6aa65aca4947140
2016-06-02sgsn_mm_ctx_cleanup_free(): clean up LLME iff present (Gb, not Iu)Daniel Willmann1-3/+10
Assert that llme is unused for non-Gb (Iu) connections, and clean up otherwise. Make sure the cleanup is left below the sgsn_mm_ctx_free() call, as the comment states. Change-Id: I891ae21afc1f4f60580b822273b5435e0e17d46f
2016-06-02gprs_gmm.c: Perform LLME operations only if we have oneHarald Welte1-5/+7
In case the GMM message did not arrive over a Gb interface, there is no LLME (and thus the associated pointer is NULL). Don't try to perform operations on a NULL LLME. Change-Id: If7f24161cd2826f8ee238d4bc1090adf555cea4e
2016-06-02gprs_gmm.c: Make TLLI handling specific to Gb interfaceHarald Welte1-36/+60
Soem of the operations we perform in the GMM layer are specific to the GPRS/EDGE radio access network and its Gb interface. Let's make them conditional to that in preparation of supporting an Iu interface. Change-Id: I3efb7c5087afe8e2331ec17bd9fac5029f4bee6c
2016-06-02gprs_gmm.c: Don't try to de-reference NULL mmctxNeels Hofmeyr1-0/+32
There was a comment in the code that certain GMM messages require a valid mmctx pointer. However, nothing actually checked if that pointer was in fact non-NULL. We plainly crashed if a MS would send us the wrong message in the wrong state. Original patch by Harald Welte, but it broke message validity checking, resulting in sgsn_test failure. This re-implements the NULL check in a different way, as explained by in-code comment. Change-Id: I7908de65bec91599f7042549b832cbbd7ae5a9a8
2016-06-02rename gsm0408_gprs_rcvmsg() to gsm0408_gprs_rcvmsg_gb()Harald Welte2-3/+3
This is the entry point for GMM from Gb. We will create a new one for Iu, so let's be explicit rather than implicit. Change-Id: I93c074bf99db041117c0dc03dc8255879845a875
2016-06-01create_pdp_conf(): factor out PDP context accept dispatch as ↵Daniel Willmann1-9/+14
send_act_pdp_cont_acc() Change-Id: Ibf60e18707ff4aa2e60291e5595386ddda8d8190
2016-06-01prepare sgsn_mm_ctx for Gb and Iu mode (UMTS)Harald Welte6-46/+47
Explicitly mark those sgsn_mm_ctx members that apply for Gb mode and (upcoming) Iu mode, respectively. Add some comments in sgsn_mm_ctx. Change-Id: Ife9b02549f284e2547f16117cf43d7a36948fc4b Tweaked-By: Neels Hofmeyr <>
2016-05-31gprs: use new uint8_t * for kv in gprs_cipher_run()Alexander Couzens1-2/+2
libosmocore changed in bf990bb8 Update internal GPRS cipher API from uint_64 to uint8_t*. Fix a warning. Change-Id: Ib5bfe1fb05c693347b11ff4faadd3fc2205ebd76
2016-05-31Make si2q scheduling optionalMax1-1/+9
Previously si2quater SI messages were always scheduled. Check for neighbor configuration and only schedule si2q when necessary. Add corresponding unit test. Change-Id: Ibe997803ffb894133fd4d838410fe735791d414f Fixes: OS#1727 Reviewed-on: Tested-by: Jenkins Builder Reviewed-by: Holger Freyther <>
2016-05-30bsc: Create minimal SI6 rest octetsHolger Hans Peter Freyther2-1/+42
In GSM R99 SI6 has mandatory SI6 rest octets and so far we did not include them. Add minimal support to generate the right band indicator. Target a slightly older version of the SI6 rest octets as we neither support MBMS nor Random bit stream but should include the band indicator. Change-Id: I417a40eb91f42a3416b4e07bb9fb4d7a01aaa36b Fixes: OS#1698 Related: OS#1725 Reviewed-on: Tested-by: Jenkins Builder Reviewed-by: Max <> Reviewed-by: Holger Freyther <>
2016-05-27tweak db debug log: log TMSI as hexNeels Hofmeyr1-1/+1
Change-Id: I4564c99c145a35fb592c228c1fa84c61ec425fd3 Reviewed-on: Reviewed-by: Harald Welte <> Tested-by: Jenkins Builder
2016-05-25filter/nat: Fix the context for the imsi assignmentHolger Hans Peter Freyther1-1/+1
In c09f8a3b7fb94ccef41e33c32bfe2bff1ffe0e44 as part of a cleanup I accidently changed the talloc context from "con" to "bsc". The issue occurred at an earlier commit when assigning req.ctx to the "wrong" context. The allocation needs to be scoped by the struct nat_sccp_connection and not the connection from BSC to NAT. Before we have a nat_sccp_connection we scope the copied imsi to the bsc_connection and then steal it, but for the identity resp we will always have a nat_sccp_connection and can already use the right context. Change-Id: I53789aad2809e19338ad3b2deb72c4757e7bd524 Related: OS#1733 Reviewed-on: Tested-by: Jenkins Builder Reviewed-by: Harald Welte <> Reviewed-by: daniel <> Reviewed-by: Holger Freyther <>
2016-05-25rtp_proxy.c: Ensure msgb_alloc is large enough for largest AMR frameHarald Welte1-1/+1
In AMR 12.2 (mode 7), the actual RTP payload is 33 bytes. Howeerver, as we store the length of the (dynamically-sized) AMR payload in the first byte, our buffer needs at least 33+1 byte in size. Change-Id: If1ad5d2d68c85733306c75ea62f67fe8fbc143b3 Reviewed-on: Tested-by: Jenkins Builder Reviewed-by: Harald Welte <>
2016-05-23gsm04_08_clear_request(): release loc with arg release=0Neels Hofmeyr1-1/+1
In gsm04_08_clear_request(), in_release == 1 anyway and msc_release_connection() would exit immediately without any effect. Don't confuse the reader by passing release=1 arg. Change-Id: I5bf9eb4889d32ad5e42ac7d096bf62fa3a493e20 Reviewed-on: Reviewed-by: Holger Freyther <> Tested-by: Jenkins Builder
2016-05-23Fix copy-paste error in SI6Max1-1/+1
Fix error which prevented enabling DTX for half-rate channels. Change-Id: I7d41df0068783c8fb33ddeeab1d1dcf63c2c259f Reviewed-on: Tested-by: Jenkins Builder Reviewed-by: Holger Freyther <>
2016-05-22subscr_name(): Handle case for subscr == NULLHarald Welte3-6/+6
subscr_name() was called from several places: * either without a check for subscr being NULL, which for example was causing a segfault if we hand-over a channel before identifying the subscriber * or with an explicit NULL check and the ternary operator (?). We now simplify the code by checking for the NULL Subscriber in subscr_name() itself. Change-Id: Ide09f4a515222eb2ec6c25e7a6a8c5f6cc2ffd4b Reviewed-on: Tested-by: Jenkins Builder Reviewed-by: Holger Freyther <>
2016-05-21drop unneccessary duplicate linking: osmo-nitbNeels Hofmeyr1-1/+0
Change-Id: I430adbb1e0c6382317da282bcf5ef73cf9496f80 Reviewed-on: Tested-by: Jenkins Builder Reviewed-by: Holger Freyther <>
2016-05-21drop unneccessary duplicate/unused linking: ipaccessNeels Hofmeyr1-5/+0
Drop unused linking of libmsc, and drop duplicate linking of libbsc. Change-Id: If2d63adb832c72ff1a22c25a78e06b0c244628d2 Reviewed-on: Tested-by: Jenkins Builder Reviewed-by: Holger Freyther <>
2016-05-21drop unneccessary duplicate linking: osmo-bscNeels Hofmeyr1-1/+0
Change-Id: Ia227abcaa7b1f808646aadb9f53ee2a669699c51 Reviewed-on: Tested-by: Jenkins Builder Reviewed-by: Holger Freyther <>
2016-05-20Make extending subscriber creation easierMax3-11/+17
* rename variable controlling subscriber creation * use enum for subscriber creation policy * move check for subscriber creation policy into separate static function Related: OS#1658, OS#1647 Change-Id: I3b10a9a764fd3a7bb96717a990e52caae16266da Reviewed-on: Tested-by: Jenkins Builder Reviewed-by: Holger Freyther <>
2016-05-20Use proper measurement for handoverMax1-5/+12
Previously *FULL measurements were always used for handover decisions. Those are incorrect in case of DTX - check if it was enabled and use *SUB instead. Note: *SUB values have higher variance so there might be more "bad" values compared to *FULL although real quality remains the same. Change-Id: I95e8e544047a83a256e057a47458678f40a19a15 Related: OS#1701 Reviewed-on: Tested-by: Jenkins Builder Reviewed-by: Harald Welte <>
2016-05-17Move DTX settings to BTSMax5-22/+91
* Add per-BTS DTX settings * Configure Uplink and Downlink DTX separately * Deprecate global DTX option (it was never tested/used anyway) * Use libosmocore function for DTX indicator in System Information (previously it was incorrectly assigned for half-rate channels) Related: OS#22 Change-Id: I3d55168475ad47044b6238b55846ea22bdd518a4 Reviewed-on: Tested-by: Jenkins Builder Reviewed-by: Holger Freyther <>
2016-05-15db.c: implemented incremental migrationVadim Yanitskiy1-18/+35
In the past, normal migration was possible only if the actual schema version differed from the version used in DB by 1. For example, if DB uses an old version 3 and you need to use it with the code written for version 5, the check_db_revision() will convert it to 4 and DB will still use incompatible schema version during Osmo-NITB running time. After next run it will be converted to version 5. This patch replaces a set of 'else-if' checks by a 'switch' without 'break' statements between 'case' labels (waterfall). It makes you able to migrate from current version to the latest despite any difference between them. Change-Id: Ia9c2aa86f96b88ad8a710d0a23879ce219bc82dc Reviewed-on: Tested-by: Jenkins Builder Reviewed-by: Holger Freyther <>
2016-05-05Add human-readable name of SGSN_AUTH_AUTHENTICATEHarald Welte1-0/+1
In commit 4adb136da63a1d3ed523ad85e12fd99fc62f5701 we introduced a new authentication state SGSN_AUTH_AUTHENTICATE, but we didn't add that to auth_state_names[] resulting in log messages printing it abut 'unknown 0x1' rather than something more useful.
2016-05-05sgsn/GSUP: Support MAP-style nested LU/ISDHarald Welte1-0/+22
The existing GSUP code expected the subscriber data to be piggy-backed onto the location update response, rather than a separate (and nested) insert subscriber data request/response phase. With this patch we should now support both the nested as well as the piggy-backed version.
2016-04-29osmo_oap_decode(): Use common argument orderingHarald Welte2-3/+3
In general, if a function generates output data like a msgb (or in this case filling an osmo_oap_message structure), the output argument precedes the source. This is what we use all over libosmo*, and it is modelled after memcpy(), where dst is the first argument, before src. Let's align osmo_oap_decode(). Intestingly, osmo_oap_encode was already correct, so the encode/decode functions used different conventions before.