aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2020-12-28support the XOR algorithm for UMTS AKAlaforge/xor3gHarald Welte5-9/+79
Test USIMs as specified by 3GPP use the XOR algorithm not only for 2G but also for 3G. libosmocore includes the XOR-3G support since v1.3.0, but osmo-hlr somehow never made use of it. Change-Id: I3a452af9c18cd90d00ab4766d6bd1679456bc1a2 Closes: OS#4924
2020-11-17USSD: add special 'idle' handler to IUSE for testingVadim Yanitskiy4-4/+24
Change-Id: I0d566a60e95ce2da951f22ad47c6155c5b6a338c
2020-11-17USSD: fix handle_ussd(): do not free() unconditionallyVadim Yanitskiy1-16/+23
An internal handler may want to continue session, e.g. to request more information from the MS. Let's make the handlers responsible for session state management, and check that state before calling ss_session_free(), so a session can remain alive. Before this patch ss->state was not set/used at all... Change-Id: I49262e7fe26f29dedbf126087cfb8f3bb3c548dc
2020-11-17doc/manuals: re-organize description of internal USSD handlersVadim Yanitskiy1-2/+14
Change-Id: Ieddde02f3f41e0eb05b7223026da4252c17c3712
2020-11-17doc/manuals: fix s/There/The/ in 'USSD Configuration'Vadim Yanitskiy1-1/+1
Change-Id: Idbff93b6be5f546f18642ee330746e8734378b39
2020-10-29cosmetic: fix spelling in logging message: existAnt -> existEntVadim Yanitskiy1-1/+1
Change-Id: Id803d0c71f3762b8353289853918ea78859780b4
2020-10-18Use OSMO_FD_* instead of deprecated BSC_FD_*Harald Welte1-3/+3
Change-Id: I24a9a81382ea723ad20b8caa61fb5c2abcdd86d0
2020-10-12contrib/jenkins: Enable parallel make in make distcheckPau Espin Pedrol1-2/+2
Change-Id: I1973e7a2a3be07b2db1db1cf5f05fd29101ee06a Related: OS#4421
2020-10-12Set TCP NODELAY sockopt to GSUP cli and srv connectionsPau Espin Pedrol2-0/+33
GSUP is message based on top of IPA, and hence TCP. We don't want to have Nagle algorithm enabled, since we are interested in having messages sent as quickly as possible and there's no need for lower layers to wait for more data (because we send all the message data at once). Related: OS#4499 Change-Id: I4653b95ef0d4e1184f81f28408e9eb5d665206ec
2020-09-23osmo-hlr-db-tool: Make import from osmo-nitb less "lossy"Keith1-5/+98
Include the IMEI and the last seen time in an import from an osmo-nitb database. Change-Id: Ic47e549be3551ae43ab6a84228d47ae03e9652a6
2020-08-18Support setting rt-prio and cpu-affinity mask through VTYPau Espin Pedrol8-8/+66
Change-Id: I33101aae3e2851febc335f6fbf96228eab7cf6df Depends: libosmocore.git Change-Id If76a4bd2cc7b3c7adf5d84790a944d78be70e10a Depends: osmo-gsm-masnuals.git Change-Id Icd75769ef630c3fa985fc5e2154d5521689cdd3c Related: SYS#4986
2020-08-18doc: Update VTY reference xml filePau Espin Pedrol1-7/+313
Change-Id: Ifdefba331ae2542b1cdc5860d0f9e53ef9f703c4
2020-08-18configure.ac: Fix trailing whitespacePau Espin Pedrol1-1/+1
Change-Id: If0569167922695bb88c8f168f89fa300dd181c72
2020-08-13debian/control: change maintainer to the Osmocom team / mailing listVadim Yanitskiy1-1/+1
Change-Id: I6b38640b57480c6950be491eeb3c5167be1c6aab
2020-06-29manual: describe subscriber import by SQLNeels Hofmeyr2-1/+81
It seems a bad idea to cement the internal SQL structure in the user manual, but since we currently lack a safe and portable import mechanism (like CSV import in osmo-hlr-db-tool), this is currently valuable info to users. Change-Id: I3246e6d5364215a71c33b5aca876deab7b6cfd70
2020-06-03osmo-mslookup-client: fix segfault for respond_error() callerNeels Hofmeyr1-2/+2
respond_error() passes r == 0. On error, consider it the last response for that request. Change-Id: I1acb0b8aa00c098d1f1f1cc17035daa38ce29fd3
2020-05-31gsup_server: fix typo: s/omso_gsup_message/osmo_gsup_message/Vadim Yanitskiy1-1/+1
Change-Id: I77eac6df9836f2361d87df7ba5ab6fc14ba06b1d
2020-05-22Makefile.am: EXTRA_DIST: debian, contrib/*.spec.inOliver Smith1-0/+2
Change-Id: I401a4849ae186bddd667446ff7247976090e1db7
2020-05-19contrib: integrate RPM specOliver Smith3-7/+11
Remove OpenSUSE bug report link, set version to @VERSION@, make it build with CentOS 8 etc. Related: OS#4550 Change-Id: I38f80d0f867a2bbaa09b5a42cad5028f23a8effa
2020-05-19contrib: import RPM specOliver Smith1-0/+189
Copy the RPM spec file from: https://build.opensuse.org/project/show/home:mnhauke:osmocom:nightly Related: OS#4550 Change-Id: Icb6f4335d5157f058b39701e9fcb332264911ba3
2020-05-12doc: do not use loglevel info for log category ssPhilipp Maier2-2/+2
The log category ss uses info as loglevel vor ss, this is to verbose, lets use notice instead. Change-Id: I192a5f07cb7f45adb6f3af1c511b706738bdadf4
2020-05-09esme_dgsm.py: add --always-fail option for debugging SMPPNeels Hofmeyr1-0/+26
Change-Id: Ibacf2676cae40712c89b57ced34085311d9a416d
2020-05-04hlr_subscr_nam(): fix condition to fix nam=false notificationsNeels Hofmeyr1-2/+2
Firstly, vlr_number[] is an array and we need to check the first char for nul instead of the pointer. Also, osmo_ipa_name_set_str() returns zero on success, so the condition is reversed. hlr_subscr_nam() was rewritten in I3a8dff3d4a1cbe10d6ab08257a0138d6b2a082d9 ad868e29ba1b838f151cdf2ad9cb4f068a817493 and this likely fixes a bug introduced there. Related: coverity CID#210169 Change-Id: I3a0e9ed4b865c88aa4a6341a3bf1a96c10d20ed9
2020-05-04osmo_mslookup_server_mdns_rx(): handle read() rc == 0Neels Hofmeyr1-1/+1
Coverity says "tainted buffer", I hope it means the case of read() returning zero. Related: coverity CID#210170 Change-Id: Ia2d57cb8bbacc6f54dc410047da69a983aedd24d
2020-05-04gsup_server.c: properly handle negative rc from osmo_gsup_conn_ccm_get()Neels Hofmeyr1-1/+1
Related: coverity CID#210171 Change-Id: I5b56fe33cbc75679a3fffc034a53f06cd0e4043b
2020-05-04osmo_gsup_req_new(): require from_peer != NULLNeels Hofmeyr1-2/+7
In practice, from_peer is always non-NULL, yet some conditions checked against NULL, looking like a possible NULL deref. Require non-NULL. Related: coverity CID#210172 Change-Id: I3cb73ec0d31f84d4b613ecb026169c944d240e4c
2020-05-04make osmo_cni_peer_id_cmp() NULL safeNeels Hofmeyr1-0/+6
Related: coverity CID#210172 Change-Id: I400b23ac3f0eb68d5e4c757ea02d130fbe12f80b
2020-04-30auc3g: officially wrap IND around IND_bitlen spaceNeels Hofmeyr1-8/+9
To determine distinct IND pools for each connected VLR, we need to pick ever increasing values for any new peer showing up. Each subscriber's individual IND_bitlen is then required to modulo the least significant N of bits that fit in its IND_bitlen to effectively round-robin in the available IND pool space. So far we did that but issued a warning message. This is actually exactly what we want and it doesn't need to be treated like it weren't so. Change-Id: I716d8a8a249235c8093d7a6a78b3535d893d867e
2020-04-30vty: show subscriber: show lu d,h,m,s ago, not just secondsNeels Hofmeyr1-2/+14
Change-Id: I0fe34e0f065160ef959b2b7b4dd040f3f2985f43
2020-04-30vty: show subscriber: change format of 'last LU seen'Neels Hofmeyr1-11/+7
So far, the time string format comes from ctime_r, and we manually add "UTC" to it. The ctime_r format is wildly chaotic IMHO, mixing weekday, day-of-month and hour and year in very unsorted ways. Adding "UTC" to it is non-standard. Instead use an ISO-8601 standardized time string via strftime(). Change-Id: I6731968f05050399f4dd43b241290186e0c59e1a
2020-04-30drop error log for when a subscriber does not existNeels Hofmeyr2-30/+4
Checking for existence of a subscriber and seeing that there is none is not inherently an error. However, osmo-hlr currently logs on all occasions: DAUC ERROR Cannot read subscriber from db: MSISDN='1001': No such subscriber This spams the ERROR log level. Particularly when a D-GSM setup does subscriber existence checks for every incoming mslookup request, that potentially creates constant ERROR logging. The "No such subscriber" part comes from db_sel(), which might also return an sqlite3_errmsg(). We still want those sqlite3_errmsg()es in the ERROR log. Hence print an ERROR log only if db_sel() returns an rc != -ENOENT. Change-Id: I5044e9b4519b948edc4e451cef0f7830d315619b
2020-04-30adoc: add D-GSM chapter to osmohlr-usermanualNeels Hofmeyr3-0/+515
Change-Id: I392b5523870c2ef3267179160028d26f3f761b77
2020-04-30hlr_vty_subscr: prettier output for last LU seenOliver Smith1-2/+7
Extend the "last LU seen on ..." line with the amount of seconds that passed since now, or "(invalid timestamp)". Patch split from Id7fc50567211a0870ac0524f6dee94d4513781ba, because it depends on timestamp_age which was just added in Ife4a61d71926d08f310a1aeed9d9f1974f64178b. Change-Id: I24f9e86c1aa0b1576290094e024562f41b988f37
2020-04-30gsup_server: send routing error back to the correct peerNeels Hofmeyr1-3/+14
If a peer attempts to add a route to an ipa-name that we already have in the routing system, don't send the routing error to the peer that already has the name, but to the peer that attempts to re-use it and would cause the collision. This is fixing a situation where for example a locally attached MSC has name 'MSC-1', and a remote site is proxying GSUP here for a remote MSC that also has the name 'MSC-1'. Send the routing error back to the proxy, not local 'MSC-1'. Change-Id: Icafaedc11b5925149d338bdcb987ae985a7323d6
2020-04-30D-GSM 3/n: implement roaming by mslookup in osmo-hlrNeels Hofmeyr21-9/+2006
Add mslookup client to find remote home HLRs of unknown IMSIs, and proxy/forward GSUP for those to the right remote HLR instances. Add remote_hlr.c to manage one GSUP client per remote HLR GSUP address. Add proxy.c to keep state about remotely handled IMSIs (remote GSUP address, MSISDN, and probably more in future patches). The mslookup_server that determines whether a given MSISDN is attached locally now also needs to look in the proxy record: it is always the osmo-hlr immediately peering for the MSC that should respond to mslookup service address queries like SIP and SMPP. (Only gsup.hlr service is always answered by the home HLR.) Add dgsm.c to set up an mdns mslookup client, ask for IMSI homes, and to decide which GSUP is handled locally and which needs to go to a remote HLR. Add full VTY config and VTY tests. For a detailed overview of the D-GSM and mslookup related files, please see the elaborate comment at the top of mslookup.c (already added in an earlier patch). Change-Id: I2fe453553c90e6ee527ed13a13089900efd488aa
2020-04-30D-GSM 2/n: implement mDNS method of mslookup serverNeels Hofmeyr11-1/+605
Implement the mslookup server's mDNS responder, to actually service remote mslookup requests: - VTY mslookup/server config with service names, - the mslookup_mdns_server listening for mslookup requests, For a detailed overview of the D-GSM and mslookup related files, please see the elaborate comment at the top of mslookup.c (already added in an earlier patch). Change-Id: I5cae6459090588b4dd292be90a5e8903432669d2
2020-04-30D-GSM 1/n: add mslookup server in osmo-hlrNeels Hofmeyr8-0/+537
Implement the mslookup server to service remote mslookup requests. This patch merely adds the logic to answer incoming mslookup requests, an actual method to receive requests (mDNS) follows in a subsequent patch. - API to configure service names and addresses for the local site (per MSC). - determine whether a subscriber is on a local MSC (checking the local proxy will be added in subsequent patch that adds proxy capability). - VTY config follows in a subsequent patch. For a detailed overview of the D-GSM and mslookup related files, please see the elaborate comment at the top of mslookup.c (already added in an earlier patch). Change-Id: Ife4a61d71926d08f310a1aeed9d9f1974f64178b
2020-04-30test_nodes.vty: remove cruftNeels Hofmeyr1-64/+1
This stuff is not testing osmo-hlr specific nodes, remove. Change-Id: Ia11a209778b78ab02424e2abf3f9004fe97cf570
2020-04-30enlarge the GSUP message headroomNeels Hofmeyr1-1/+1
Make room for (more) arbitrary IPA headers, like longer IPA names as configured by the user. Change-Id: I7d86f2dadcae29fe1550ea2c9773394ab31a837b
2020-04-30db v5: prep for D-GSM: add vlr_via_proxy and sgsn_via_proxyNeels Hofmeyr5-14/+75
D-GSM will store in the HLR DB whether a locally connected MSC has attached the subscriber (last_lu_seen[_ps]), or whether the attach happened via a GSUP proxy from a different site. Add columns for this separately in this patch. Change-Id: I98c7b3870559ede84adf56e4bf111f53c7487745
2020-04-30gsup client: add up_down_cb(), add osmo_gsup_client_create3()Neels Hofmeyr2-20/+74
For the GSUP clients in upcoming D-GSM enabled osmo-hlr, it will be necessary to trigger an event as soon as a GSUP client connection becomes ready for communication. Add the osmo_gsup_client->up_down_cb. Add osmo_gsup_client_create3() to pass the up_down_cb in the arguments. Also add a cb data argument to populate the already existing osmo_gsup_client->data item directly from osmo_gsup_client_create3(). We need the callbacks and data pointer in the osmo_gsup_client_create() function right before startup, because this function immediately starts up the connection. Who knows whether callbacks might trigger right away. Because there are so many arguments, and to prevent the need for ever new versions of this function, pass the arguments as an extendable struct. Change-Id: I6f181e42b678465bc9945f192559dc57d2083c6d
2020-04-302/2: wrap ipa_name in osmo_cni_peer_id with type enum and unionNeels Hofmeyr17-52/+217
To be prepared for the future in public API, wrap the new osmo_ipa_name struct in an enum-type and union called osmo_cni_peer. During code review it was requested to insert an ability to handle different kinds of peer id, in order to be able to add a Global Title in the future. Use the generic osmo_cni_peer only in the publicly visible API. For osmo-hlr internal code, I intend to postpone implementing this into the future, when a different peer identification actually gets introduced. This way we don't need to implement it now in all osmo-hlr code paths (save time now), but still make all external API users aware that this type may be extended in the future. Change-Id: Ide9dcdca283ab989240cfc6e53e9211862a199c5
2020-04-301/2: refactor: add and use lu_fsm, osmo_gsup_req, osmo_ipa_nameNeels Hofmeyr37-865/+1692
These are seemingly orthogonal changes in one patch, because they are in fact sufficiently intertwined that we are not willing to spend the time to separate them. They are also refactoring changes, unlikely to make sense on their own. ** lu_fsm: Attempting to make luop.c keep state about incoming GSUP requests made me find shortcomings in several places: - since it predates osmo_fsm, it is a state machine that does not strictly enforce the order of state transitions or the right sequence of incoming events. - several places OSMO_ASSERT() on data received from the network. - modifies the subscriber state before a LU is accepted. - dead code about canceling a subscriber in a previous VLR. That would be a good thing to actually do, which should also be trivial now that we record vlr_name and sgsn_name, but I decided to remove the dead code for now. To both step up the LU game *and* make it easier for me to integrate osmo_gsup_req handling, I decided to create a lu_fsm, drawing from my, by now, ample experience of writing osmo_fsms. ** osmo_gsup_req: Prepare for D-GSM, where osmo-hlr will do proxy routing for remote HLRs / communicate with remote MSCs via a proxy: a) It is important that a response that osmo-hlr generates and that is sent back to a requesting MSC contains all IEs that are needed to route it back to the requester. Particularly source_name must become destination_name in the response to be able to even reach the requesting MSC. Other fields are also necessary to match, which were so far taken care of in individual numerous code paths. b) For some operations, the response to a GSUP request is generated asynchronously (like Update Location Request -> Response, or taking the response from an EUSE, or the upcoming proxying to a remote HLR). To be able to feed a request message's information back into the response, we must thus keep the request data around. Since struct osmo_gsup_message references a lot of external data, usually with pointers directly into the received msgb, it is not so trivial to pass GSUP message data around asynchronously, on its own. osmo_gsup_req is the combined solution for both a and b: it keeps all data for a GSUP message by taking ownership of the incoming msgb, and it provides an explicit API "forcing" callers to respond with osmo_gsup_req_respond(), so that all code paths trivially are definitely responding with the correct IEs set to match the request's routing (by using osmo_gsup_make_response() recently added to libosmocore). Adjust all osmo-hlr code paths to use *only* osmo_gsup_req to respond to incoming requests received on the GSUP server (above LU code being one of them). In fact, the same should be done on the client side. Hence osmo_gsup_req is implemented in a server/client agnostic way, and is placed in libosmo-gsupclient. As soon as we see routing errors in complex GSUP setups, using osmo_gsup_req in the related GSUP client is likely to resolve those problems without much thinking required beyond making all code paths use it. libosmo-gsupclient is hence added to osmo-hlr binary's own library dependencies. It would have been added by the D-GSM proxy routing anyway, we are just doing it a little sooner. ** cni_peer_id.c / osmo_ipa_name: We so far handle an IPA unit name as pointer + size, or as just pointer with implicit talloc size. To ease working with GSUP peer identification data, I require: - a non-allocated storage of an IPA Name. It brings the drawback of being size limited, but our current implementation is anyway only able to handle MSC and SGSN names of 31 characters (see struct hlr_subscriber). - a single-argument handle for IPA Name, - easy to use utility functions like osmo_ipa_name_to_str(), osmo_ipa_name_cmp(), and copying by simple assignment, a = b. Hence this patch adds a osmo_ipa_name in cni_peer_id.h and cni_peer_id.c. Heavily used in LU and osmo_gsup_req. Depends: libosmocore Id9692880079ea0f219f52d81b1923a76fc640566 Change-Id: I3a8dff3d4a1cbe10d6ab08257a0138d6b2a082d9
2020-04-16Cosmetic: mention OS#4491 in location cancel codeOliver Smith2-2/+2
Change-Id: Idce0816172b92699d86ba3574a4fded0b73333cf
2020-04-11configure.ac: fix libtool issue with clang and sanitizerEric1-0/+5
As pointed out at https://github.com/libexpat/libexpat/issues/312 libtool does not play nice with clang sanitizer builds at all. For those builds LD shoud be set to clang too (and LDFLAGS needs the sanitizer flags as well), because the clang compiler driver knows how linking to the sanitizer libs works, but then at a later stage libtool fails to actually produce the shared libraries and the build fails. This is fixed by this patch. Addtionally LD_LIBRARY_PATH has no effect on conftest runs during configure time, so the rpath needs to be set to the asan library path to ensure the configure run does not fail due to a missing asan library, i.e.: SANS='-fsanitize=memory -fsanitize-recover=all -shared-libsan' export CC=clang-10 ASANPATH=$(dirname `$CC -print-file-name=libclang_rt.asan-x86_64.so`) export LDFLAGS="-Wl,-rpath,$ASANPATH $SANS $LDFLAGS" Change-Id: Ib98b84ac156f52ecdbb7ae49eaaea35442527b22
2020-02-14mslookup_client_mdns_test: no automatic skipOliver Smith1-2/+2
Exit with error code if multicast is disabled. The test is disabled by default already, so when explicitly enabling it, we should not automatically skip it. Related: OS#4385 Change-Id: I82022c23fa9c40535f922b12d917efd7e229912b
2020-02-14mslookup_client_mdns_test: disable by defaultOliver Smith4-8/+27
Only build and run the test, if --enable-mslookup-client-mdns-test is passed to ./configure. Enable that option in jenkins.sh. Related: OS#4385 Change-Id: Ie0cd4b0c55a1fbb00c215aeec7dcd0c15805add3
2020-02-09db: fix possible SQLite3 allocated memory leak in db_open()Vadim Yanitskiy1-1/+3
From https://sqlite.org/c3ref/exec.html: To avoid memory leaks, the application should invoke sqlite3_free() on error message strings returned through the 5th parameter of sqlite3_exec() after the error message string is no longer needed. If the 5th parameter to sqlite3_exec() is not NULL and no errors occur, then sqlite3_exec() sets the pointer in its 5th parameter to NULL before returning. Change-Id: Ic9ed9bad3165bc4a637fe963f51e923f012e19ac Fixes: CID#208182
2020-01-31mdns_rfc.c: fix possible access of uninit. memOliver Smith1-1/+6
Fixes: CID#207548 Change-Id: Ifa269d8a88d84c01349668cdd8d1f1d24c12c6d8
2020-01-29gsup_client.c: fix deprecation for client create funcNeels Hofmeyr1-8/+9
Change-Id: Iab9f416519b5df3bd4683592b2976f16675d9be7