Commit Graph

560 Commits

Author SHA1 Message Date
Pau Espin 8933b8f7cd configure.ac: Set libosmo-e1d dependency version
Change-Id: I2c6e50f73090a2134485d68a189036bc0aa00266
2022-06-29 12:15:31 +02:00
Pau Espin 59a0c91904 Bump version: 1.2.0.14-dcbc-dirty → 1.3.0
Change-Id: I14b709d38d655d9c6f5238462da2f7b21c103898
2022-06-28 17:59:38 +02:00
Harald Welte dcbc00d0c4 osmo_pcap_lapd_write: Fix write of uninitialized byte(s)
The problem is that we don't zero-initialize the struct pcap_rechdr +
pcap_lapdhdr before memcpy'ing them to buf, before we call write:

==20097== Syscall param write(buf) points to uninitialised byte(s)
==20097==    at 0x4E48471: write (write.c:26)
==20097==    by 0x4DA8DE9: osmo_pcap_lapd_write (lapd_pcap.c:168)
==20097==    by 0x4DA8433: send_ph_data_req (lapd.c:628)
==20097==    by 0x4C94F5C: lapd_send_rej (lapd_core.c:536)
==20097==    by 0x4C9A08A: lapd_rx_i (lapd_core.c:1574)
==20097==    by 0x4C9AA8F: lapd_ph_data_ind (lapd_core.c:1708)
==20097==    by 0x4DA7C55: lapd_receive (lapd.c:496)
==20097==    by 0x4D96B2C: e1inp_rx_ts_lapd (e1_input.c:778)
==20097==    by 0x4D9C97C: handle_ts_sign_read (e1d.c:78)
==20097==    by 0x4D9D908: e1d_fd_cb (e1d.c:281)
==20097==    by 0x4D1281B: poll_disp_fds (select.c:361)
==20097==    by 0x4D12928: _osmo_select_main (select.c:399)
==20097==  Address 0x1ffefffed7 is on thread 1's stack
==20097==  in frame #1, created by osmo_pcap_lapd_write (lapd_pcap.c:129)

The whole idea of first filling the two structs on the stack, and then
copying them to another buffer on the stack is somehow weird.  Let's
just create a combined struct on the stack and then fill that one
directly.

Change-Id: I358c71354cc6ddad1964cc4a988ad29b7ba617f1
Closes: OS#5592
2022-06-27 08:07:48 +02:00
Harald Welte 1885e0422a update git URLs (git -> https; gitea)
Change-Id: I9b41e0b88785d34809db0e62e82aaa71f8127f71
2022-06-18 14:05:53 +02:00
Harald Welte 3d41fc6815 update git URLs (git -> https; gitea)
Change-Id: I9edabaefe7081493fb639760d311f02c01da0155
2022-06-17 23:12:04 +02:00
Pau Espin 90df035a8d input/ipaccess: Avoid extra poll() call when e1i_ts tx queue becomes empty
Before this patch, the logic (both for delayed tx and immediate tx)
always left the WRITE flag set, and relied on an extra call back from
the main loop (poll()) to disable the flag until it found out there was
nothing else to send.
Instead, let's disable it immediatelly at the time we submit the last
message in the queue.

Change-Id: I0e5da5d1342f352d0e2bca9ee39c768bccb2c8d5
2022-05-09 12:59:48 +02:00
Pau Espin d20a10c58b input/ipaccess: Remove unneeded osmo_fd_write_enable()
Recent commit optimize the same function by avoiding an extra poll loop
when e1i_ts->sign.delay was zero. Upon doing so, the
osmo_fd_write_disable() was moved to some conditional paths. Hence, the
WRITE flag is left set and we don't need to set it again in the code
path modified in this commit.

Fixes: 28fea7746b
Change-Id: I84787b6de2a5ccc82bd8f19ce874e73708bc287f
2022-05-09 12:48:54 +02:00
Harald Welte 28fea7746b input/ipaccess: Don't start zero-ms timer on every write
Historically, before November 15, 2010 when commit
d49fc5ae24fc9d44d2b284392ab619cc7a69a876 was merged to [back then]
OpenBSC, before libosmo-abis became a separate library, we used to
have a 10us delay timer for subsequent writes to ip.access nanoBTS 900.

    ts: Reduce the delay to 0 for OML and RSL

    This is possible after not sending more than one OML command that
    requires an extra ACK. For the RSL line we do not need any speed
    limitation.

Ever since the above-mentioned commit, the BSC always sets that timeout
to zero, which makes libosmo-abis start a zero-microsecond libosmocore timer,
which in turn will make libosmocore call select/poll with zero timeout, which
makes the kernel return immediately.

Why not remove the timer completely? Because ipaccess-config.c still specifies
a non-zero signaling delay, and we cannot be sure that this is really not
needed.

So let's alter the code to only start the timer if it's non-zero

Change-Id: I9c379364e7e6afce35fc6316392b5b33748980f7
2022-05-08 18:32:01 +00:00
Michael Iedema ee2589e484 stats: add site_id scope to ipa-rsl tcp stat names
Multiple IPA units can have the same bts_id but scoping by their
site_ids will make them unique. This also clarifies the "bts"
number being communicated. It is not the bts configuration index
in osmo-bsc.cfg, it is the bts id specified in the vty line:

bts X
 ipa unit-id SITE BTS

Change-Id: I3b44319fb4bc6a812800001c58dfe1a664645b43
2022-05-03 10:26:28 -07:00
Vadim Yanitskiy adb2e1666f input/e1d: use msgb_hexdump_l2() in handle_ts_raw_read()
Change-Id: I17f4ab1315f0fdab71ccbe45fc83facf2c9ea641
2022-04-18 02:13:21 +03:00
Vadim Yanitskiy bb9cba0167 input/e1d: fix a memleak in handle_ts_raw_read()
Change-Id: I18965d1ef67a388e7bcdddd0314a9090e34c89e0
2022-04-18 02:12:00 +03:00
Michael Iedema 296678662a stats: add BTS index to IPA RSL TCP stats name
With this change, the new TCP stat names more closely
resemble existing RSL related stat names.

Change-Id: If7ae7f0e75de37e2e52a8ed724c861f57d0da574
2022-02-24 09:25:20 -08:00
Michael Iedema 95a8d6f2ef stats: add RSL line number to TCP stats name
Change-Id: Ie42d8a0cb3757f2d01a4b6d69ea2bcce400b7538
2022-02-10 09:20:22 -08:00
Philipp Maier f5f31d34d1 ipaccess.c: register RSL/OML related osmo_fds for monitoring
The osmo_fds used for ipaccess based E1 traffic should be registered for
monitoring to get tcp_stats for all RSL/OML links.

Change-Id: I42ca4e9257eee2857784dd4f5b17a83220e2be9e
depends: libosmocore I64b288174ae3dd22d50a701ce7cbf9e623246479
Related: SYS#5701
2022-01-04 16:58:48 +01:00
Oliver Smith 2650b57400 treewide: remove FSF address
Remove the paragraph about writing to the Free Software Foundation's
mailing address. The FSF has changed addresses in the past, and may do
so again. In 2021 this is not useful, let's rather have a bit less
boilerplate at the start of source files.

Change-Id: I0ad20cdf1e571c1a15f6e67d46e07155a6a02520
2021-12-14 11:58:39 +01:00
Harald Welte a864378936 lapd: don't add parenthesis around datalink name
The name [printing] works like this:

* libosmo-abis:lapd tells libosmogsm:lapd_core a name for each data link
* libosmgsm:lapd_core assumes this name has no paranthesis and puts additional
  parenthesis around it in macros like LOGDL

However, current libosmo-abis:lapd [before this patch] adds its own set
of parenthesis, causing all ISDN-LAPD related log messages generated by
libosmgsm:lapd_core to have double-parenthesis.

So we have to remove the parenthesis from lapd_datalink.name and
lapd_instance.name to fix the log lines printed in libosmocore.

This in turn means we have to add parenthesis to some log statements
here in libosmo-abis:lapd.

Why can't we instead modify libosmogsm:lapd_core to drop parenthesis
there? Becaus it is also used by LAPDm code in osmo-bts, and those two
get it right :)

Change-Id: I688cf2a73a8c31cb3cf66ec005d02a14de197008
Related: Ie6742843fff809edffcac24c4dce4edf66bc71be
Related: OS#1938
2021-11-17 20:19:08 +00:00
Pau Espin a6eda5ae01 Bump version: 1.1.1.14-57ff-dirty → 1.2.0
Change-Id: I0536137e6221fd322536111dfda6e19d3c57de6c
2021-11-16 14:18:45 +01:00
Pau Espin 57ff57ac5c e1inp_input: Fix e1inp_line_clone removing original line from global list when freed
Since a recent commit (see hash below), e1_input.c code was fixed to
release the line from the global line list (e1inp_line_list) before
freeing the object. However, the change didn't have into account that
there were cloned lines from the original one which had a duplicate of
the original line->list. Hence, whenver a clone was freed, it actually
removed the original line from the global list.

Since the original line is the one actually holding the permanent
reference due to being configured over VTY, let's fix e1inp_line_clone
to reset the clone->list so that whenever it is freed it doesn't affect
the original line.

Fixes: 49924f0a79
Related: SYS#5642
Change-Id: I0627da0d28057649b494e2bd83b283b09fb9a2d7
2021-10-13 16:38:02 +02:00
Pau Espin 92aee5109c ipaccess: e1inp_ipa_bts_rsl_connect: Fix memleak recreating ipa_client_conn
If BTS, using this app, tried to use it in order to re-create the
connection, it would leak the previous strut ipa_client_conn. A similar
fix was already put in place recently for OML, but it was not applied
for RSL.

The leak was spotted by having a BTS connecting fine over OMl but then
failing each time to connect on RSL.

Related: OS#5248
Change-Id: I4ee1ae318b446490783c8b910fca10ba5f72dd5a
2021-10-11 12:16:30 +02:00
Pau Espin d2d28d83a4 ipaccess: Allow reconfiguring the ipa line during line_update()
The e1inp_line_update() API is precisely aimed at that: tell that we
want to reconfigure some aspects of the e1 line. Hence, it makes no
sense to apply a no-op with the flag "line_already_initialized".
That flag was added a long time ago in order to avoid problems when
several BTS are attached to the same ipa server link. That case doesn't
apply to the BTS role, so we can simply recreate the ipa_cli_conn.

Fixes: d6216405b7
Change-Id: Iff8092f88726cf238dac2abb99e135ac5864272d
2021-09-29 14:32:13 +02:00
Pau Espin dd48e257ab e1_input: Document e1inp_line_create()
Specially important regarding the pre-allocated reference count.
This was done when moving the API to use osmo_use_count internally,
because previous code already came with refcount=1.

Change-Id: I819a13732c5d0ff150bc11d1cfd64e96ee81bad2
2021-09-22 19:37:56 +02:00
Pau Espin 49924f0a79 e1_input: Fix line not removed from e1inp_line_list when freed
This was not an observable issue so far because both osmo-bts and
osmo-bsc used to keep the same line created once, keeping at least 1
reference count to it.

Change-Id: I1314d6b917ecb622994507475eb894e649a1a2ad
2021-09-22 19:32:15 +02:00
Pau Espin 24e0217c2e osmo_ortp: Fix seqno reset to 0 upon ssrc_changed
It was spotted in an osmo-mgw instance receiving RTP from osmo-bts 1.2.3
that sometimes the seqno was reset to 0 (while tx_timestamp was kept
properly). This seems to be the only possible way osmo-bts can reset the
seqno to 0 (calling rtp_session_reset()), since osmo_rtp_socket_create
already sets it to other values and inside ortp rtp_session_reset() is
the only one setting it to 0.
If SSRC changes, we are fine resetting some Rx state, which is done by
calling rtp_session_resync. However, calling rtp_session_reset() is too
much, since it erases other stuff like Tx state, which sholdn't be
affected in this case, since we are still transmitting the same stream.

Related: OS#3104
Related: OS#3299
Related: SYS#5498
Fixes: 28eeb6bc93

Change-Id: Ic6006b4991c85413b009b70f8f3a6f97c41990ec
2021-07-20 14:29:40 +02:00
Pau Espin c5f1d4f9d3 Use new stat item/ctr getter APIs
Generated with spatch:
"""
@@
expression E1, E2;
@@
- &E2->ctr[E1]
+ rate_ctr_group_get_ctr(E2, E1)
"""

Change-Id: I064aae995975a379425d5f21221fa48efc6d05f9
2021-06-04 17:53:33 +02:00
Philipp Maier ea0f1bd49e ipaccess: do not block ipaccess_line_update on failure
The function ipaccess_line_update (called when the API user calls
e1inp_line_update and the line is of type ipaccess) internally sets
the line_already_initialized regardless whether the initalization is
successful or not.

This also means that if the initalization fails the API user is unable
to retry the initalition with corrected line options.

Change-Id: I90d330e2864f85b964628502afdb0c38eb54f15d
Related: SYS#4971
2021-05-20 21:11:50 +02:00
Keith Whyte df088b0ea9 Fix up vty 'show' commands for E1 line/timeslots
Change-Id: I6af92ae2808713c74afeecaa1f500443fb2b7795
2021-05-05 14:07:40 -05:00
Keith Whyte bbff304e2e Log TRAU FSM at INFO not NOTICE
During normal operations, osmo-mgw floods the log/vty at level NOTICE with:

 Received Event RX_BITS (trau_sync.c:525)

Change-Id: Ib4c5ac130e766906361c63090b30111970343075
2021-05-04 15:43:06 -05:00
Harald Welte 14277e3375 trau: Introduce osmo_rtp_socket_set_priority()
For consistency reasons with osmo_rtp_socket_set_dscp(), let's also
introduce a osmo_rtp_socket_set_priority() function to wrap the two
calls to osmo_sock_set_priority().

Change-Id: I52c08f4b2a46981d002ef0c21e6549445d845a6e
2021-04-29 21:44:18 +02:00
Harald Welte 41547559da e1_input: Allow (vty) configuration of IP DSCP and socket priority
Change-Id: I8991dd6eb406a5b9a70498974fc1ad339452f871
Related: SYS#5427
2021-04-29 21:24:28 +02:00
Harald Welte 6bcc32bcfa ipa: Introduce support for user-specific DSCP and priority
This adds new members to struct ipa_server_link and ipa_client_conn,
which can be set by the user before ipa_client_conn_open() or
ipa_server_link_open() to ensure DSCP / priority values are applied
from the first outgoing packet onwards.

Change-Id: I5ab22d35d9b11eca47d9ea12208e5589a1a5713c
Depends: libosmocore.git If22988735fe05e51226c6b091a5348dcf1208cdf
2021-04-29 21:21:56 +02:00
Keith Whyte 2672a2a2a7 Configure E1 pcap file per line
In order to allow configuration of pcap files per e1_line
the vty command is now (for example line 0):

  e1_line 0 pcap /tmp/e1cap.pcap

in place of:

  pcap /tmp/e1cap.pcap

Also ensures that a configured pcap appears in 'show running-config'
and is written to the config file on issuing 'write'

This commit deprecates e1_set_pcap_fd()

Change-Id: I316c3d6a839e84c2f52a148c6b8dd6f5933cf4bf
2021-04-13 23:28:02 +02:00
Harald Welte 4aea11befc Bump version: 1.1.0 → 1.1.1
Change-Id: If65dbee5a5be447df1b280240132d13d6b524b85
2021-02-24 09:32:30 +01:00
Harald Welte 956656452d attempt to fix RPM spec file after recent soversion bump
In Ic66eb67254d35f02ec8cdea4d79fa4b1899e8230 the soversion was
chhanged (e.g. libosmoabis.so.9 to libosmoabis.so.10) but the
spec.in file was not adjusted accordingly.

Change-Id: I0ca9eb5a60557a1bc8e3611fdd2668469ac19031
2021-02-24 09:29:59 +01:00
Pau Espin de169199b9 Bump version: 1.0.0.34-2163-dirty → 1.1.0
Change-Id: Ic66eb67254d35f02ec8cdea4d79fa4b1899e8230
2021-02-23 16:21:49 +01:00
Pau Espin 216316a6c1 gitignore: Ignore autofoo files *~
Change-Id: I64e433f2425dbe2b22103f986354939c0ac9d9f9
2021-02-23 16:15:21 +01:00
Pau Espin 97cae17ffd tests: trau_sync: Explicitly drop category from log
Let's disable hex category here since we don't care about its formatting here.

In any case, every test relying on logging output validation should
always explicitly state the config to avoid issues in the future if
default values change.

Related: OS#5034
Change-Id: I332d1215fc7784a6647b90e2eb8b1efcd644002e
2021-02-19 12:50:03 +01:00
Harald Welte 949b8a22b0 migrate to osmo_fd_{read,write}_{enable,disable}()
Change-Id: I005826dfe3a8ad0fd6e08df2c87b38ce916bda2d
Depends: libosmocore.git Change-Id Idb89ba7bc7c129a6304a76900d17f47daf54d17d
2021-02-08 17:20:44 +00:00
Harald Welte 8c724c0551 osmo_ortp: Don't print ERROR message for every missing RTP frame
* it's inconsistent to print ERROR in a LOGL_INFO message
* loosing RTP packets is not that unusual, especially when the channel
  is just starting up

Change-Id: Ide0017987b4cea7fd24795941494f1da913ea673
Closes: OS#4464
2021-02-06 15:26:41 +01:00
Harald Welte b3952c60f1 e1_input: Support I.460 timeslot type
Unlike the legacy TRAU mode, this only adds I460 mux/demux,
without any TRAU frame synchronization.  The user must still be
adding the actual sub-channels using osmo_i460_subchan_add()
depending on his requirements.

Change-Id: I44da6dfec77ef475adb35001a0e4fa11d549aa02
2021-02-03 08:49:07 +00:00
Oliver Smith 0f404b600c configure.ac: set -std=gnu11
Change-Id: Ib920af17b9a0b5d6ea5f4db33faab3a2dcf8fbbe
2021-01-27 17:32:20 +01:00
Harald Welte 6e831b72d7 Use osmo_fd_setup() wherever applicable
Change-Id: I5b369343cf708ddfcde347f218a10d5f72303aaa
2020-12-21 17:58:06 +01:00
Vadim Yanitskiy 77a7cf429b ipaccess: fix verbosive logging in __handle_ts1_write()
Apparently, the logging level was changed unintentionally.

Change-Id: Ibdee8cbcc12edf14fd824b515d0aecb89fcac490
Fixes: Idce3bb3daf8ab16b84968a61502c826df8b773ed
2020-11-29 20:40:01 +01:00
Pau Espin 9af069d5da ipaccess: Fix wrong assertion in ipaccess_drop() when used by BTS code
The code wrongly assumed that ipaccess_drop was only called by BSC code,
which is wrong. ipaccess_drop is called by BTS run code path in __handle_ts1_write(),
if send() syscall fails (for instance because BSC becomes unreachable).
In that case, we need to account for the BTS role case which doesn't
store the line pointer into the ofd->data. In BTS case, it's a pointer
to the struct ipa_client_conn, which we leave up to sign_link_down() cb
to do whatever they please with.

Fixes: OS#4864
Change-Id: If763e5f7736921a4360ad9027ba075ef8e118934
2020-11-24 15:40:09 +01:00
Pau Espin 91314c10af ipaccess: Fix log error printed on wrong conditional branch
The signal link is set if fd is established (see osmo_fd_setup in
ipaccess.c).

This log message was introduced in 466c5467e2,
where the lifecycle worked a bit different than nowadays:
line->ops->sign_link_down() was called before the log line, so the code
expected by that time that the socket should have been freed by
sign_link_down(). That's no longer the case. In ipaccess_drop, we force
dropping so we release lower layers and then signal upper layers. Hence,
the log lines are misleading nowadays.

Change-Id: Ibc6554e6cacc9c71232238b4e6a17d749dfdd30a
2020-11-23 14:50:53 +01:00
Pau Espin 3bdf59b227 ipaccess: Use LOGPITS macro in __handle_ts1_write
Change-Id: Idce3bb3daf8ab16b84968a61502c826df8b773ed
2020-11-23 13:47:16 +01:00
Vadim Yanitskiy 4da31b8173 cosmetic: fix spelling in logging messages: existAnt -> existEnt
Change-Id: Ifb22b5544cf06012fa529828dfdf3f0d73b07e7d
2020-10-29 18:03:13 +07:00
Harald Welte de3959e62c Use OSMO_FD_* instead of deprecated BSC_FD_*
Change-Id: Ib676eda521f0e89a1f4d8f9eac810598a3c813b9
2020-10-18 22:30:07 +02:00
Pau Espin 424e50f761 contrib/jenkins: Enable parallel make in make distcheck
Related: OS#4421
Change-Id: I54b084de6080ab8c438c2c85663abe01c54b07fe
2020-10-12 18:25:13 +02:00
Philipp Maier ef5b839e23 vty: add attributes to VTY commands indicating when they apply
Change-Id: Ie0182351bd8a10085563c403dfab04c4d1b4305c
Depends: libosmocore I0efc57f2cb54798ba207ae6fef9af4771d96bfa9
Related: SYS#4937, OS#1601
2020-10-08 17:40:41 +02:00
Vadim Yanitskiy 82ef2a24e3 vty: use install_lib_element() and install_lib_element_ve()
See https://lists.osmocom.org/pipermail/openbsc/2020-October/013278.html.

Change-Id: I22a8075852ba97edf819b368e3af4eddbf1dbae0
Depends: I8baf31ace93c536421893c2aa4e3d9d298dcbcc6
Related: SYS#4937
2020-10-04 16:45:59 +07:00