summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Add osmo_fsm_find_by_name() and avoid registering FSM with same nameHarald Welte2017-01-072-1/+14
| | | | | | | This addresses a FIXME in the fsm.c code: osmo_fsm_register() should fail in case a FSM with the given name already exists. Change-Id: I5fd882939859c79581eba70c14cbafd64560b583
* vty: OSMO_ASSERT() if two identical commands are installedHarald Welte2017-01-071-0/+19
| | | | | | | | | When the caller installs two identical commands at a given VTY node, the result is that neither of the two commands can ever be executed: The VTY would always complain about "Ambiguous command.". Let's fail fast at program start when two identical commands are intalled. Change-Id: I85ff4640ebb3d8b75a6a9ab5d2f668edb5b7189e
* Add OML Failure Event Report supportMax2017-01-063-0/+46
| | | | | | | | Add 3GPP TS 12.21 § 8.8.2 Failure Event Report function which pack given vararg string and parameters into msgb. Change-Id: I58c198d8ea588432c62520928b08f0b2a7035e93 Related: OS#1615
* Add event cause string descriptionsMax2017-01-063-0/+18
| | | | | | | | Add human-readable descriptions to event causes from 3GPP TS 12.21 § 9.4.43. Change-Id: Id173c978616c98b7831fbafb5401064257f1cf73 Related: OS#1615
* Add function to get uninterrupted bit runPravin Kumarvel2017-01-064-1/+89
| | | | | | | | | Function bitvec_rl_curbit added to get number of uninterrupted bits run in vector starting from the current bit till max number of bits. Test case is added to check bitvec_rl_curbit. Change-Id: Iae153d3639ea6b891c1fc10d7801a435c9492e26
* Add cause enum for OML fail reportsMinh-Quang Nguyen2017-01-061-0/+18
| | | | | | | | | | Add 3GPP TS 12.21 §9.4.43 Probable Cause values of type 03 (Manufacturer specific values). Max's note: renamed to make it clear that values are vendor-specific. Related: OS#1615 Change-Id: Ie9ba4b53fb19a151447aec9ea309284e20613585
* Add parsed TLV helpers from OsmoBTSMax2017-01-063-0/+64
| | | | | | Add functions to copy and merge parsed TLV structures from OsmoBTS. Change-Id: Ieaaaed19da9c069fe451faa53d24c5b84d7d5615
* Add OML definitions from OsmoBTSMax2017-01-064-0/+76
| | | | | Change-Id: I9c3bc15662949654e7bba6aad5488c69ee7d0c45 Related: OS#1615
* Remove direct loggingMax2017-01-061-3/+0
| | | | | | | | Drop perror() calls from GSMTAP code: it's application job to do the proper logging - library code should not write to stdout/stderr directly. Change-Id: Ifa149e65d76c6e64fda2946725c16672233aff2e
* gitignore: ignore tests/oap/oap_testVadim Yanitskiy2017-01-061-0/+1
| | | | Change-Id: Iccb8c46a721d5389058c5cf36621820bcd861b7b
* lapd_test: avoid calling memcpy with NULL sourceHarald Welte2017-01-061-1/+2
| | | | | | | fixes lapd/lapd_test.c:54:2: runtime error: null pointer passed as argument 2, which is declared to never be null Change-Id: I7030729f4f4c867adecc7afc15bb5ca9beff0030
* gprs_cipher_core: Use typecase to avoid sanitizer errorHarald Welte2017-01-061-1/+1
| | | | | | | This resolves gprs_cipher_core.c:118:37: runtime error: left shift of 1 by 31 places cannot be represented in type 'int' Change-Id: Ib1866595030ad9d11c886621ce69632462befa3a
* fsm: term: get parent pointer as late as possibleNeels Hofmeyr2016-12-241-1/+4
| | | | | | | | | | | | During FSM instance termination, fetch the parent pointer every time just before using it, in case the child termination or cleanup callback wish to change anything about the parent, e.g. to prevent event dispatch. This patch was created to try and fix a problem that was in the end solved differently. There is no actual need or use case for this at the moment, but it generally makes sense to get the parent pointer as late as possible. Change-Id: I999d7f29ba10281d4005c5163130bb2d80148362
* utils/conv_gen.py: separate code definitionsVadim Yanitskiy2016-12-242-714/+728
| | | | | | | | | This change separates the convolutional code definitions from the code generator logic, allowing us to make further changes in more specific way. For example, adding some new codes, you change the conv_codes.py only because such change isn't related to the generator. Change-Id: I3428561251b7d7a180d1e9b6fcaad50bdbbc37fa
* utils/conv_gen.py: use shared tables if possibleVadim Yanitskiy2016-12-241-37/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | This change introduces the memory usage optimization, mentioned in d2d9760c08f35a231d32f0ebeb73b2927e5573b3. The aim is to make code generator able to detect, whether the same tables are used by several convolutional code definitions, and prevent one from writing these tables multiple times. For now, the detection process isn't fully automatic, so all shared polynomials should be placed inside the 'shared_polys' dictionary, for example: shared_polys = { "xcch" : [ ( G0, 1 ), ( G1, 1 ), ], "mcs" : [ ( G4, 1 ), ( G7, 1 ), ( G5, 1 ), ], } Change-Id: I84760f5cdfdaece376b801d2e6cb2954ee875a3b
* fsm: factor out osmo_fsm_inst_term_children() from osmo_fsm_inst_term()Neels Hofmeyr2016-12-242-20/+55
| | | | | | | | | | | | | | | | | | | | osmo_fsm_inst_term() has code for safe child removal, publish that part as osmo_fsm_inst_term_children(); also use from osmo_fsm_inst_term(). As with osmo_fsm_inst_term(), add osmo_fsm_inst_term_children() macro to pass the caller's source file and line to new _osmo_fsm_inst_term_children(). Rationale: in openbsc's VLR, I want to discard child FSMs when certain events are handled. I could keep a pointer to each one, or simply iterate all children, making the code a lot simpler in some places. (Unfortunately, the patch may be displayed subobtimally. This really only moves the children-loop to a new function, replaces it with a call to _osmo_fsm_inst_term_children(fi, OSMO_FSM_TERM_PARENT, NULL, file, line) and drops two local iterator variables. No other code changes are made, even though the diff may show large removal + addition chunks) Change-Id: I8dac1206259cbd251660f793ad023aaa1dc705a2
* fsm: move LOGPFSMSRC and LOGPFSMLSRC to .hNeels Hofmeyr2016-12-242-13/+13
| | | | | | | | | | | LOGPFSM and LOGPFSML are in the header file, put the *SRC variants also there so users of the osmo_fsm_inst API may conveniently create own functions that log the caller's source file and line. Very useful if many action functions call the same event dispatching function, like foo_fsm_done(), and one needs to know which of the callers to debug. Change-Id: I39447b1d15237b28f88d8c5f08d82c764679dc80
* fsm: log calling file+line for error "event for NULL fi"Neels Hofmeyr2016-12-241-2/+3
| | | | Change-Id: I1970773440865f1415004bcf0164603468acf90b
* fsm: doc: add missing file, line args; fix ws + tweak on one lineNeels Hofmeyr2016-12-241-1/+7
| | | | Change-Id: I6af0d43ab0082e45df676c1d69b26310b59a8031
* fsm_test.c: fix compiler warning: timer cb return typeNeels Hofmeyr2016-12-241-1/+1
| | | | Change-Id: Ifd7e85cd69b5e7e473000abc1ef7a56748aafc0e
* serial.c: file descriptor '0' is a valid valueHarald Welte2016-12-241-2/+2
| | | | | | | if stdin/stdout/stderr are all closed by our environment, it may very well be that opening a serial port returns fd == 0. Change-Id: Ifd9670260883a35da0629369e0d49e467d5b4d72
* serial.c: Fix fd leak in case of fcntl() error pathsHarald Welte2016-12-241-2/+4
| | | | | Change-Id: I14f934957e1086b803f3a7b9b5e6d602380f0be2 Fixes: Coverity CID 158987
* serial.c: Some ports don't support TIOCMBIS for RTS/CTS controlHarald Welte2016-12-231-2/+2
| | | | | | So let's ignore the error we might get from this opreration. Change-Id: I69dad90403355b6512c3bf4c7fd10dd1dd985f01
* serial: Open devie in non-blocking mode and then switch to blockingHarald Welte2016-12-231-3/+17
| | | | | | | | There are some serial ports that apparently block during the open in some circumstances. We don't want that. We want to either open it immediately, or fail fast. Change-Id: I626b138574bc50f4f4b09c4d609f3623ff512dff
* add CRC16-CCITT to libosmocoreHarald Welte2016-12-232-0/+54
| | | | | | Use the implementation from Linux lib/crc-ccitt.c (GPLv2) Change-Id: I26bb54038f5ab36bbb34da7f5fb8ae6c0c0386a4
* Fix erroneously AGPL licensed file in libosmocore.Harald Welte2016-12-221-4/+4
| | | | | | | libosmocore itself is GPLv2-or-later. Only the test cases are permitted to be AGPL licensed. Change-Id: I62f2eed6305bfa11a64c6d633e08aabeaf9f0b10
* Integrate Debian packaging changesMax2016-12-2214-77/+462
| | | | | | | | | | | | | | | | | | | | | | | debian/control: * restructure to make it easier to incorporate further changes * update package descriptions * move build-depends to a proper place * update project URL debian/rules: * use proper hardening syntax * strip linker option without explicit shell invocation * remove useless comment * add extra cleanup debian/: package documentation separately debian/docs: remove empty file debian/coryright: update to match Debian format Change-Id: Ia7654d34730e9f269831612bfba70a1338ce29d3 Related: OS#1694
* fsm: log tweak: upon free, say 'Freeing instance'Neels Hofmeyr2016-12-211-1/+1
| | | | | | | | Logging 'Release' is a bit ambiguous. At first I tought a subscriber connection was being released, IMHO 'Freeing instance' better describes that we are freeing an osmo_fsm_inst. Change-Id: I5cf99707d2ba5620b2988f777fa39cc806ec0212
* doc: fix typo for osmo_hexparseNeels Hofmeyr2016-12-211-1/+1
| | | | Change-Id: Ifc2b499792fda378c807c678b8e06630cb64d273
* utils.h: add OSMO_STRINGIFY and OSMO_VALUE_STRING macrosNeels Hofmeyr2016-12-212-7/+9
| | | | | | | | | | | | | | OSMO_STRINGIFY particularly allows putting port numbers from a #define into VTY doc strings, like: #define FOO_PORT 2342 DEFUN(..., "Foo UDP port (default: " OSMO_STRINGIFY(FOO_PORT) ")\n") OSMO_VALUE_STRING creates value_string items with the string being exactly the enum value's name. Replaces a similar macro def in fsm.c Change-Id: I857af45ae602bb9a647ba26cf8b0d1b23403b54c
* Catch-up with git version tagsMax2016-12-2111-17/+51
| | | | | | | | | | | | * update debian/changelog * update TODO-RELEASE * add comments to Makefile.am and TODO-RELEASE to simplify the process in future * add link to libtool docs to Makefile.am to simplify LIBVERSION maintenance Related: OS#1861 Change-Id: I22c257e357f597519120232d742d6a61289db021
* fsm: term: safer iteration to remove all child FSMsNeels Hofmeyr2016-12-201-4/+20
| | | | | | | | | | | | When terminating child FSMs, restart iteration after every child, to make sure that we don't terminate a child twice. Terminating one child may emit events that in turn terminates other children. I created this patch because at first it looked like the cause of a bug, which turned out not to be the case. So I have no actual use case of this situation, but it does generally make sense to me, so submitting this. Change-Id: I00990b47e42eeb43707a9a42abcd9df52fe5f483
* fsm api doc: fix typo in doxygen marker '\breif'Neels Hofmeyr2016-12-201-1/+1
| | | | Change-Id: I5c57e35b29d50cb409becada6b9b120ce5210ae0
* fsm: explicitly log removal from parent fsmNeels Hofmeyr2016-12-161-0/+3
| | | | | | | | | | | Since removing an FSM from its parent twice causes a segfault, it is very interesting to see when that is attempted. Removing could be made more robust, but logging is interesting for investigating why an FSM is being removed twice in the first place (currently the case in openbsc's vlr_lu_fsm). Change-Id: Idec6b7aa5344f1e903c9d2aa2a3640cab0d70fb0
* add value strings for enum osmo_fsm_term_cause and use for loggingNeels Hofmeyr2016-12-152-1/+20
| | | | Change-Id: Iaf63d3cadb0d46bf454e3314ebb439240cafd834
* typo in comment for osmo_fsm_log_addr()Neels Hofmeyr2016-12-141-1/+1
| | | | Change-Id: I6f683ed0c864a87bf1232994eb2deaf9b313a244
* fsm: log caller's source for events and state changes, not fsm.c linesNeels Hofmeyr2016-12-143-27/+103
| | | | | | | | | | | | | | | | | | | | | | | When looking at log output, it is not interesting to see that a state transition's petty details are implemented in fsm.c. Rather log the *caller's* source file and line that caused an event, state change and cascading events. To that end, introduce LOGPSRC() absorbing the guts of LOGP(), to be able to explicitly pass the source file and line information. Prepend an underscore to the function names of osmo_fsm_inst_state_chg(), osmo_fsm_inst_dispatch() and osmo_fsm_inst_term(), and add file and line arguments to them. Provide the previous names as macros that insert the caller's __BASE_FILE__ and __LINE__ constants for the new arguments. Hence no calling code needs to be changed. In fsm.c, add LOGPFSMSRC to call LOGPSRC, and add LOGPFSMLSRC, and use them in above _osmo_fsm_inst_* functions. In addition, in _osmo_fsm_inst_term(), pass the caller's source file and line on to nested event dispatches, so showing where a cascade originated from. Change-Id: Iae72aba7bbf99e19dd584ccabea5867210650dcd
* fsm: add LOGPFSML to pass explicit logging levelNeels Hofmeyr2016-12-143-12/+12
| | | | | | | | | | | | | | Provide one central LOGPFSML to print FSM information, take the FSM logging subsystem from the FSM instance but use an explicitly provided log level instead of the FSM's default level. Use to replace some, essentially, duplications of the LOGPFSM macro. In effect, the fsm_test's expected error changes, since the previous code dup for logging events used round braces to indicate the fi's state, while the central macro uses curly braces. Change-Id: If295fdabb3f31a0fd9490d1e0df57794c75ae547
* fix logging: log_set_category_filter() for internal DL* logging catsNeels Hofmeyr2016-12-122-1/+3
| | | | | | | | | | | | | | | | | | In log_set_category_filter(), passing a negative index lead to memory corruption. Particularly dangerous since the internal logging categories have negative values. Fix: apply map_subsys() to interpret negative values as internal logging categories. As a side effect, out-of-bounds logging categories will be mapped to DLGLOBAL instead of being dropped. Fix the expectations in logging_test to match the fixed bug. While at it also guard against a NULL logging target. Change-Id: Ib0725b22bc39498c6b3970a61eb3339cf56d19f1
* show bug in logging: log_set_category_filter on DL* categoriesNeels Hofmeyr2016-12-121-0/+6
| | | | | | | | | | | | | | Add a check to logging_test.c to show a bug: passing an internal DL* category constant to log_set_category_filter() 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. Change-Id: Ie2da77c642a84cafc0f528985930697ec167183b
* fix logging: out-of-bounds check should end with user categoriesNeels Hofmeyr2016-12-122-0/+6
| | | | | | | | | | | | | To check category bounds, rather use num_cat_user, to redirect all semantically unknown categories to DLGLOBAL. Adjust logging_test expectations accordingly: "(d)" is now also shown. Note: subsys is and needs to be signed, while num_cat* are unsigned. Thus for a negative subsys, 'subsys >= num_cat_user' practically always yields true. Pay close attention to signedness and check upper bound only for positive values. Change-Id: I4a952b759f30d90fbfb81fedcfc56a8092ea18c1
* 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