aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2020-08-28Bump version: 1.4.0.1-a07d → 1.4.11.4.1Harald Welte1-0/+7
Change-Id: Id60e854cdabb79983e18aef2f0eb94abdcf95646
2020-08-28lapdm: fix SAPI-0/SAPI-3 frame prioritization on DCCHVadim Yanitskiy1-2/+21
According to 3GPP TS 44.005, section 4.2.2 "Priority": a) on DCCH, a SAPI=0 frame always has higher priority than SAPI=3; b) on ACCH, the priority arrangement is more complex: b1) if a SAPI = 3 frame is awaiting transmission, two SAPI=0 frames shall not be sent in consecutive SACCH frames; b2) on the network side (LAPDM_MODE_BTS), it must also be ensured that any SAPI=3 frame is followed by at least one SAPI=0 frame; b3) a SAPI = 0 frame may be repeated in the next SACCH period if the Repeated SACCH is supported (see 3GPP TS 44.006, section 11). We definitely need to extend our testing coverage to ensure that we implement b) correctly, but for now let's focus on DCCH: a) for DCCH, ensure that SAPI=0 frames preceed SAPI=3 ones; b) for ACCH, re-use the existing round-robin implementation. Change-Id: Ia3780bce1222b312ae2fd2d21496a4d6c5ccb6e0 Related: SYS#5047, OS#4731
2020-08-13Bump version: 1.3.0.173-51974 → 1.4.01.4.0Harald Welte12-54/+248
Change-Id: I4fc6dd4f727c8ff5a64865bbb87e1d9feb7c5174
2020-08-10socket.h: introduce osmo_sockaddr to hold v4 and v6 endpointsAlexander Couzens1-2/+11
When dealing with IPv4 and IPv6 address, the struct sockaddr allows to hold IPv4 and IPv6. However even when struct sockaddr is being used, a cast to the IPv4 or IPv6 family must happen. To work around this additional code, use a union for the most common types. Change-Id: If80172373735193401af872b18e1ff00c93880e7
2020-08-10vty: Introduce support to set cpu-affinity and scheduler policyPau Espin Pedrol5-1/+714
Process willing to support this kind of configuration through VTY simply need to call "osmo_sched_vty_init(tall_ctx);" during startup to register the commands. For multithreaded processes, new threads willing to get their cpu-affinity mask according to VTY config should call osmo_sched_vty_apply_localthread() (potentially after setting the thread name through pthread_setname_np()). Related: SYS#4986 Change-Id: If76a4bd2cc7b3c7adf5d84790a944d78be70e10a
2020-08-07configure.ac: print ARM NEON instructions support statusVadim Yanitskiy1-0/+2
Change-Id: I0e8910d6cf337a95d6b4295f5c425d2d4cfa2b41
2020-08-07configure.ac: fix: do not define HAVE_NEON unconditionallyVadim Yanitskiy1-2/+0
Change-Id: I761a7afaeda9d232ac26edff47949e911f8f1f0c
2020-08-07configure.ac: clarify description of --enable-neonVadim Yanitskiy1-1/+1
Change-Id: Id261dcf396f19a385203ae5f339cc5570efa4aab
2020-08-07src/Makefile.am: add conv_acc_neon_impl.h to EXTRA_DISTVadim Yanitskiy1-1/+1
Change-Id: I641c25f8aec249df43c781debfc967f07e221b9d
2020-08-06libomsocoding: NEON viterbi accelerationEric5-0/+508
configure flag required to enable this: --enable-neon Although autodetection according to __ARM_NEON would work because this is only defined if the fpu is neon neon-fp16 neon-vfpv3 neon-vfpv4 neon-fp-armv8 crypto-neon-fp-armv8 doing that would lead to a unknown performance impact, so it needs to be enabled manually. Speedup is about ~1.3-1.5 on a unspecified single core Cortex A9. This requires handling a special case for RACH with len 14 which is far too short for neon and would actually incur a performance penalty of 25%. Related: OS#4585 Change-Id: I58ff2cb4ce3514f43390ff0a2121f81e6a4983b5
2020-08-06osmo_sock_init2: improve support for AF_UNSPECAlexander Couzens4-14/+105
osmo_sock_init2 abstract two calls of getaddrinfo into one. While there aren't problems with AF_INET or AF_INET6. When using AF_UNSPEC there are corner cases when this fails. E.g. calling local_host with "" and remote_host with an IPv6 only address results in setting up a local socket with AF_INET while trying to connect from there towards AF_INET6 will most likely fail. To prevent such cases with AF_UNSPEC, search prio calling any syscalls if local and remote site supports AF_INET or AF_INET6. In case both supported, prefer AF_INET6 Change-Id: I397c633931fd00d4f083955a3c49a40fb002d766
2020-08-06gsm 12.21: add osmocom specific NM_ATT_OSMO_NS_LINK_CFGAlexander Couzens2-0/+2
The sysmobts uses the same OML attributes as IP.access. Because the IP.access attribute only supports IPv4 as NSVC configuration, add an own attribute. Change-Id: Ic261bc43a07fa741b97a9c6ec5a9ed6f5ecae588
2020-08-04utils/gsmtap_logread.py: make it executableVadim Yanitskiy1-0/+0
Change-Id: I2a3ee31ddc8838ce8e7a58de89a0e606ae918c6a
2020-08-04Gb/BSSGP: replace hardcoded Tx into NS library by a callbackAlexander Couzens7-23/+54
Add bssgp_ns_send callback() to set the transmission path into the NS library. This allows to use the Gb implementation with the old NS and the new upcoming NS implementation. Users of the old NS implementation don't have to set the callback as the default is the old NS implementation. Only users of the new NS implementation need to set the callback and the callback data. Change-Id: I3a498e6a0d68b87fed80c64199b22395796761b4
2020-08-02i460: Fix bit- and subslots ordering of I.460 mux + demuxHarald Welte3-94/+99
When I wrote the new I.460 mux + demux code, I failed to realize that * bit numbers in relevant ITU specs start with 1 as MSB ... 8 as LSB * sub-slot 0 is bits 1+2, i.e. the two MSBs of a byte * bit-ordering within each sub-slot is also MSB first As a result, the code and test data was broken. Change-Id: I6df7dbf411efbdeaf516e72ac552432bf5a569d0
2020-08-02i460: pass more context to call-back functionsHarald Welte3-9/+14
When calling a user-provided call-back function for the i460 mux or demux, always pass a pointer to the osmo_i460_subchan the callback relates to. This way, the user can walk the i460 data structures to obtain information about which mux/demux instances is calling. Change-Id: Id842c72ce371a67fe5df6694e195c281aaf607ab
2020-08-02i460: Add back-pointer from sub-channel to timeslotHarald Welte2-0/+2
A user may want to walk back from a sub-channel to the timeslot to which it belongs. Change-Id: Id6e5e208c5daa63fd23ac719d62314622b5d0ed9
2020-08-02i460_mux: add callback to notify empty tx queuePhilipp Maier2-3/+23
There is no way for the API user to know if the TX queue of the multiplexer runs empty. However, this is criticil since an empty TX queue will cause dropout of a TRAU frame, which can have quite severe effects to the receiving end. Lets add a callback that allows the APU user to insert appropiate idle frames or silent frames into the queue before it runs empty. Change-Id: I88a87724235fe50d55ce6215bb385c044072226e Related: OS#2547
2020-08-02bits.c: Use faster look-up-table approach for osmo_revbytebits_{buf,u8}Harald Welte1-26/+32
Benchmarking has shown that a look-up table based approach is much faster than the arithmetic approach we used so far. This is from a Core i7-6600U: 10 bytes, 1 iterations: flip=379, revb=5491; revb = 1448 % 10 bytes, 10 iterations: flip=728, revb=1517; revb = 208 % 10 bytes, 100 iterations: flip=2952, revb=9305; revb = 315 % 10 bytes, 1000 iterations: flip=26305, revb=90953; revb = 345 % 100 bytes, 1 iterations: flip=468, revb=1093; revb = 233 % 100 bytes, 10 iterations: flip=2634, revb=7418; revb = 281 % 100 bytes, 100 iterations: flip=23666, revb=70718; revb = 298 % 100 bytes, 1000 iterations: flip=237595, revb=900555; revb = 379 % 1024 bytes, 1 iterations: flip=3417, revb=11454; revb = 335 % 1024 bytes, 10 iterations: flip=33579, revb=92353; revb = 275 % 1024 bytes, 100 iterations: flip=555399, revb=1196228; revb = 215 % 1024 bytes, 1000 iterations: flip=3478271, revb=9227966; revb = 265 % 1048576 bytes, 1 iterations: flip=10189583, revb=7022193; revb = 68 % 1048576 bytes, 10 iterations: flip=19693347, revb=54389925; revb = 276 % 1048576 bytes, 100 iterations: flip=151308243, revb=454293151; revb = 300 % 1048576 bytes, 1000 iterations: flip=1390338439, revb=4429862642; revb = 318 % where 'revb' is the old arithmetic approach, and 'flip' the new look-up-table approach. In our usual cases of 100..1024 bytes in a single iteration, the old code takes 233..335% of the look-up table. Benchmarks on an Atom E6xx also show improvements except in one situation (a single iteration over one 1MB large buffer). 10 bytes, 1 iterations: flip=416, revb=9184; revb = 2207 % 10 bytes, 10 iterations: flip=1960, revb=4024; revb = 205 % 10 bytes, 100 iterations: flip=13624, revb=32408; revb = 237 % 10 bytes, 1000 iterations: flip=160656, revb=361784; revb = 225 % 100 bytes, 1 iterations: flip=3536, revb=4952; revb = 140 % 100 bytes, 10 iterations: flip=12960, revb=20912; revb = 161 % 100 bytes, 100 iterations: flip=122448, revb=215152; revb = 175 % 100 bytes, 1000 iterations: flip=1204928, revb=1647680; revb = 136 % 1024 bytes, 1 iterations: flip=12944, revb=23128; revb = 178 % 1024 bytes, 10 iterations: flip=126192, revb=239784; revb = 190 % 1024 bytes, 100 iterations: flip=1190184, revb=1491672; revb = 125 % 1024 bytes, 1000 iterations: flip=11865872, revb=15113872; revb = 127 % 1048576 bytes, 1 iterations: flip=16288272, revb=15925888; revb = 97 % 1048576 bytes, 10 iterations: flip=121957000, revb=157883384; revb = 129 % 1048576 bytes, 100 iterations: flip=1219264992, revb=1621265216; revb = 132 % 1048576 bytes, 1000 iterations: flip=12219520648, revb=15960035856; revb = 130 % Change-Id: I25029fe7e54c92979fb0119992fb8dc167e1536e
2020-07-31gsm_08_58: add missing RSL error cause codesPhilipp Maier2-0/+6
The define constants for the cause codes "BTS not equipped", "remote transcoder failure" and "notification overflow" are missing. Lets add them including value strings. Change-Id: Ic3e936da00bd256bae03867887851f1a4e30e218
2020-07-30vty: Don't match negative values on purely positive rangesPau Espin Pedrol3-3/+5
Without this patch, for instance having a range 0-ULONG_MAX would match if someones types value -3, which would be converted to unsigned but that's clearly what is expected here from user point of view. Change-Id: Ia95f6314a2dd3f94d21fc219cf69bb8d39b8e7f0
2020-07-30vty: Allow 64 bit values in numeric ranges if system supports itPau Espin Pedrol3-12/+31
This fixes commands not being matched due to providing a range with more than 10 digits. The last case (passing -4000 matching 0-ULONG_MAX) shows a different bug which will be fixed in next commit. Change-Id: I0afa0caabffe36083c36b92ba90696ded00bb7be
2020-07-30tests: vty: Extend test to do some numeric range validationsPau Espin Pedrol2-0/+40
As per current status, the numeric tests are expected to fail due to a couple bugs which will be fixed in next commits. Change-Id: Id5b17bd96d7af4ed9a77ebbea0e6be4b0fcbde6c
2020-07-30tests/fsm_test.c: Disable use color in logging outputPau Espin Pedrol2-44/+45
This should avoid other problems in the future. Change-Id: I81368578c0830477d381566a54671fdde6067b23
2020-07-30gsm0411_{smc,smr}.c: Work around newlib bugHarald Welte2-2/+4
At least on Debian unstable, newlib is [currently?] buggy in that we need to include sys/types.h before including inttypes.h, otherwise PRIu64 is not defined. Change-Id: Ic1c9cdf66cfd5b82bd7e20eaaf05b10e6bdb675e Closes: OS#4686
2020-07-30i460_mux: correctly reset subchannelsPhilipp Maier1-7/+23
When a subchannel is deleted or created the initalization mainly consists of a memset over the wohle subchannel struct a message buffer initailization. However, when we delete a subchannel we also must take of the resetting of the related struct. Currently this is done with a memest. Unfortunately this creates not only a memory leak (there might be still items in the multiplexer tx queue) but also it makes the application crash when the message buffer is used the next time since the llist_head of the tx queue looses its initialization. Lets fix the memory leak problem and the message buffer problem and put the reset functionality in a single place. Change-Id: I937a9d4db95f44a860cd2c5dbb660dc1970b9a49
2020-07-28vty: add a define VTY_IPV46_CMD to require a IPv4/6 addressAlexander Couzens1-0/+4
Allow to use this define in vty definitions when a IPV4/6 address is required as argument. Change-Id: I86e399aea86b68b48e627f11e1de48fdfad16525
2020-07-28socket: osmo_sock_local_ip: correct doxygen commentAlexander Couzens1-1/+0
There is no parameter fd. Change-Id: I1e31fcbf40d8abf99214b87e70e867b5ab66bd75
2020-07-28bts_features: add feature BTS_FEAT_IPV6_NSVCAlexander Couzens2-0/+2
Previous both the IPA nanobts and the sysmobts has been using the IPv4 only OML attribute NM_ATT_IPACC_NS_LINK_CFG. A bts with BTS_FEAT_IPV6_NSVC supports IPv6 for NSVC (PCU<Gb>SGSN) using the new OML attribute NM_ATT_OSMO_NS_LINK_CFG. Change-Id: I9ef7949f66764b3c639e45eb440122e318da44a0
2020-07-28gprs_ns_frgre.h: add missing declaration of structsAlexander Couzens1-0/+3
Change-Id: I47b3458ff7dc7ab1fcb7e4dd690142e2bc44ed46
2020-07-28gprs_ns: fix typo in commentAlexander Couzens1-1/+1
Change-Id: Ie9d8decea18542cb0e1641dcb5fca5e4850910eb
2020-07-20pkgconfig/osmocodec/osmocoding: link to tallocEric2-4/+4
find . -maxdepth 1 -iname "libosmo*so" | xargs -n1 -I\# sh -c "echo \# && nm \# | grep 'U talloc'" tells us that all libs depend on talloc, but pkgconfig omits it for codec and coding, which sometimes leads to linking issues with libtool and lld. Change-Id: I75a4d39a0c3d53fc4c311e25e933a22832616cea
2020-07-17stats: Add stats commands related to testingDaniel Willmann2-8/+53
* Allow to set the reporting interval to 0 for manual reporting * stats reset command to reset all statistics * stats report command to manually trigger statistics reporting Change-Id: I9febcb65650abfd538caedfbca77a787e66d517a Related: SYS#4877
2020-07-17stat_item: Add function to reset stat items and groupsDaniel Willmann3-0/+34
Change-Id: I80fc0ea8865ec4efdcd4c982e69d863275fd9919 Related: SYS#4877
2020-07-17rate_ctr: Add functions to reset rate counter (groups)Daniel Willmann3-0/+25
Change-Id: If2f806d044cd0fb6929dac44ef8f8a15941ffe9b Related: SYS#4877
2020-07-15use_count.h: Fix API doc examplePau Espin Pedrol1-1/+2
Change-Id: Ib28ea88c8e8e9b33d70d58156d03af9a41e9e012
2020-07-15vty: Avoid ultra-long multi-line strings cluttering talloc reportsHarald Welte1-0/+6
The talloc_asprintf() series includes an unconditional call to talloc_set_name_const(), turning the entire long constructed string into the name of the talloc object. That simply doesn't work when creating kilobytes-sized VTY reference strings including linefeeds. Let's add an explicit talloc_set_name_const() to prevent this. Change-Id: Ibd77684b88cc3572047daa98c9a6b9119fba041b Closes: OS#4668
2020-07-14fixup for gsm0808_create_common_id(): add API doc, use new MI APINeels Hofmeyr1-4/+17
Follows patch I353adc1aa72377f7d4b3336d2ff47791fb73d62c that was merged too soon. Applying my code review in form of this fixup patch. Change-Id: I979bca0c6aaa8fe4feddda922bd2e6c1cb49585b
2020-07-09Revert "gsmtap_makemsg_ex: NULL for unknown chan_type"Pau Espin Pedrol1-5/+1
Reverting due to being completely normal for some applications to submit usning this channel type when decoding/parsing failed and hence not being able to determine channel type. This reverts Change-Id Ib4147a33a75c3cf425c30da8b0678c7fba8a371d (commit 12f93be6073ed89055862baafbfe0e08e50ed17a.) Change-Id: I6ebaa89cc3422df1d7fd2365a6176cb2902d1c67
2020-07-04gprs_ns.h: add missing prototype gprs_ns_rcvmsg()Alexander Couzens1-0/+5
gprs_ns_rcvmsg is already exported, but never declared. Change-Id: I7edc5f4fb6e1fda059e35ea0988d0ef42208aa50
2020-07-04lapd_core: After calling into L3, check if the state has changedHarald Welte1-0/+4
While processing an I-frame we may deliver its payload to L3. After returning from L3 procesing, we run some additional code, assuming the LAPD/DL state has not changed meanwhile. However, if the application destroys the LAPD/DL meanwhile, our state might be NULL again, and in this state we should not perform any further action. This is one of the cases where synchronous in-line dispatch across various layers is hitting us. L3 should have an input queue, and only start processing after all L2 work has completed and we're about to go back to sleep in select(). Change-Id: I026b64503511002c13c0f4117648c366c48ecc62 Related: OS#1761 Closes: OS#4646
2020-07-03lapd_core: Ensure we always have some tailroomHarald Welte1-1/+2
At some points, e.g. when allocating message buffers from the Tx history, we used to allocate them exactly as large as the defined headroom plus the user data. This means that the underlying PH layer (E1 mostly) had no tailroom to add anything to the end of the message. Especially for DAHDI this is a problem, as we need to make space for two more bytes of frame check sequence (FCS). So let's simply make sure we always have some extra space at the end of such buffers. Change-Id: Id362ce131157c7513d744b0248c7f78fb75c590c Related: OS#4644
2020-06-29vty/ports.h: Add VTY port for osmo-e1dHarald Welte1-0/+1
Change-Id: Ia19b870146334b4ab749f12dc87fb628c1cdcca9
2020-06-26gprs_ns: Set sockaddr_in.sin_family for persistent NSVCsHarald Welte1-0/+1
We cannot just set sockaddr_in.sin_addr + sin_port, we also must initializa sin_family. The reason this has worked so far is because we probably always first received a NS packet from the peer, rather than being the first one to send. Change-Id: I6cefc2cd5516c7a4c01a2cc040afca454e59dd57 Related: OS#4629
2020-06-26gprs_bssgp: Add bssgp_tx_bvc_reset2()Harald Welte4-2/+9
If a BVC-RESET is sent from SGSN, there must not be a cell ID IE included. See "Note 1" of TS 48.018 Section 10.4.12. Change-Id: I11d4e70d510265b9c09dffccdab10b3f0816715a
2020-06-24api comment: fix example of osmo_mobile_identity_encode_msgbNeels Hofmeyr1-1/+2
The previous example showed a type == IMSI while setting a TMSI value. Rather show how to encode IMSI digits. Change-Id: I41af6bf0d61443465172123297b1228584d791d6
2020-06-21gsm0808: Add gsm0808_create_common_id()Harald Welte4-0/+47
This function encodes a GSM 08.08 / 48.008 "Common ID" message. Change-Id: I353adc1aa72377f7d4b3336d2ff47791fb73d62c Related: OS#2969
2020-06-21bts_features.h: Introduce BTS_FEAT_PAGING_COORDINATIONHarald Welte2-0/+2
This feature indicates if the given BTS supports paging coordination, that is the transmission of CS paging (received on Abis) to be sent via PACCH/PCU in PS domain fro MS with active TBF. Change-Id: Ifb2e83eaf05dd36e5b203ed2de1a74864b039e38 Related: OS#2406
2020-06-17gsm0502: add TDMA frame number constants and modular arithmeticVadim Yanitskiy1-0/+24
These TDMA constatns and modular arithmetic operations are used in a number of osmo-* projects, so it makes sense to have them all in a single header file, with minimalistic documentation. Change-Id: Ic291fd3644f34964374227a191c7045d79d77e0d
2020-06-16gsm0408_test: allow deprecated APINeels Hofmeyr1-0/+2
This test knowingly calls deprecated functions -- allow that to squelch these warnings: warning: ‘gsm48_generate_lai’ is deprecated: Use gsm48_generate_lai2() instead, to not lose leading zeros in the MNC [-Wdeprecated-declarations] warning: ‘gsm48_decode_lai’ is deprecated: Use gsm48_decode_lai2() instead, to not lose leading zeros in the MNC [-Wdeprecated-declarations] Change-Id: Ifd618c1b9befa9c9ef0a338ab4aae2b0f796f4c2