aboutsummaryrefslogtreecommitdiffstats
path: root/src
AgeCommit message (Collapse)AuthorFilesLines
2021-02-04osmo_fsm: Ensure all state and event names are valid identifierslaforge/contextHarald Welte1-1/+29
we call osmo_identifier_valid() for the FSM name and FSM instance, but we forgot to do so for all the state and event names. This meant that they could contain spaces and the like, which in turn might create problems when exposing FSM state over CTRL. This patch shouldn't be merged as-is right now. We first have to use it to determine which of our existing programs have related issues. Change-Id: If98587eff3c48a66ed2e5cc1f01a12accab5a3e7 Closes: OS#4149
2021-02-04make use of OTC_GLOBAL when allocating library-internal contextsHarald Welte9-20/+39
As libosmcore is now managing the global talloc contexts, there's no point in having APIs where the user tells the library about which talloc contexts to use for a given sub-system. However, completely ignoring the talloc contexts passed in by existing applications would unfortunately break LeakSanitizer. It appears to track if any dynamically allocated pointeres are not stored anywhere, and that would be exactly the situation created here. So the new behavior is: Use the context passed in by an application, and fall back to the library-internal OTC_GLOBAL if none is passed in. Change-Id: I48f475efd3ee0d5120b8fc30861e852d1a6920b1
2021-02-04gsm48: add compare function for struct gprs_ra_idPhilipp Maier2-0/+20
Comparing struct gprs_ra_id using memcmp can be error prone, so lets add a compare function to compare two struct gprs_ra_id values reliably. Change-Id: I4d7558c04d9d01761516526086be5104bb2eeada Related: SYS#5103
2021-02-03initial support for static userspace probes via systemtapHarald Welte3-0/+29
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-03gprs_ns2_frgre: check iph/ip6h before passing them to rx functionsAlexander Couzens1-2/+8
With IPv4 and IPv6 support it's not guaranteed that iph/ip6h is valid. Related CID#214288 Change-Id: If9015906917e3ad11d14b84c29d64f28a3158144
2021-02-03gprs_ns2_frgre: set a correct gre pointer for ipv6Alexander Couzens1-1/+5
Also fixes a nullpointer deref because iph is NULL on IPv6 Related: CID#216555 Change-Id: I2ff868a7bba6151a2202df774ff022c02b8c34cb
2021-02-03frame_relay: fix NULL pointer derefAlexander Couzens1-0/+1
Related: CID#215530 Change-Id: Ic58394ab44ee555a0c5dee2b07fa1054093fbcf0
2021-02-03gprs_ns2_fr: free_bind(): first do the NULL check before using membersAlexander Couzens1-1/+1
Change-Id: I80f72ada15b477d735bf5aee36a5d67e80eb0136
2021-02-03gprs_ns2: unify the handling of **result when bind already present.Alexander Couzens3-9/+15
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-03gprs_ns2_vc_fsm: rename ST_ALIVE -> ST_RECOVERINGAlexander Couzens1-17/+17
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-03gprs_ns2_vc_fsm: reset ALIVE N counter when restarting the test procedure.Alexander Couzens1-0/+1
Otherwise a NS-VC would flap between ALIVE and UNBLOCKED state. Related: OS#4959 Change-Id: Id98629bd65f92103e0e571ec388c58b02cb2ccb5
2021-02-02gprs_ns2: prevent division by zero in load_sharingAlexander Couzens1-1/+8
Check if the NSE is alive before passing UNITDATA to the load sharing. Change-Id: I0e2a59bec9b72f74eb64510a2e1ad60486694a55 Fixes: OS#4996
2021-02-02ns2: Don't start sending NS-RESET until FR DLC is availableHarald Welte1-2/+12
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-02ns2: Stop test procedure when going into unconfigured stateHarald Welte1-0/+7
When we're unconfigured and not yet started, we should not transmit NS-ALIVE. Change-Id: Ida3685e42a753899f1bf177eefcc23352ec7440d Related: OS#4999
2021-02-02ns2: Don't automatically re-start FSM at FORCE_UNCONFIGUREDHarald Welte2-1/+1
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-02frame_relay: cosmetic: Unify log syntax when discarding Rx packetsHarald Welte1-2/+2
Change-Id: I09d035e38b41be9d6ac5e16da7fb113286c77d29
2021-02-02frame_relay: Discard received messages for DLC not yet activeHarald Welte1-7/+10
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-02frame_relay: Add status call-backs for link + DLC status changesHarald Welte2-14/+31
Change-Id: Iec19db4e48642c3fcb0aa11fa7787b8323fd0e5a Related: Os#4999
2021-02-01gsm_7bit_encode_n(): fix integer overflow in gsm_septets2octets()Vadim Yanitskiy2-2/+9
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-01frame_relay: Send "Fuil Status" ENQUIRY after link recoversHarald Welte1-1/+5
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-01ns2: cosmetic: fix indent levelsHarald Welte1-4/+4
Change-Id: Ifcb0d5ddf824cd876de91afca1021aeb4f6c3e8b
2021-02-01ns2: Print NS-STATUS.ind primitives to the logHarald Welte1-3/+10
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-01ns2: Introduce a per-bind stat_item group with backlog lengthHarald Welte4-1/+37
The backlog length indicates the instantaneous length of the backlog. Change-Id: I1c55b4619b1221d7e607ace58649323407faf86b
2021-02-01ns2: Rename nsi->rate_ctr_idx to nsi->nsvc_rate_ctr_idxHarald Welte2-4/+4
We will soon get another of those indexes. Change-Id: I68a2ef3b48097f524831dd04821824b21d6d1e18
2021-02-01ns2: Memory allocation failures are ENOMEM, not ENOSPCHarald Welte4-5/+5
ENOSPC is used with non-volatile (disk) storage, while ENOMEM is customarily used for RAM allocation failures. Change-Id: Ia4c16d8278dc30c7cc69169b18428cda5272738d
2021-02-01ns2: Move to one common/shared ns2_bind_alloc()Harald Welte5-73/+62
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-01-31ns2: Add a rate_ctr for each NS-UNBLOCKHarald Welte3-0/+5
We have one for BLOCK, so let's also add one for UNBLOCK. Change-Id: I693109b7bc4d72b6803b40aae15327389aa37c69
2021-01-31ns2: Implement more rate countersHarald Welte1-1/+5
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-31ns2: count number of dropped packets / bytes on transmitHarald Welte3-3/+17
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-31ns2: Properly report packet drops in FR codeHarald Welte1-6/+7
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-31ns2: Increment Rx and Tx byte / packet countersHarald Welte2-0/+6
Change-Id: If5e93f69cddbc8962cbbae38c07b504dd9b1ecd1
2021-01-31ns2: encapsulate calls to nsvc->bind->send_vc()Harald Welte1-12/+17
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-31ns2: Use named array initializers to avoid mistakesHarald Welte3-30/+27
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-31ns2: Work around AF_PACKET socket ENOBUFS problemsHarald Welte1-25/+166
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-30ns2: Log ERROR if we cannot transmit a packet due to ENOBUFSHarald Welte1-3/+7
Related: OS#4995 Change-Id: I2ba64e96c60e23d2e6c8ecdcab0b52b3833f092c
2021-01-30ns2: Use proper return value from write_queue callback functionHarald Welte1-1/+6
write_queue expects a -errno value on error, not '-1'. Change-Id: I93c858facfe7e1c533df8dccc4502a574686bc8a Related: OS#4995
2021-01-29gprs_bssgp: agregate RIM related code in gprs_bssgp_rim.cPhilipp Maier4-260/+273
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-29gsm: bts_features: Introduce BTS_FEAT_CCNPau Espin Pedrol1-0/+1
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-29gsm: Fix wrong length in SI13 GPRS Cell Options IEPau Espin Pedrol1-2/+2
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: 946bb95af1838fcf026587c51a6ad36e34e202c3 Change-Id: I20efb4403cdf6c5bc717502a7075630044142f17
2021-01-29ctrl_connection: Initialize write_queue.bfd.fd to -1 during allocationPau Espin Pedrol1-0/+1
Otherwise fd is set to 0 by default, let's avoid accidentally closing it if something goes wrong. Change-Id: I98f744d2880fbb883719cdf1d3eb31f2b22a13b6
2021-01-29ns2: Fix assert when removing a bind listenDaniel Willmann1-1/+1
Change-Id: I3edd1e838f7516d9224045710047419039aa0ec0 Fixes: OS#4977
2021-01-28gprs_ns2: correct vty config writeAlexander Couzens1-16/+26
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-28gprs_ns2: introduce gprs_ns2_vty_init_reduced() for the PCUAlexander Couzens2-1/+17
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-28gprs_ns2: remove api call gprs_ns2_dynamic_create_nseAlexander Couzens3-17/+1
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-28gprs_ns2: drop gprs_ns2_vty, rename vty2 -> vtyAlexander Couzens4-2270/+1267
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-28Revert "gprs_ns2: drop gprs_ns2_vty, rename vty2 -> vty"Pau Espin Pedrol4-1267/+2270
This reverts commit b306094448564e27bc031b519396f1b0e294b231. It was merged too quickly and patches for projects using related features are not yet prepared. Change-Id: I8a2aaf74a47de8f4f0adb37d16426d199788e3fe
2021-01-28gprs_ns2: drop gprs_ns2_vty, rename vty2 -> vtyAlexander Couzens4-2270/+1267
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-28gprs_ns2: refactor: ensure all enums have GPRS_NS2_Alexander Couzens8-90/+90
All public enum should have the prefix GPRS_NS2_. API change which must be synchronized with osmo-pcu, osmo-gbproxy, osmo-sgsn. Change-Id: I548ff12f7277cbb7e1a630a3dc02b738ce89be72
2021-01-26gprs_bssgp: log source and destination RIM routing informationPhilipp Maier2-3/+12
Whenever a RIM PDU is received, log to which RIM routing information (address) it is going to and where it is comming from. Change-Id: Ia08d3b162a4f6257cccaa7f0764fa7ea498355ef Related: SYS#5103
2021-01-26gprs_bssgp_rim: cosmetic: connect routing identifier strings with "-"Philipp Maier1-3/+3
The bssgp_rim_routing_info_discr_strs string list contains whitespaces, when the whitespaces are replaced with a "-" the log output looks better Change-Id: I26facd3dc160603da89dcd787cccf78b19a20f02 Related: SYS#5103