Commit Graph

811 Commits

Author SHA1 Message Date
Pau Espin ce88150c05 Fix finding ASP on IPv6 connections
Change-Id: I09226a5cecc37dd4676acd61c2051befe5234cb3
2020-08-24 10:34:54 +02:00
Pau Espin 0b39f2cf7b Introduce SS7 IPv6 support
In osmo_ss7_vty_go_parent, "127.0.0.1" is changed to "localhost" to let
local NSS decide whether to use IPv4 or IPv6. In newish systems, IPv6
::1 will be selected since IPv6 takes precedence over IPv4.

Similarly, the default source addr needs to be changed from NULL to "localhost"
since for some yet unknwon reason, getaddrinfo(AF_UNSPEC, NULL) returns
first IPv4 "0.0.0.0" and later "::", which is inconsistent with
getaddrinfo("localhost") result, resulting in src=IPv4(0.0.0.0) and
dst=IPv6(::1), which is incompatible and will fail.
In any case, this change doesn't affect users of osmo_sccp_simple_client
because the APIs set both src and dst addresses.

Change-Id: I69c48819b70635c92fa404cafd917af7802d517c
Depends: libosmo-netif.git Change-Id Ie6bb17a9af6ca21d5e350f9c9d2d74c97c5a00af
2020-08-24 10:34:38 +02:00
Pau Espin 67eddd6aa2 configure.ac: Fix trailing whitespace
Change-Id: I7df2b2cd0f8fa2f4f9a1e345735aa944f93e95a4
2020-08-20 12:30:32 +02:00
Pau Espin 002197560d Support setting rt-prio and cpu-affinity mask through VTY
Depends: libosmocore.git Change-Id If76a4bd2cc7b3c7adf5d84790a944d78be70e10a
Depends: osmo-gsm-masnuals.git Change-Id Icd75769ef630c3fa985fc5e2154d5521689cdd3c
Related: SYS#4986
Change-Id: Ib9faa68c1cd09a026909c792a1fd5557c9893fe3
2020-08-20 08:41:36 +00:00
Pau Espin 661c555729 doc: Update VTY reference xml file
Change-Id: I83312c3f22af54db346f4babc9470ff9432ceae4
2020-08-20 08:41:31 +00:00
Vadim Yanitskiy 2b5d9a4862 debian/control: change maintainer to the Osmocom team / mailing list
Change-Id: Ib149fd7716343d0e441c4671832efd05a62d67da
2020-08-13 15:00:53 +00:00
Harald Welte 37880b696e Bump version: 1.2.0.53-d897-dirty → 1.3.0
Change-Id: I70c01be02bf88ac4191dcd28cb6b3516bc096263
2020-08-13 11:45:45 +02:00
Harald Welte 9472ab91ba SCOC: log message type that was received for unknown local reference
A message like
DLSCCP <0011> sccp_scoc.c:1653 Cannot find connection for local reference 1154
is not incredibly useful, as you don't even know what type of SCCP/SUA
message had been received.

Change-Id: I18af9d7e9ea4877b13bf98a980b0ba97c5ed6599
2020-07-29 21:27:04 +02:00
Neels Hofmeyr d897e7daa6 osmo_sccp_simple_client_on_ss7_id(): do not care about ASP name
Our manuals explain that the cs7 config automatically adds missing parts.
However, previous code requires an ASP to exactly match the default name that
the autoconfiguration would choose -- that is unintuitive.

If a config included only an ASP, or both AS and ASP but omitting to add the
ASP to the AS, auto configuration would pick it up iff it exactly had the name
the application chose. For osmo-bsc, that was 'asp-clnt-msc-0', if 'msc 0' is
the first MSC in the config file. For osmo-msc, it is 'asp-clnt-OsmoMSC-A' or
'asp-clnt-OsmoMSC-A-Iu' and so forth, so it is not always clear which name the
user should pick to get the ASP used by auto config.

Refactor so that any ASP with a matching protocol that is not associated with
any AS yet is picked up by the auto configuration, i.e. associated with the AS
etc., regardless of the name chosen in the config file.

Related: OS#4635
Change-Id: I2954e0167729fd0b1a7d0144a5b5775fc1c44c35
2020-06-26 16:05:38 +02:00
Harald Welte e80adc7039 osmo_ss7: remove use-after-free of stream_server after close_cb
In I9b3ae6dfcf6efeabb7fb6c33503d1d7924fec2fa we fixed some problems
regarding rapid open/close cycles of inbound M3UA client connections.
Unfortunately the fix now triggered another bug.

xua_srv_conn_closed_cb() is called by libosmo-netif stream code whenever
a connection (socket) is closed.  As the stream_server is de-allocated
right after this call-back, the call-back must make sure to remove
any pending references to the stream_server.

Change-Id: I2464cf524f1f91bfad10ff1861a03bf1461dfed8
Related: OS#4625
2020-06-25 13:15:09 +02:00
Neels Hofmeyr 5c48fb8e8d Revert "sccp_simple_client: only restart ASP if it was created"
This reverts commit ec20a6164b.

Reason for revert: this patch makes specific variants of 'cs7'
config fail. In short, if AS and ASP are configured and connected,
the ASP is never started. See OS#4635 for elaborate details.

Related: OS#4635
Change-Id: Id6e1fd69f312e5dc74e8718b2e2e678ad54bc16b
2020-06-25 06:56:14 +00:00
Harald Welte 6ebfc047dd Fix race during fast re-establishment of inbound M3UA connections
When a client closes and instantaneously re-opens a SCTP socket for an
M3UA connection, there is a chance that both the "shutdwon event" (old
connection socket becomes readable for sctp event) and the "init event"
(listen-fd becomes readable) happen during the same scheduler interval /
select() cycle.  As there is no guaranteed order by which we call our
file descriptor callbacks, it means that we may end up processing
then new connection (accept) before we get the notification that the
old one is dead.

The fact that the fd number of the accept-fd is mostly lower than the fd
number of the individual per-client connection actually makes it likely
that the order is exactly the opposite of what would feel "logical".

As the ASP is identified by the tuple of (src-port, src-ip, dst-port, dst-ip),
both the old connection and the new connection map to the same ASP
object.  So we need to handle this situation gracefully:  If we get a
new connection for a tuple that we already [think we still] have one,
close the old one and use the new.

Change-Id: I9b3ae6dfcf6efeabb7fb6c33503d1d7924fec2fa
Closes: OS#4625
2020-06-24 21:36:54 +02:00
Neels Hofmeyr ec20a6164b sccp_simple_client: only restart ASP if it was created
In osmo_sccp_simple_client_on_ss7_id(), only call osmo_ss7_asp_restart() if the
ASP was created by that function. If a previously existing ASP was re-used, do
not restart it.

Background: Recently, osmo-bsc started calling
osmo_sccp_simple_client_on_ss7_id() multiple times, once for each configured
MSC in an MSC pool. Normally, that ends up re-using the same ASP and SCCP
client, so should not change anything.  Still, it turns out that the SCTP
association was re-launched for every configured MSC, which is obviously not
necessary when using the same SCCP connection and SCCP user for multiple MSCs.
That happened because osmo_sccp_simple_client_on_ss7_id() calls
osmo_ss7_asp_restart() even if a pre-existing ASP is re-used.

The rapid restarts also uncovered a problem in osmo-stp, causing it to crash --
that is a separate issue.

Independently from an osmo-stp fix, this change should in fact avoid the
osmo-stp crash and fix the sporadic massive ttcn3-bsc-test fallout we're seeing
since merging the MSC pooling feature to osmo-bsc.

Related: OS#4625
Change-Id: I62443edd681a2ec1b38f958520e907f9a7ef285e
2020-06-24 11:19:12 +00:00
Harald Welte 468731d414 libosmo-sccp.spec.in: Use %config(noreplace) to retain current config file
Change-Id: Ife551573160f9545875eecc2a5bfe8f994249814
2020-06-22 14:23:09 +02:00
Harald Welte deca2bd75e M3UA: Accept DATA without routing context IE if only a single AS in ASP
There are some M3UA implementations out there who use a routing context
during the ASPAC procedure, but who then don't use it in subsequent DATA
transmission.

This behavior seems to be at the edge of what's possible within the
spec; if you don't configure a routing context, The RCTX IE it is not
required to be sent. And if you have multiple routing contexts/AS within
one ASP, it *must* be sent. But the situation where a routing context
has been configured (but not multiple) is not explicitly covered.

Change-Id: I59f47a999f40411aadc88b8f362d8d2b89a66332
Closes: OS#4594
2020-06-21 15:51:12 +02:00
Neels Hofmeyr 3d8605d868 sccp_user_find: optimize: search PC only for valid PC arg
Though, since in current practice, not many users exist, and all incoming
messages have a valid PC, this is unlikely to have any noticeable effect.

Change-Id: I3533a01e29b97bebe4b8f1f6965444519b3bacfe
2020-06-15 13:20:47 +00:00
Harald Welte b080286674 Add "no traffic-mode" configuration to AS
As per RFC4666 it is optional whether or not a traffic-mode IE is
part of ASPAC requests from ASP to SG.  We implemented that so far
by having none as default, unless the user specified an explicit
traffic-mode in the VTY.  However, we had no command to remove that
explicit configuration and return to the implicit one.

Change-Id: Ibe2b298dd76dc4b02521dc411ae9d570eaf5a9a2
2020-06-13 16:15:41 +02:00
Vadim Yanitskiy aec77dea72 sccp2sua: fix typo: s/omso_sccp_addr/osmo_sccp_addr/
Change-Id: I5c37177e9f62eff69bb9d0e7289ecb3c9f9e5f44
2020-06-02 02:02:20 +07:00
Oliver Smith 182e3d60ff RPM spec: fix "E: lto-no-text-in-archive"
Some opensuse versions failed to build the RPM with:

libosmo-mtp-devel.x86_64: E: lto-no-text-in-archive (Badness: 10000) /usr/lib64/libmtp.a
libosmo-sigtran-devel.x86_64: E: lto-no-text-in-archive (Badness: 10000) /usr/lib64/libosmo-sigtran.a
libosmo-sccp-devel.x86_64: E: lto-no-text-in-archive (Badness: 10000) /usr/lib64/libsccp.a
libosmo-xua-devel.x86_64: E: lto-no-text-in-archive (Badness: 10000) /usr/lib64/libxua.a
This archive does not contain a non-empty .text section.  The archive was not
created with -ffat-lto-objects option.

Fix it as described here:
https://en.opensuse.org/openSUSE:LTO#Static_libraries

I've verified in my own OBS namespace, that it works as expected.

Related: OS#4550
Change-Id: Iaa0be46838f279af8ea87e00809dd3babd4fcad2
2020-05-28 09:55:36 +00:00
Neels Hofmeyr d25ba11eef add osmo_sccp_user_find() as public API
To allow osmo-bsc to add more than one MSC peer on a single SCCP instance, it
must add a local SCCP user only once per SCCP instance. The first configured
MSC adds a local user, all subsequent MSC should use the same local SCCP user.
So, it is most convenient to provide a public function to return such user if
it exists.

Add as thin wrapper instead of renaming and moving the internal
sccp_user_find(): to keep the patch smaller, and to match the way
osmo_sccp_user_bind_pc() is a 1:1 wrapper for sccp_user_bind_pc().

Related: OS#3682
Change-Id: I9ecbab16b45268f626950303d6ff8296dd6acda0
2020-05-22 23:15:55 +02:00
Oliver Smith 54c62d1d8e Makefile.am: EXTRA_DIST: debian, contrib/*.spec.in
Change-Id: Iacdb3f080dc467398b7b008ffb6068f2dd780ac1
2020-05-22 13:29:41 +02:00
Neels Hofmeyr c5691330d9 cosmetic: apply changes to match struct_endianess.py output
Rationale: the script is a good way to avoid bugs from manually composing the
big endian parts (for example, it detected the missing endian.h include, fixed
in I5906d94e0e0a74674c3a14cf2ec81c681e696474). However, it becomes cumbersome
if it creates numerous edits in the source tree, which cause more time spent
for whoever wanted to rather save time with it. So let's keep the code tree
matching that script's output.

Change-Id: I04ad3795fbaf495cae168aed69124b1dc132a9bd
2020-05-19 22:37:41 +02:00
Neels Hofmeyr 3b64bed092 big endian: add missing endian.h in sccp.c
sccp.c uses #ifdef OSMO_IS_LITTLE_ENDIAN, but fails to include endian.h, i.e.
it would build little endian also on big endian systems.

Found by libosmocore/contrib/struct_endianness.py.

Change-Id: I5906d94e0e0a74674c3a14cf2ec81c681e696474
2020-05-19 22:37:41 +02:00
Oliver Smith 05c377f198 contrib: integrate RPM spec
Remove OpenSUSE bug report link, set version to @VERSION@, make it build with
CentOS 8 etc.

Do not try to build libsscp, libmtp and libxua as shared libraries. The
imported spec file patched the source with "0001-build-fixes.patch" (not
imported) and packaged resulting so files. However, these libraries are
legacy and built statically on purpose, as it's stated on the wiki page:
https://osmocom.org/projects/libosmo-sccp/wiki

Related: OS#4550
Change-Id: Id1d77a79b43a9cb967fe3fe10394cca24757af85
2020-05-19 15:20:17 +02:00
Oliver Smith 2686a74548 contrib: import RPM spec
Copy the RPM spec file from:
https://build.opensuse.org/project/show/home:mnhauke:osmocom:nightly

Related: OS#4550
Change-Id: Ic5bee5cbb5752afa598d805166061b1f10af41ea
2020-05-14 11:32:25 +02:00
Philipp Maier ed01782610 doc: make sure all log categories are set to level notice
Lets make sure all logging levels are set to notice

Change-Id: I3b17aa4354f30b55da8fc77f4fe6af0373de7983
2020-05-12 11:29:18 +00:00
Harald Welte f7129b44ae sccp_internal.h: fix compilation with gcc-10
/usr/bin/ld: .libs/sccp_helpers.o:/home/laforge/projects/git/libosmo-sccp/src/sccp_internal.h:123: multiple definition of `sccp_scoc_fsm'; .libs/sua.o:/home/laforge/projects/git/libosmo-sccp/src/sccp_internal.h:123: first defined here

See also https://alioth-lists.debian.net/pipermail/debian-mobcom-maintainers/Week-of-Mon-20200413/000646.html

Change-Id: Icbc06ed2c8d2bd5c63716945c3df923ea4de7886
2020-04-20 19:35:43 +02:00
Eric Wild 858b81a252 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: I292c303840a76c5042dc077829c5df46158ca8ba
2020-04-11 01:16:19 +02:00
Neels Hofmeyr ed2d50d4e9 cs7 vty: add 'show cs7 config'
When 'cs7' was added, it was generally possible to get the full automatic
configuration spelled out by using 'show running-config'. Later, the vty was
modified so that automatically configured parts were omitted.

Since figuring out the 'cs7' configuration is far from trivial, it is very
convenient to get the program's current configuration spelled out in detail,
whether it is automatic or not. For this purpose, add a new 'show' command
which simply calls the ss7 VTY's write function with a new switch to disable
all omissions.

Change-Id: I84707561a6f54851c5599c39ea9bf1d971a2a1d7
2020-03-19 18:01:49 +00:00
Harald Welte a9ff416745 don't use 'debug' log level in example configs
Related: OS#2577
Change-Id: I16807f827f958d48519871355115715b753edfcb
2020-03-19 14:15:30 +00:00
Pau Espin 7f171d2a2b xua_asp_fsm.c: Drop unused defines
Those values (except for XUA_T_ACK_SEC) are not used at all, and anyway
they already exist as timers in osmo_sccp_timer_defaults (sccp_scoc.c).

Change-Id: Id5902e809e02b2651e381cd58ef97b77c1143dc2
2020-01-21 15:25:27 +01:00
Pau Espin 674f677146 cosmetic: fix typo in comment
Change-Id: Ia39d4961a2690ea4c56276db8f1503a75e97d154
2020-01-21 15:24:58 +01:00
Pau Espin 14fea23527 sccp: Disarm inactivity timer upon T(iar) active->disconn_pend
All other code paths moving to state DISCONN_PEND seem to stop them, and
anyway that state doesn't permit event SCOC_E_T_IAS_EXP:

DLSCCP DEBUG SCCP-SCOC(0){ACTIVE}: Received Event T(iar)_expired (sccp_scoc.c:346)
...
DLSCCP DEBUG SCCP-SCOC(0){ACTIVE}: state_chg to DISCONN_PEND (sccp_scoc.c:1095)
...
DLSCCP DEBUG SCCP-SCOC(0){DISCONN_PEND}: Received Event T(ias)_expired (sccp_scoc.c:339)
DLSCCP ERROR SCCP-SCOC(0){DISCONN_PEND}: Event T(ias)_expired not permitted (sccp_scoc.c:339)

Change-Id: Ieb02dedba312ab76890e943934ce6a1e2fe61f74
2020-01-21 10:53:34 +01:00
Pau Espin 82c7a3c36c sccp_scoc: Deliver correct disconnect cause and importance to user on timer expiration
Change-Id: I87b84e9c3c4cb35135efdb4ba155c684917fbab7
2020-01-21 10:53:34 +01:00
Pau Espin c6a04b17a2 examples/sccp_test_server: Log disconnect indication in echo service
Change-Id: I221519e75800c8bfbe68e24d04913b0c385c521d
2020-01-21 10:53:34 +01:00
Pau Espin 7c441e2067 examples/sccp_test_server: Log primitive name instead of value
Change-Id: I956fa5989ca2dea46b2eaaf4e562c7962aa8be9d
2020-01-21 10:53:32 +01:00
Pau Espin 9ed01722c2 osmo_sccp_simple_server(): use sccp instance index 0 instead of 1
When using osmo_sccp_simple_client(), it will create an sccp instance if
none exists. The sccp instance identifier starts with 0.
The implicit created instance should use sccp instance 0 (the
first connection).

This is basically a counterpart of much older commit
3884eb68d9, were same logic was applied to
osmo_sccp_simple_client().

Change-Id: I85d2680ac65a552d7b2824ec41cd8fc669782079
2020-01-21 10:52:47 +01:00
Pau Espin 5663db37a3 examples/sccp_demo_user: Support reading log/vty config from file
Passing a config file is still optional, and both client and server work
out of the box with providing any. It's still goot allowing to pass a
config file to be able to configure easily stuff like logging, VTY ip
address binding, etc.

Change-Id: Ie75d004a0e9f24309060f241f22209df1bbe358e
2020-01-21 10:52:47 +01:00
Pau Espin ed1a2b3680 example/sccp_demo_user: Use osmocom logging system instead of printf
Change-Id: I211eee8abdb332161be7a31e2864f254d1f51c66
2020-01-21 10:52:39 +01:00
Pau Espin 253e6fecb6 sccp: Fix wrong param type in osmo_sccp_pnc_name()
Wrong type was used when the function was introduced a few commits ago.

Fixes: 5a7eb34f735e0ae93a74da3bc8361454457e49cdi
Closes: CID#207712
Change-Id: Ie9b89483158dd6b988e4c34b497bf3b231c15cd3
2020-01-18 13:25:30 +01:00
Pau Espin c18befb0e3 sccp: Log missing user and router failure paths
Change-Id: I36374e4419474c5ab43c9cca1b59f3054f93180b
2020-01-17 15:52:24 +01:00
Pau Espin a84fa351d3 sccp2sua.c: Log malformed SUA message
Change-Id: Ie04371d27426011e1a1a4f9136e0b28bf33df03b
2020-01-17 15:20:13 +01:00
Pau Espin 2734e1c38c sccp: Support receiving messages with no optional params
Change-Id: I745bd32c62763ba2d88e74de8644c171ef506b37
2020-01-17 14:41:58 +01:00
Pau Espin 5a7eb34f73 sccp: Improve logging in sccp_to_xua_opt()
Change-Id: Icb3f18f34ecfe0602c6e491b61107a30287dcafb
2020-01-17 14:41:53 +01:00
Pau Espin 060b39223e sccp: Convert ifelse to switch statement
Change-Id: I1f3129f5b949fc70913e8103ef17c696002b8ed2
2020-01-17 14:38:26 +01:00
Pau Espin 4b3cbccae7 examples/sccp_demo_user: log category name instead of its hex value
Change-Id: I57afb4cacdb3c118c7570d924caa23144d192aa8
2020-01-17 14:38:26 +01:00
Pau Espin 4706c40ef6 examples/sccp_test_server.c: Fix typo in log message
Change-Id: I8456893b77624402645728ce9403847065a662eb
2020-01-17 14:38:26 +01:00
Pau Espin 08b51ee75a sccp: Avoid memleak of xua_msg receiving malformed sccp message
first, xua_msg is allocated internally in the function. Then depending
on msg type different functions are called. All of those functions
either return the same input xua msg pointer or NULL. If they return
NULL due to parsing failure, we need to free the internally allocated
xua pointer.

Change-Id: I4189fbd66e7e05ce466b3e716a357c56d788b64c
2020-01-17 14:38:26 +01:00
Pau Espin d3e28faa35 sccp: Add value_string for SCCP message types
Change-Id: Ibf3ee4be88a4ca633a01fad08d4c714bfa9008bc
2020-01-17 14:38:22 +01:00
Pau Espin 61d890f88f sccp: Fix null ptr access on malformed or unsupported msg received
Detected while running a TTCN3 sending malformed SCCP message in
SCCP_Tests_RAW.ttcn:

sccp_user.c:174:12: runtime error: member access within null pointer of type 'struct xua_msg'
ASAN:DEADLYSIGNAL
=================================================================
==6==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000008 (pc 0x7f2a11f93c5c bp 0x7ffefcf05c50 sp 0x7ffefcf05c10 T0)
    #0 0x7f2a11f93c5b in mtp_user_prim_cb /tmp/libosmo-sccp/src/sccp_user.c:174
    #1 0x7f2a11fb48f9 in deliver_to_mtp_user /tmp/libosmo-sccp/src/osmo_ss7_hmrt.c:94
    #2 0x7f2a11fb4c8a in hmdt_message_for_distribution /tmp/libosmo-sccp/src/osmo_ss7_hmrt.c:133
    #3 0x7f2a11fb5c90 in m3ua_hmdc_rx_from_l2 /tmp/libosmo-sccp/src/osmo_ss7_hmrt.c:275
    #4 0x7f2a11f6f5c2 in m3ua_rx_xfer /tmp/libosmo-sccp/src/m3ua.c:586
    #5 0x7f2a11f70480 in m3ua_rx_msg /tmp/libosmo-sccp/src/m3ua.c:739
    #6 0x7f2a11faee35 in xua_srv_conn_cb /tmp/libosmo-sccp/src/osmo_ss7.c:1623
    #7 0x7f2a0f46d082  (/usr/lib/x86_64-linux-gnu/libosmonetif.so.8+0xb082)
    #8 0x7f2a1186c0be  (/usr/lib/x86_64-linux-gnu/libosmocore.so.12+0xc0be)
    #9 0x7f2a1186c735 in osmo_select_main (/usr/lib/x86_64-linux-gnu/libosmocore.so.12+0xc735)
    #10 0x557378718219 in main /tmp/libosmo-sccp/examples/sccp_demo_user.c:264
    #11 0x7f2a105ad2e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
    #12 0x557378717059 in _start (/usr/local/bin/sccp_demo_user+0x6059)

Change-Id: Idafa8c9693d98ecd214b62155372e4db69e2a4a4
2020-01-16 18:14:30 +01:00