Commit Graph

3811 Commits

Author SHA1 Message Date
Harald Welte 433005c87c initial support for static userspace probes via systemtap
This adds a --enable-systemtap configure option, which will then
add static tracepoints to the generated libosmocore binary.

At this point, only two tracepoints are supported: log_start
and log_done.  They can be used to trace the amount of time
a libosmocore-using application spends in potentiall blocking calls to
log to stderr or to files.

Related: OS#4311
Change-Id: I7e1ab664241deb524c9582cbd1bec31af46c747e
2021-02-03 13:55:40 +00:00
Alexander Couzens dc43f7d3c7 gprs_ns2_frgre: check iph/ip6h before passing them to rx functions
With IPv4 and IPv6 support it's not guaranteed that iph/ip6h is valid.

Related CID#214288

Change-Id: If9015906917e3ad11d14b84c29d64f28a3158144
2021-02-03 14:37:54 +01:00
Alexander Couzens 47ed2a6b4a gprs_ns2_frgre: set a correct gre pointer for ipv6
Also fixes a nullpointer deref because iph is NULL on IPv6

Related: CID#216555
Change-Id: I2ff868a7bba6151a2202df774ff022c02b8c34cb
2021-02-03 14:37:54 +01:00
Alexander Couzens ca3550a261 frame_relay: fix NULL pointer deref
Related: CID#215530
Change-Id: Ic58394ab44ee555a0c5dee2b07fa1054093fbcf0
2021-02-03 14:37:54 +01:00
Alexander Couzens 24d9e80911 gprs_ns2_fr: free_bind(): first do the NULL check before using members
Change-Id: I80f72ada15b477d735bf5aee36a5d67e80eb0136
2021-02-03 14:37:54 +01:00
Alexander Couzens c80a874932 gprs_ns2: unify the handling of **result when bind already present.
All bind function should work in the same way.
Also fixing a null pointer assignment if no **result is giving.

Change-Id: Idd0c2190d2af39804c18c4786a997079db9a4330
2021-02-03 14:37:54 +01:00
Alexander Couzens d3e31102fb gprs_ns2_vc_fsm: rename ST_ALIVE -> ST_RECOVERING
ST_ALIVE isn't quite clear. This state means this NS-VC is still dead.
ST_ALIVE is used for NS-VC with vc_mode ALIVE (e.g. UDP NS-VC). It's
the first state when the remote hasn't yet answered or when
the NS-VC lost ALIVEs.

Related: OS#4958
Change-Id: I0b29e8ce6444546d90bde68b1f957f1013238784
2021-02-03 14:37:41 +01:00
Alexander Couzens 2f8f7b62b3 gprs_ns2_vc_fsm: reset ALIVE N counter when restarting the test procedure.
Otherwise a NS-VC would flap between ALIVE and UNBLOCKED state.

Related: OS#4959
Change-Id: Id98629bd65f92103e0e571ec388c58b02cb2ccb5
2021-02-03 11:08:00 +01:00
Alexander Couzens 265a5ebac8 gprs_ns2: prevent division by zero in load_sharing
Check if the NSE is alive before passing UNITDATA to the load sharing.

Change-Id: I0e2a59bec9b72f74eb64510a2e1ad60486694a55
Fixes: OS#4996
2021-02-02 11:39:30 +00:00
Harald Welte 9bbb703a95 osmo-ns-dummy: Add "mirror-mode" to mirror back any received packets
Change-Id: If57bfdeb390d88d1ea058f7a9ce0403e64a5beda
2021-02-02 11:37:48 +00:00
Harald Welte 9d28ce5fd3 ns2: Don't start sending NS-RESET until FR DLC is available
There's no point in sending NS-RESET (or any other) messages to the
underlying FR layer if the FR DLC has not been marked as
available/active yet.

Change-Id: Id4e7565ba166ca1d12f8800c643d9f2bc4d66873
Closes: OS#4999
2021-02-02 11:37:48 +00:00
Harald Welte 6a9ec42a95 ns2: Stop test procedure when going into unconfigured state
When we're unconfigured and not yet started, we should not transmit
NS-ALIVE.

Change-Id: Ida3685e42a753899f1bf177eefcc23352ec7440d
Related: OS#4999
2021-02-02 11:37:48 +00:00
Harald Welte 7fe8d71fee ns2: Don't automatically re-start FSM at FORCE_UNCONFIGURED
There are use cases in which the NS-VC FSM should go back to
unconfigured _without_ being re-started immediately.  Let's permit
the caller to do that.

Change-Id: I31fe695a83d38ea1f10f5444e840633d7fa68442
2021-02-02 11:37:48 +00:00
Harald Welte d6cec24fa1 frame_relay: cosmetic: Unify log syntax when discarding Rx packets
Change-Id: I09d035e38b41be9d6ac5e16da7fb113286c77d29
2021-02-02 11:37:48 +00:00
Harald Welte 36c5e2b3e0 frame_relay: Discard received messages for DLC not yet active
If we receive messages for a DLC which has not yet reported as being
available by Q.933 LMI, drop the incoming message.  Otherwise we would
dispatch it to the user, and the user wants to respond - but then
we reject the transmission due to the inactive DLC.

Change-Id: Ia4a045fdf165b526f429f4617e0fdc76036480bd
Related: OS#4999
2021-02-02 11:37:48 +00:00
Harald Welte 2cc1d4d7df frame_relay: Add status call-backs for link + DLC status changes
Change-Id: Iec19db4e48642c3fcb0aa11fa7787b8323fd0e5a
Related: Os#4999
2021-02-02 11:37:48 +00:00
Vadim Yanitskiy 943133cad8 gsm_7bit_encode_n(): fix integer overflow in gsm_septets2octets()
Using 'uint8_t' for the length argument is definitely a bad idea.
Because of this, packing more than 255 septets would not work as
expected.  Deprecate the old function and use 'size_t' instead.

Change-Id: Ib1aac538afeb0a5c76a1df472d555139a496e12e
2021-02-01 17:47:54 +00:00
Vadim Yanitskiy 44ac4f6c92 gsm_7bit_encode_n(): test encoding of more than 250 septets
As can be seen, this unit test reveals problems with encoding
of more than 250 septets using gsm_7bit_encode_n().  The problem
is that some API functions use type 'uint8_t' for the length, so
we basically suffer from integer overflows.

Change-Id: I723300578d5ab0c7b94cf49c14d962b2dbf47740
2021-02-01 16:14:55 +00:00
Harald Welte 2319014f7e frame_relay: Send "Fuil Status" ENQUIRY after link recovers
If we are the 'user' side of FR and a link has just recovered,
we should ensure the next STATUS is for "full status".  This way
we learn about the present DLCs as quickly as possible, saving up
to 10 seconds of further delay in link recovery.

Related: OS#4999
Change-Id: I6f905a18a7d130a3c02b4a3e7a2a2dc24afc0ea1
2021-02-01 14:30:53 +00:00
Oliver Smith af916f1c7b sim: fix gcc 4.9.2 + -std=gnu11 error
Remove "(const struct osim_card_sw)" infront of OSIM_CARD_SW_LAST, so
debian 8's gcc 4.9.2 doesn't fail anymore with the following error each
time the macro is used:
	card_fs_sim.c:105:1: error: initializer element is not constant

I verified with docker that there aren't any other build errors with gcc
4.9.2.

Fixes: OS#4991
Change-Id: I9d3abbf9812dc09201eff0e9f7542cddedb6848b
2021-02-01 09:19:34 +00:00
Harald Welte d083576064 ns2: cosmetic: fix indent levels
Change-Id: Ifcb0d5ddf824cd876de91afca1021aeb4f6c3e8b
2021-02-01 09:43:13 +01:00
Harald Welte 8669043fe9 ns2: Print NS-STATUS.ind primitives to the log
Log the NS-STATUS primitives from within the library, so we don't have
to keep related code in each and every application.

Change-Id: I368883acfc8ea76529befcd429bf8f2445a60a94
2021-02-01 09:39:29 +01:00
Harald Welte a3f7323288 ns2: Fix typos in comments
Change-Id: I155fd697e229621561f7d00204421ac941101d77
2021-02-01 09:39:29 +01:00
Harald Welte 76346079e8 ns2: Introduce a per-bind stat_item group with backlog length
The backlog length indicates the instantaneous length of the backlog.

Change-Id: I1c55b4619b1221d7e607ace58649323407faf86b
2021-02-01 09:39:29 +01:00
Harald Welte 97ccbf71b3 ns2: Rename nsi->rate_ctr_idx to nsi->nsvc_rate_ctr_idx
We will soon get another of those indexes.

Change-Id: I68a2ef3b48097f524831dd04821824b21d6d1e18
2021-02-01 09:39:29 +01:00
Harald Welte bdfb8b9104 ns2: Memory allocation failures are ENOMEM, not ENOSPC
ENOSPC is used with non-volatile (disk) storage, while ENOMEM is
customarily used for RAM allocation failures.

Change-Id: Ia4c16d8278dc30c7cc69169b18428cda5272738d
2021-02-01 09:39:29 +01:00
Harald Welte c3aa8f903a ns2: Move to one common/shared ns2_bind_alloc()
Avoid code duplication between three different drivers by sharing
the "core" of the bind initialization in a new, shared ns2_bind_alloc().

Change-Id: I535fc68e94fcd695de827dd922706adc1c5a2cb7
2021-02-01 09:39:29 +01:00
Harald Welte b40bf8ba3b ns2: Add a rate_ctr for each NS-UNBLOCK
We have one for BLOCK, so let's also add one for UNBLOCK.

Change-Id: I693109b7bc4d72b6803b40aae15327389aa37c69
2021-01-31 12:34:36 +01:00
Harald Welte 4c54f59aa5 ns2: Implement more rate counters
The counters had all been lost in the ns -> ns2 configuration,
let's try to implement some more of them: LOST_ALIVE, BLOCKED,
LOST_RESET.

Change-Id: I75d8637bd142722fdf9a162a2369aa9cdc980a57
2021-01-31 12:34:36 +01:00
Harald Welte f22ae5af5f ns2: count number of dropped packets / bytes on transmit
Differentiate between successfully transmitted packets/bytes,
and pacets/bytes that were dropped (i.e. overflow of net-device)

OsmoNSdummy# show ns nsvc 1001 stats
 NSVCI 01001: UNBLOCKED PERSIST data_weight=1 sig_weight=1 fr)netif: hdlc1 dlci: 1001
  NSVC Peer Statistics:
   Packets at NS Level  ( In):       36 (0/s 8/m 32/h 0/d)
   Packets at NS Level  (Out):    23344 (170/s 20556/m 13119/h 0/d)
   Dropped Packets      (Out):    30692 (230/s 27056/m 17221/h 0/d)
   Bytes at NS Level    ( In):      262 (0/s 24/m 250/h 0/d)
   Bytes at NS Level    (Out): 32741312 (238680/s 28849400/m 18391024/h 0/d)
   Dropped Bytes        (Out): 43014628 (322920/s 37986624/m 24101344/h 0/d)

Change-Id: If21906ff5379038f7be10cf48c68d1f756dd7c1e
2021-01-31 12:34:36 +01:00
Harald Welte 5e0ef6f958 ns2: Properly report packet drops in FR code
When the FR code decides to drop a packet (ENOBUFS from the AF_PACKET
socket for non-signaling packet), let's report that back via the
frame_relay code into the generic NS2 code.

This way the generic NS2 code always knows if a packet was actually
successfully  transmitted, or if it was dropped for some reason.

Change-Id: I4bb517fd04af69dbe6da628b132d57994ab3e5a4
2021-01-31 12:34:36 +01:00
Harald Welte e5f55f73bd ns2: Increment Rx and Tx byte / packet counters
Change-Id: If5e93f69cddbc8962cbbae38c07b504dd9b1ecd1
2021-01-31 12:34:36 +01:00
Harald Welte 5a5bf720a8 ns2: encapsulate calls to nsvc->bind->send_vc()
Don't call the function pointer of the underlying transport
directly, as we many still want to do some common processing,
such as statistics counting (see follow-up patches).

Change-Id: I8d14c7b8d3aacc2bed033072d7934dbd6aab41df
2021-01-31 12:34:36 +01:00
Harald Welte 3d5eaee726 ns2: Use named array initializers to avoid mistakes
It's always a bad idea to have an array of descriptions that's indexed
by an enum, without using named initializers.  It's too easy to get
inconsistencies.

Change-Id: Id0ebd2a202a465ca0298f4245f1fb5c495235fc8
2021-01-31 12:34:36 +01:00
Harald Welte d06128d17d ns2: Work around AF_PACKET socket ENOBUFS problems
AF_PACKET sockets cannot be written-to using select(), as they
will always return "writable" but then still fail with ENOBUFS.

This also means that we cannot use osmo_wqueue() as it assumes
that a writable socket can actually be written to.

As there's no way to figure out when exactly we can again perform
a successful write, we have no other option but to start a timer
and re-try at a later time.

We will scale that timer based on the estimated duration of transmission
for the just-failed PDU on the line rate of a 31TS E1 Line.

Furthermore, with this patch, we stop queueing anything but signaling
traffic (NS-BVCI=0) or Q.933 LMI.  User data (NS-BVCI != 0) will
instead be dropped in order to avoid buffer-bloat.

Change-Id: I4f79a246236c94175ceffa5f3f556c8931c6bc62
Closes: OS#4995
2021-01-31 12:34:36 +01:00
Harald Welte 0b7614b408 osmo-ns-dummy: Add simple NS traffic generator
This adds a simple NS traffic generator that can be used to perform
load testing on NS links, particularly those with limited bandwidth
such as frame-relay E1 lines.

Related: OS#4995
Change-Id: Iad3b694c85962dbbc6b4a27a0ed5bc841add464f
2021-01-30 22:13:03 +01:00
Harald Welte f0073d7045 ns2: Log ERROR if we cannot transmit a packet due to ENOBUFS
Related: OS#4995
Change-Id: I2ba64e96c60e23d2e6c8ecdcab0b52b3833f092c
2021-01-30 20:09:35 +01:00
Harald Welte 335c550fab ns2: Use proper return value from write_queue callback function
write_queue expects a -errno value on error, not '-1'.

Change-Id: I93c858facfe7e1c533df8dccc4502a574686bc8a
Related: OS#4995
2021-01-30 17:59:51 +01:00
Philipp Maier 4d40047c50 gprs_bssgp: agregate RIM related code in gprs_bssgp_rim.c
gprs_bssgp and gprs_bssgp_util.c also contains code related to send and
receive RIM PDUs via BSSGP and also code to encode and decode RAN
INFORMATION PDUs. Lets move this to gprs_bssgp_rim.c

Change-Id: Icda279452962b06e552cb1361d2a27b7dc8a6b04
Related: SYS#5103
2021-01-29 21:27:18 +00:00
Pau Espin 3e3f377749 gsm: bts_features: Introduce BTS_FEAT_CCN
This feature is used by BSC to gain knowledge on whether a given BTS
supports GPRS Cell Change Notification (CCN) related procedures on PDCH,
and as a result enable or not by default the CCN_ACTIVE bit in SI13 to
announce the support it is allowed to use the feature.

Related: SYS#4909
Change-Id: I61991266b95d0c13d51b47906cc07846e9cf1390
2021-01-29 18:01:14 +01:00
Pau Espin 5b6f1d7d7a gsm: Fix wrong length in SI13 GPRS Cell Options IE
Older commit adding the 2 bits for Rel-4 extension forgot to increase
the length field (see TS 44.060 Table 12.24.1)

Fixes: 946bb95af1
Change-Id: I20efb4403cdf6c5bc717502a7075630044142f17
2021-01-29 18:01:14 +01:00
Pau Espin 5f2b8e5edf cosmetic: fix typo in comment
Change-Id: I787cca5a032c57202a86dab18e1790ef3ad1509a
2021-01-29 17:04:14 +01:00
Pau Espin 377645d600 ctrl_connection: Initialize write_queue.bfd.fd to -1 during allocation
Otherwise fd is set to 0 by default, let's avoid accidentally closing
it if something goes wrong.

Change-Id: I98f744d2880fbb883719cdf1d3eb31f2b22a13b6
2021-01-29 11:21:09 +00:00
Daniel Willmann 9043205cd9 ns2: Fix assert when removing a bind listen
Change-Id: I3edd1e838f7516d9224045710047419039aa0ec0
Fixes: OS#4977
2021-01-29 11:37:41 +01:00
Alexander Couzens 260cd52bd0 gprs_ns2: correct vty config write
The vty configuration was wrong when any other node was
in between the vty configuration (e.g. gb or ss7).
The vty code doesn't have a relation between parent and child node.
It wasn't detected because this only happened in the sgsn.
The pcu doesn't have any binds defined.

Change-Id: I8a3d67d41baca36b4d1a951a574cd41e556355c5
2021-01-28 20:32:51 +01:00
Alexander Couzens e43b46e018 gprs_ns2: introduce gprs_ns2_vty_init_reduced() for the PCU
The gprs_ns2_vty_init_reduced() call initialized the ns2 vty without
configuration nodes (except timeout). The PCU can be only configured
by the BTS/BSC. It should not configured by vty.

Change-Id: I4437da74bd48ba64d3f16ea67afc26c45b6d3ac9
2021-01-28 13:54:32 +01:00
Alexander Couzens 2e1a3a982a gprs_ns2: remove api call gprs_ns2_dynamic_create_nse
The call was only introduced as workaround for the first implementation
of vty. There is no need for this anymore. The configuration can
just add "accept-ipaccess" to the bind to allow creation of dynamic
ipaccess NSE.

Change-Id: Ie924ead6da17657f3da334068c8ada82c8845495
2021-01-28 13:54:32 +01:00
Alexander Couzens da1bf8e835 gprs_ns2: drop gprs_ns2_vty, rename vty2 -> vty
Drop the vty(1) code and replace it with vty2. The vty(1) was only
used as intermediate to not develop a vty while developing a new
code base behind. Users of gprs_ns2_ has to use the new vty code.

API change which must be synchronized with osmo-pcu,
osmo-gbproxy, osmo-sgsn.

Change-Id: Ic2059e75d8ede8e5c29c4fef6be608ed79c8a97c
2021-01-28 13:54:24 +01:00
Pau Espin caf5317412 Revert "gprs_ns2: drop gprs_ns2_vty, rename vty2 -> vty"
This reverts commit b306094448.

It was merged too quickly and patches for projects using related
features are not yet prepared.

Change-Id: I8a2aaf74a47de8f4f0adb37d16426d199788e3fe
2021-01-28 13:38:23 +01:00
Alexander Couzens b306094448 gprs_ns2: drop gprs_ns2_vty, rename vty2 -> vty
Drop the vty(1) code and replace it with vty2. The vty(1) was only
used as intermediate to not develop a vty while developing a new
code base behind. Users of gprs_ns2_ has to use the new vty code.

API change which must be synchronized with osmo-pcu,
osmo-gbproxy, osmo-sgsn.

Change-Id: I8c3f2afecc74b78f7f914f7dce166cbcb63444eb
2021-01-28 11:56:37 +00:00