summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* tests/a5: Add a5_test.ok as EXTRA_DISTSylvain Munaut2011-11-171-0/+1
| | | | Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* tests: fix cut & paste errorSylvain Munaut2011-11-171-1/+1
| | | | | | | Damn ... I fixed it locally and didn't properly commit the fix before push. Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/a5: Add documentationSylvain Munaut2011-11-172-0/+82
| | | | Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/a5: Rewrite A5/2 algo to avoid the delayed bitSylvain Munaut2011-11-171-23/+12
| | | | | | It's just clearer that way ... Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* tests/a5: Add a5 regression testingSylvain Munaut2011-11-176-1/+117
| | | | Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/a5: Add const qualifier on the keySylvain Munaut2011-11-172-6/+6
| | | | Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* tests: Fix the make distcheck of libosmocore with the testsHolger Hans Peter Freyther2011-11-1410-7/+7
|
* Merge branch 'zecke/gnu-autotest'Holger Hans Peter Freyther2011-11-1414-11/+620
|\
| * tests: Initialize log system to fix crash, update test resultHolger Hans Peter Freyther2011-11-143-2/+60
| | | | | | | | | | | | | | | | Use osmo_init_logging to initialize the log system to fix crashes when we attempt to parse broken ASN1 messages. Ignore stderr with parse errors, update the test result. make check is now passing.
| * tests: timer: set maximum wait time to obtain test resultsPablo Neira Ayuso2011-11-141-0/+19
| | | | | | | | | | | | | | | | If the timer test takes more than 2 * (number of steps + 10), we abort the test. This calculation is based on the maximum timeout randomly set (10 seconds) plus the number of steps (some existing timers may be reset in each step). We double this to have some extra grace time to finish.
| * tests: timer: use stderr for non-repeatable outputPablo Neira Ayuso2011-11-142-27/+11
| | | | | | | | | | | | | | | | This makes happy gnu-autotest for the timer test. We may still may fail if we run the test on a very heavy loaded system, but given the amount of timers that we using for the automatic test (only 32), this seems very unlikely to me.
| * tests: Reduce the iterations for the timertest, ignore stderrHolger Hans Peter Freyther2011-11-141-1/+1
| | | | | | | | | | | | | | Use one of the magic commands for the stderr, in this case we want to log the output but ignore it for processing. http://www.gnu.org/s/hello/manual/autoconf/Writing-Testsuites.html#Writing-Testsuites
| * tests: timer: add parameter to select the number of stepsPablo Neira Ayuso2011-11-141-3/+22
| | | | | | | | | | | | | | Holger likes having a parameter to set the number of steps in this test. Now you can set it via `-s' option. Signed-off-by: Pablo Neira Ayuso <pablo@gnumonks.org>
| * tests: Use GNU autotest to execute our tests and compare textual outputHolger Hans Peter Freyther2011-11-1412-0/+529
|/ | | | | | | | | | | | | The output of make check is looking like this now: Regression tests. 1: bits ok 2: msgfile ok 3: sms ok 4: smscb ok 5: timer FAILED (testsuite.at:38) 6: ussd FAILED (testsuite.at:44)
* git: Ignore vi files (.swp, .swo)Holger Hans Peter Freyther2011-11-141-0/+4
|
* utils: Add declaration back for osmo_osmo_hexdump_nospcSylvain Munaut2011-11-131-0/+1
| | | | | | | | As it turns out, if a project uses the old name but without a declaration, it'll causes a segfault on 64 bits platform (because of the implicit int return type which doesn't apply since here it's a pointer). Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* timer: Better fix to the timer re-scheduling situationPablo Neira Ayuso2011-11-131-6/+3
| | | | | | | | | As it turns out, the previous fix didn't cover the case of a timer X being re-scheduled inside a timer call back expiring at the same time as the previous X instance. Written-by: Pablo Neira Ayuso <pablo@gnumonks.org> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/gsm0411_smc: Fix typoSylvain Munaut2011-11-121-1/+1
| | | | Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* include/gsm_04_11: Fix compatibility issue with GSM411_TMR_TC1ASylvain Munaut2011-11-122-2/+3
| | | | | | We need to keep the old one for compatibility ! Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/sms: Rewrite of SMR process, extracted from OpenBSCAndreas Eversberg2011-11-124-2/+498
| | | | | | | | | | | The SMR process is used to transfer SMS TPDUs. It is now extracted from OpenBSC. It includes a real state machine now for easier debugging. Also it implements the TR1M and TR2M timers. The memory notification procedure is missing, but not required for network side. Written-by: Andreas Eversberg <jolly@eversberg.eu> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/sms: Rewrite of SMC process, extracted from OpenBSCAndreas Eversberg2011-11-125-5/+607
| | | | | | | | The SMC process is used to transfer RP frames. It is now extracted from OpenBSC. It includes a real state machine now for easier debugging. Written-by: Andreas Eversberg <jolly@eversberg.eu> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/sms: Moved utility functions of SMS processing to new gsm0411_utils.cAndreas.Eversberg2011-11-124-1/+340
| | | | | Written-by: Andreas Eversberg <jolly@eversberg.eu> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/sms: Added DLSMS debuggingAndreas Eversberg2011-11-122-1/+8
| | | | | Written-by: Andreas Eversberg <jolly@eversberg.eu> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/lapdm: Display SAPI in debug message for easier debugAndreas.Eversberg2011-11-121-2/+2
| | | | | Written-by: Andreas Eversberg <jolly@eversberg.eu> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/lapdm: Fix UI frames from BTS->MS have length (B4 format)Andreas.Eversberg2011-11-121-7/+11
| | | | | | | | | | This is part of a set of commit to fix LAPDm to handle datalink connection on ACCH (SAPI 3) This is required to transfer SMS on SACCH of TCH/f or SDCCH/8 (4). Written-by: Andreas Eversberg <jolly@eversberg.eu> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/lapdm: Fix TA and power level handling in the ACCH headerAndreas.Eversberg2011-11-122-8/+19
| | | | | | | | | | | | | Timing advance and power level indicated by MS (measurement reports) and BTS (SI 5/6) are now stored for use at ACCH data link connection. This is part of a set of commit to fix LAPDm to handle datalink connection on ACCH (SAPI 3) This is required to transfer SMS on SACCH of TCH/f or SDCCH/8 (4). Written-by: Andreas Eversberg <jolly@eversberg.eu> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/lapdm: Set N201 depending on the frame typeAndreas.Eversberg2011-11-121-5/+5
| | | | | | | | | | This is part of a set of commit to fix LAPDm to handle datalink connection on ACCH (SAPI 3) This is required to transfer SMS on SACCH of TCH/f or SDCCH/8 (4). Written-by: Andreas Eversberg <jolly@eversberg.eu> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/lapdm: Make T200 timer depends on the link type (SACCH is slower)Andreas.Eversberg2011-11-122-6/+7
| | | | | | | | | | This is part of a set of commit to fix LAPDm to handle datalink connection on ACCH (SAPI 3) This is required to transfer SMS on SACCH of TCH/f or SDCCH/8 (4). Written-by: Andreas Eversberg <jolly@eversberg.eu> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm/lapdm: Add missing msgb_free in rslms_rx_rll error casesAndreas.Eversberg2011-11-121-0/+2
| | | | | Written-by: Andreas Eversberg <jolly@eversberg.eu> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* lapd: Fixed possible double free buf in lapd_core.cAndreas Eversberg2011-11-121-2/+3
| | | | | Written-by: Andreas Eversberg <jolly@eversberg.eu> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* vty: Fixed vty_down_level to move down from config nodesAndreas.Eversberg2011-11-122-3/+6
| | | | | | | | | When using ^D at config nodes above the CONFIG_NODE, the go_parent_cb function is used to go down by one node. This is equivalent to "exit" command. Written-by: Andreas.Eversberg <jolly@eversberg.eu> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* vty/telnet_interface: Add telnet_exit functionAndreas.Eversberg2011-11-122-0/+14
| | | | | | | This frees socket and pending connections Written-by: Andreas Eversberg <jolly@eversberg.eu> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* core/timer: Allow an already scheduled timer to be re-scheduled at a new timeSylvain Munaut2011-11-121-2/+6
| | | | Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* core/rbtree: remove redundant if()-condition in rb_erase()Sylvain Munaut2011-11-121-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | See kernel commit 4b324126e0c6c3a5080ca3ec0981e8766ed6f1ee ---- Furthermore, notice that the initial checks: if (!node->rb_left) child = node->rb_right; else if (!node->rb_right) child = node->rb_left; else { ... } guarantee that old->rb_right is set in the final else branch, therefore we can omit checking that again. Signed-off-by: Wolfram Strepp <wstrepp@gmx.de> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> ---- Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* core/rbtree: make clear distinction between two different cases in rb_erase()Sylvain Munaut2011-11-121-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | See kernel commit 4c60117811171d867d4f27f17ea07d7419d45dae ---- There are two cases when a node, having 2 childs, is erased: 'normal case': the successor is not the right-hand-child of the node to be erased 'special case': the successor is the right-hand child of the node to be erased Here some ascii-art, with following symbols (referring to the code): O: node to be deleted N: the successor of O P: parent of N C: child of N L: some other node normal case: O N / \ / \ / \ / \ L \ L \ / \ P ----> / \ P / \ / \ / / N C \ / \ \ C / \ special case: O|P N / \ / \ / \ / \ L \ L \ / \ N ----> / C \ / \ \ C / \ Notice that for the special case we don't have to reconnect C to N. Signed-off-by: Wolfram Strepp <wstrepp@gmx.de> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> ---- Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* core/rbtree: reorganize code in rb_erase() for additional changesSylvain Munaut2011-11-121-9/+9
| | | | | | | | | | | | | | | | | See kernel commit 16c047add3ceaf0ab882e3e094d1ec904d02312d ---- First, move some code around in order to make the next change more obvious. [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Wolfram Strepp <wstrepp@gmx.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> ---- Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* core/rbtree: optimize rb_erase()Sylvain Munaut2011-11-121-10/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | See kernel commit 55a63998b8967615a15e2211ba0ff3a84a565824 ---- Tfour 4 redundant if-conditions in function __rb_erase_color() in lib/rbtree.c are removed. In pseudo-source-code, the structure of the code is as follows: if ((!A || B) && (!C || D)) { . . . } else { if (!C || D) {//if this is true, it implies: (A == true) && (B == false) if (A) {//hence this always evaluates to 'true'... . } . //at this point, C always becomes true, because of: __rb_rotate_right/left(); //and: other = parent->rb_right/left; } . . if (C) {//...and this too ! . } } Signed-off-by: Wolfram Strepp <wstrepp@gmx.de> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Andrea Arcangeli <andrea@qumranet.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> ---- Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* core/rbtree: add const qualifier to some functionsSylvain Munaut2011-11-122-10/+10
| | | | | | | | | | | | | | | | | | | | | | See kernel commit f4b477c47332367d35686bd2b808c2156b96d7c7 ---- The 'rb_first()', 'rb_last()', 'rb_next()' and 'rb_prev()' calls take a pointer to an RB node or RB root. They do not change the pointed objects, so add a 'const' qualifier in order to make life of the users of these functions easier. Indeed, if I have my own constant pointer &const struct my_type *p, and I call 'rb_next(&p->rb)', I get a GCC warning: warning: passing argument 1 of ?~@~Xrb_next?~@~Y discards qualifiers from pointer target type Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> ---- Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* core/utils: Add a symbol alias for a previous typo for compatibilitySylvain Munaut2011-11-111-0/+4
| | | | Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* utils: Fix a bad double osmo_ prefix for osmo_hexdump_nospcSylvain Munaut2011-11-102-2/+2
| | | | | | Hopefully no project where using them it seems Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* freebsd: Provide a dummy backtrace implementation that does nothingHolger Hans Peter Freyther2011-11-091-0/+4
|
* freebsd: Fixes for the compilation of libosmocore on FreeBSDHolger Hans Peter Freyther2011-11-094-2/+10
| | | | | | | | | | | alloca.h is not available on FreeBSD, use the default autoconf function to check for it, there is a complete list[1] of what to do for using alloca but let us see how far we get with this test. Include netinet/in.h for the IPv4 and IPv6 socket address. Check for dlopen in libraries and use this instead of linking -dl. [1] http://www.gnu.org/s/hello/manual/autoconf/Particular-Functions.html
* timer: Add compatibility header with timer helpersSylvain Munaut2011-10-213-0/+82
| | | | | | Some of these are not always present, especially when cross compiling Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* core: Fix include path to use top_builddir as well for generated headersSylvain Munaut2011-10-211-1/+1
| | | | | | | With the new generated headers for the CRC code, we need to include the builddir as well in case we're building out of tree. Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* timer: Simplify osmo_timers_nearest even moreSylvain Munaut2011-10-181-4/+4
| | | | Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* timer: Fix implementation of osmo_timers_nearest causing high CPU loadSylvain Munaut2011-10-171-4/+2
| | | | Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* Merge branch 'pablo_timer'Harald Welte2011-10-177-120/+758
|\
| * bump major library version / breaking the ABI with the rb_tree timersHarald Welte2011-10-171-1/+1
| |
| * tests: add new torture test for timer infrastructurePablo Neira Ayuso2011-10-171-33/+108
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a new test for the timer infrastructure. It basically consists of adding 2^N timers per step (where N is the number of step) that expire in (random() % 10) + 1 seconds. Moreover, we randomly delete timers that fulfill (random() % 100) < 10 everytime one timer expires. The default number of steps is 16, the test also allows to check for timer imprecisions (currently, defaulting to 10ms as aceptable). The list-based implementation crashes or it seems loop forever with this test (I guess due to some memory corruption). BTW, this patch contains one cosmetic clean up since we go back to 8-chars per indentations, which seems to be the policy in osmocom.
| * timer: add scalable RB-tree based timer infrastructurePablo Neira Ayuso2011-10-172-84/+98
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds RB-tree based timers which scales better than the previous list-based implementation. It does not require any API changes. It breaks ABI because the osmo_timer_list structure has changed though (to avoid this in the future, we can put internal data in some private structure). The following table summarizes the worst-case computational complexity of this new implementation versus the previous one: rb-tree list-based ------- ---------- calculate next timer to expire O(1) O(n) insertion of new timer O(log n) O(n) deletion of timer O(log n) O(1) timer-fired scheduler O(log n) O(3n) The most repeated cases are: * the calculation of the next timer to expire, that happens in every loop of our select function. * the timer-fired scheduler execution. This new implementation only loses in the deletion of timer scenario, this happens because we may need to rebalance the tree after the removal. So I think there is some real gain if we have some situation in which we have to handle lots of timers.