summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* show bug in logging: out-of-bounds check should end with user categoriesNeels Hofmeyr2016-12-122-0/+5
| | | | | | | | | | | | | | | | | | | In the background osmo_log_info array, the user's logging categories are enhanced by the library internal ones. So far logging category range checking only checked for the larger array bounds, although passing a logging category >= num_cat_user is already semantically unknown and should redirect to DLGLOBAL. Add a check to logging_test.c to show that this isn't happening. Instead of DLGLOBAL, a logging category that happens to be at that index is queried. The bug is confirmed by logging_test.err only showing "(e)" and not "(d)": "(e)" is shown because the first category after the user ones happens to be DLGLOBAL. "(d)" is omitted since it hits a category that's not on debug level. This bug will be fixed along with the expectation in a subsequent patch. Change-Id: I397278714018ee9a0ae5101515f31ddddf79c2ec
* fix logging: also catch first out-of-bounds logging catNeels Hofmeyr2016-12-122-1/+4
| | | | | | | | | | In map_subsys(), fix the '>' condition to '>=' for array bounds checking. Also make the bounds checking more strict: after both invocations of subsys_lib2index(), re-check validity of the array index. If the final index is still wrong, which should never happen, exit by assertion. Change-Id: I7ca1a1d47724e40350f1c4dfebe90bad01c965f9
* show bug in logging: erratic redirection to DLGLOBAL for first invalid categoryNeels Hofmeyr2016-12-121-0/+1
| | | | | | | | | | | | | | | | Add a check to logging_test.c to show a bug: when a logging category value that is the first out-of-bounds value is passed to the logging system, the internal map_subsys() fails to redirect to DLGLOBAL due to a flawed conditional. This results in a too large array index and undefined behavior. A sanitize build should catch this. The bug is confirmed by the fact that logging_test.err stays the same (hopefully) although a logging output should appear from this patch. The test could as well segfault or anything else, it's a bit of a gamble. This bug will be fixed along with the expectation in a subsequent patch. Change-Id: I12bf38b6c1f85e2d7bf5a15f942dfe0beed41eba
* fix logging: redirection to DLGLOBAL for invalid categoriesNeels Hofmeyr2016-12-122-1/+10
| | | | | | | | | | | For out-of-bounds logging categories, redirect to the proper DLGLOBAL array index instead of returning -1. Adjust test expectation which shows that the bugs tested for are fixed. Note: there are separate bounds checking problems, left for another patch. Change-Id: I6ea9a59e005a22e0305454291714fdb9531c346b
* show bug in logging: erratic redirection to DLGLOBAL for invalid categoriesNeels Hofmeyr2016-12-121-0/+8
| | | | | | | | | | | | | | | | | | | | Add a check to logging_test.c to show a bug: when a logging category value that is out-of-bounds is passed to the logging system, the internal map_subsys() function should remap that to DLGLOBAL. But in fact DLGLOBAL is -1 and the function fails to map this to a proper positive array index, directly returning -1 instead. This results in a negative array index and undefined behavior. A sanitize build should catch this. The bug is confirmed by the fact that logging_test.err stays the same (hopefully) although a logging output should appear from this patch. The test could as well segfault or anything else, it's a bit of a gamble. This bug will be fixed along with the expectation in a subsequent patch. Note: osmo_log_info->num_cat + 0 is also out-of-bounds, but there is a separate bug there, so leaving this for another patch. Change-Id: I161b6550fa204a872bad1abefee1a6155393fafd
* logging test: cosmetic: print target and don't print colorNeels Hofmeyr2016-12-122-4/+5
| | | | | | | Prepares for upcoming modifications of the logging test to show and fix bugs in the logging system. Change-Id: I9461b987adf85d87469a6af55de5f1aa478f6ebb
* doc: osmocom-authn-protocol.txt: fix numbering, mark unused sync msgsNeels Hofmeyr2016-12-111-11/+11
| | | | Change-Id: Ic1ec5d00de406f9581377ef4b5547782a80f368a
* oap: add encode/decode unit testNeels Hofmeyr2016-12-115-2/+273
| | | | Change-Id: I0e14099e2fc18e333a73d38bda059d53a8ca9944
* gsm/oap: more robust: decode presence as clearly either 1 or 0Neels Hofmeyr2016-12-111-4/+4
| | | | | | | Prepares for the unit test, which can now simply check for encode/decode identity. Change-Id: I410ff120d868e8d55df9cb19ba6eefd99749cdf0
* import oap message parsing / encoding from openbsc.git; AGPL->GPLHarald Welte2016-12-119-3/+519
| | | | | | | | | | | | | | | | | | | In the process, also: * Change the license from AGPLv3 to GPLv2-or-later; * correct spelling of 'sysmocom' to lowercase; * add '2016' to the copyright; * rename to osmo_*; * add API docs; * add logging category DLOAP: define id and add to internal_cat; * redirect all oap.c logging to DLOAP. A unit test will follow in a subsequent patch, since it needs a minor tweak for decoding of boolean values. The related openbsc change-id is I2f06aaa6eb54eafa860cfed8e72e41d82ff1c4cf. Tweaked-by: Neels Hofmeyr Change-Id: If5099e60681a215e798b6675f21813f26769c253
* fix: DLGSUP logging category "unusable"Neels Hofmeyr2016-12-113-6/+6
| | | | | | | | | | | | | | | | | | | All DL* categories are typically negative, but DLGSUP isn't, and it's also not in libosmocore's internal_cat array. See: 3b6fb0880c3ab1e23a3d7d738d073b00c2a794c2 This means that a program using DLGSUP has to include DLGSUP in its own logging cat array (typically not needed for DL* categories), which means for osmo-nitb that DLGSUP (11) replaces DMGCP (also 11), and DMGCP becomes unusable. Fix this: make DLGSUP -11 and include in internal_cat. In gsup_test.c, no longer add DLGSUP to the logging categories array. External follow-ups are otherwise needed only in osmo-hlr.git and some pending patches for openbsc (Id3938267fa062e1a997d3704cd678874306f86ee). Change-Id: Id974c7be158e4d60421a98110f5c807aefd31119
* Fix VTY: add missing doc for 'log gsmtap [HOSTNAME]'Neels Hofmeyr2016-12-111-1/+2
| | | | | | | | | Add missing doc string for the HOSTNAME arg. Added in commit aa00f99be2e4cc64ede20d8c9548b83054696581, this breaks the VTY tests for openbsc and hence breaks our jenkins build jobs. Change-Id: I734b22c950242541322e902887bf779c14ba10fd
* Implement GSMTAP log targetHarald Welte2016-12-096-3/+184
| | | | | | | This target wraps the to-be-logged string (With metadata) into a GSMTAP packet and sends it to the configured destination address. Change-Id: I9a7e72b8c9c6f6f2d76d1ea2332dcdee12394625
* gsmtap: Add defintions for GSMTAP based remote loggingHarald Welte2016-12-091-0/+19
| | | | | | | | | | | Often it is useful to have log statements from the osmocom programs synchronized with protocol traces. So rather than having to open the pcap file with GSMTAP or other protocol data side-by-side with the textual log of one or more network elements, we simply pass the log lines around as GSMTAP messages, which can then be displayed in-order and interspersed with the protocol messages inside wireshark. Change-Id: I33ab530e10ef0311b6f80b731e61894f20b4b3e7
* Fix msgb_test on 64 bit architecturesHarald Welte2016-12-091-1/+1
| | | | | | | | | | | truncating the unsigned long pointer msg->data to 'int' and then passin git into msgb_resize_area() is unsafe as depending on the 32rd address bit it will be eiether negative or positive. That will in turn change the expected "Sub area is not fully contained in the msg data\n" error message into "Negative sizes are not allowed\n" which is not what the autotest case expects. Change-Id: I87ce13c265704d4ba8724e7dc7ed874c1128e0fa
* cosmetic: gsup comments: write 'Generic' for the G in GSUPNeels Hofmeyr2016-12-092-2/+2
| | | | | | | | The G used to mean GPRS, but the scope is larger now. To satisfy the curious reader, give the G a name in gsup files' header comments. BTW, logging.h and gsup_test.c already mentioned "Generic" before this. Change-Id: I6ac5cf94c215e156ceff6a58da3d9e520ca942d9
* license: gsup: libosmogsm requires GPL, not AGPL; say 'sysmocom'Neels Hofmeyr2016-12-092-6/+6
| | | | | | | | | The copyright in gsup.h differed from the one in gsup.c: gsup.c names the GNU Affero GPL, gsup.h only the GNU GPL. Change both to GPL-v2-or-later. In gsup.c/h's copyright notice, 'sysmocom' should be spelled lower case. Change-Id: Ia5748c275501889b9086aef7d20ccb5c9edb8031
* doc: fsm timer_cb: explain return valueNeels Hofmeyr2016-12-091-1/+2
| | | | Change-Id: Ic6fbe95737862ed8b8de78058989c8b2ae330006
* contrib: add fsm-to-dot.py to draw osmo_fsm dotty graphsNeels Hofmeyr2016-12-091-0/+710
| | | | | | | | Add a first version of a python script that tries to analyze .c source files to draw graphs of osmo_fsm implementations. So far it uses quick-and-dirty regexes. Change-Id: I155f57a608d600f59aedfd27ef66eb9772c124e7
* wqueue: Reject messges if queue is considered fullHolger Hans Peter Freyther2016-12-096-5/+103
| | | | | | | | | | | | | | | | | | The write queue was always meant to not queue more than the max_length messages but the implementation never rejected a message. Begin to log and enforce the queue size limit, add a testcase to verify the code and initialize except_cb as part of a fix for that new test case. Real applications might now run into the queue limit and drop messages where they just queued them before. It is unfortunate but I still think it is good to implement the routine as it was intended. We need to review osmo_wqueue_enqueue once more to see that no msgb is leaked. Change-Id: I1e6aef30f3e73d4bcf2967bc49f0783aa65395ae
* logging: Extend log_target with call-back for un-formatted log lineHarald Welte2016-12-022-2/+21
| | | | | | | | | | | Some targets might not want to receive only an opaque, pre-formatted string, but rather the unformatted arguments with metadata like sub-system/level/file/line. We solve this by introducing a log_target->output_raw() function pointer. If a target specifies this function, it takes precedence over the regular log_target->output() function. Change-Id: I9dc9205d70dce9581458e7e9dc2d8a92991897bd
* Revert "gsm0408: add chreq_type for CHREQ_T_PDCH_ONE_PHASE and ↵Neels Hofmeyr2016-12-021-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | CHREQ_T_PDCH_TWO_PHASE" This reverts commit c3c28528de78fd5d50c3a141c2176c0da5dd7075. The reason is that this breaks a static assert in openbsc. See https://lists.osmocom.org/pipermail/openbsc/2016-December/009906.html Enlarging the ctype_by_chreq struct and breaks the static assert for gsm_network->ctype_by_chreq's size: ../../../src/libbsc/gsm_04_08_utils.c:138:1: error: size of array ‘dummyassert_size’ is negative osmo_static_assert(sizeof(ctype_by_chreq) == ^ What this patch lacks is, in openbsc.git: * adjustment of ctype_by_chreq[] according to the new additions in libbsc/gsm_04_08_utils.c * same for reason_by_chreq[], also in libbsc/gsm_04_08_utils.c * enlarge ctype_by_chreq[] in gsm_network to 18, in openbsc/gsm_data.h. Leaving it up to the original authors to follow up and commit a complete patch series in one go.
* gsm0480: add gsm0480_create_ussd_notify() and *_release_complete()Neels Hofmeyr2016-12-013-0/+33
| | | | | | | | | | | Add two functions to create USSD messages. Moves and generalizes code from openbsc. Pending: use the new functions in openbsc. It looks like _release_complete() should also set trans_id and direction flag; but since this is moving code from openbsc that is apparently working, just place a fixme comment and don't change the functionality. Change-Id: Ia80e32c7105359915bfad3cc5621a1c09caf20f0
* gsm0480: code dup: introduce and use gsm0480_l3hdr_push()Neels Hofmeyr2016-12-013-13/+19
| | | | | | | | Add function gsm0480_l3hdr_push() to push a struct gsm48_hdr to the start of a msgb. Use in gsm0480.c and gsm0411_utils.c. Further callers of the new function will follow in openbsc as well as another libosmocore patch for ussd. Change-Id: I54fce6053ab8362015686fe22dbcd38bf1366700
* gsm0408: add chreq_type for CHREQ_T_PDCH_ONE_PHASE and CHREQ_T_PDCH_TWO_PHASEAlexander Couzens2016-12-011-0/+2
| | | | | | For BSC-located pcu the BSC must understand the PDCH chan request. Change-Id: Ice44dcaaf798f93af3652a96c567f8e16a6cf784
* timer: only call the callback if not NULLAlexander Couzens2016-11-281-1/+2
| | | | | | Fix a crash in osmo-sgsn. Change-Id: I04d58d9580708cc0f6d0f4aa17d3e9f2c6235c8e
* ctrl_cmd_parse: Make coverity FORWARD_NULL happyHarald Welte2016-11-261-0/+1
| | | | | | | | | | | | The 'strtok_r' function requires passing a NULL as the first parameter on subsequent calls in order to ensure the code picks up where it left off on a previous call. However, Coverity doesn't quite realize this and points out that if a NULL was passed in as the third argument it would result in a possible NULL deref because the strtok_r function will assign the third argument to the first in the call is NULL. Change-Id: I7a9d08d0d4eae76a5207d285e32a25d1b384a57f Fixes: Coverity CID 135186
* Introduce osmo_strlcpy() function so we can stop using strncpy()Harald Welte2016-11-262-0/+24
| | | | | | | | | | | | | | | | I'm aware of the existing criticism on stlrcpy(), but I think it is still better than what we have now: stnrcpy(), sometimes with Coverity warnings and sometimes with a manual setting of the termination byte. The implementation follows the linux kernel strlcpy() which is claimed to be BSD compatible. We could of course link against libbsd on Linux instead, but I think it's reasonably small and simple to provide our own implementation. Future versions of libosmocore could use some autoconf magic and preprocessor macros to use the system-provided strlcpy() if it exists. Change-Id: Ifdc99b0e3b8631f1e771e58acaf9efb00a9cd493
* osmo_gsup_encode(): Make coverity happy by invariant checkingHarald Welte2016-11-261-0/+1
| | | | | | | | | gsm48_encode_bcd_number() can theoretically return a length in excess of the size of the bcd_buf, but only in case an overly-long IMSI is passed into the function (which would be illegal in the first place). Change-Id: If3dc68ee13ff784b487bbc686b777cec9057d537 Fixes: Coverity CID 135216
* osmo-sim-test.c: Fix rmsg checkHarald Welte2016-11-261-1/+1
| | | | | | | | we wanted to check for !rmsg, but used to check for !msg, missing error returns from read_record_nr(). Change-Id: I79b6a94b1aa947c8329317b0626865c3cd4159c1 Fixes: Coverity CID 57672
* telnet_interface: Handle osmo_fd_register() eror return codeHarald Welte2016-11-261-1/+6
| | | | | Change-Id: I5bc1c2cbb04e363d868355b5ed866b4840f16c61 Fixes: Coverity 57637
* osmo_sock_init(): Fix memory leak in error pathHarald Welte2016-11-261-0/+1
| | | | | | | We forgot to call freeaddrinfo() in an error path. Change-Id: Iccbd3beef4c4a70dc443131b909c45e650d8c6a2 Fixes: Coverity CID 135217
* Fix unchecked return valueof osmo_fd_register()Harald Welte2016-11-261-4/+12
| | | | | Change-Id: Ib040a7f94eb1bbec8270b66fd4c2aedef9d5346a Fixes: Coverity CID 57636
* build: make check: disable sim_test when built with --disable-pcscNeels Hofmeyr2016-11-164-6/+14
| | | | | | | | | | | | | | | | | | | | | | | | | Numerous issues caused sim_test to be attempted even though libosmosim was not built: In configure.ac, the ENABLE_PCSC variable lacked an AC_SUBST() to be exported. Furthermore in configure.ac, no value 'yes'/'no' was assigned to the ENABLE_PCSC variable, only to the enable_pcsc value. In testsuite.at, encapsulating the sim_test in 'if ENABLE_PCSC' seems to have no effect, regardless (not even when using a variable that should be defined accurately). So fix with these steps, similarly to how we do it in openbsc: In AC_ARG_ENABLE, directly use 'ENABLE_PCSC' to assign 'yes'/'no'. Export the same using AC_SUBST(). Add tests/atlocal.in to translate ENABLE_PCSC to enable_sim_test (also add atlocal to AC_OUTPUT and distclean). Use enable_sim_test in testuite.at, as seen in openbsc: use AT_CHECK() to indicate skipping the test if enable_sim_test isn't 'yes'. Change-Id: I9e8740c7d2dfbd272e22fee85972ef3fda7184a8
* gsm_08_58.h: Add more Ericsson specific RSL IE IdentifiersHarald Welte2016-11-161-3/+22
| | | | Change-Id: Ib43948da956f23609b1b0995ecac0c796cc7c629
* RSL: Add defines for ericsson systinfo SI13Philipp2016-11-161-0/+4
| | | | | | | | | | | | | | Ericsson uses non standard information element tags when setting up the SI13 system information configuration. This applies to RSL_SYSTEM_INFO_13, which is normally 0x28, instead Ericsson uses RSL_ERIC_SYSTEM_INFO_13, which is set to 0x0C. Furthermore, Ericsson adds a propritary field called BCCH-Mapping, which is tagged as 0xf2 (RSL_IE_ERIC_BCCH_MAPPING) This patch addes these two information element tags in gsm_08_58.h Change-Id: Idc27352e286b9b8bbcbf0b31bdb676c3d13487a9
* Extend IPA error loggingMax2016-11-161-2/+2
| | | | | | | | Output more information in case of IPA protocol errors to make debugging easier. Change-Id: I7632d6e679e076bfbec9abc12da4a46cc27ccea1 Related: SYS#3028
* vty: Skip printing non-initialized log categoriesDaniel Willmann2016-11-151-0/+3
| | | | | | | | | Without this patch the vty command show logging vty will cause a segfault if not all elements of the log_categories array are defined. Ticket: OW#3053 Sponsored-by: On-Waves ehf Change-Id: Ieeba649c3bde6c9376d8e32b00b92beb37c08ef2
* msgb: add msgb_push_u{8,16,32}() functionsHarald Welte2016-11-111-0/+30
| | | | | | | Those work analoguous to msgb_put_*() but pre-pend the given value into the msg headroom, rather than appending it to the end. Change-Id: I7de63e9d04c2d2b678f1f20eef37f9be2c4f5ec2
* bssgp_rx_paging(): Fix parsing of P-TMSI IE in Paging messageHarald Welte2016-11-111-1/+2
| | | | | | | | | | | | | | | | | | | | | This was actually discovered by the following compiler warning in gcc-6.2.0: CC gprs_bssgp_bss.lo gprs_bssgp_bss.c: In function ‘bssgp_rx_paging’: gprs_bssgp_bss.c:544:2: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation] if (TLVP_PRESENT(&tp, BSSGP_IE_TMSI) && ^~ gprs_bssgp_bss.c:548:3: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the ‘if’ *(pinfo->ptmsi) = ntohl(*(uint32_t *) ^ This is an actual bug. If we recevied a BSSGP Paging Request without P-TMSI, we might crash or report some random memory as P-TMSI to the caller in the output data structure. Change-Id: Ib4f307827cd7cccc91c1415a6fb5428d7cf8416d
* gan: Mark gan_pdisc_vals[] as public / non-static symbolHarald Welte2016-11-111-1/+1
| | | | | | | It is actually listed in libosmogsm.map, but still used to be a static symbol. That couldn't have worked. Change-Id: I6f3f04b683d906674ee7da9bab5762bb00cea916
* bssgp_vty: Remove dead code and compiler warningHarald Welte2016-11-111-7/+0
| | | | | | | | gprs_bssgp_vty.c:48:34: warning: ‘gprs_bssgp_timer_strs’ defined but not used [-Wunused-const-variable=] static const struct value_string gprs_bssgp_timer_strs[] = { ^~~~~~~~~~~~~~~~~~~~~ Change-Id: Ia41ccb7b227c41996cdef51dc6779bfc5b5a8d48
* statsd: Fix compiler warning (int32_t vs. int64_t)Harald Welte2016-11-113-3/+4
| | | | | | | | | Fixes the following compiler warning: stats_statsd.c: In function ‘osmo_stats_reporter_create_statsd’: stats_statsd.c:54:18: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] srep->send_item = osmo_stats_reporter_statsd_send_item; Change-Id: Id36914906e0982f6ac092a311210727de66b343a
* bitcomp: Remove the t4 decoding from libosmocoreHolger Hans Peter Freyther2016-11-104-151/+0
| | | | | | | | | | | | As outlined by mail on the 13th of July the tree based approach to decoding in the PCU is faster by order of magnitude. Instead of having a slow implementation in the library and a quick one in the PCU, let's only have a quick one in the PCU and at some point in the future move it to libosmocore. Execute the plan and remove t4_decode. Change-Id: I021424444625a097560d086c217c81eac4a5ee44
* Add logging and testing for FSM deallocationMax2016-11-082-4/+6
| | | | | | | | osmo_fsm_inst_alloc() logs allocation but osmo_fsm_inst_free() is silent. Fix this by adding log message for deallocation to make FSM lifecycle tracking easier. Also make sure it's covered by test suite. Change-Id: I7e5b55a1fff8e36cf61c7fb61d3e79c1f00e29d2
* Add null-pointer check to osmo_amr_rtp_dec()Max2016-11-072-6/+12
| | | | | | | Check that RTP payload we're about to decode is not NULL and return proper error code instead of segfaulting. Add corresponding test case. Change-Id: Ib6cda9900a41ed16bbfbde9df3de9d38e0a7469b
* Add osmo_fsm_unregister() to headerMax2016-11-022-1/+2
| | | | | | | Previously function was defined but not exposed so there were a way to register FSM but no way to unregister it. Change-Id: I2e749d896009784b77d6d5952fcc38e1c131db2b
* utils/conv_gen.py: explicitly import reduce()Vadim Yanitskiy2016-11-021-0/+1
| | | | | | | | This change finally makes the script able to be executed in Python 3 environment. Due to new Python 3 restrictions, the reduce() should be imported explicitly. Change-Id: Icbc81c29f1a226aeed2c1245a5d60809fe124005
* utils/conv_gen.py: don't mix print and write()Vadim Yanitskiy2016-11-021-32/+34
| | | | | | | This is mostly a code style change, but it also increases the compatibility with Python 3. Change-Id: I5c8271d973f766aeb9cbcab30c4eddfdab54fcbb
* Fix typo in osmo_fsm_log_addr()Max2016-11-011-1/+1
| | | | | | | Previously function parameter was ignored, fsm_log_addr was always set to false. Change-Id: I74f06eab2dfa81dbb95e01f0b4b26448fd1b98f8