Age | Commit message (Collapse) | Author | Files | Lines |
|
Change-Id: Id60e854cdabb79983e18aef2f0eb94abdcf95646
|
|
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
|
|
Change-Id: I4fc6dd4f727c8ff5a64865bbb87e1d9feb7c5174
|
|
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
|
|
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
|
|
Change-Id: I0e8910d6cf337a95d6b4295f5c425d2d4cfa2b41
|
|
Change-Id: I761a7afaeda9d232ac26edff47949e911f8f1f0c
|
|
Change-Id: Id261dcf396f19a385203ae5f339cc5570efa4aab
|
|
Change-Id: I641c25f8aec249df43c781debfc967f07e221b9d
|
|
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
|
|
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
|
|
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
|
|
Change-Id: I2a3ee31ddc8838ce8e7a58de89a0e606ae918c6a
|
|
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
|
|
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
|
|
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
|
|
A user may want to walk back from a sub-channel to the timeslot
to which it belongs.
Change-Id: Id6e5e208c5daa63fd23ac719d62314622b5d0ed9
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
This should avoid other problems in the future.
Change-Id: I81368578c0830477d381566a54671fdde6067b23
|
|
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
|
|
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
|
|
Allow to use this define in vty definitions when a IPV4/6 address
is required as argument.
Change-Id: I86e399aea86b68b48e627f11e1de48fdfad16525
|
|
There is no parameter fd.
Change-Id: I1e31fcbf40d8abf99214b87e70e867b5ab66bd75
|
|
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
|
|
Change-Id: I47b3458ff7dc7ab1fcb7e4dd690142e2bc44ed46
|
|
Change-Id: Ie9d8decea18542cb0e1641dcb5fca5e4850910eb
|
|
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
|
|
* 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
|
|
Change-Id: I80fc0ea8865ec4efdcd4c982e69d863275fd9919
Related: SYS#4877
|
|
Change-Id: If2f806d044cd0fb6929dac44ef8f8a15941ffe9b
Related: SYS#4877
|
|
Change-Id: Ib28ea88c8e8e9b33d70d58156d03af9a41e9e012
|
|
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
|
|
Follows patch I353adc1aa72377f7d4b3336d2ff47791fb73d62c that was merged too
soon. Applying my code review in form of this fixup patch.
Change-Id: I979bca0c6aaa8fe4feddda922bd2e6c1cb49585b
|
|
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
|
|
gprs_ns_rcvmsg is already exported, but never declared.
Change-Id: I7edc5f4fb6e1fda059e35ea0988d0ef42208aa50
|
|
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
|
|
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
|
|
Change-Id: Ia19b870146334b4ab749f12dc87fb628c1cdcca9
|
|
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
|
|
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
|
|
The previous example showed a type == IMSI while setting a TMSI value.
Rather show how to encode IMSI digits.
Change-Id: I41af6bf0d61443465172123297b1228584d791d6
|
|
This function encodes a GSM 08.08 / 48.008 "Common ID" message.
Change-Id: I353adc1aa72377f7d4b3336d2ff47791fb73d62c
Related: OS#2969
|
|
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
|
|
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
|
|
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
|