Commit Graph

533 Commits

Author SHA1 Message Date
Eric Wild 7ca90626ac configure.ac: fix libtool issue with clang and sanitizer
As pointed out at https://github.com/libexpat/libexpat/issues/312
libtool does not play nice with clang sanitizer builds at all.
For those builds LD shoud be set to clang too (and LDFLAGS needs the
sanitizer flags as well), because the clang compiler driver knows how
linking to the sanitizer libs works, but then at a later stage libtool
fails to actually produce the shared libraries and the build fails. This
is fixed by this patch.

Addtionally LD_LIBRARY_PATH has no effect on conftest runs during
configure time, so the rpath needs to be set to the asan library path to
ensure the configure run does not fail due to a missing asan library,
i.e.:

SANS='-fsanitize=memory -fsanitize-recover=all -shared-libsan'
export CC=clang-10
ASANPATH=$(dirname `$CC -print-file-name=libclang_rt.asan-x86_64.so`)
export LDFLAGS="-Wl,-rpath,$ASANPATH $SANS $LDFLAGS"

Change-Id: If9aa8a066d81cf378d6bbc0fa95ad6e985408af8
2020-04-11 01:16:02 +02:00
Pau Espin 97c3226e90 stream: Rename cli state NONE to CLOSED
It makes a lot more sense calling it this way since it matches the state
of the stream at that point.

Change-Id: Ic02aec3f7f095e0e0e1f940425f577be5048e98f
2020-01-28 13:19:53 +01:00
Pau Espin 7f8e0502e2 stream: Add new WAIT_RECONNECT cli state
It's not really needed right now from logic point of view, since we
reused NONE for that. But it makes logging and logic clearer, and will
make it easier if we decide to move it to FSMs at a later point in time.

Other state value_string names are also modified with its whitespace
removed since anyway we'd need to change them to match WAIT_RECONNECT
length. Let's drop the space because imho it's not that useful and
anyway if we move to FSMs at some point then we won't have them anyway.

Change-Id: I7b9a6da87081c418b0d14bab5f34369c5eca6fe8
2020-01-28 13:18:36 +01:00
Pau Espin 6326e8ff85 stream: Re-arrange cli states to fix 100% cpu usage bug
With previous state, osmo_stream_cli_close() could be called from
osmo_stream_cli_open()(), and in that case state was kept as NONE while
ending up with an associated fd being registered in the select loop.
As a result, osmo_stream_cli_fd_cb() could be called while in state
NONE, which was not expected and would simply return without modifying
fd state flags, causing it to be called again and again.

Related: OS#4378
Change-Id: Ie3342f882893a71ad1538c17ad9ee9fa4433eaa4
2020-01-28 12:50:31 +01:00
Pau Espin 3fc969e3d6 stream: Drop data during write() while in state NONE
It should not happen anyway because no fd should be active if state is
NONE, but still it's an extra check.

Change-Id: I6d58762b7d10078eb8d0981c13d35cb6f85cfe86
2020-01-28 12:30:24 +01:00
Neels Hofmeyr 63e33ab84c add/clean big-endian packed structs (struct_endianess.py)
Change-Id: If408153af472a41dcea8d6f6aedd22adb16963d5
2020-01-12 13:14:48 +00:00
Pau Espin 5ed1a3c85c stream.c: Improve logging during sock send()
Change-Id: Iff275c809ec2bb34f471d15bfdc92296566b76a7
2020-01-09 20:38:05 +01:00
Pau Espin cb1635a6b5 configure.ac: Drop unneeded check for dahdi
This check was added during libosmo-netif's initial commit, and there's
nothing requiring DAHDI in here. It's most possible a copy-paste
artifact when creating configure.ac.

Change-Id: Ief25a12696d797eaf50b0373e8310add93b9dc9e
2020-01-09 14:22:05 +01:00
Pau Espin d1b1ff77a6 configure.ac: Introduce --{enable,disable}-libsctp configure flag
Similar to what we do in libosmocore already, we want to
deterministically enable or disable support for the feature without
having into account if the system has a libsctp. If libsctp is missing
and support is enabled, then fail.

Extra checks are also added:
* Check netinet/sctp.h header
* Check libosmocore was built with libsctp support (API
osmo_sock_init2_multiaddr() we require).
* In stream.c make sure it can be built without HAVE_LIBSCTP, and that
set_addrs() fails for more than 1 address (since that feature is only
supported through osmo_sock_init2_multiaddrs()).

Change-Id: I4b3e1f1894f13ac1175a71a5139c02a2633be26d
2020-01-09 14:10:20 +01:00
Neels Hofmeyr c633f54a3c struct amr_header: copy comments to little endian part
I will soon apply struct_endianess.py to this code, and then the comments that
are now only in the big endian part would be lost. Copy them to preserve them.

Change-Id: Ie4279928bd77a5d425d0e7a3c4d58bac3cf0230a
2020-01-07 17:52:49 +01:00
Pau Espin b8121e79ef Bump version: 0.6.0.16-6413a-dirty → 0.7.0
Change-Id: Iabfa9a706c6456bf554ba59badbc3cbfc9210423
2020-01-02 21:01:22 +01:00
Neels Hofmeyr 6413a6b53f osmux_test: don't use color logging
Change-Id: I7b0c8d311123f4fa0aeedf3938c8628a4442daf7
2019-11-20 05:03:37 +01:00
Pau Espin 856c2631c5 libosmo-netif.pc.in: Append -lsctp to Libs.private
It will be used by the linker when linking statically against
libosmo-netif.

Change-Id: If25064d43363bace563e992828350f6d28543854
2019-10-22 19:38:07 +00:00
Pau Espin ee5c860268 stream: Fix fd param passed to close() in error conditon
Fixes: CID#205089, CID#205087
Change-Id: I65714f214b9962862cda01605c7c2c578c78d3c7
2019-10-21 11:27:36 +02:00
Pau Espin 366f0dbf81 tests: osmux_test: Hardcode h_output values set by random()
osmux implementation randomizes those values. It seems build in OBS
sometimes provide different values than the ones expected in the test
result. Let's hardcode them to make sure we always have the same values
regarless of the random() implementation.

Values chosen are the one matching the current expected test output so
it doesn't need any change.

Change-Id: Icc553c83ddff41900ae3d5990a655c29c9073e01
2019-10-18 09:27:50 +00:00
Pau Espin c3a6c75cea stream: osmo_stream_cli: Support setting multiple addr
This API will be later used to set multiple addresses for SCTP sockets.

Depends: libosmocore.git Ic8681d9e093216c99c6bca4be81c31ef83688ed1
Related: OS#3608

Change-Id: I09f0d989f2309abdeb304fe570355abed2cd107b
2019-10-15 13:11:54 +02:00
Pau Espin f254ef80f2 stream: osmo_stream_srv_link: Support setting multiple addr
This API will be later used to set multiple addresses for SCTP sockets.

Depends: libosmocore.git Ic8681d9e093216c99c6bca4be81c31ef83688ed1
Related: OS#3608
Change-Id: I0fe62f518e195db4e34f3b0ad1762bb57ba9d92a
2019-10-15 13:11:51 +02:00
Pau Espin c25285f40e stream.c: remove duplicated line setting variable
Change-Id: I03b05179f5656ab81e5e14cd146f82a471f7b071
2019-10-10 12:26:30 +02:00
Pau Espin 77ba4e61cb tests: osmux_test: Provide More accurate logging expectancies
Change-Id: I85722ebcb5486426dfe76cdca1b8a0692bb5b111
2019-10-04 18:39:47 +02:00
Pau Espin 238c844593 osmux: squash LOGP message to one line
It seems different compiler versions (jenkins and my workstation) are
generating different line number for that message, and it makes osmux_test
fail when improving logging on next commit.

Change-Id: Ie2bb0ecf4cc165b9a1080e2558b33ba37014278c
2019-10-04 16:00:31 +02:00
Pau Espin 71abacdda0 tests: osmux_test: Use fake time also for monotonic clock
Currently osmux related code uses both gettimeofday on some parts and
clock_gettime(CLOCK_MONOTONIC) on others (for different purposes).

Let's fake both clocks and not only the one used by gettimeofday API.

Change-Id: I4e1a0eb4f8c4ea1bc0f963afa18b116d3af9978c
2019-10-04 12:43:43 +02:00
Pau Espin 69e04689bf osmux: osmux_snprintf(): Remove dangling whitespace at the end of dummy frames
Change-Id: I1ef73807c3300cbcc332f32e6bb905d9b30557be
2019-10-04 12:43:43 +02:00
Pau Espin b4486278b9 osmux: osmux_snprintf(): Append comma between osmux frames in msg
Change-Id: I7acaba9429466db6cb5700b206d6b42da5e4627a
2019-10-04 12:32:13 +02:00
Pau Espin 8c7d62f6d2 stream_test: Log fake time
It allows easy verification that timing is correct and makes it easier
to debug time related race conditions.

Change-Id: I86eb1d7a8096011fd273f067255eb8d6484be65c
2019-09-19 15:42:24 +02:00
Pau Espin b6f9125141 stream_test: Use fake time
By using fake own-controlled time we get two benefits:
* Test doesn't take 9 seconds to run anymore
* More fine-grade control of different events happening (and associated
race conditions).

Change-Id: I16b2884b289bfe40dfb8d743dce01bb4c208d117
2019-09-19 15:16:02 +02:00
Pau Espin a1e9de1ec4 stream: Fix scheduling of queued messages during connecting state
If messages are sent using osmo_stream_cli_send() while the stream
is still (re)connecting, they won't have a chance to be sent until the
stream is connected, and hence they are queued until
CONNECTING->CONNECTED is done. However, at that time
(osmo_stream_cli_fd_cb), the WRITE flag was dropped unconditionally,
which meant already queued packets didn't have the opportunity to be
sent by the same callback until first message is enqueued and WRITE flag
is set (again by osmo_stream_cli_send()).
Let's make them be sent as soon as possible once the connection is
available.

Related: OS#4188
Change-Id: I289495f9aad6389c5f2623fb072d676235b7d24c
2019-09-04 17:40:22 +02:00
Pau Espin 962bf9a48e stream: Introduce API osmo_stream_cli_is_connected
Can be used by users to fetch current status of the stream.

Change-Id: I5402430e5f39eef22dfa18f33807ab6b1e771f1b
2019-09-04 17:04:18 +02:00
Pau Espin 592057bb33 Bump version: 0.5.0.2-6563-dirty → 0.6.0
Change-Id: I3af3b7aaff5c6dc3ac94e942191e27af4bf5392a
2019-08-07 20:59:51 +02:00
Oliver Smith 6563cf3399 contrib/jenkins.sh: run "make maintainer-clean"
Related: OS#3047
Change-Id: I37908c12dae9d268b8bde186e2743a2d7fd13536
2019-07-10 12:06:45 +02:00
Pau Espin f0f1ebf70e osmux: Extend osmux_out_handle and add new API to set rtp payload_type
Previously payload_type was always hardcoded to 98 for generated rtp
packets from incoming osmux frame.

Change-Id: I5cbeb494a8932953d9fd2dc24dacf8cd97fd84e4
2019-05-17 17:12:56 +02:00
Harald Welte fd339712c4 Bump version: 0.4.0.1-738f → 0.5.0
Change-Id: Iea2da939e259d0a9e7c5dad14d7a961434c276ef
2019-05-10 12:40:04 +02:00
Philipp Maier e380b38e28 amr: use sizeof(struct amr_hdr) when working with amr header length
The header of an AMR header payload is 2 bytes long. At the moment we
use just a constant of 2 when we refer to the header length, but we have a
struct amr_hdr defined. Lets use sizeof(struct amr_hdr) to make it more
clear that we are refering to the header length.

Change-Id: Ic7ca04b99a97d7d3b91717b0c3e6c55ef3001a3e
2019-03-20 15:45:05 +01:00
Max b3e34435b3 Deprecate osmo_stream_cli_open2()
This supposed to be variant of osmo_stream_cli_open() with explicit
control over reconnection logic but it's plain broken: doxygen docs
contradict the code, actual reconnection logic is affected by timeout
parameter directly which is set in different function.

It seems like we haven't been affected by this so far because we always
use it in auto-reconnection mode which is triggered by default due to
positive reconnection timeout value (5 sec) automatically used in the
absense of explicitly set timeout.

Looking at commit history, this function already been source of
confusion in the past. Instead of trying to fix this mess, let's just
deprecate it entirely and properly document use of
osmo_stream_cli_set_reconnect_timeout() to control reconnection logic.

The only known user is libosmo-sccp which won't use it as of
0a93a683f3cb8e5977eb4a666ab207db6e7d7af9 commit.

Change-Id: Id988ed0274b363db049f59cbf6a193727c8c3c8a
2019-03-19 13:40:55 +00:00
Oliver Smith 1ab218d28f tests: AM_LDFLAGS = -noinstall for all tests
Fix a symbol lookup error when building a new test on systems where
a previous libosmonetif.so is installed. Symptoms described here in
detail: https://osmocom.org/issues/3812#note-10

-no-install causes libtool to generate output files that link against
libraries in the build tree, instead of linking against the future
installation paths and generating a wrapper script. The wrapper script
should override the library paths, but at least on Debian, it does not
work as it should. Test binaries won't be installed anyway, so we can
safely use -no-install and work around the problem.

See also:
https://autotools.io/libtool/wrappers.html
https://www.gnu.org/software/libtool/manual/html_node/Link-mode.html

Related: OS#3812
Change-Id: I94ccff42dfba71aaf59bb30ca312db0bac58c27d
2019-03-14 12:03:29 +00:00
Oliver Smith 3d8022adf0 gitignore: add amr_test
Change-Id: I1ea7aad144a505412969c6c301349f8d47964422
2019-03-14 12:03:14 +00:00
Philipp Maier 5ca043655a amr: be sure result of osmo_amr_bwe_to_oa() fits into int buf
osmo_amr_bwe_to_oa() uses an internal buffer with static size to store
intermediate results. The buffer is large enough for any real world
situation, but the check that tests if the result would fit into the
internal buffer is incorrect. It checks if there is enough room for the
existing payload, but does not include the expected growth of the
payload. Eventually the buffer could be overrun by one byte if one would
put a 256 byte long AMR payload.

Fixes: CID#195926
Change-Id: I4d7ac570a0b48368a82183673c46bca5f235f228
2019-03-12 09:29:06 +01:00
Philipp Maier 3e77d57281 amr: cosmetic: correct sourcecode formatting
Change-Id: Ie4ad6b1a2382da4dc21e66a45c2a96224cab5752
2019-03-12 09:29:06 +01:00
Philipp Maier fa7df87260 AMR: add functions to convert between bw-efficient and octet-aligned
RFC 3267 describes two different AMR frame formats. Octet Aligned and
Bandwidth efficient mode. In Bandwith efficient mode the padding bits,
which are used to align CMR, TOC and payload on octet boundaries are
saved and the fielda are packed directly one after another.

- Add functions to convert from one mode to the other and vice versa.
- Add function to detect in which mode an AMR frame is encoded.

Change-Id: I5b5a0fa644d8dbb1f04f9d7e35312683c7b3d196
Related: SYS#4470
2019-03-07 10:22:22 +01:00
Philipp Maier 0fe9b3664a AMR: add define constants for AMR payload length
AMR uses different payload sizes, those sizes are well defined in RFC
3267. Lets add define constants and replace the magic values with the
define constants.

Also correct the value for AMR_FT_SID in amr_ft_to_bytes from 6 to 5
(39bits / 8 = 4.875 bytes ==> 5 byte, see also RFC 3267, chapter 3.6)

Change-Id: I65b5da920d58015b875d6dcf17aacdc04b58955e
2019-03-01 09:12:20 +01:00
Harald Welte 05db1909c8 debian: Add BuildDepends on libpcap0.8-dev
The debian packaging wants to execute "make check" which in turn
wants to build the jitterbuffer tests, which in turn require pcap.h
to be present, which is provided by libpcap0.8-dev.

Closes: OS#3818
Change-Id: Iab471de9fb276a436332241337539eab544f965a
2019-02-28 11:58:35 +01:00
Philipp Maier a8733cb6c7 AMR: add spec reference for AMR frame types
Change-Id: I39a602ae96570c9609680ff67e0946a696091cbe
2019-02-27 12:08:54 +01:00
Max af63d87a76 Stream client: add disconnect callback
It's similar to connect_cb() but called once client has been
disconnected.

Change-Id: I905adb2d6191216551a3bcdcd1aec1f96f01612a
2019-02-20 17:33:32 +01:00
Max fe3527da2a Add stream client/server test
Previously stream client and server code were only used in examples
which means regressions could be easily introduced unnoticed until they
trigger bugs in external code which relies on osmo_stream_*()

Fix this by adding basic client-server interaction tests with and
without reconnection.

Change-Id: I336f79970982ed8e1d73b73d54fa4c27ba8bce8e
2019-02-07 13:44:30 +01:00
Max 1a357720b5 Stream client: report reconnection event as INFO
This helps to avoid unnecessary debug output in reconnection logic tests
in follow-up patches.

Change-Id: Ic96430a9e9294e72de23b0bbacdbf3e99a453f1d
2019-02-07 13:38:22 +01:00
Max e72218c108 Ignore test binaries
Change-Id: Ice6f5aec2f22a97033a555a292a5648090fc5970
2019-02-06 08:09:39 +00:00
Max 6a7ebcc1e3 Stream examples: fix typos in error message
Likely a copy-paste error from corresponding client example code.

Change-Id: I47cc8c7340eb188d85a49d4f41c295bed0e1bee4
2019-02-06 08:09:27 +00:00
Max 827d693b50 Stream client: fix disconnection logic
Previously closing the client did not alter its state, so we might
end-up with a client without any file descriptors, but being in state
STREAM_CLI_STATE_CONNECTED. Fix this inconsistency by setting
appropriate state.

Related issue is that reconnect function, which is always (at least in
the library and examples) called when some problem with the connection
is detected, closed the connection only after checking whether
reconnection is enabled. This might result in another inconsistency
fixed in this patch by moving the check below connection cleanup.

While at it, also move connection close logging to appropriate place:
it's confusing to see logs about connection being closed while in
reality it wasn't even established.

Change-Id: If41ed60bd625488c283d1e8a2b078e640f04c78e
2019-02-05 16:26:49 +00:00
Max 732652b5b7 Add socket name functions to stream client/server
Add functions to get the description of a server link or client
connection which examine data on corresponding socket.

Those functions use static buffers and intended for single use in
log/printf statements as illustarted by corresponding example changes.

Change-Id: If9a8e211da85956781479862a63c4fc6e53ed6be
2019-02-05 16:25:20 +00:00
Max a93bb2ca34 Stream client: update logging
Introduce logging macro wrapper to properly log current client state and
function to aid in debugging.

Change-Id: Ie22a80dcec95998cce0b25053fdf74f23eab6e53
2019-02-05 16:21:26 +00:00
Max dee873489f Stream examples: print accepted client address
Display socket information for accepted client.

Change-Id: I5aa6757be79754cf7ffa4a276dae1cfb80fe904e
2019-02-05 15:09:28 +00:00