Commit Graph

427 Commits

Author SHA1 Message Date
Alexander Couzens 280ed789a8 gprs_ns2: fix force-unconfigured for IP-SNS NSE
The IP-SNS need to do a reselection of the IP-SNS remote
for testing. Freeing all nsvc will force this.

Change-Id: I367c215a830c02eae2a470cba314828b5e0fb5c9
2020-12-23 06:32:29 +01:00
Alexander Couzens 6f3b738c74 gprs_ns2: don't start unconfigured fsm via FORCE_UNCONFIGURED
IP-SNS NSVC are unconfigured and not started when the IP-SNS is doing the SNS configuration.
If those NSVC would be started it would result in unsolicitated NS-Alive PDUs.

Change-Id: Ifec7288dbe71f10109e8b5c3849bf8f23ac7b557
2020-12-23 06:32:29 +01:00
Alexander Couzens a367d0863f gprs_ns2: sns: add log message when size/config retries exhausted
Change-Id: I5f7c04b364807418f5ba22132fc889b46d66aed0
2020-12-23 06:32:29 +01:00
Alexander Couzens cc65a25818 gprs_ns2: sns: don't send duplicated packets on retries
When all retries are exhausted it should change the state and not
send out a packet.

Change-Id: Ie33df4a12298882bc46633200486dc34c6e34d8e
2020-12-23 06:32:29 +01:00
Alexander Couzens 3ad73368be gprs_ns2: sns: correct log message when no nsvcs available
The log message should only shown if a reselection will be triggered.

Change-Id: I96b280a927aba6ac09ce88aedfcf469243c4dffe
2020-12-23 06:32:29 +01:00
Alexander Couzens 412bc3494d gprs_ns2: add new vty2
Change-Id: I163279cf57e84198dc8c53e1c109f5a9474670e9
2020-12-22 16:36:19 +01:00
Harald Welte b8de188b54 gprs_ns2_fr: Use OSMO_STRLCPY_ARRAY() where possible
Change-Id: I8ce461ecc36a81a4221336e82a36a69f49f89a0a
2020-12-21 11:41:55 +00:00
Harald Welte 7f01b68671 gprs_ns2_fr: Avoid stringop-truncation warning
gprs_ns2_fr.c:448:2: error: ‘strncpy’ specified bound 16 equals destination size [-Werror=stringop-truncation]
  448 |  strncpy(req.ifr_name, netif, IFNAMSIZ);
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Change-Id: Ied9fd1bea091075fad266258da39e674d10d4dcb
2020-12-21 12:41:03 +01:00
Alexander Couzens 5c96f5dbc6 gprs_ns2: fr: setup the device to correct FR/LMI settings
A hdlc can be used in different modes. Also a FR device can be used
with lmi and certain settings as without it.
ns2 will use FR with no lmi in the kernel.

Related: SYS#5169
Change-Id: I04786d2b864860b08c2e1afdb199470f4b80cc3b
2020-12-20 17:16:44 +01:00
Alexander Couzens 60021a46ce gprs_ns2: fr: implement a write queue
Related: SYS#5228
Change-Id: Id6eba04d5fb744f791b333c168729bbbd28cabd9
2020-12-20 17:14:04 +01:00
Alexander Couzens 3c22f91bad gprs_ns2: don't pass the return code of reject_status_msg
When reject_stats_msg() fails the code can't do anything about it.
Stick to the original failure code and log it

Change-Id: I105363957e59c41a68835b7a9830c048dba73e93
2020-12-20 15:34:53 +00:00
Alexander Couzens 12e5e6bd78 gprs_ns2: improve handling of TLV errors on new nsvcs
The specification says the PDU should be ignored if the PDU type is
unknown.

Change-Id: I2992d06b37ed122b7ff315d4852e86acc936800b
2020-12-20 15:34:49 +00:00
Neels Hofmeyr 8fef761d14 fix strncpy bug in gprs_ns2_fr_bind()
This use of strncpy() fails to account for the terminating nul
character. Use OSMO_STRLCPY_ARRAY() instead.

(Interestingly my compiler doesn't complain about this one, though it
failed on another similar use of strncpy().)

Change-Id: Id53e940c7a39ab154966548f4173a179c5bc9151
2020-12-18 11:12:16 +00:00
Neels Hofmeyr 475a0acc64 gprs_ns2_fr.c: compiler error: replace strncpy() with OSMO_STRLCPY_ARRAY()
My gcc (Debian 8.3.0-6) 8.3.0 refuses to build this strncpy() use: it
issues the buffer length as n and thus potentially fails to account for
the terminating nul. The line after that fixes the problem, so it's not
an actual bug. Anyway, we have a policy to never use strncpy(), and have
osmo_strlcpy() and OSMO_STRLCPY_ARRAY() for this.

This strncpy() was introduced last month during first addition of
gprs_ns2_fr.c:

    commit 841817ec52
    ns2: add support for frame relay
    Change-Id Id3b49f93d33c271f77cd9c9db03cde6b727a4d30

Change-Id: I494a6fb7ccd7938a39e8956f73ec4282da38d7fb
2020-12-18 11:12:16 +00:00
Alexander Couzens 6f89c770c7 gprs_ns2: fr: fix crash when frame relay interface doesn't exists
When a frame relay interface doesn't exist gprs_ns2_fr_bind() would
detect this but still return a success.

Change-Id: I815b6ef5c3df780ac94461a05975a2b70898b01e
2020-12-18 10:52:37 +00:00
Philipp Maier bd10c21cc4 gprs_bssgp: add IE parser/generator for RIM Routing Information
The RIM Routing Information IE (see also 3GPP TS 48.018, section
11.3.70) is used to control the flow of BSSGP rim messages at the SGSN.

Change-Id: I6f88a9aeeb50a612d32e9efd23040c9740bc4f11
Related: SYS#5103
2020-12-16 21:58:04 +01:00
Alexander Couzens 8806796976 gprs_ns2_vty: udp: fixup dialect changes
Only accept receiving ipaccess style messages when use-reset-block
is selected.
If use-reset-block is disabled allow static NSVCs.

Change-Id: Ia787528b1a6fac6bf1570c21643ef6cd8c209108
2020-12-16 21:34:03 +01:00
Harald Welte 33c3c0655b gors_ns2_vty: Fix saving of new NS2 timers
In I00e9023a6e7adc6ad48f4016fcaef189ac8b353e we introduced
two new timers, but failed to add the related value_string[]
entries.  This caused the VTY code to save something like

 timer unknown 0x8 3
 timer unknown 0x9 3

which fails to parse on re-start.

Change-Id: If5cfdf1ef68d98933985406d0ac071a0a1185646
2020-12-16 12:05:37 +01:00
Harald Welte 3a44d17a99 Fix VTY syntax for newly-introduced NS2 timers
In I00e9023a6e7adc6ad48f4016fcaef189ac8b353e we introduced two new
"timers": Number of retries for SNS-CONFIG and for SNS-SIZE.

Yet, the VTY syntax only added one string (tsns-prov-retires), probably
dating back to an earlier version.

Change-Id: I25fa579c7d68a8e4cb1175ae2245f009ab40fda7
2020-12-16 12:04:44 +01:00
Alexander Couzens bac5b0153b gprs_ns2: on ns2_create_vc parse the tlv before using it
reject_status_msg require a parsed tlv. Otherwise an
uninitialized tlv is passed.

Change-Id: I82cab518966b8b49c3522ff5f7b6f82d1027a526
2020-12-15 11:56:29 +00:00
Alexander Couzens c782cec663 gprs_ns2: add gprs_ns2_fr_bind_role() to retrieve the fr role
Change-Id: I277b805e588ba68536789b4a64a428ea0b31728a
2020-12-15 11:46:45 +00:00
Alexander Couzens 22c26e0610 gprs_ns2: make nsvc argument const
The nsvc isn't change. It can be const

Change-Id: Ie5052f02781d7fdc639456c6f02515a927cee1f3
2020-12-15 11:46:45 +00:00
Alexander Couzens 90ee963570 gprs_ns2_sns: introduce SNS Size/Config retries
According to 3GPP Size and Config procedure can
have retries in case the timeout of the procedure runs out.

Change-Id: I00e9023a6e7adc6ad48f4016fcaef189ac8b353e
2020-12-15 11:46:45 +00:00
Alexander Couzens 81ae0aa67f gprs_ns2_sns: use different binds for the initial connection
In case the first bind is not working the SNS would never build a
succesful connection to the SGSN. Iterate over all binds by
using an offset.
Instead of tracking the binds use an offset instead of a direct pointer.
This might result in skipping the order of the next bind.

Change-Id: I4a0a0608dac6ad8b5769ada2a14ca23f61eb0bcb
2020-12-15 11:46:45 +00:00
Alexander Couzens e769f5226b gprs_ns2_sns: rework IP-SNS initial remote
The IP-SNS requires at least one initial remote address of the SGSN.
However it should be multiple initial remote address instead of a single
in case the interface might fail.
Rework the SNS to support multiple initial remote addresses.

Change-Id: I71cdbfb53e361e6112fed5e2712236d797ef3ab2
2020-12-15 11:46:45 +00:00
Alexander Couzens 4755879fbe gprs_ns2: add gprs_ns2_free_nsvcs() to free all NS-VC of a NSE
Change-Id: I909443b540dbf75146297f1d7f94940690be6c0d
2020-12-15 11:46:45 +00:00
Alexander Couzens ebcbd726ee gprs_ns2: rework gprs_ns2_fr_connect*()
Add gprs_ns2_fr_connect2() and change gprs_ns2_fr_connect() to
be similar to gprs_ns2_ip_connect() and gprs_ns2_connect2().

This is an API break but there wasn't yet a release with NS2.

Change-Id: I4e1374b0e979b3293302c5ed46a91a58f3a5a916
2020-12-15 11:46:45 +00:00
Alexander Couzens aaa55a663e gprs_ns2: add member name to bind
Every bind will have a unique name. Add a name argument
to all bind creating functions and require them to be unique.

This is an API break but there wasn't yet a release with NS2.

Change-Id: I8f1d66b7b3b12da12db8b5e6bd08c1beff085b3e
2020-12-15 11:46:45 +00:00
Alexander Couzens 93ad499832 gprs_ns2: move allocation of the SNS fsm into create_nse
The allocation of the SNS fsm can be done in create_nse
because the dialect is now known at that time.

Change-Id: I64e1f3dcc63d38e65bb486c9ac08d4032b7ad222
2020-12-15 11:46:45 +00:00
Alexander Couzens d923cff170 gprs_ns2: introduce NS dialects
A NS dialect describes how the NS Entity interacts with
different virtual circuits. E.g. ipaccess use reset/block on udp
and is a dynamic connection.
A single NS Entity can only support one dialect. This can be later
used to protect a NS Entity against dynamic NS virtual circuits of a
different type.

It further allows a bind to support multiple dialects at the same time.

Change-Id: Ia118bb6f994845d84db09de7a94856f5ca573404
2020-12-15 11:46:45 +00:00
Harald Welte 5bea72e1e0 gprs_ns2_fr: use ETH_P_HDLC instead of ETH_P_ALL
When opening the socket, use ETH_P_HLDC to restrict the socket to
packet received on HLDC interfaces.  This avoids packets from random
other (ethernet, ...) interfaces to appear before we can bind()
it to the actual hdlc-net-device we're interested in.

We still are racing against other HLDC net-devices, but those have
lower PPS and throughput ratese as 1G/10G or even higher speed ethernet
devices that might exist on the same machine.

Change-Id: I6a556e6e2d012c17a2777cc8b30fed0f318db178
2020-12-10 22:08:02 +01:00
Harald Welte 41b188b90b gprs_ns2_fr: guard against race between socket(AF_PACKET) and bind()
An AF_PACKET socket will immediately receive packets of _all_ interfaces
until it is bound to one specific interface.  This introduces a race
condition between the socket() and the bind() syscall.

Let's use the ifindex passed for each packet in recvmsg() to drop
any packets received for other interfaces.

Change-Id: I8f708ba4f9b7f76525acce17b24a8f7b125a1c1c
Related: SYS#5245
2020-12-10 22:01:33 +01:00
Harald Welte 4ed0f4e994 gprs_ns2_fr.c: Skip extraneous FIONBIO
The socket is marked non-blocking inside osmo_fd_register(), there
is no need to do it twice.

Change-Id: I2068ce8280357b14970d01e5c86de5c59c933650
2020-12-10 22:01:33 +01:00
Pau Espin Pedrol 0e61716881 bssgp: Remove newly added log line warning about NOOP
osmo-pcu unit tests fail ue to this new log line. Let's rather simply
leave a comment there, since anyway known apps will be migrating soon
the new APIs.

Fixes: fde19ed579
Change-Id: Ib9bf528db08f7aaa4adaf7b6a320679a4f11a53d
2020-12-10 13:39:44 +01:00
Harald Welte 1fcfce86cb bssgp_bvc_fsm: Add basic BVC flow control rx/tx support
The FSM doesn't actually implement the flow control logic,
it only decodes / dispatches and encodes messages.

Related: OS#4891
Change-Id: Ie59be6761177c43456898be9148727f15861a622
2020-12-09 22:57:53 +01:00
Harald Welte 4394bb9629 bssgp2: Encoding + Decoding functions for BVC and MS flow control
Change-Id: I9c89bb1c03550930c07aad7ff8f67129ee7a6320
Related: OS#4891
2020-12-09 22:56:07 +01:00
Harald Welte 17a892ff2b gb: Add beginnings of a new BSSGP implementation
Similar to ns2 superseding ns, we now also intoduce a next generation
of BSSGP related code to libosmogb.  However, this is not aiming to
be a full implementation yet, but simply those parts that we currently
need from the revamped osmo-gbproxy.

The gprs_bssgp2.[ch] differs in two ways from the old code:
* it separates message encoding from message transmission
* it supports more recent specs / IEs

bssgp_bvc_fsm.c is a genric implementation of the BSSGP BVC
RESET/BLOCK/UNBLOCK logic with support for both PTP and signaling,
both on the SGSN side and the BSS side.

Change-Id: Icbe8e4f03b68fd73b8eae95f6f6cccd4fa9af95a
2020-12-09 22:56:01 +01:00
Harald Welte fde19ed579 logging: Introduce DLBSSGP logging constant
Historically, BSSGP uses a non-constant, user-configurable integer
varieable for the logging sub-system.  Let's replace this with a
statically-allocated library logging constant.

This is required if we want to use the subsystem number in e.g.
static initialized for osmo_fsm.log_subsys.

Change-Id: I506190aae9217c0956e4b5764d1a0c0772268e93
2020-12-09 22:50:01 +01:00
Alexander Couzens 45a25a3222 gprs_ns2_sns: correct dynamic calculation
The wrong argument was used to multiply by 4. However it was still
compliant because the SNS code would always supports 16 NSVCs.
Use the correct multiplier.

Fixes: ttnc3 pcu sns test cases
Fixes: 42ad549152 ("gprs_ns2_sns: dynamic calculate the maximum NS-VCs")

Change-Id: I58d706c6fffb4237b90b37cade4dc00c6aba6ac9
2020-12-09 16:13:42 +00:00
Harald Welte 8f82528bf7 bssgp: Add osmo_tlv_prot_def for BSSGP
Change-Id: I7e4226463f3c935134b5c2c737696fbfd1dd5815
2020-12-08 12:27:38 +00:00
Harald Welte e24a5b559c ns2: Accept NS-UNBLOCK-ACK in UNBLOCKED state
if we transition to UNBLOCKED as a result of a locally-generated
unblock action, then of course we will receive an inbound UNBLOCK-ACK.

Let's avoid error log messages and confusign the peer with NS-STATUS
in this case:

DLNS DEBUG GPRS-NS2-VC(FR-hdlcnet3-DLCI18-NSEI2001-NSVCI3)[0x612000001720]{UNBLOCKED}: Received Event UNBLOCK_ACK (gprs_ns2_vc_fsm.c:692)
DLNS ERROR GPRS-NS2-VC(FR-hdlcnet3-DLCI18-NSEI2001-NSVCI3)[0x612000001720]{UNBLOCKED}: Event UNBLOCK_ACK not permitted (gprs_ns2_vc_fsm.c:692)

Change-Id: Icc4d960ddad82e3ebbf571d8ff9f24854b52a946
2020-12-08 12:27:38 +00:00
Philipp Maier b73a3ded04 gprs_bssgp_util: complete bssgp_pdu_strings
The value strings for the BSSGP lack some items, lets make it complete.

Change-Id: I94956ca12df7f7ba912da05397b3fb39956277f7
Related: SYS#5103
2020-12-07 20:55:52 +01:00
Alexander Couzens e78207f16b gprs_ns2_sns: fix whitespaces and superflous comment
Change-Id: Ica0033c88cad71827ad843e92ccd54663426de23
2020-12-07 13:13:06 +00:00
Alexander Couzens db1c3fb114 gprs_ns2_sns: add missing S() to allow GPRS_SNS_EV_NO_NSVC happen
The event GPRS_SNS_EV_NO_NSVC was never dispatched because the
S() was missing to convert it into a bitmask.

Change-Id: I4af01293ff0ba8629e1426b1ba92f72f0520c7f0
2020-12-07 13:13:06 +00:00
Alexander Couzens 42ad549152 gprs_ns2_sns: dynamic calculate the maximum NS-VCs
The previous hard-coded value could be not enough if the user configures
too many local binds. Allow at least 8 NS-VCs. In case the user
configures too many binds (> 2) increase the maximum NS-VCs to allow
the SGSN to have 4 redundant connections.

Change-Id: Iae859dc504716fd6f705e72db5fc293b4b3298e7
2020-12-07 13:13:06 +00:00
Alexander Couzens e03d863e1f gprs_ns2_sns: add missing transistion UNCONFIGURED -> SIZE
The SNS FSM can go into the SIZE state when all NS-VC are failing.
This is the case if the network connection to the SGSN got interrupted.

Change-Id: I7e7da9451458505c1c2d73836dd916aee7704fda
2020-12-07 13:13:06 +00:00
Pau Espin Pedrol d41800c7ec gb: Import mnl.h iif --enable-libmnl
Change-Id: Ic0100493a9256e9c30a4bbb92be404270a8b9393
2020-12-07 13:35:24 +01:00
Harald Welte 61e9de8f15 bssgp: Update bssgp_pdu_strings with Release 15
In I7da8b25c9a89a7e3ae6c1680ba838e136d7d5293 we introduced the enum
values for all the new BSSGP message types up to Release 15.  Let's
also add value_strings for them here.

Change-Id: Ia108ba0d5f1f2c9d46f0c0bd11cd93104b9d62ea
2020-12-04 18:20:15 +00:00
Harald Welte 798efea27e gprs_ns2: Use TLVP_PRES_LEN instead of TLVP_PRESENT
With TLVP_PRESENT we only check if a given TLV/IE is present,
but don't verify that it's length matches our expectation.  This can
lead to out-of-bounds reads, so let's always use TLVP_PRES_LEN.

Change-Id: I4c438bc82ea6a48243db568f96a234adf784dc0b
2020-12-04 18:20:15 +00:00
Harald Welte 2d9ce71fcb bssgp: Use TLVP_PRES_LEN instead of TLVP_PRESENT
With TLVP_PRESENT we only check if a given TLV/IE is present,
but don't verify that it's length matches our expectation.  This can
lead to out-of-bounds reads, so let's always use TLVP_PRES_LEN.

Change-Id: I56e8b31ce51602d2681e3db501c48f84bfe7e438
2020-12-04 18:20:15 +00:00
Daniel Willmann 89106524a0 ns2: Fix argv index in logging filter VTY commands
Change-Id: I8adaf8094ef028b2d580e918532d6712d2ebbc2c
Related: SYS#5232
2020-12-04 16:52:11 +00:00
Harald Welte a59e6dbee3 gprs_ns2_fr: remove include <linux/if.h>
It's not needed because net/if.h already include
the required parts. Furthermore the linux/if.h generates
a compiler error in combination with net/if.h on older systems
(e.g. debian jessie)

Change-Id: I53650e9c55bb9dd98ba60269025e72673e9f82c1
2020-12-04 10:30:43 +01:00
Harald Welte d8e59b208c libosmogb: Add missing LIBMNL_CFLAGS
In Change-Id I779556991bfc88b7751b2be17bb81c329cfb9e01 we introduced
the use of libmnl via osmo_mnl to libosmogb.  Howver, we didn't add
LIBMNL_CFLAGS in Makefile.am, which now (rightfully) fails on some
distributions like the SuSE family of distributions.

Let's fix this.

Change-Id: Ib8740e8fd677026efb9dad5d5fe6b95147fb3c23
2020-12-04 10:17:21 +01:00
Daniel Willmann 751977be6f ns2: Add log filtering by NSE/NSEI, fix NSVC filter on receive
NSVC filtering was only implemented on sending messages, this also adds
log_set_context() calls to  ns2_recv_vc()
Filtering by NSE is implemented similar to NSVC.

Change-Id: I63c0e85f82f5d08c5a6f535da94b8648498439d2
Related: SYS#5232
2020-12-03 15:14:18 +01:00
Alexander Couzens d87a2f14e6 gprs_ns2: use switch() case instead of multiple if in ns2_create_vc()
Improve readibilty and allows it to extend for future ns2 vty changes

Change-Id: I8bd9c75fb04169a166b7a3f5e13a5902250cfd0e
2020-12-03 06:15:09 +01:00
Alexander Couzens 036bf140c9 gprs_ns2: fix typo in comment
Change-Id: Ic0653ce7de8d2d64bd7cf10e148b07da8cbeb0a2
2020-12-03 06:15:09 +01:00
Harald Welte 25ee755cc7 gprs_ns2_vty: Re-introduce a 'show ns' command
In I157467d6a74d6109bc23521c978c5aac6d29fe50 we introduced a split
between 'show ns entities' and 'show ns binds'.  However, there is
at least one test case in osmo-sgsn.git which depends on 'show ns'
working.  So let's re-add it as a backwards compatible, hidden command.

Change-Id: I7571c6d82f7a712803d09d165abb6c7cb5ae2e5c
2020-12-02 22:15:34 +01:00
Harald Welte 56f08a377c gprs_ns2_fr: Monitor the kernel net-device link state
We use the newly-introduced libmnl integration of libosmocore in order
to receive netlink events from the kernel on link state changes.

If one of "our" interfaces changed link state, we report this in the log
and also store it within the "bind".

Change-Id: I779556991bfc88b7751b2be17bb81c329cfb9e01
2020-12-02 21:04:51 +00:00
Harald Welte 53a2fde368 Integrate libmnl (minimal netlink) library with libosmocore select loop
This adds an easy way to listen to netlink events form the Linux kernel
from within libosmocore applications.

The new dependency can be disabled via the "--disable-lbimnl" configure flag.

Change-Id: I4f787ee68f0d6d04f0a5655eb57d55b3b326a42f
2020-12-02 21:04:51 +00:00
Alexander Couzens b7fc3a0a6d gprs_ns2_fr: remove include <linux/if.h>
It's not needed because net/if.h already include
the required parts. Furthermore the linux/if.h generates
a compiler error in combination with net/if.h on older systems
(e.g. debian jessie)

Change-Id: Iccf931207d8bea19969fbfc4225f622a1a709972
2020-12-02 20:49:48 +00:00
Daniel Willmann cb3e9b5847 ns2: Fix docs for some NS2 vty commands
Change-Id: Ie58607424340c102c930330e444c2e219c1803e0
2020-12-02 15:50:22 +01:00
Harald Welte 1e72df0208 gprs_ns2_udp.c: Fix typo - it's a DSCP and not a DCSP
also, acronyms are typically all-caps.

Change-Id: Ia12d1fd66348f0b317405f46589f041045c513a2
2020-12-01 18:21:17 +01:00
Harald Welte dc2d080813 gprs_ns2_vty: Print all relevant data on each NS-VC
After this patch, we can finally see the BLOCKED/UNBLOCKED state,
weights, persistence, etc. in the VTY.

Example:

OsmoGbProxy> show ns entities
NSEI 00101: UDP, DEAD
 NSVCI 00101: RESET PERSIST data_weight=1 sig_wight=1 udp)[127.0.0.1]:23000<101>[127.0.0.1]:7777
NSEI 00001: FR, ALIVE
 NSVCI 00001: UNBLOCKED PERSIST data_weight=1 sig_wight=1 fr)netif: hdlcnet1 dlci: 16
 NSVCI 00002: UNBLOCKED PERSIST data_weight=1 sig_wight=1 fr)netif: hdlcnet2 dlci: 17
 NSVCI 00003: UNBLOCKED PERSIST data_weight=1 sig_wight=1 fr)netif: hdlcnet3 dlci: 18
 NSVCI 00004: UNBLOCKED PERSIST data_weight=1 sig_wight=1 fr)netif: hdlcnet4 dlci: 19

Change-Id: I1cf8fe55d1d0cecc46113532c8550880558b0155
2020-12-01 18:19:02 +01:00
Harald Welte 96ec84a035 gprs_ns_vty: Unify display of NSVCI on VTY in 'show ns entities'
Change-Id: I2915b47a5fc4ed9ac16f611c9e9f71dc0955426a
2020-12-01 18:01:43 +01:00
Harald Welte 7aa609929c gprs_ns2_vty: Show NSVCI in dump_nsvc()
also, indent the statistics one more character

Change-Id: I2726d6f1c5f83255925d6a1b22f1ee71b8d6fdc5
2020-12-01 18:01:43 +01:00
Harald Welte 2fce19a243 gprs_ns2_vty: Differentiate 'show ns binds' and 'show ns entities'
Change-Id: I157467d6a74d6109bc23521c978c5aac6d29fe50
2020-12-01 18:01:43 +01:00
Harald Welte 0ff12ad0ba gprs_ns2: Print link layer and global ALIVE/DEAD state
Change-Id: I56455d1fef2f99d72bc0c4811f307428aec12b96
2020-12-01 18:01:43 +01:00
Harald Welte 6188e004d2 gprs_ns2: Don't return an empty string in case of unknown LL
Change-Id: Id2c689ab83ada18a5cb6d70ded31aacaa701f99c
2020-12-01 18:01:43 +01:00
Harald Welte 37322bc714 gprs-ns2: Fix stringification of NS/FR NSVCI
Before this commit, gprs_ns2_ll_str_buf() would always return an empty
string.

Change-Id: I6ec07f58fa5cbb7ec4be967b2c72ae75935e4f75
2020-12-01 18:01:43 +01:00
Harald Welte 48bd76cbc0 gprs_ns2_fr: Print Frame Relay 'role' in VTY
Change-Id: I23182e5d952fd28a0bbfa76a4fc94d8e03b7a65d
2020-12-01 18:01:43 +01:00
Harald Welte a24e7ee3bd gprs_ns2: Introduce gprs_ns2_lltype_str() for link layer name
Change-Id: I4b257c09d9d3c97d6da04240c7a74a95c7c93675
2020-11-30 13:30:14 +00:00
Harald Welte b6b82da56c frame_relay: Fix error path on ioctl() failure
We don't want to pass -EINVAL as file descriptor into the bind() call.

Closes: CID#215529
Change-Id: Ic4d411c0ade6867c4fe2c01eb3368e6420158724
2020-11-30 13:29:33 +00:00
Harald Welte 29b77a61ff frame_relay: Fix null pointer dereference in DLC/PVC delete
Change-Id: I71de58f6ca15e2057f26d9c5502c8bc3e03e714f
Closes: CID#215530
2020-11-30 13:29:33 +00:00
Harald Welte 920491936e gprs_ns2_vty: Fix VTY documentation errors
Those two documentation errors made e.g. gb-proxy VTY tests fail.

Change-Id: I487ee3532aed4de38494005106ae9686d590608d
2020-11-25 20:57:09 +01:00
Harald Welte 6d4db2367d Revert "ns2: permit multiple nsvci in one nse in VTY"
This reverts commit 0bd8a4b5b3, which
was causing massive VTY test failures for osmo-pcu.git and osmo-sgsn.git

Change-Id: I0236d1e835111604e58c5d8c3f84221e055ce59d
2020-11-25 20:56:46 +01:00
Harald Welte 78ebc3fa31 frame_relay: Fix some spelling/language issues
Change-Id: I0ec34c0b452a46008a629f664c10dabd3f836d56
2020-11-25 17:39:06 +01:00
Alexander Couzens 10e991b224 ns2: remove obsolete type GPRS_NS2_LL_E1
There is already frame relay type GRPS_NS2_LL_FR
to support frame relay.

Change-Id: Iabb4608d91ccb32a07cad67519166dabfba76612
2020-11-24 03:53:22 +01:00
Alexander Couzens aac9016570 ns2: move link layer type into NSE
Even it was in theory possible to mix NS-VC ll types within
a NSE. This is an unrealistic configuration.
Further more to select the correct load sharing mechanism
the NSE must know the correct link layer.

Change-Id: I18dfd40a2429cd61b7c4a3dad5f226c64296f7d8
2020-11-24 03:53:22 +01:00
Alexander Couzens 24a14ac80c ns2: move LL into public api
Also fix prefix. GPRS_NS -> GPRS_NS2.
In preparation to move LL into upper layer.

Change-Id: I3b5e0d51ce69b095095e5160ca0cf0d4534db1b8
2020-11-24 03:53:22 +01:00
Harald Welte 0bd8a4b5b3 ns2: permit multiple nsvci in one nse in VTY
Change-Id: I4ad454320d0a03e81b399f55e8bd0ee57402dad0
2020-11-24 03:53:22 +01:00
Alexander Couzens fc3dd1fb14 ns2: implement link sharing selector
Change-Id: I212fa1a65e8c16cf1e525d1962d5689446c7e49e
2020-11-24 03:53:22 +01:00
Alexander Couzens 841817ec52 ns2: add support for frame relay
Add support for frame relay over dahdi hdlc device.
It's supporting lmi by q933 and supports both
SGSN and BSS.

Change-Id: Id3b49f93d33c271f77cd9c9db03cde6b727a4d30
2020-11-24 03:53:22 +01:00
Daniel Willmann dbab714343 ns2: Add a VTY command to reset NSVC FSM
Mainly useful for testing so implemented as a hidden command

Change-Id: I83b9cd7381c25da0e8aa847038a2d422c8dd63cf
Related: SYS#5002
2020-11-20 15:38:00 +01:00
Daniel Willmann ed0c982079 ns2: Add a function to set the NSVC FSM back to unconfigured
The function gprs_ns2_vs_force_unconfigured() resets the NSVC state back
to the initial value when it was first started. This can be useful for
testing.

Related: SYS#5002
Change-Id: If96d56b19959372af4eba009661be19e985b4d51
2020-11-20 15:38:00 +01:00
Daniel Willmann f5b2e28c87 ns2: Split 'initiater' into initiate_{reset,block}
Related: SYS#5002
Change-Id: Iff5aff0cf8d19d9c718dd11c4e731ced2aeb16ba
2020-11-20 15:37:46 +01:00
Alexander Couzens c06aa710d0 ns2: check if ns_vc_alloc() fails in bind_connect()
Change-Id: I82c984b9808451a72a62ff03b0495a1d09473e1c
2020-11-20 08:51:19 +00:00
Alexander Couzens 0ab028c84e ns2: fixup gprs_ns2_prim_strs
The gprs_ns2_prim_strs was merged to early. The renaming
in the last gerrit patchset wasn't done correct.

Change-Id: Ie8e1e003d70af48f2d647b2c2701d4fc0f17e307
2020-11-09 11:07:17 +00:00
Daniel Willmann ed1fa018c3 ns2: Improve NSVC output
In show ns lots of info was printed many times. We can just use
gprs_ns2_ll_str() to get the information about an NSVC so use that and
ensure newlines.
The NSVC are still printed twice - at least for the UDP bind: Once in
dump_nse and once in dump_bind.

Change-Id: I6f734d92ec1e17f339f7b32e449ffd614efa7319
Related: SYS#4998
2020-11-06 15:40:27 +01:00
Daniel Willmann 15c09a81e9 ns2: Send NSVC representation in NS_AFF_CAUSE_VC_* status indication
NS_AFF_CAUSE_VC_* failure and recovery should indicate the NSVC in
question. Use the string representation reported by gprs_ns2_ll_str()
for that.

NS_AFF_CAUSE_VC_RECOVERY was never sent so do that on unblock as well.

Change-Id: Iad6f0dc4565a46868cbbe17c361dcd473006c83d
Related: SYS#4998
2020-11-06 11:41:16 +01:00
Daniel Willmann f128654c7f ns2: Add gprs_ns2_nsvc_state_name() to get the current state of a VC
Change-Id: I4c4c5b9142d7240ed452218e263ba12e2b70d1a0
Related: SYS#4998
2020-11-06 10:23:44 +00:00
Alexander Couzens cce8828238 libosmocore: change the memory management of NS2
Until now NS2 always free'd it's own memory. Even when the msg
was sent as primitive to the upper layer.
Change the memory ownership when sending a primitive to the upper layer.
The upper layer has to free the msg buffer.

Merge together with: I180433735bfbb3375c41318d7a7709d5845199ba (osmo-pcu)

Change-Id: Id844d7acbcab102a7dc472d608a5e97a748ecb43
2020-11-03 22:37:45 +00:00
Daniel Willmann 2d42b90dbb libosmogb: Add a function to tx BVC RESET by nsei/bvci
This is needed for osmo-gbproxy where we need more control over BSSGP.

Related: SYS#4998
Change-Id: Ifa769bce920a08cf93553dcb164a3fcf50162517
2020-11-03 10:14:00 +00:00
Alexander Couzens b3b837c5e8 gprs_ns2: convert gprs_ns2_cause_str into an static inline
Be consistent with other implementation of get_value_string() in
libosomocore.

Change-Id: Ic79757df8683e0461c04f7ef9279e4fe645eb821
2020-10-27 14:49:03 +00:00
Alexander Couzens 2498f1db9d ns2: add value strings for ns2_affecting_cause_prim_str & ns2_prim_str
Change-Id: Ibf610fbd929dddc4a4e235152447caff522d4eb2
2020-10-27 15:24:47 +01:00
Alexander Couzens 0346b643b5 gprs_ns2: remove the nsvc fsm timer when cleaning up the fsm
Change-Id: I9c7f767077ed2e354d0980a9f11246c1151c65e2
2020-10-27 13:53:08 +00:00
Pau Espin 0a446a1804 gb: ns2_sns: Add missing value_string entry for GPRS_SNS_EV_NO_NSVC
Change-Id: Ifd4501676217f1a27f3ee02156be4e3dcb847703
2020-10-27 13:30:08 +01:00
Pau Espin 7fbe7cfcd7 gb: ns2_sns: Fix missing trailing newline char in log line
Change-Id: I8dc45237a605e76e852a74a0de91ac2a812387d0
2020-10-27 13:27:18 +01:00
Alexander Couzens d420ea9dce gprs_ns2: add gprs_ns2_ip_vc_equal()
Compare the NS-VC with the given parameter

Change-Id: I3a0cd305fd73b3cb9ec70246ec15ac70b83e57f2
2020-10-12 15:13:43 +00:00
Alexander Couzens 8ebc1acbaa gprs_ns2: Partial revert 48f63867 allow to create NS_ALIVE NSVC
NS_ALIVE can't create new NS-VC. Those NS-VC can be only created
by SNS or by vty.
Also fixes a crash because the TLV parser tried to retrieve NSEI TLV
which doesn't exist on NS_ALIVE PDUs.

Related: OS#4792
Change-Id: I16b9d7b2eb7544a83ce871d894887c4b30605b34
2020-10-12 14:15:50 +00:00
Alexander Couzens 6cb5d5f2e0 gprs_ns2: add gprs_ns2_nse_foreach_nsvc()
Allow to loop over all NSVC within a NSE via a callback

Change-Id: I5a2bb95d05d06d909347e2fb084a446ead888cb3
2020-10-12 15:54:21 +02:00
Alexander Couzens d33512b997 gprs_ns2: gprs_ns2_ip_vc_remote() the nsvc can be also const
Change-Id: Ia000f535f18f21b41038f2ce7721f0fb59f6a093
2020-10-12 15:54:21 +02:00
Alexander Couzens 125298f2b5 gprs_ns2: add gprs_ns2_nse_sns_remote() returns the initial SNS address
Allows the PCU to get the SNS remote address.

Change-Id: I54f110acc3acccb362f6e554324d08cc42b7c328
2020-10-12 15:54:21 +02:00
Alexander Couzens 979f5f5449 gprs_ns2: add gprs_ns2_ip_vc_local() return the local sockaddr
Change-Id: I65a739772596015b90473045d32d4934d924e43f
2020-10-12 15:54:21 +02:00
Alexander Couzens c4229a458c gprs_ns2: rename gprs_ns2_ip_vc_sockaddr -> gprs_ns2_ip_vc_remote
It's more clear which part of the address is returned.
In preparation to add a gprs_ns2_ip_vc_local.

Change-Id: I6110ff573362961c713a990da7ef3f3dbedf6c57
2020-10-12 15:54:21 +02:00
Alexander Couzens 9a4cf275b2 gprs_ns2: const the return value of gprs_ns2_ip_vc_sockaddr / gprs_ns2_ip_bind_sockaddr
The sockaddr should not be changed.
free and create the bind/nsvc if the address should be changed.

Change-Id: I371ac2361b569e36722b02fc9cd82ec8da2fa9e3
2020-10-12 13:08:42 +00:00
Alexander Couzens 4b6c8afcb2 gprs_ns2: add gprs_ns2_free_nses() to free all NS-E
Allow users to clean up most of the state (e.g. the PCU).

Change-Id: Ia00753a64b7622a0864341f51ea49b6963543755
2020-10-12 13:08:42 +00:00
Alexander Couzens 896fcd5c80 gprs_ns2: add gprs_ns2_free_binds() to free all binds
Allow users to clean up all binds (e.g. the PCU).

Change-Id: Ic8f6f8aca10da23a18fab8870be7806065a34b47
2020-10-12 13:08:42 +00:00
Alexander Couzens 05e7f7dd99 gprs_ns2: add gprs_ns2_nse_nsei() to get the nsei of a nse
Change-Id: I5f67e6a9bf4cb322bd169061fee0a528012ed54d
2020-10-12 13:08:42 +00:00
Alexander Couzens 6090b1db4b gprs_ns2: gprs_ns2_ip_bind() check if the bind already exists
To prevent adding the same bind twice. It also returns
the bind in **result.

Change-Id: Ib816f14c387cc6ff86f9c0057daded1d72cee0f5
2020-10-12 13:08:42 +00:00
Alexander Couzens 4f60845552 gprs_ns2: add gprs_ns2_ip_bind_by_sockaddr() to search for binds by sockaddr
Change-Id: I48c3f1a82574eee0a49e6941cf9e1365c2302d3b
2020-10-12 13:08:42 +00:00
Alexander Couzens bb0a53ba40 gprs_ns2: fix empty prefix in TLV Parse error
Those messages were printed without any prefix because
LOGPC was used. LOGPC means continue a log line.
This must happened while copying this part of code over
from ns1 where has been a LOGP in this function.

Related: OS#4792
Change-Id: I2672ea0e34d19ea6172cb3458b8ff98d9700b2d0
2020-10-12 10:54:46 +00:00
Alexander Couzens c068d860a5 gprs_ns2: fix SNS_ADD for IPv4
The remote must be initialized because the osmo_sockaddr_cmp is using a memcmp() and might fail
on spare bytes in the struct. The same was already done for IPv6.

Related: OS#4792
Change-Id: Iefeef969bb2b5ae4d5db6a6358293ef9eeda858a
2020-10-12 10:54:39 +00:00
Alexander Couzens 3531504d52 gprs_ns2: gprs_ns2_free(): add missing talloc_free
It clean up all the space except the nsi itself.

Change-Id: Ia3fbe5d679d0af75b2b0db020f1eb082d629cf50
2020-10-10 03:28:17 +02:00
Vadim Yanitskiy a07f25e3ba gprs_ns2: make struct osmo_sockaddr pointers const
Using the 'const' qualifier allows the compiler to spot some
programming errors and further optimize the code.

Change-Id: I0df6a00ac1830bd64a10b9336b827e113fa772bb
2020-10-09 15:24:09 +00:00
Harald Welte 36be9d890e gprs_ns2: Fix parsing of SNS-{ADD,DEL,CHANGE_WEIGHT}
Change-Id: I94c12986f8255e4373b13b1a8fae3df08004ad96
Related: OS#4791
2020-10-09 16:12:01 +02:00
Pau Espin aa83d4110b gprs_ns2_udp: Avoid dangling freed struct in list if binding fails
Change-Id: Ic54434b7cfc40136788257e768cae7a2b5d5bc79
2020-10-09 14:20:13 +02:00
Harald Welte bd771a9576 bssgp: Don't include RA-ID in BVC-RESET for BVCI=0 (signalling)
3GPP TS 48.018 is quite clear: The RA-ID must only be included
when a PTP-BVCI is being reset [and only if the sender is the BSS].

Before this patch, osmo-pcu is including the RA-ID in BVC-RESET
for BVCI=0.

Change-Id: Ie87820537d6d616da4fd4bbf73eab06e28fda5e1
2020-10-08 07:18:39 +00:00
Alexander Couzens d745a0e7f3 gprs_ns2_vty_create: remove bind pointer check
The bind pointer can't be NULL because gprs_ns2_ip_bind()
is either return 0 and bind is valid or != 0 and returning.

Found-by: Coverity
Fixes: CID#214854
Change-Id: I11d86c9cb36226701e51942f14d7a6412c3eff26
2020-10-07 10:16:40 +00:00
Vadim Yanitskiy 8e7c49649e vty: use install_lib_element() and install_lib_element_ve()
See https://lists.osmocom.org/pipermail/openbsc/2020-October/013278.html.

Change-Id: Ic541126ffd4975daf87199abfafb465e2055e44f
Related: SYS#4937
2020-10-06 00:22:22 +07:00
Alexander Couzens 22f34710d9 ns2: vty: on `show ns` add information of NS binds
Change-Id: I6cef42749555e577d5573f2ed8b8bce4cf842a98
2020-10-05 14:23:33 +00:00
Alexander Couzens 1fac6f7452 ns2: vty: allow the users (pcu/sgsn) to set a default bind
The SGSN will always bind to 0.0.0.0 in difference the PCU bind is depending
on the info indication. Allow to the user to define a default bind
address.

Change-Id: I2a9dcd14f4ad16211c0f6d98812ad4a13e910c2a
2020-10-05 14:23:33 +00:00
Alexander Couzens a3373e3394 ns2: vty: show all nse
Don't stop after dumping the first nse

Change-Id: I0ca1807692854b23b77ca9042768529df3f80289
2020-10-03 07:19:59 +00:00
Alexander Couzens da0a285612 ns2: status ind: add additional flags (first and persistent)
Both flags are required to allow the NS user to sent BVC RESET for persistent NSE.
On persistent NSE with persistent NS alive configuration (no RESET/UNBLOCK/BLOCK) the
PCU can't detect if the SGSN has restartet or crashed.

Change-Id: Iaad7b53d44338e5dd81dc2202f23bdcb715af804
2020-10-03 07:19:48 +00:00
Alexander Couzens bf95f0fb2e ns2: refactor ns2_prim_status_ind()
Replace parameters nsi + nsei with a single nse pointer.

Change-Id: I35f6381110ba7ba1e013f21120e971362bdff55b
2020-10-03 07:17:54 +00:00
Alexander Couzens 477ffb0e72 ns2: parse the return code of gprs_ns2_ip_bind
Fixes a crash when the bind fails.

Change-Id: I96c8e871a350f8f7b9ba2450bb37b90b535f42e2
2020-10-01 19:33:00 +02:00
Alexander Couzens 772ca6195e ns2: fix a msg leak when receiving REJECTED messages
Change-Id: I7edc53c29c3dd09c395a275ceb8648b8eb19c06c
2020-09-26 19:58:50 +00:00
Daniel Willmann 4fb27a80d2 gprs_ns2: Make reason const
Change-Id: Ia0db18703d9fd137a5c5fe4474e2d76868a9af9d
2020-09-25 15:39:46 +02:00
Alexander Couzens 1301012837 ns2: refactor handle_nsip_read/handle_nsfrgre_read
Might be more readable.

Change-Id: Ib2dbcae55a8c7a973cfa1123784f509708de7f3b
2020-09-25 09:46:31 +00:00
Alexander Couzens 1f0625f214 ns2: vty: fix behavior of vtyvc_by_nsei when vtyvc isn't found
Fixes the parsing of persistent nsvcs.

Change-Id: I297409f557f17df680ac76018b4202eb99713021
2020-09-25 09:45:24 +00:00
Alexander Couzens ffd49d0757 ns2: ns2_recv_vc: remove unused parameter nsi
Change-Id: I0dbc079e83d37de01a4260442363ed5fdcd51d28
2020-09-25 09:45:24 +00:00
Alexander Couzens 38b19e88bb ns2: refactor nsvc_by_ functions
gprs_ns2_nsvc_by_sockaddr_nsei is doing the lookup within a NSE.
gprs_ns2_nsvc_by_sockaddr_bind is doing the lookup within a bind.
Make both function look similiar and take similiar arguments.

Change-Id: Ia499fc279013668abe7348e578a0768f7d16faf9
2020-09-25 09:45:24 +00:00
Alexander Couzens c1cd333072 ns2: check the specific bit of NS SDU Control bits
Change-Id: I9632abe70585cb7aff2602590453d903dd88b48a
2020-09-25 09:45:24 +00:00
Alexander Couzens c82c40aa53 ns2: vty: add missing docs for IPv6 address
Change-Id: I0ac04e1352ceadb7b787bcb3358c70e5bfd7c65b
2020-09-24 23:32:18 +00:00
Alexander Couzens 89acdef892 ns2: remove bssgp specific msgb->cb parts
There shouldn't be any knowledge of the upper layer in the NS layer.
The PCU / SGSN / gbproxy have to add the pointer when parsing the primitives.

Change-Id: Id7edb8feb96436ba170383fc62d43ceb16955d53
2020-09-25 01:06:36 +02:00
Alexander Couzens 495b4a7cdb gb/gprs_bssgb: ensure the fc timer has been stopped when freeing bssgp_bvc
Change-Id: Id03ebef31bb513e2b3b5bc709a91e9352ebbbc79
2020-09-24 13:52:18 +00:00
Alexander Couzens 6a2c0740b1 gb/gprs_bssgb: check if talloc failed on btsctx->fc
Change-Id: I1cfccc2cb696d9e95f590b99559d0a987031adfe
2020-09-24 15:51:46 +02:00
Harald Welte b40cfdc54b gprs_ns2: Mark gprs_ns2_validate_* as static
They are all called indirectly via gprs_ns2_validate(), so mark them
as static.

Change-Id: I8425ed3da32019b86cf12d3c27132f07d931cf27
2020-09-18 23:14:36 +02:00
Harald Welte 92ad029e1a ns2: Use NULL and not '0' when returning a NULL-Pointer
Change-Id: I9458e6dcf8133fbcfbc89437e58aad049a6d432b
2020-09-18 23:14:36 +02:00
Harald Welte 5bef2cc4bd ns2: Improve/extend doxygen comments for new ns2 implementation
I was reading through the code and noticed many functions not
documented yet, or with incomplete documentation. Change that.

Change-Id: I85a2419604a9fd9ff3c4828a7463e222652f77bf
2020-09-18 23:14:36 +02:00
Harald Welte 7da6ace594 gprs_ns2_sns: Fix compilation on Debian 8
[  198s]     for (unsigned i = 0; i < gss->num_ip6_remote; i++) {
[  198s]     ^
[  198s] gprs_ns2_sns.c: In function 'ns2_sns_st_configured_change':
[  198s] gprs_ns2_sns.c:1053:3: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
[  198s]    for (int i = 0; i < num_v4; i++) {
[  198s]    ^
[  198s] gprs_ns2_sns.c:1067:3: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
[  198s]    for (int i = 0; i < num_v6; i++) {
[  198s]    ^
[  198s] Makefile:535: recipe for target 'gprs_ns2_sns.lo' failed

Change-Id: I4b7c576fcdf9d35f85e00ad076af7c48d5eb34a5
2020-09-18 09:48:05 +02:00
Alexander Couzens 48f6386717 libgb/ns: allow to create NS_ALIVE NSVC
Change-Id: I562c3ac4a8baaa2c97852bbd6a5a10ba1f144004
2020-09-15 13:55:24 +02:00
Alexander Couzens 6a161497cf Gb: add a second NS implementation
Reimplement NS with FSM.

Change-Id: I3525beef205588dfab9d3880a34115f1a2676e48
2020-09-15 11:54:41 +00:00
Alexander Couzens 3b688835b0 gb/common_vty: use void *
As long the filter doesn't look into the nsvc/bvc structs
there is no need to use the type.
Further it allows to use the same code for NS1 and NS2.

Change-Id: I9b9a70f382a94f1d41142060d5db569f9df865ac
2020-09-07 07:50:58 +00:00
Alexander Couzens 83fb686baa gb/gprs_bssgp: remove superfluous whitespace
Change-Id: Ic66f7e640cd473fa2c8473a3e91f57332ae9bf6a
2020-09-06 23:44:02 +00:00
Harald Welte 5c5713e869 Bump version: 1.3.0.173-51974 → 1.4.0
Change-Id: I4fc6dd4f727c8ff5a64865bbb87e1d9feb7c5174
2020-08-13 11:06:36 +02:00
Alexander Couzens 85a8fd3911 Gb/BSSGP: replace hardcoded Tx into NS library by a callback
Add bssgp_ns_send callback() to set the transmission path into the
NS library. This allows to use the Gb implementation with
the old NS and the new upcoming NS implementation.
Users of the old NS implementation don't have to set the callback as
the default is the old NS implementation.

Only users of the new NS implementation need to set the callback and
the callback data.

Change-Id: I3a498e6a0d68b87fed80c64199b22395796761b4
2020-08-04 10:33:09 +00:00
Alexander Couzens 9c86a2ce56 gprs_ns: fix typo in comment
Change-Id: Ie9d8decea18542cb0e1641dcb5fca5e4850910eb
2020-07-28 11:44:55 +02:00
Harald Welte 78af6ba54b gprs_ns: Set sockaddr_in.sin_family for persistent NSVCs
We cannot just set sockaddr_in.sin_addr + sin_port, we also must
initializa sin_family.  The reason this has worked so far is
because we probably always first received a NS packet from the
peer, rather than being the first one to send.

Change-Id: I6cefc2cd5516c7a4c01a2cc040afca454e59dd57
Related: OS#4629
2020-06-26 16:07:15 +00:00
Harald Welte 2d3465fd1c gprs_bssgp: Add bssgp_tx_bvc_reset2()
If a BVC-RESET is sent from SGSN, there must not be a cell ID IE
included.  See "Note 1" of TS 48.018 Section 10.4.12.

Change-Id: I11d4e70d510265b9c09dffccdab10b3f0816715a
2020-06-26 16:07:15 +00:00
Harald Welte a13fb75030 Revert "add osmo_mobile_identity API"
This reverts commit d1ceca9d48, as it
introduces regressions in both osmo-msc and osmo-nitb which have been
causing failing builds for several days now.

Change-Id: I4bd958d0cd2ab4b0c4725e6d114f4404d725fcf7
2020-06-16 09:21:08 +02:00