AgeCommit message (Collapse)AuthorFilesLines
2019-11-09GPRS/BSSGP: introduce bssgp_bvc_ctx_free()Vadim Yanitskiy4-0/+13
So far we had a function to allocate a new bssgp_bvc_ctx, but not the opposite one. Let's finally introduce it, so it will be used at least in OsmoPCU. Please note that the new symbol has 'bssgp_' prefix, not 'btsctx_'. Change-Id: Ia78979379dbdccd6e4628c16f00d0c06d9212172
2019-11-07select: Make file descriptor lists per-threadHarald Welte2-3/+18
In a multi-threaded environemnt, it's likely that each thread will have its own, distinct set of file descriptors that it wants to watch. Hence, let's make the osmo_fd_* functions configure not one global list of file descriptors, but a thread-local list of file descriptors. Change-Id: I5082ed3e500ad1a7516e1785bc57e008da2fac9a
2019-11-04gsm: gsm_04_08.h: Allow accessing classmark2 as struct instead of uint32_tPau Espin Pedrol1-5/+28
New fields are put inside a union to keep backward compatibility with potential older users of the struct. Change-Id: I235635800c0de47b1e2b9ec9c7191418f6003554
2019-11-04gsm: gsm_utils: Fix return type of API ms_class_gmsk_dbm() and add unit testsPau Espin Pedrol3-4/+23
Only known user of API is in osmocom-bb and it compiles fine after the change. Related: OS#4244 Change-Id: Ia10345008b3aca50b30482ef3b852b03eca71995
2019-11-04gsm: Fix compilation error under some compilersPau Espin Pedrol2-2/+2
Some compilers don't like declaration of enums in header files like we do sometimes for structs: enum gsm_band; void foobar(enum gsm_band band); triggers: error: use of enum 'gsm_band' without previous declaration Fixes: b99f4ca2d8517d99cdf8aa183dbfda7b233bb781 Related: OS#4244 Change-Id: I6c2102c763f565bbe3c8dd7e5b4e04c4a45fff67
2019-11-03gsm_04_08.h: Introduce API osmo_gsm48_rfpowercap2powerclass()Pau Espin Pedrol5-1/+49
Related: OS#4244 Change-Id: I32e9cc1c2397b44f0d48db2acdf782a821365b63
2019-11-01add osmo_sockaddr_str_is_nonzero()Neels Hofmeyr4-0/+87
Often, an IP address of is considered an unset value (for clients requiring a server address; not for listening on "any"). osmo_sockaddr_str_is_set() does return false when the port is 0, but there is no simple way to tell whether the IP address is actually set to a server address. Add osmo_sockaddr_str_is_nonzero() to return false if: - the port is zero, or - the IP address is zero ( or ::0), or - the IP address cannot be parsed. A practical use example: osmo-msc so far accepts an RTP IP address of as valid. I noticed when trying to trigger error handling from a ttcn3 test. osmo-msc can use this function to reject invalid addresses from MGCP messages. Related: I53ddb19a70fda3deb906464e1b89c12d9b4c7cbd (osmo-msc) Change-Id: I73cbcab90cffcdc9a5f8d5281c57c1f87b2c3550
2019-11-01cosmetic: gsm_04_08.h: Fix trailing whitespacePau Espin Pedrol1-3/+3
Change-Id: I4b34dbd5f0176d1d8aa8cc96f642ed35d4214b7e
2019-10-29fsm: refuse state chg and events after termNeels Hofmeyr2-1996/+307
Refuse state changes and event dispatch for FSM instances that are already terminating. It is assumed that refusing state changes and events after FSM termination is seen as the sane expected behavior, hence this change in behavior is merged without being configurable. There is no fallout in current Osmocom code trees. fsm_dealloc_test needs a changed expected output, since it is explicitly creating complex FSM structures that terminate. Currently no other C test in Osmocom code needs adjusting. Rationale: Where multiple FSM instances are collaborating (like in osmo-bsc or osmo-msc), a terminating FSM instance often causes events to be dispatched back to itself, or causes state changes in FSM instances that are already terminating. That is hard to avoid, since each FSM instance could be a cause of failure, and wants to notify all the others of that, which in turn often choose to terminate. Another use case: any function that dispatches events or state changes to more than one FSM instance must be sure that after the first event dispatch, the second FSM instance is in fact still allocated. Furthermore, if the second FSM instance *has* terminated from the first dispatch, this often means that no more actions should be taken. That could be done by an explicit check for fsm->proc.terminating, but a more general solution is to do this check internally in fsm.c. In practice, I need this to avoid a crash in libosmo-mgcp-client, when an on_success() event dispatch causes the MGCP endpoint FSM to deallocate. The earlier dealloc-in-main-loop patch fixed part of it, but not all. Change-Id: Ia81a0892f710db86bd977462730b69f0dcc78f8c
2019-10-29add osmo_fsm_set_dealloc_ctx(), to help with use-after-freeNeels Hofmeyr4-26/+3508
This is a simpler and more general solution to the problem so far solved by osmo_fsm_term_safely(true). This extends use-after-free fixes to arbitrary functions, not only FSM instances during termination. The aim is to defer talloc_free() until back in the main loop. Rationale: I discovered an osmo-msc use-after-free crash from an invalid message, caused by this pattern: void event_action() { osmo_fsm_inst_dispatch(foo, FOO_EVENT, NULL); osmo_fsm_inst_dispatch(bar, BAR_EVENT, NULL); } Usually, FOO_EVENT takes successful action, and afterwards we also notify bar. However, in this particular case, FOO_EVENT caused failure, and the immediate error handling directly terminated and deallocated bar. In such a case, dispatching BAR_EVENT causes a use-after-free; this constituted a DoS vector just from sending messages that cause *any* failure during the first event dispatch. Instead, when this is enabled, we do not deallocate 'foo' until event_action() has returned back to the main loop. Test: duplicate fsm_dealloc_test.c using this, and print the number of items deallocated in each test loop, to ensure the feature works. We also verify that the deallocation safety works simply by fsm_dealloc_test.c not crashing. We should probably follow up by refusing event dispatch and state transitions for FSM instances that are terminating or already terminated: see I0adc13a1a998e953b6c850efa2761350dd07e03a. Change-Id: Ief4dba9ea587c9b4aea69993e965fbb20fb80e78
2019-10-29gprs_ns_vty: return success for disabled FR/GREOliver Smith1-4/+0
Do not return a warning and therefore fail parsing the config when the "encapsulation framerelay-gre local-ip" command is used and FR/GRE is disabled. Having this in the config does no harm and allows keeping the same config if it is enabled later. This fixes the currently failing vty tests for osmo-sgsn. Fixes: a0c8195ad37292ab800a6c777fc28383995b4b64 ("vty: Return error if cmd returns CMD_WARNING while reading cfg file") Change-Id: Ic225232fbfca49ba868427eaf898e1f6e34e1ca8
2019-10-28gsm0508: add functions to calculate beginning of a blockPhilipp Maier7-0/+611
The calculation of the beginning of a block for TCH/F, TCH/H and FACCH can be challenging since those channels are affected by the diagonal interleaving of the TCH channels. However, GSM 05.02 Section 7 Table 1 of 5 specifies how the blocks are distributed over the TDMA frame interval. Lets add a mapping function that is based on that table Related: OS#3803 Change-Id: I3d71c66f8c401f5afbad9b1c86c24580dab9e0ce
2019-10-28vty: Return error if cmd returns CMD_WARNING while reading cfg filePau Espin Pedrol5-2/+29
Otherwise bad configurations can easily sneak in and produce unexpected behavior. Change-Id: Ic9c1b566ec4a459f03e6319cf369691903cf9d00
2019-10-24configure: Introduce --disable-libsctp and error by default if libsctp not foundPau Espin Pedrol2-11/+18
This way libosmocore build fails during configuring phase if expected default behavior (building with libsctp support enabled and providing osmo_sock_init2_multiaddr() API) fails. User is still provided with --disable-libsctp option in case he doesn't need those features or his environment doesn't provide required libsctp APIs. Change-Id: I710c9cb1c6da0e5fc94b792df8bf60194a72208f
2019-10-24socket.c: build multiaddr socket API helpers only if used by public APIsPau Espin Pedrol1-0/+4
Those two functions are only used by osmo_sock_init2_multiaddr(), which is only built if HAVE_LIBSCTP is defined. Avoid compiler warning about unusued function helpers if osmo_sock_init2_multiaddr() is not being built. Change-Id: I52769d6b8f70af1a8bda23d60b3230a932e71fab
2019-10-22libosmocore.pc.in: Append -lsctp to Libs.privatePau Espin Pedrol1-1/+1
It will be used by the linker when linking statically against libosmocore. Change-Id: I797b970b22053432b243e4ef9f6b0458727fc608
2019-10-21socket: Remove unneeded condition check in osmo_sock_init2_multiaddr()Pau Espin Pedrol1-15/+15
Since we return error at the start of the function if proto != IPPROTO_SCTP, it makes no sense to check for proto != IPPROTO_UDP later on. Fixes: CID#205088 Change-Id: Ibba7eacaa9debb77d536d47dc85170c5ee79e479
2019-10-18socket: Introduce API osmo_sock_init2_multiaddr()Pau Espin Pedrol5-2/+307
This API will be used by libosmo-netif's osmo_stream for SCTP sockets, which in turn will be used by libosmo-sccp to support multi-homed connections. Related: OS#3608 Change-Id: Ic8681d9e093216c99c6bca4be81c31ef83688ed1
2019-10-18tdef: Return correct snprintf value for osmo_tdef_range_str_buf()Pau Espin Pedrol1-2/+4
len provides extra information in the case the buffer was too small, because it tells the caller "the number of characters (excluding the terminating null byte) which would have been written to the final string if enough space had been available" (man snprintf). Change-Id: Icafe559e19a92e2ae72fdd0dd2d9a394b1eda878
2019-10-11vty: Fix go_parent_cb not called for indented nodes at end of cfg filePau Espin Pedrol1-0/+4
Without this patch, for instance in this cfg file below, go_parent_cb is not called for nodes such as "listen" and "cs7": """ line vty no login cs7 instance 0 xua rkm routing-key-allocation dynamic-permitted listen m3ua 2905 accept-asp-connections dynamic-permitted local-ip """ Related: OS#3608 Change-Id: Ia6d88c0e63d94ba99e950da6efbc4c1871070012
2019-10-10socket.c: Move glibc workarounds to same place in addrinfo_helper()Pau Espin Pedrol1-19/+10
Change-Id: Ifc3a30881f865f88bcfc1307a3c89c1ab79eecd4
2019-10-09logging: Introduce mutex API to manage log_target in multi-thread envsPau Espin Pedrol12-100/+709
log_enable_multithread() enables use of locks inside the implementation. Lock use is disabled by default, this way only multi-thread processes need to enable it and suffer related complexity/performance penalties. Locks are required around osmo_log_target_list and items inside it, since targets can be used, modified and deleted by different threads concurrently (for instance, user writing "logging disable" in VTY while another thread is willing to write into that target). Multithread apps and libraries aiming at being used in multithread apps should update their code to use the locks introduced here when containing code iterating over osmo_log_target_list explictly or implicitly by obtaining a log_target (eg. osmo_log_vty2tgt()). Related: OS#4088 Change-Id: Id7711893b34263baacac6caf4d489467053131bb
2019-10-07vty: Optionally Set/replace cfg file during cmd 'write file'Pau Espin Pedrol1-2/+6
This way if the process is started with no file associated (eg. no -c param and default cfg path doesn't exist), config can be later saved into a file by passing the parameter. Otherwise, until now this message was displayed: Can't save to configuration file, using vtysh. Related: OS#4024 Change-Id: I38edcf902a08b6bd0ebb9aa6fc1a7041421af525
2019-10-07tdef_test: verify case where osmo_tdef_set returns -EEXISTPau Espin Pedrol2-0/+4
Change-Id: I436daa804aac11622fde24afe9ea35193d9e9beb
2019-10-07tdef: Introduce min_val and max_val fieldsPau Espin Pedrol8-13/+175
This is useful for timers expected to have a range of valid or expected values. Validation is done at runtime when timer values are set by the app or by the user through the VTY. Related: OS#4190 Change-Id: I4661ac41c29a009a1d5fc57d87aaee6041c7d1b2
2019-10-04API doc tweaks (mncc.h, gsm_08_08.h)Neels Hofmeyr2-5/+7
Change-Id: I9b4c7e737c83c65e358496e4540c14be5abc5474
2019-09-28gsup: add OSMO_GSUP_SUPPORTED_RAT_TYPES_IE and OSMO_GSUP_CURRENT_RAT_TYPE_IENeels Hofmeyr3-7/+49
OSMO_GSUP_SUPPORTED_RAT_TYPES_IE corresponds to the Supported RAT Types Indicator from 3GPP TS 29.002. See 8.1.2 MAP_UPDATE_LOCATION service, which indicates the capabilities of the MSC/VLR to the HLR. So far, have room for eight RAT types in the gsup_msg. That is an arbitrary random choice without any rationale. OSMO_GSUP_CURRENT_RAT_TYPE_IE is useful to communicate the currently used RAN / RAT type of the current subscriber during Location Updating Request. Change-Id: I93850710ab55a605bf61b95063a69682a2899bb1
2019-09-28cosmetic: clarify c_iflag in osmo_serial_init()Harald Welte1-1/+1
We first set the ISTRIP bit only to remove it in the next line. Let's try to avoid confusing the reader. Change-Id: Icba43dd4b6dc4f9c7f8fcf91d24b3baac4e0c74a
2019-09-28sim/class_tables: Fix typo in commentHarald Welte1-1/+1
Change-Id: I837c8303a7bb47b690cc8841cf5cafba8ac338af
2019-09-27gsm29205_test: fix error: missing braces around initializerVadim Yanitskiy1-1/+7
Since structure 'osmo_gcr_parsed' does contain arrays, GCC is not happy about the way we initialize it. Let's do it explicitly. Change-Id: Ia814b4a4ed5bec84ff1f69232f7f7d5ca0d19794
2019-09-26No fail if no /proc/cpuinfoRuben Undheim1-1/+1
Change-Id: I4b9e12e34f69d98fa87179c7ee390e31001ec943
2019-09-26msgb: Allow size==headroom in msgb_alloc_headroom*()Pau Espin Pedrol1-2/+2
Nothinh really forbids this case, it's totally fine allocating all space of msgb as headroom. osmo-pcu actually does that in gprs_rlcmac_ul_tbf::snd_ul_ud(). Related: OS#4029 Change-Id: Ibe05d08e3169a2603e891f76682a3b352a93ec7a
2019-09-20logging: Move extern declaration of osmo_log_target_list from logging.h to ↵Pau Espin Pedrol2-1/+1
logging_internal.h This list is really not needed by applications and currently only used internally in logging.c and logging_vty.c. Change-Id: I5dca069512bfcd0826194427c5482fad8bfd0232
2019-09-20osmo-release.sh: update TODO-RELEASE for non-lib projects tooPau Espin Pedrol1-5/+7
Projects not containing libraries may also want to contain a TODO-RELEASE in order to write down when a new API available only on libosmoXYZ current master (hence configure.ac and debian cannot be updated during the patch using the API until the APIs are available in a new release). This way, during release process of the project, the maintainer can see that a release of libosmoXYZ is needed beforehand and then update configure.ac of project accordingly with the new version of libosmoXYZ. Furthermore, we want to update the file only if mode DRY_RUN is not selected. Change-Id: I409b7eb8c23d21473f25dd2000f5d4447b24adb9
2019-09-20ecu_fr: increase test coverage for FR ECU implementationPhilipp Maier3-2/+88
The ECU implementation for FR is currently tested by calling the related functions directly and by using the generic ECU abstraction layer. However, the test "test_fr_concealment" only tests directly. Lets add a version that uses the generic ECU abstraction layer as well. The generic ECU abstraction layer obsolets the public API functions osmo_ecu_fr_reset() and osmo_ecu_fr_conceal(), lets tag those functions as dprecated. Change-Id: Ib0c8a9b164f14ea4fa00688f760a76cdb4890af4
2019-09-20cosmetic: Add comment on GSM-FR ECU structPhilipp Maier1-0/+1
Change-Id: Ic0a3a407c592262104af315f845f0bbd116ab26b
2019-09-20cosmetic: Move comment to the right placePhilipp Maier1-1/+1
Change-Id: I3d548fcc7d500baf37134b14af91bc7b284ce6ad
2019-09-18logging.h: add L1 SAPI related context and filterOliver Smith1-0/+2
First user is osmo-bts in I6b7bb2e1d61502b61214f854a4ec5cbb7267545b. Related: OS#2356 Change-Id: I814cb3328d99faca9220adb5a80ffb934f219d7d
2019-09-17logging_internal.h: Fix osmo_log_info definitionPau Espin Pedrol1-1/+1
Global symbol osmo_log_info is declared in logging.c as non-const, because it is modified. As soon as logging_internal.h is included into logging.c, the compiler warns about osmo_log_info being declared twice differently. Change-Id: Iea961c3caeb12ddf60c99d4dca644bb9ab538767
2019-09-11tdef: fixup osmo_tdef_set()Neels Hofmeyr2-9/+7
I missed code review, so here are my comments in form of a follow-up patch for Id56a1226d724a374f04231df85fe5b49ffd2c43c. - Fix 'as_unit' arg name to 'val_unit' as in the C file and API doc. - Explain rounding-up behavior of value conversion in API doc. - Use osmo_tdef_get_entry() instead of a loop. Related: OS#4190 Change-Id: Ia91c2f17e40fb9e79ffa5a7f28ce9c3605664402
2019-09-07tdef_vty.h: Add missing header dependenciesPau Espin Pedrol1-0/+3
enum node_type is defined in osmocom/vty/command.h va_list is defined in stdarg.h Change-Id: Ia439a7097ae7a9765e229e5f66e07af3fe490ecc
2019-09-07tdef: Introduce API osmo_tdef_set()Pau Espin Pedrol2-0/+21
This API is already useful for users willing to set a given timer to a given value. It will also contain code later that checks for value being inside valid range for that timer. Related: OS#4190 Change-Id: Id56a1226d724a374f04231df85fe5b49ffd2c43c
2019-09-05Introduce BTS_FEAT_ETWS_PN for communicating ETWS PN capabilityHarald Welte2-0/+2
As 3GPP doesn't specify how the BSC shall communicate ETWS Primary Notifications over Abis/RSL, we have to use a vendor-specific RSL message for this. And in order to know if the peer supports this feature, we introduces BTS_FEAT_ETWS_PN. Change-Id: I89c24a81ada6627694a9632e87485a61cbd3e680 Related: OS#4046, OS#4047
2019-09-05gsm_08_58: Add vendor-specific Message Type for ETWS Primary WarningHarald Welte2-0/+3
Change-Id: I36fc2ffc22728887d1cb8768c7fcd9739a8ec0fc Related: OS#4046, OS#4047
2019-09-02codec/ecu: Introduce new generic Error Concealment Unit abstractionHarald Welte6-1/+447
We don't want to expose the details of a given ECU implementation to the user (e.g. osmo-bts), but have a generic abstraction layer where an ECU implementation can simply register a few call-back functions with the generic core. As the developer and copyright holder of the related code, I hereby state that any ECU implementation using 'struct osmo_ecu_ops' and registering with the 'osmo_ecu_register()' function shall not be considered as a derivative work under any applicable copyright law; the copyleft terms of GPLv2 shall hence not apply to any such ECU implementation. The intent of the above exception is to allow anyone to combine third party Error Concealment Unit implementations with libosmocore, including but not limited to such published by ETSI. Change-Id: I4d33c9c7c2d4c7462ff38a49c178b65accae1915
2019-09-02MAXPATHLEN set if not definedRuben Undheim2-0/+10
Change-Id: I1dce8ace228814b5a7246a00b31309ab9461d266
2019-09-01cbsp: Fix decoding of WRITE-REPLACE payloadHarald Welte1-2/+2
The user length is the first IE *in* the fixed-length TV, make sure cbsp_dec_write_repl() respects that. Change-Id: I864cafac2466a89a4bd9644bc73363fff2babd03
2019-08-31cbsp: Remove printf() statement from early development/debuggingHarald Welte1-1/+0
Change-Id: I6916e2330e004f20a22f273147fa6288d18b5d0d
2019-08-31cbsp: Fix endless loop iteration when decoding cell list IEsHarald Welte3-4/+26
The CBSP code assumed that gsm0808_decode_cell_id_u() would return the number of bytes it has consumed/parsed. But it actually always returns '0', whcih makes us run in an endless loop :( Change-Id: I5758af4ec11a827d4b888a3a16c4ec22de90a7d6
2019-08-30OSMO_SOCKADDR_STR_FMT_ARGS: guard against NULL pointerNeels Hofmeyr1-1/+1
The pointless '(R)->ip?' condition of the previous commit made me want to protect against R == NULL instead. Change-Id: Ie2f47ad8ae585aaf67a6476c67f8e014820a72bc