aboutsummaryrefslogtreecommitdiffstats
path: root/src
AgeCommit message (Collapse)AuthorFilesLines
2018-08-02USSD/hlr_vty.c: print error if EUSE is not foundVadim Yanitskiy1-1/+7
Change-Id: I18045c5e544a99b2414a6f0268f1343df119b9f3
2018-08-01hlr_ussd.h: drop meaningless forward declarationVadim Yanitskiy1-2/+1
Change-Id: I70a5c7c83c2356b779fb1ea7ffe07ccc1e279c22
2018-07-31hlr_ussd.h: use proper libc headersVadim Yanitskiy1-1/+2
Change-Id: I2b9485be08c6cbf188ed1f4059ff28ab65c61dbf
2018-07-31hlr_ussd.h: add #pragma once include guardVadim Yanitskiy1-0/+2
Change-Id: Iba9470e11af2f2609486b9b0b6bfa3207b883a3a
2018-07-30hlr_vty_subscr.c: fix subscriber creation command helpVadim Yanitskiy1-2/+3
Change-Id: Id8dda53cdd10aeedf5451109f9e61d6438c3e09b
2018-07-30USSD: Add support for internal USSD handlersHarald Welte5-88/+249
There are some requests that are best served inside the HLR, as it has access to subscriber information such as MSISDN and IMSI. This unfortunately required quite some restructuring of the USSD related structures including the VTY syntax for adding routes. The default config file has been updated to replicate the *#100# built-in behavior of old OsmoNITB. Closes: OS#2566 Change-Id: I1d09fab810a6bb9ab02904de72dbc9e8a414f9f9
2018-07-30Add osmo-euse-demo as minimalistic test of a External USSD (EUSE) handlerHarald Welte2-0/+253
This is a small program which simply echo's the USSD request message it gets in a quote back to the sender. Its purpose is to illustrate how EUSEs can be implemented using libosmo-gsup-client. Change-Id: I3fb8554ca329cb609c591058254117006f665e73
2018-07-30USSD: fix null-pointer deref in "default-route" vty/config cmdHarald Welte1-1/+2
Change-Id: I5ebaea77be6beaf88771fb584477358a4d80a47f
2018-07-30USSD: Add new "DSS" logging category and use it appropriatelyHarald Welte3-11/+19
Change-Id: I0ac198a49ba70ea40fea18464325f1925797a6e8
2018-07-30USSD: Further unification of log output; Use LOGPSS when possibleHarald Welte1-12/+13
Change-Id: I2c508fe70337d24c4a8b48e0393ad3c979eea0e7
2018-07-30USSD: Send ReturnError component if USSD Code unknown / EUSE disconnectedHarald Welte1-7/+64
Change-Id: Ieef06cec05dd81f600594465d18804362e0fafd6
2018-07-30hlr_ussd: Introduce LOGPSS() macroHarald Welte1-1/+4
Change-Id: I1058ef9fd67af2224c991e43bab02bcf21c9f174
2018-07-30USSD: Add basic dispatch + decode of GSUP-encapsulated SS/USSDHarald Welte4-1/+323
We don't want any SS session to run for more than 30s. The timeout is currently not refreshed. If we need more comprehensive timeout handling, using osmo_fsm for SS sessions might make sense. Change-Id: I5c9fb6b619402d2a23fea9db99590143d85ac11a
2018-07-30USSD: Add Core USSD handling + VTY routing config to HLRHarald Welte7-0/+286
Change-Id: I3cfd7cd401ea32b7e92f1124d129099d9f7dc6e6
2018-07-30hlr: Export + Declare global g_hlr symbolHarald Welte6-15/+9
It is a global variable, and it's sort of bogus if every C file re-declares it as a static global variable that is assigned to the same value as the "real" global one during start-up. Change-Id: I6f3e50f071fb2fbbe58413b4760dc2215055a444
2018-07-30GSUP: Log GSUP route add/removeHarald Welte1-0/+5
Change-Id: I1768d0b8ee7e2821e40a799c9a1c1d900a7ddc48
2018-07-30src/db.c: don't ignore the result of db_bootstrap()Vadim Yanitskiy1-4/+9
Change-Id: I0de3d4c4355c4dee8b832faae347586d1e1b3516
2018-07-30src/db.c: fix: make sure the database is properly closedVadim Yanitskiy1-1/+10
Thanks to ASAN, it was discovered that some part of heap is not released on exit: ==19736==ERROR: LeakSanitizer: detected memory leaks Indirect leak of 94616 byte(s) in 214 object(s) allocated from: #0 0x4e05c6 (/home/wmn/osmocom/osmo-hlr/src/osmo-hlr+0x4e05c6) #1 0x7f9b01061dc6 (/usr/lib/x86_64-linux-gnu/libsqlite3.so.0+0x33dc6) Indirect leak of 1160 byte(s) in 1 object(s) allocated from: #0 0x4e097d (/home/wmn/osmocom/osmo-hlr/src/osmo-hlr+0x4e097d) #1 0x7f9b01061d58 (/usr/lib/x86_64-linux-gnu/libsqlite3.so.0+0x33d58) SUMMARY: AddressSanitizer: 95776 byte(s) leaked in 215 allocation(s). After a long investigation, it was figured out that *sqlite never closes the database* due to 'unfinalized statements or unfinished backups'. The problem was in db_bootstrap(), where several statements were prepared, but not finalized in loop. This was also the reason of *.db-shm / *.db-wal files remaining after the program is closed, and the reason of the following message db.c:77 (283) recovered 18 frames from WAL file *.db-wal Let's fix this and stop ignoring the result of sqlite3_close(). Change-Id: Ibe620d7723b1947d4f60f820bd18435ad0193112 Related: OS#3434
2018-07-30gsup_client: rename gsup_client_* to osmo_gsup_client_*Harald Welte2-34/+34
As we're moving this to a common/shared library now, we need to use the osmo_ namespace prefix for symbol names, struct/type names and constants. Change-Id: I294f8f96af4c5daa2b128962534426e04909290e
2018-07-30import gsup_client.c as new libosmo-gsup-clientHarald Welte4-0/+688
This imports the code from osmo-msc 6afef893e17bce67e4d4119acd34d480ed03ba77 with minimal changes to make it compile. Symbol renaming ot osmo_ prefix is done separately in a follow-up patch to have a as-clean-as-possible import first. Requires: libosmocore.git Change-Id Ie36729996abd30b84d1c30a09f62ebc6a9794950 Change-Id: Ief50054ad135551625b684ed8a0486f7af0b2940
2018-07-30hlr.c: track the use of talloc NULL memory contextsVadim Yanitskiy1-0/+13
Tracking NULL memory contexts allows one to detect memory chunks allocated outside the application's root context, which in most cases are the result of some mistake. For example, the VTY implementation still uses the NULL context, so we have to clean up it manually until this is fixed. At the moment we have at least one chunk allocated outside the application's root context (excluding the VTY context): full talloc report on 'null_context' (total 24 bytes in 2 blocks) struct lookup_helper contains 24 bytes in 1 blocks Change-Id: I7ea86730e090c06b2a5966ae4d04b8144b1cd20a
2018-07-30hlr.c: free root talloc context on exitVadim Yanitskiy1-0/+5
This makes both ASAN and Valgrind happy, because they do expect all allocated heap chunks to be released on exit. Change-Id: I7345dec8d06b0b71a859c16132dc0008cfe17cba
2018-07-30hlr.c: move deinitialization code from SIGINT handlerVadim Yanitskiy1-9/+7
There were a few lines of dead code below the osmo_select_main() loop, while the actual deinitialization code was a part of SIGINT handler. Let's reanimate this dead zone by moving the code there and introducing a global 'loop-breaker' variable. Change-Id: I0e2d673b420193e2bdc1a92377aca542f3a19229
2018-06-24Add "show gsup-connections" VTY commandHarald Welte1-2/+34
This can help with debugging and give operational insight. Change-Id: I977b4b8cdb36dab42b3d736a28d8b5f17cff04cd
2018-06-24gsup_router: Use "#pragma once" and add missing #includesHarald Welte1-0/+5
Change-Id: I2cc43ea5846e5b98281efc897252c8dcc3ef5728
2018-06-24move osmo_gsup_addr_send() declaration from luop.h to gsup_router.hHarald Welte2-3/+4
Change-Id: I33165b7b58bd8c863083ed50ce21e3c032c579f5
2018-06-16gsup_server: Add "priv" pointer and make it point to 'struct hlr'Harald Welte3-3/+8
Change-Id: Iada68996b7f4cbdcca92b254ddaf6b88b962e6f1
2018-06-15disable blind subscriber insertion into every VLR/SGSNHarald Welte1-3/+7
During the attempt to fix OS#2785 in Change-Id I6a92ca34cdaadca9eacc774bb1ca386c325ba865, we introduced logic that would blindly insert a subscriber *concurrently* in all VLRs/SGSNs of the network on any update of the subscriber. Before that patch, we didn't update the current serving SGSN/VLR, and after the change we created subscribers in all SGSNs/VLRs, of which all-1 are not serving the subscriber at that time. We'll have to go back to the original behavior until a proper fix can be introduced. Change-Id: Ibf6f1b21b08560d4d8f41bbe7782d40abf4585f8 Related: OS#3091 Related: OS#2785
2018-06-11Return proper GSUP error in case of too short IMSIHarald Welte1-0/+28
This fixes HLR_Tests.TC_gsup_sai_err_invalid_imsi Change-Id: I4f51abdf44dfc62d7e8792341aad6dafe58923da Closes: OS#3028
2018-05-18move creation of insert subscriber data messages to a common functionStefan Sperling4-66/+102
Move code to create an Insert Subscriber Data message into a common function which can be shared by hlr.c and luop.c. As a consequence, we always encode gsup.cn_domain in the corresponding msgb and must adjust expected output of the 'gsup' test accordingly. Change-Id: I6a92ca34cdaadca9eacc774bb1ca386c325ba865 Requested-by: neels Related: OS#2785
2018-05-04add error handling to osmo_gsup_configure_wildcard_apn()Neels Hofmeyr4-8/+20
Follow-up to I83d9ef2868bbb01e3f1ddb7920fe735aca172b15 as requested in code review. Change-Id: Ifcee1e0d275741c1172b208600851861adb13238
2018-05-04add gsup_test to catch OS#3231Neels Hofmeyr4-17/+47
Encode an Insert Subscr Data with is_ps == true to trigger the encoding bug described in OS#3231, i.e. show that it is fixed. Move osmo_gsup_addr_send() to a separate .c file, so that it can be overridden in the regression test to just dump the msgb instead. I used this test to reproduce issue OS#3231, and now that it's here we might as well keep it, and possibly expand on it in the future. Related: OS#3231 Change-Id: Id1453351758f3e1a9ff03bd99fefaf51886e77da
2018-05-04fix luop crash: use buffer for APN that remains validNeels Hofmeyr4-7/+15
In osmo_gsup_configure_wildcard_apn(), do not compose APN into a local buffer that becomes invalid as soon as the function exits. Instead, use a caller provided buf. Fixes OS#3231 crash: ==20030==ERROR: AddressSanitizer: stack-buffer-underflow on address 0x7fffffffd9c0 at pc 0x7ffff6e9b6c2 bp 0x7fffffffd900 sp 0x7fffffffd0b0 READ of size 2 at 0x7fffffffd9c0 thread T0 #0 0x7ffff6e9b6c1 (/usr/lib/x86_64-linux-gnu/libasan.so.4+0x766c1) #1 0x7ffff6314419 in tlv_put ../../../../src/libosmocore/include/osmocom/gsm/tlv.h:107 #2 0x7ffff6314419 in msgb_tlv_put ../../../../src/libosmocore/include/osmocom/gsm/tlv.h:299 #3 0x7ffff6314419 in encode_pdp_info ../../../../src/libosmocore/src/gsm/gsup.c:419 #4 0x7ffff6314419 in osmo_gsup_encode ../../../../src/libosmocore/src/gsm/gsup.c:535 #5 0x555555580016 in _luop_tx_gsup ../../../src/osmo-hlr/src/luop.c:54 #6 0x5555555809d8 in lu_op_tx_insert_subscr_data ../../../src/osmo-hlr/src/luop.c:264 #7 0x55555558b356 in rx_upd_loc_req ../../../src/osmo-hlr/src/hlr.c:306 #8 0x55555558b356 in read_cb ../../../src/osmo-hlr/src/hlr.c:365 #9 0x555555586671 in osmo_gsup_server_read_cb ../../../src/osmo-hlr/src/gsup_server.c:105 #10 0x7ffff5b35911 in ipa_server_conn_read ../../../src/libosmo-abis/src/input/ipa.c:356 #11 0x7ffff5b35911 in ipa_server_conn_cb ../../../src/libosmo-abis/src/input/ipa.c:387 #12 0x7ffff5e5541f in osmo_fd_disp_fds ../../../src/libosmocore/src/select.c:216 #13 0x7ffff5e5541f in osmo_select_main ../../../src/libosmocore/src/select.c:256 #14 0x5555555791b6 in main ../../../src/osmo-hlr/src/hlr.c:600 #15 0x7ffff4707a86 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21a86) #16 0x555555579679 in _start (/usr/local/bin/osmo-hlr+0x25679) Address 0x7fffffffd9c0 is located in stack of thread T0 at offset 16 in frame #0 0x7ffff63131ff in osmo_gsup_encode ../../../../src/libosmocore/src/gsm/gsup.c:481 This frame has 1 object(s): [32, 64) 'bcd_buf' <== Memory access at offset 16 underflows this variable Related: OS#3231 Change-Id: I83d9ef2868bbb01e3f1ddb7920fe735aca172b15
2018-05-03don't forget to mark luop as a packet switched connectionStefan Sperling1-0/+1
In rx_upd_loc_req() we set the connection's supports_ps field but forgot to also set the equivalent field in the corresponding luop. Change-Id: Ie175a067ac1324cdd39d7f756a40fab923421793 Related: OS#2785
2018-05-02rewrite subscriber_update_notify() without calls into luopStefan Sperling4-21/+94
This function relied on implementation details of the luop code. Port what is necessary for an independent Insert Subscriber Data Tx operation from the luop code into this function. A next possible step would be to try to merge both of these into a common implementation. This will be addressed in a follow-up change as soon as this change is merged. The TTCN3 test TC_vty_msisdn_isd is still passing (it currently triggers the "circuit switched domain" case because it does not advertise itself as an SGSN in the IPA unit name). Change-Id: I06c43ece2b48dc63d599000eb6d6d51e08963067 Related: OS#2785
2018-04-17Remove unused src/db_test.cPau Espin Pedrol2-91/+0
There's a larger test suite in use in tests/db/db_test.c Change-Id: Ifa409df9b4bb94bd4e8f15568486066393009494
2018-04-17use osmo_init_logging2Pau Espin Pedrol3-3/+3
Change-Id: If4449cce1af46be22cc370abd3a6da8e22a31fa5
2018-04-10notify GSUP clients when HLR subscriber information changesStefan Sperling3-0/+40
Add a function which triggers subscriber update notifications to all connected GSUP clients, and invoke it when the MSISDN of a subscriber is changed via VTY. This makes the TTCN3 HLR test TC_vty_msisdn_isd pass. Note that the new function currently relies on implementation details of the Location Update Operation (luop) code. Because of this we currently log a slightly misleading message when the updated Insert Subscriber Data message is sent: "luop.c:161 LU OP state change: LU RECEIVED -> ISD SENT" This message is misleading because, in fact, no location update message was received from a GSUP client at that moment. So while this change fixes the externally visible behaviour, we may want to follow this up with some refactoring to avoid relying on luop internals. It seems acceptable to do that in a separate step since such a change will be more involved and harder to review. We may want to trigger such notifications in other situations as well. This is left for future work, too. There are no TTCN3 test cases for other situations yet, as far as I can see. Related: OS#2785 Change-Id: Iffe1d7afb9fc7dbae542f70bbf5391ddc08a14b4
2018-03-29more robust usage of osmo_timer API for osmo-hlr luop timerStefan Sperling1-2/+5
Use osmo_timer_setup() to set up the luop timer, instead of settting the timer up manually. Delete the timer before the luop is freed to prevent a potential crash in case the timer is already armed and the function call chain leading up to lu_op_free() does not cancel the timer. Found while studying code to prepare work on issue OS#2785. This change has been tested with 'make check' and TTCN3 HLR tests. Related: OS#2785 Change-Id: I1a7596675b2d94217895f0f3d3f67b86ef123c2e
2018-03-01Fix responses to PURGE MSHarald Welte1-2/+2
When performing PURGE MS, OsmoHLR before this patch used toreturn an error even in the successful case. The reasone for this is some wrong assumptions about the return values of db_subscr_purge(). Change-Id: Ie3005e2eeb424715fd77f202e9fe18464ba211b7
2018-03-01vty: Don't print error if removing auth data while none presentHarald Welte1-2/+2
It's a bit confusing to the user if he wants to set AUD=none and it's already none. Avoid printing error messages in that case. Change-Id: I5f32dd5d6e4939c738faf442c7e86671d18777f8
2018-02-14osmo-hlr: Add talloc context introspection via VTYHarald Welte2-0/+3
This requires libosmocore with Change-Id I43fc42880b22294d83c565ae600ac65e4f38b30d or later. Change-Id: Ibc2c333b83f85fa69a364e3e342f12f50dbc2f70
2017-12-20fix debug log: put 'deriving 2G from 3G' in proper placeNeels Hofmeyr1-1/+2
Don't log "deriving 2G from 3G" when we're actually calculating separately; log it when we're actually deriving from 3G. Add log "calculating 2G separately" in the right place. The test output changes show that each test said "separate 2G" at the top while logging "deriving 2G from 3G" further down, which was obviously wrong. Change-Id: I6679d7ef8fdcae39a0c2aff7ac638e63dddb10dc
2017-12-15luop.c: Transform FIXME from warning to pragma messagePau Espin Pedrol1-2/+1
This way the issue is still visible but we can enable Werror to avoid introducing new warnings. Change-Id: I6c9b195bf0e3f853e202cdbdb72d35d83cd2a2ab
2017-11-29osmo-hlr: log details for unknown IMSI / no auth data / db errorNeels Hofmeyr1-0/+7
For unknown IMSI and no auth data for a known IMSI, log respective messages on NOTICE level. For database error, log on ERROR level. Change-Id: I3838fa78567e7e92d797d90b8b90865d9ebba90a
2017-11-29db_get_auth_data / db_get_auc: clarify return valuesNeels Hofmeyr4-16/+35
Differentiate between "IMSI unknown" and "IMSI has no auth data": in case of known IMSI lacking auth data, return -ENOKEY instead of -ENOENT. Fix API doc comments to reflect what the functions actually return, on top of adding the -ENOKEY detail. Adjust db_test expectations from -ENOENT to -ENOKEY where appropriate. Adjust VTY and CTRL command rc evaluation. A subsequent patch will use these return values to log details on each of these situations. Change-Id: Icf6304d23585f2ed45e050fa27c787f2d66fd3f7
2017-11-22return GMM_CAUSE_IMSI_UNKNOWN if there is no auth dataNeels Hofmeyr1-0/+1
If we have a subscriber entry that lacks auth data, we currently return GMM_CAUSE_NET_FAIL, which in the MSC log looks like the HLR is not connected or something grave. Instead, return GMM_CAUSE_IMSI_UNKNOWN. This changes the OsmoMSC log in this way: Before: DVLR <001e> VLR_Authenticate(901700000014701)[0x5555558dabb0]{VLR_SUB_AS_NEEDS_AUTH_WAIT_AI}: GSUP: rx Auth Info Error cause: 17: Network failure After: DVLR <001e> VLR_Authenticate(901700000014701)[0x5555558dabb0]{VLR_SUB_AS_NEEDS_AUTH_WAIT_AI}: GSUP: rx Auth Info Error cause: 2: IMSI unknown in HLR A better cause value would be something that says "IMSI known, but we have no auth data", but since such cause value is not defined, the plain "IMSI unknown" seems to be the best match. Change-Id: I90df7b255317df1e5d968e7ce3b9d2c404b98db8
2017-11-22cosmetic: rx_send_auth_info(): decide error cause with switch()Neels Hofmeyr1-5/+9
Prepare for tweaking error handling in a subsequent patch: use switch() instead of if(). Prepares-for: I90df7b255317df1e5d968e7ce3b9d2c404b98db8 Change-Id: I1f628aa9d62b778951726bebec8cf338444fc897
2017-11-21db_test: don't verify SQLite issued error messages, they might changeNeels Hofmeyr5-8/+10
A user on openbsc@ complained that with SQLite 3.8.2, the db_test fails with --- expected +++ stderr -DDB (2067) abort at 18 in [INSERT INTO subscriber (imsi) VALUES ($imsi)]: UNIQUE constraint failed: subscriber.imsi +DDB (2067) abort at 35 in [INSERT INTO subscriber (imsi) VALUES ($imsi)]: UNIQUE constraint failed: subscriber.imsi i.e. a trivial difference in the error message issued by SQLite. For db_test, don't output any SQLite error messages: Add argument enable_sqlite_logging, pass as true, except in db_test.c. Remove the SQLite error messages from expected output. (Note that there is a src/db_test.c program that's not of interest here, this is about the tests/db/db_test.c) Change-Id: I2513d71cc0072aef8d08f47d0a1959f311176229
2017-11-12db-tool: error-exit on too many argumentsNeels Hofmeyr1-0/+6
Each arg parsing should increment optind, so if there are any surplus args in the end, that's an error. Change-Id: I9fc0a87d11db8c35061568e3f8b5a5547931a961