We've had osmo_revbytebits_buf() in libosmocore for ages. As it
recently turned out, the flip_bits[] lookup table approach implemented
here is faster at least on x86 systems of the last decade or so.
As of Change-Id I25029fe7e54c92979fb0119992fb8dc167e1536e in
libosmocore, it has been migrated to the lookup table approach. This
means there's no performance penalty of migrating to using it, and
hence no reason whatsoever to have a private implementation here.
Change-Id: I285a87a9fc6abae7d8b47923a46cd082f46829f8
This slipped through the cracks as jenkins so far doesn't build with
--enable-e1d support (fixed in a separate patch).
Change-Id: I505331a4a9430001b049e9f5cc36abf4ce4ca19e
Recent commit b8ea0ff521 introduced a
heap-use-after-free while getting rid of memleaks and clearing up the
reference counting lifecycle of the line object.
In that commit, e1inp_line_put2() was added in ipaccess_drop() which may
potentially free the line object (and its children e1inp_ts objects)
under specific conditions/scenarions. However, the function still used
the child object e1i_ts which in those scenarios would access already
freed memory.
Let's keep a local reference during the life of the function to make
sure the object is non-freed during e1inp_line_put2(), so that we can
notify upper layers that the link is down.
Detected by enabling ASan and running BSC_Tests.TC_chopped_ipa_ping
TTCN3 test.
Related: OS#4688
Change-Id: I4f56af28ad8297846bcdc8ba7afe51fff0f9a00f
An additional argument was added to specify the timeslot read
buffer size.
Change-Id: I4a088f91f23aaad05c5ab84a4783c1915d85aca6
Depends: osmo-e1d I6d603778cce14c5d72fe5f54904905ea7e66d7ff
This patch untangles the code a bit by changing the order where actions
are taken and variables are assigned.
The only real changes in behavour are the introduced assert, and that
bfd->data is set to NULL before releasing the related line.
Related: OS#4624
Change-Id: I947f64f8fa20f87fdc84538402623a6bcf35fdf9
Since the reference is dropped, make sure no one accesses it through
that pointer anymore. It must be done before calling the put() method,
otherwise it may already be released when put() returns.
Change-Id: Ic3f261b2a995efcbc8eece9669ee3ae63af7b5c0
Drop the function e1inp_close_socket since it's only used by the caller
at hand, and it's only exported through "internal.h", so no app is using
it. Remove it because there's only a caller, and furthermore because
keeping it (and putting bfd->data==line) would introduce a layer
violation because the bfd->data==line is only used for ipaccess so far.
Triggering path:
handle_ts1_read ret=0 "Sign link vanished"
ipaccess_drop
line->ops->sign_link_down
(osmo-bsc) ipaccess_drop_oml
e1inp_sign_link_destroy
link->ts->line->driver->close
ipaccess_close
Related: OS#4624
Change-Id: If23cc722106a9f70c998e591369a4acafa52c519
the bfd->data handles a reference to the e1np_line (obtained through
e1inp_line_get() during bfd setup), so remember to drop it under this
condition.
Related: OS#4624
Change-Id: I418064df04872befe2e936e21768b6ea01263120
osmo_use_count is available since libosmocore 1.1.0 release, so bump
required libosmocore version in autotools and packages.
struct e1inp_line field refcnt is kept in order to keep ABI
compatibility accessing struct fields. The new use_count is added at the
end. Size of struct changing is fine since it is allocated through
an API and a pointer should be used by clients.
e1inp_line_clone API is changed but it's not used by anyone outside
libosmo-abis, so it's fine.
Related: OS#4624
Change-Id: I0658b2e9c452598025cc0f1d0b060076171767cc
We cannot blindly append two ubits to the 320-ubit sized buffer. In the
end, we may already fill the buffer after the first ubit, causing a
buffer overflow with the second ubit.
Lets check if the buffer is full after every bit. Avoid copy+pasting
but move the code repeated per bit to a new function.
Change-Id: I58d946265372278051e4f29301d4f201ab98c0fc
Closes: OS#4648
Let's first add two bytes to the msgb before writing. This way we
would assert in case there was no tailroom. As we just added tailroom
in the previous patch of this series, we are fine
Change-Id: If84b31ea9a3fc7a6c8768918efed2822d1d58427
Closes: OS#4644
The DL-SAP primitive msgbs are currently allocated
to only have headroom but no tailroom. Let's change that
Change-Id: Ia476c8a2f70e6579be53230427923885a573f801
Related: OS#4644
In Commit Ib81a749ae24013b17caaf5fd64ccd9acbbc3ce08 we introduced
a syntax error leading to compile failure sfor --enable-e1d ever since.
This hsan't been discovered as osmo-e1d support is not built
automatically anywhere.
Change-Id: If1f4bd9469a614470045716df4c35187ff2cc76b
Increase reference count when a new sign_link using the line is created.
Otherwise the line is freed too quickly during e1inp_sign_link_destroy()
with several TRX being used, since each RSL link is missing a reference.
That extra refcoutny in update() is not really needed given that we already
have a link assigned on the line when we call update.
Fixes: OS#3612
Fixes: OS#4094
Change-Id: I74405b0e87a89c17d58e87024f4aedbd30832013
Historically, OpenBSC has primarily been used with setups that have
a single E1 based BTS connected. This meant that an error message on
the E1 LAPD implicitly has to be related to that single BTS.
However, in more comprehensive setups, there may be many BTSs on many
E1 lines with many signaling slots. At this point, it's important to
know which line/timeslot/tei/sapi a given log message relates to.
This patch introduces related log context.
Change-Id: Ib81a749ae24013b17caaf5fd64ccd9acbbc3ce08
Requires: libosmocore.git Change-Id Ie6742843fff809edffcac24c4dce4edf66bc71be
Related: OS#1938
the subchan_demux code predates ubit_t; let's use it to clarify
certain pointers refer to arrays of unpacked bits.
Change-Id: I944f05473954920d57e12d5514cf928fc78f2ea4
This command is also usable at run-time to dynamically
enable / disable e1 tracing on all active lines
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Change-Id: I0b4251702aecd6721b9d63c320351ef6cb513454
This will update the pcap fd in all open lines and close
the previous one (if applicable).
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Change-Id: I5c7dd740ba0a90b40c69a53b3dcc9d6d6a98f660
ortp >= 0.24.0 doesn't differentiate between SO_REUSEADDR and
SO_REUSEPORT, and has both enabled by default. The latter means that
we can end up with non-unique port bindings as we will not fail to
bind the same port twice.
This should have caused visible problems not only when operating multiple
osmo-bts on one machine (rare), but also with a single osmo-bts. Once the range
(default 16384-17407 ) wraps, there is a risk of new sockets (for new cals)
colliding with old ones. As two ports (RTP+RTCP) are used per call, this means
every 512 voice calls we expect the BTS to wrap. And from that point onwards
there's a risk of overlapping with previously allocated sockets.
Change-Id: I4fc9eee561c7958c70c63b4ffdc6cb700b795e28
Closes: OS#4444
So far, the e1d input driver only contained code for LAPD signaling
slots, let's extend it with support for all the other slot types, as
well as support for run-time re-configuration.
Change-Id: I53369004145681bf9178543fe407dfc75e4ae63a
Let's not print an error at program/library start time if osmo-e1d
cannot be reached. This error is confusing to everyone who may
have a libosmo-abis with e1d support compiled in, but who is not
(currently) using any lines via this driver, but others drivers.
Change-Id: If0d033f8a2ab4f0e72549a811ffccc66b91fb0a8
This way we can support more than one E1 line via osmo-e1d. As
neither mISDN nor DAHDI distinguish between mutliple cards of single
ports vs. multi-port cards, we havee to map both interface + line number
into a single uint8_t.
Change-Id: I3b6975624a0155a68d2c67bfdbc1fb751fb50b13
It's optional for an input driver to provide this function, and e.g.
mISDN doesn't provide it, either.
Change-Id: I56ed4244121f2019ece80d15bd07d5a8ce958273
The file decscriptor 'except' handling was only added in the DAHDI
input module as the DAHDI kernel side is actually using those. I
don't think we can even use this in any way over unix domain sockets.
Change-Id: I718629179181a1de3b82e23447549f593046d91f
osmo-e1d is part of the Osmocom 'software defined E1 interface,
which consists of a USB device for the actual E1 hardware interfacing,
and a daemon (osmo-e1d) implementing a libusb-based driver.
This commit adds initial support for talking to osmo-e1d using
the related libosmoe1d library. You need to use '--enable-e1d'
at configure time to enable it.
Change-Id: Ia0431c124e3b5b4108aee7b109d8c4bb0d8b45d4
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
libosmo-abis was built with DAHDI support, if the related header files
were present at built time, and without if not. This kind of automagic
enabling/disabling of features is wrong. Let's require DAHDI support by
default, and force the user to take a conscious decision by using an
explicit --disable-dahdi if he doesn't want it.
At the same time, update debian/control to list dahdi-source as build
dependency.
Change-Id: Id9f7f063e7ca9e3ab4aa96fc93f243caf50fb66a
Closes: OS#4248
It appears that opening "/dev/dahdi/channel" and using
ioctl(DAHDI_SPECIFY) is possible at least since dahdi 2.4 (from 2010),
and opening "/dev/dahdi/%u" has been deprecated ever since. One
advantage of the new interface is that you can use channel numbers
larger than 250, which is quite easily possible if you have more than
eight E1 lines on a system. It also makes libosmo-abis work on systems
where there are no udev rules for creating the legacy device nodes.
Change-Id: Id6c8f27d7ae948b50e9cf5a38f039d782ff78e1d
When closing a link which failed on open,
ipa_server_link_close() would crash it when calling osmo_fd_unregister.
Change-Id: I672d4de25464c3829b08aff26b1a6d4ad92e7684
The new and improved fsm supports multipe use cases:
1) plain old ipa server/client operation
2) ipa client/server operation with custom send callback (i.e. to bypass
the tx queue)
3) all of the above + custom timeout callback
4) fully generic operation that will pass opaque data to the callbacks
The current code will always kill the fsm and deallocate it upon
timeout, so the timeout callback will now return a value: 1 means the
fsm will be automatically terminated, 0 means no action, which allows
manually stopping/starting the fsm to reuse it.
Change-Id: Ie453fdee8bfd7fc1a3f1ed67ef0331f0abb1d59b
The patch sets TCP_USER_TIMEOUT to the same timeout value,
since keepalive only applies to idle connections, but we obviously want
to fail as fast as possible even if there is data to send and it's not
acked.
Change-Id: I5e7425958472aa5d758e09bfbefc7d7d37bf6f5f
If we receive an OSMO_IPA_KA_E_STOP in INIT state, we are trying to
re-enter INIT, which is not permitted as per the FSM definition.
Adding this permission avoids the below error message from hitting the
logs every time this happens:
<0003> input/ipa_keepalive.c:158 IPA-KEEPALIVE(server)[0x612000000520]{INIT}: transition to state INIT not permitted!
Change-Id: I8db2f2e708fc4fbb81f5019973098a80e8f540d2
We had the allstate_action function registered, and that function
implemented handling of OSMO_IPA_KA_E_STOP. However, the
allstate_event_mask was not set, rendering this functionality
inaccessible.
Change-Id: I83fd991bdacb7bab794878e47c7797fecf8b9286
The IPA keep-alive FSM code takes care of periodically transmitting
and IPA CCM PING and expecting an IPA CCM PONG in return.
Change-Id: I2763da49a74de85046ac07d53592c89973314ca6
The bound RTP socket will wait for incoming RTP packets and as soon as it
sees one, will 'connect' to it, so all replies will go to that sources and
incoming messages from other sources will be discarded. This obviously only
works once.
Change-Id: I5b54ca4296901fcf37794faf29e0b2acca27bd1b
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
In some situations, the user code called by the closed_cb call-back
might be tempted to call itself ipa_server_conn_destroy(), which would lead
to a double-llist_del during osmo_fd_unregister() and also a subsequent
double talloc_free(). Let's prevent such misuse by existing early in
such situations.
Change-Id: I0fef264ed5b4218906cdbca243ffa11b891025c6
* log port from which we accept() the connection in addition to address
* use macro helper for logging
Change-Id: I186974dae1819af8c92f9ea9eeb966ec7c9c9f55
When creating IPA link for server we might be called without explicit
address (which is legit - it means bind to all available
addresses). However in this case we won't have 'addr' field of
ipa_server_link initialized properly.
Fix this by following changes:
* don't copy NULL value as address
* use socket's local IP when no address set explicitly
Change-Id: I33679bb35f426d4cafb223b9200fccbf407e0cf6
Due to apparent copy-paste errors, wrong values were being
logged for IPA tags in ipa_bts_id_resp().
Fixes: 4c57eef663
Change-Id: I29a0401db0760219b9b9176709a88d589312261b
Related: OS#3355
dev->trx_id points to a structure used for whole BTS and doesn't point
to related TRX ID, which is encoded in priv_nr.
Change-Id: I00b01790990c8d21fdbe0f5750fa02f13ddb2009
The unix(7) man page recommends that sun_path is NUL-terminated
when struct sockaddr_un is passed to a bind() or connect() call.
Non-NUL-terminated paths only need to be dealt with at the
receiving end of a UNIX domain socket.
Commit b24efa5 erroneously assumed otherwise.
Change-Id: I9beecfa500db75cb679b1edcc352c893bf098b13
Fixes: b24efa551d
Related: OS#2673
When parsing the configuration, reject a socket path which
exceeds the maximum size supported by the operating system.
In unixsocket_line_update() stop copying the line's socket path to a
local buffer. The path will be copied again in osmo_sock_unix_init().
Both changes are portable; we don't assume any particular socket
path length since the size differs between implementations of Unix,
and we rely only on information from the generic sys/un.h header.
Change-Id: I36344805a825f5d0e0c9d218d438d8fd985ed9ca
Related: OS#2673
As we are closing the socket, there's no need for lower layers to
continue handling it, so let's return -EBADF.
Change-Id: I961b0ef7e598a09ce48a83038c0d90a415e0e11c
Similar to what we do in other osmo_fd cb, check for read_cb returning
-EBADF and in that case don't attempt using the osmo_fd anymore, either
because the fd was already closed (no need to then signal WRITE) or
because osmo_fd struct itself has been freed.
Change-Id: I4b968b72285f23a9552519cea67398a43d5003d2
Similar to what we do in other osmo_fd cb, check for read_cb returning
-EBADF and in that case don't attempt using the osmo_fd anymore, either
because the fd was already closed (no need to then signal WRITE) or
because osmo_fd struct itself has been freed.
Change-Id: I0e449a2bdf7f0411feeccd262cd731ca6fba3fc1
By doing this change we remove a duplicated error code path and thus
avoid having to maintain an extra code path with function pointers.
Change-Id: I5bce9f92209cc2fb37b78792e34f7898c71d2327
By doing this change we remove a duplicated error code path and thus
avoid having to maintain an extra code path with function pointers.
Change-Id: Ic044894980ae2b882d99eb30d9df50066671d8f3
ipaccess_bts_read_cb() only initializes signalling links if it has received an
IPA ID GET message on it, and so far happily accesses the uninitialized
sign_links list anyway if it hasn't.
Reproduce: simply don't send an IPA ID GET message when connecting to an IPA
server run by libosmo-abis, then continue to use the link --> segfault.
Fix the segfault: make sure that the e1inp_ts' type has been set, i.e. that
e1inp_ts_config_sign() has been called and the sign_links llist is initialized,
before calling e1inp_lookup_sign_link() on it.
../../../src/libosmo-abis/src/e1_input.c:511:2: runtime error: member access within null pointer of type 'struct e1inp_sign_link'
../../../src/libosmo-abis/src/e1_input.c:512:11: runtime error: member access within null pointer of type 'struct e1inp_sign_link'
ASAN:SIGSEGV
=================================================================
==5702==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000038 (pc 0x7f28a379ea34 sp 0x7ffd7d8933f0 bp 0x62e000000a98 T0)
#0 0x7f28a379ea33 in e1inp_lookup_sign_link ../../../src/libosmo-abis/src/e1_input.c:512
#1 0x7f28a37b97d4 in ipaccess_bts_read_cb ../../../src/libosmo-abis/src/input/ipaccess.c:778
#2 0x7f28a37b0277 in ipa_client_read ../../../src/libosmo-abis/src/input/ipa.c:76
#3 0x7f28a37b0277 in ipa_client_fd_cb ../../../src/libosmo-abis/src/input/ipa.c:139
#4 0x7f28a2ac1a34 in osmo_fd_disp_fds ../../../src/libosmocore/src/select.c:217
#5 0x7f28a2ac1a34 in osmo_select_main ../../../src/libosmocore/src/select.c:257
#6 0x444ba3 in bts_main ../../../../src/osmo-bts/src/common/main.c:364
#7 0x7f28a17ddb44 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b44)
#8 0x405e54 (/usr/local/bin/osmo-bts-trx+0x405e54)
Related: OS#3498
Change-Id: I2487ca37a0fe9aa56733f66bcad9dcf91fc11144
Commit 56ae85fd52 modified code in
ipaccess_rcvmsg to use osmo_fd_setup. During this change, a "|="
operator was converted to "=". Fix this change by manually ORing old and
new values passed to osmo_fd_setup.
Change-Id: Ie59072f07ca50d853c413fa038e447dcdee30a76
We have a public API in libosmocore, so let's use it istead of manually
filling each struct field.
Change-Id: I09479c3d5b0b9bd69a56c080b8c533a32824cc66
In libosmocore Change-ID I1834d90fbcdbfcb05f5b8cfe39bfe9543737ef8f
we have introduced ipa_ccm_id_resp_parse() as a bugfixed replacement
of ipa_ccm_idtag_parse().
The main difference is that the returned "value" parts now have
a correct reported "length", whereas before this commit they all
reported a one-byte too-long "length" for each IE.
Change-Id: Id4c9ff821a43a37cbacce905d44fee43d1b2c879
The '.' is illegal character in counter names, as they are exported
via CTRL interface, where '.' has a special meaning that cannot be
used by strings comprising the variable name.
Change-Id: I730d1acdd5562cd2c1758ceee31193010b14337d
We discovered that enabling the scheduler caused a segfault on the
ARM build of osmo-bts. So we have to revert the following two changes:
Change-Id I3a63c23f5ede47773b6a249a48ecebd5d3b45ace
Change-Id I4b8f0349d5503bbe53745cc8903beb26f149f219
This reverts commit 5a236ce1d4.
Change-Id: Ic81062d79a304038a50658b955f7d05edb3fa28e
Related: OS#3299
We discovered that enabling the scheduler caused a segfault on the
ARM build of osmo-bts. So we have to revert the following two changes:
Change-Id I3a63c23f5ede47773b6a249a48ecebd5d3b45ace
Change-Id I4b8f0349d5503bbe53745cc8903beb26f149f219
This reverts commit 7632278ea3.
Change-Id: Ie375b9eb0dc8ec4f8d4ca12940a7bc5dfc1f6235
Related: OS#3299
we use some functionalities of libortp that require to use rtp sessions
with the scheduled mode enabled. Since we do not enable the scheduled mode,
yet, we receive error messages in the log that complain about a non enabled
scheduled mode.
- Turn on scheduled mode using rtp_session_set_scheduling_mode() when
osmo_rtp_socket_create() is called.
Note: this patch is related to chane:
I3a63c23f5ede47773b6a249a48ecebd5d3b45ace Unfortunately we observed a
segfault with ortp version 0.25.0 (ARM), which seems to be related to an
unintialized scheduling mode. We expect this patch to fix the problem.
Change-Id: I4b8f0349d5503bbe53745cc8903beb26f149f219
Closes: OS#3299
libortp detects an ssrc jump using a packet count thresold. This
threshold is set to 50 by default. This means that libortp has
to see 50 rtp packets with the new SSRC before it accepts the
new stream. In our application we want to detect the changed
SSRC (Handover) as fast as possible. So we should change the
threshold to zero.
- use rtp_session_set_ssrc_changed_threshold() to set a thresold
of 0 packets when osmo_rtp_socket_create() is called.
Change-Id: Id88c2c44d29a409affc2e47fdb932e1187020593
Related: OS#3299
When libortp detects a timestamp jump, we resynchronize the session
in order to restore proper rtp frame reception. However, we do not
resynchronize on an SSRC change. An SSRC change usually indicates
the change of an RTP stream source, which is a much more profound
event than a timestamp change, so we should even reset the session
on SSRC changes.
Also, not resynchronizing the session on an SSRC change causes
problems when the jitter buffer feature is used. In those cases
it takes libortp a long time until it finally detects the timestamp
jump and the session resyhcornization happens late.
- reset the ession on SSRC changes by calling rtp_session_reset()
Change-Id: I8688a55cd20d0e14493c357db80754851e12f2fb
Related OS#3299
the function osmo_rtp_init() is initializing ortp at the start of the
application. However, it does not start the scheduler of ortp, which
leads into error log messages in some situatios.
- make sure that ortp_scheduler_init() is called with osmo_rtp_init()
Change-Id: I3a63c23f5ede47773b6a249a48ecebd5d3b45ace
Related: OS#3299
Ensure that pointers in cloned e1inp_lines point to valid memory.
Some members of struct e1inp_line can simply be deep-copied.
Use talloc reference counting for pointers to objects which may
be shared between clones (driver-private state and counters).
Prevents double-free bugs, e.g. when multiple links referring
to the same line are closed.
Also, do not forget to unlink struct e1inp_line's counter group from
the counter list. Fixes use-after-free in rate_ctr_timer_cb() during
osmo-bts shutdown.
Change-Id: I9f4724b4a5a064801591e9acf4f2fd1db006d082
Related: OS#3011
Related: OS#3137
Those values are not used anymore, since the old bfd is unregistered and
the values for the new one will be overwritten by osmo_fd_register.
Change-Id: I7ac74843cbed920a2fdc6ade7aef4d4de905939a
ipaccess_rcvmsg() disposes of a temporary osmo_fd structure after
the RSL link comes up. It copies data from its temporary osmo_fd
to the new one returned by sign_link_up(). However, in doing so,
it clobbered the 'when' flags, which could differ between the two
osmo_fd structures.
For instance, BSC_FD_WRITE could be set on the new osmo_fd but
not on the old one, in case sign_link_up() has already enqueued
outbound messages using the new osmo_fd.
Because of this behaviour, a patch committed to osmo-bsc to address
issue #2719 did not work as intended and had to be reverted.
After this change, that osmo-bsc patch should work as intended
and issue #2719 can hopefully be resolved.
Change-Id: I52f7c903212b38e9c87e4d45e52b231b6f1ae9f5
Related: OS#2719
This allows the users of libosmotrau to set the content of the SDES
items to something more useful than their compile-time defaults.
Change-Id: Ice794f9e0c6caeea1c67520c12efbfa375d1fb82
Related: OS#2701
vty_install_default() and install_default() will soon be deprecated.
Depends: I5021c64a787b63314e0f2f1cba0b8fc7bff4f09b
Change-Id: I7771131a27d0b7ad0397715ceb3be035062bc010
Make ipa_server_conn_write() a lot simpler and shorter by using msgb_dequeue()
and avoiding local pointer that was used only once.
Change-Id: Id968e60d081a6d69de482a908ca3fe5e1044aaa3
In case the counter group allocation fails, we must handle this
gracefully and fail the allocation of the parent object, too.
Change-Id: Iff8506832d3472ab193b19b43cfbe7a9511075d1
Related: OS#2361
Duration of an RTP frames dictates the timestamp used for the next
frame, not for the one being sent now. It was done like this before to
account for possible losses.
Implementation wise, the duration was understood as "duration
between last frame was sent and now when current one is sent". It makes
more sense to use it as the duration in number of sampling ticks
as described on the function documentation, specially now that we can
account for extra time by means of osmo_rtp_skipped_frame.
Change-Id: Ib8f5fa5509059fe908c09a4381844c613d478548
This API will be used by osmo-bts to maintain the sampling clock of the
RTP socket whenever a frame should be sent but it is not available, for
instance due to low quality of signal.
Change-Id: Id6099372b6231c0a4b6ea0716f46f5daee7049e1
Since ortp commit 5ab29c50adc7948b11449e3aeee66010379ff7dc preceeding
ortp 0.24, the API is fixed and requests a pointer instead of an
unsigned long.
As we now require at least ortp 0.22 since libosmo-abis
15d9b7929d, we need to support both old
and new version of the API to continue having support for 0.22 but still
supporting new versions of the library.
Change-Id: I2dbd0498d75160358eca4336850e1a0ad2efdbeb
Explicitly state that we are using an internal API from ortp, and
define the function we are using to avoid printing a warning.
Change-Id: I9cadcb31ce7ade3632d83753be97fdc9ea518b5b
This reverts commit d517db06ce, which for
some reason broke the IPA client functionality. This needs to be
investigated and properly fixed. But until that happens: revert.
Change-Id: Ic168f437c5bf1fcdb7441b0541c80a4805463004
In Chanage-Id Icbcd8827a75fd5f3393351c1ca372de85275ad35 we introduced a
very similar function to libosocore. Let's use that rather than our own
version here.
Change-Id: I858920db1fb5f5d66e71b676d28c84d330d7904a
Duration passed to osmo_rtp_send_frame_ext function is based
on the last frame and the current one. Duration must then be
added to the timestamp before being transmitted.
Change-Id: I0593d6530c097cca34125a0ae2dd1b019b4dd80d
Commit 0c8d9ddaea8c1afdc0e9b8c37a31c9d158e57efd in ortp broke old API:
function ortp_set_log_level_mask requires one new parameter 'domain'.
This commit fixes compilation in my Archlinux box using ortp 1.0.1.
Change-Id: I46e565f1873c7baf3c3b0aafe73951d20ce083b4
Add pointer address output to the sap alloc/free functions in
order to track the objects later in the debug output (we have three
of them)
Change-Id: I9b961d5e36967cfd953551b24696849541257a1c
N200, which controls the maxium number of LAPD retransmissions,
is set to 300. This will cause a long waiting time until
LAPD detects a failed link. This commit reduces the retransmission
count to 50 in order to get a faster link re-establishment in
case of link failure. This patch will only affect the ericsson
LAPD profile, all other lapd profiles will not be touched.
Change-Id: I4f56f9d00520adc0c0a4497547762cd054030867
alpine linux is using the musl libc and this triggered some minor
compilation issues. Remove unused mISDN include and defines from
the general E1 input handling and address the other warnings and
errors.
/usr/include/sys/fcntl.h:1:2: warning: #warning redirecting incorrect #include <sys/fcntl.h> to <fcntl.h> [-Wcpp]
#warning redirecting incorrect #include <sys/fcntl.h> to <fcntl.h>
^~~~~~~
In file included from input/misdn.c:48:0:
../include/mISDNif.h:286:2: error: unknown type name 'u_int'
u_int id;
^~~~~
Change-Id: I997e45a456faedb5f370fd02ded300c1e36b791b
Remove dup: call function to obtain IPA address only once. Log
explicitly IP address and ports to which IPA is bound or connected.
Change-Id: I841c40abdcba0fdd695a43231391c5d7cee20fae
* check RTP socket parameter and enable necessary jitter buffering
* return the status of requested jitter buffering instead of always
returning 0
* document function parameters and return value
Change-Id: I87d4d9fe990683adbb02b64cb39b78de533d8046
ortp: use extra parameter for network_error callback in log message as
it's described in oRTP documentation (error string).
Change-Id: I581db499d453b80230198d95000f0f6fc20752d1
If osmo_sock_init() would ever return a negative FD together with
errno == EINPROGRESS, we would have attempted to register that negative
FD with the select() main loop handling, whihc of course doesn't work.
EINPROGRESS for a non-blocking connecting socket is handled inside
osmo_sock_init() and would result in it returning a positive FD, so the
above case is of theoretical significance only.
Change-Id: Id01eb0d48eea6cab1fbc720c52361101b8ea4e35
Fixes: Coverity CID 57856
Ericsson's RBS2111-BTS (and similar) implements a lapdm dialect which uses
a link establishment method that differs from the standard. While the BSC
is transmitting sabm frames on one specific timeslot, the BTS will
periodically scan through all timeslots to check for incoming sabm frames.
When the BTS detcts the sabm fames on one of the timeslots it will stay
there and continue to commence the link establishment.
The described procedure requires a slightly modified lapd profile, the t200
retransmission timeout has to be configured to exactly 300 msek. Otherwise
the link establishment will fail. Since the BTS will switch from timeslot
to timeslot most of the sabm frames will not be seen by the BTS, so the
maximum retransmission has to be increased. This patch suggests a maximum
retry count of 300, which is an educated guess and has worked fine during
our tests.
Change-Id: I892af57013d7ab4216e9e2d0873a69129aaeb8e5
Use separate pointer for payload to make sure mblk->b_rptr is not
advanced (which breaks the use of rtp_get_* macros that assume
mblk->b_rptr is pointing to the RTP header, not the payload).
Committed by: Max <msuraev@sysmocom.de>
Change-Id: I205630e1da98693ba0ac25e86e21780284185077
Related: OS#1802
While debugging low-level RTP issues it is handy to be able to match
exact RTP packet with the payload available to higher-level
functions. Having Sequence number and Timestamp RTP fields as parameter
to receiving callback is the easiest way to do so.
Change-Id: I0c9b08d247d7342d6139badca77ce64fda0cf274
This is useful for protocols that use HDLC framing for signalling on E1
timeslots, but which don't use LAPD inside (our E1INP_TS_TYPE_SIGN).
Examples are particularly a MTP2/MTP3 SS7 stack, like it is used on the
A interfaces or on the core network interfaces of classic
circuit-switched networks.
Change-Id: I2d75801df4d7cbb8dad325f4d6689841f0196fa6
In the past, the A-bis E1 input system only unederstood LAPD signalling
time-slots and trau-slots with 16kBps sub-slots. This adds the notion
of a 'raw' transparent 64kBps slot, without any furthe de-multiplexing
nor any HLDC inside.
Change-Id: I0c25c2688eddd0c55c15b280a8c6e8a49629516b
It is quite useful for the signal receiver to know on which of the many
E1/T1 timeslots a given event (like a 'link down' event) has happened.
The line number, TEI and SAPI are isnuficcient in case there are
multiple signalling TS in the line.
Change-Id: I07f0f79e0cda09766f357032ffb4e7ad643d448a
This will prevent the timestamp jump to occur between each call for DTX
if something goes wrong. It's handy as oRTP does not manage well
timestamp jump if it is not resynced.
Fixes: OS#1803
Change-Id: Iae5da832218dbd1ede7a9451102074f2a5eb66df
This reverts commit c77c2a6aa1,
and explicitly sets connected mode to zero for set_remote_addr to work around
internal libortp problems. See https://osmocom.org/issues/1661#note-15.
Related: OS#1661
Change-Id: I9d146c3bd76e02685b09278167b56029152221a0
Require version 0.22.0 which matches Debian stable ATM to simplify
testing and maintenance across all supported BTS models and
corresponding toolchains.
Change-Id: I005d60bb50889edad3e6fc0cd9f7f180aeaf1dab
Fixes: SYS#2569
Previously rs->rtp_bfd.when and rs->rtcp_bfd.when value of BSC_FD_READ
was overridden by 0. Fix it.
Reported by coverity: CID 1357763.
Change-Id: I11940cbf50361c4ea262d7001a16f9a982392f27
Previously RTP receive callback ignored Marker bit from RTP
headers. Extend API to include it explicitly.
Change-Id: I3c2b6365d8a51bf98805614e07344d2639875fde
Related: OS#1750
In libortp, rtp_session_set_connected_mode() sets a flag that is used in
rtp_session_set_remote_addr().
The name rtp_session_set_remote_addr() is misleading: this function actually
does take a lot of action, including an attempt to connect to the remote
server. Thus the "connected mode" flag needs to be set before this.
Suggested-by: NuRan Wireless <nuranwireless.com>
Change-Id: I92308ddffc376af8d4d65e6b9cbeee222b7bff5e