Commit Graph

3743 Commits

Author SHA1 Message Date
Oliver Smith 55934c4754 tests/*: fix control reaches end of non-void func
Prepare to set -std=gnu89 in a future commit, which will cause gcc warn
about "control reaches end of non-void function" in main().

Change-Id: I7c33cac30e5859060f083813d8433011f5eaf0d0
2021-01-21 12:13:42 +00:00
Harald Welte b3d4778efb Revert "gprs_ns2_vc_fsm: check NSEI match the NSE"
This reverts commit 842599ca62.
Closes: OS#4965

Change-Id: I96882961e179bb63e3f4095571135244148dde20
2021-01-21 12:48:46 +01:00
Harald Welte 43cb90ff5d Revert "gprs_ns2_vc_fsm: check NSVCI match the NSE"
This reverts commit 9c1e04e580.
Related: OS#4965

Change-Id: Ic26e6ee8c225266dc31850e38976460cb0e81ebd
2021-01-21 12:46:59 +01:00
Harald Welte 2846ee2624 gprs_ns2_test: Fix compilation on Debian 8
[  352s] gb/gprs_ns2_test.c: In function 'test_block_unblock_nsvc':
[  352s] gb/gprs_ns2_test.c:200:2: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
[  352s]   for (int i=0; i<2; i++) {
[  352s]   ^
[  352s] gb/gprs_ns2_test.c:200:2: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code

Change-Id: I72310886bef4db635078b75715c9d98ee45391cc
2021-01-21 10:23:20 +01:00
Harald Welte 8d6ca6933f logging_vty: Fix saving of "logging print file .. last"
Back in 2018 in I393907b3c9e0cc1145e102328adad0a83ee13a9f Neels
introduced "last" as an optional flag to log the file/line number at the
end of the line, rather than at the end of the header.  It seems nobody
has been usingi this feature, or at least never tried to save a related
config file, as there was no code whatsoever that would ever save this
optional "last" flag.

Change-Id: I7b6245256aecc425722242aaabc154ac58ba27a0
2021-01-21 10:23:19 +01:00
Alexander Couzens 9c1e04e580 gprs_ns2_vc_fsm: check NSVCI match the NSE
The NSVCI must match the PDUs. The only exception is a RESET with
dialect ipaccess. However those will be handled later.

Change-Id: I8518bdb03e9e33b04b77a2a346d04c5d29544a6c
2021-01-20 17:50:55 +01:00
Alexander Couzens 842599ca62 gprs_ns2_vc_fsm: check NSEI match the NSE
The NSE must match the PDUs. The only exception is a RESET with
dialect ipaccess. However those will be handled later.

Change-Id: Ic8fc49d850490feb0ff69171a6b0881ae8696c0b
2021-01-20 17:47:10 +01:00
Harald Welte f294974e05 ns2: Unify logging context via log macros
Let's avoid open-coding the printing of log context and rather rely on
log macros to prefix each log line with the relevant context.  This
helps log readability, log post processing whether by grep or more
sophisticated tools.

Change-Id: I946c0e77686d91efc5afb62031e1ac1033a9a586
2021-01-20 16:42:33 +00:00
Alexander Couzens 718e37e5cc gprs_ns2_message: remove wrong comment
It's a leftover from converting NS1 -> NS2 code

Change-Id: I934c7905f8396e74bb1f14d68097c03463816720
2021-01-20 16:42:33 +00:00
Philipp Maier 2b11fa9b3e gprs_bssgp_rim: fix bug in dub_tlvp_header()
When the length field is written the function writes the lower and the
higher half of the length at the same position, so the higher half is
overwritten with the lower half, this is wrong.

Change-Id: I3cce0b2796793554a421fd3ce8e749c52d22eaea
Related: CID#216670
Related: SYS#5103
2021-01-20 16:10:18 +00:00
Philipp Maier 836c6dac65 gprs_bssgp_rim: Return with EOPNOTSUPP on unsupported containers
The current version of libosmocore only supports NACC related RIM
application containers. If the parser detects a different application
container it returns with EINVAL. Unfortunately this means that the
caller can not distinguish if there is a lack of support or a real
parsing error.

Change-Id: Ib5ada3554c04259764352888cf95bc4460cb2a54
Related: SYS#5103
2021-01-20 16:09:00 +00:00
Alexander Couzens 191c2d7de9 gprs_ns2_vc_fsm: fix transitions for ALIVE state
Alive can never reach RESET. However ALIVE -> ALIVE is allowed.

Change-Id: Ic414d7ca96b1ec6db1665cd4c072c7ebbee787f1
2021-01-20 14:59:28 +00:00
Harald Welte 1262c4f18e ns2: Properly indent VTY output
If multiple objects are printed in the VTY, only the first line of each
object should be on the first character of the line, all others should
be indented.  With  this patch the "snow ns entities" output becomes
much more readable:

OsmoGbProxy> show ns entities
NSEI 00102: UDP, DEAD
 FSM Instance Name: 'GPRS-NS2-SNS-BSS(NSE00102-SNS)[0x6120000018a0]', ID: 'NSE00102-SNS'
  Log-Level: 'DEBUG', State: 'SIZE'
  Timer: 1
 Maximum number of remote  NS-VCs: 8, IPv4 Endpoints: 4, IPv6 Endpoints: 0
 NSVCI none: UNCONFIGURED DYNAMIC data_weight=1 sig_weight=1 udp)[127.0.0.1]:23000<>[127.0.0.11]:8888
NSEI 00101: UDP, DEAD
 FSM Instance Name: 'GPRS-NS2-SNS-BSS(NSE00101-SNS)[0x6120000015a0]', ID: 'NSE00101-SNS'
  Log-Level: 'DEBUG', State: 'SIZE'
  Timer: 1
 Maximum number of remote  NS-VCs: 8, IPv4 Endpoints: 4, IPv6 Endpoints: 0
 NSVCI none: UNCONFIGURED DYNAMIC data_weight=1 sig_weight=1 udp)[127.0.0.1]:23000<>[127.0.0.10]:7777

Change-Id: Id1b4c80a6caef410076a68b4301adaa01ba7e57a
2021-01-20 14:59:03 +00:00
Harald Welte cec4bbed73 vty/fsm_vty: Add vty_out_fsm2() + vty_out_fsm_inst2() with prefix
Callers other than "show fsm" / "show fsm-instances" may want to
indent the output.

Change-Id: I10e01ef91116369868cdb878a99634c8681728af
2021-01-20 14:59:03 +00:00
Alexander Couzens 273f063f94 gprs_ns2_vc_fsm: in RESET accept RESET as ACK
When both side sends RESET at the same time 48.016

Change-Id: I49d2a4f257f45b7bc4f0a7a6c5b8381071893686
2021-01-20 13:11:26 +01:00
Alexander Couzens ea01bf2b29 gprs_ns2_vc_fsm: ensure all state is resetted via force_unconf
Change-Id: I240225ce82fa27dfcb5b4b8e2981bb4d8cc4cd70
2021-01-20 13:04:33 +01:00
Alexander Couzens f577543887 gprs_ns2_vc_fsm: rename all event to match RX_ or REQ_
Similiar to the BSSGP layer prefix events with RX if it's an received PDU
or REQ if it's a request from the code.

Change-Id: I341fa28fb671d439c050d985c88ece1521430a99
2021-01-19 20:19:08 +01:00
Alexander Couzens 856b94cd7b gprs_ns2: correct handle BLOCK message on initator
A BLOCK message can be received when waiting for a UNBLOCK message
in state BLOCK

Related: SYS#5208
Change-Id: Ie7b34b3ef04aa28304143191222324e1a3786cb2
2021-01-19 20:18:49 +01:00
Alexander Couzens 47afc424c3 gprs_ns2: implement BLOCK/UNBLOCK of a NSVC by vty
The vty should be able to block or unblock a specific NSVC.
Further more this case is special for the UNITDATA as those
can be still received until the other side response to the BLOCK PDU.

Related: OS#4939
Change-Id: Ic0ce3c5fabc8644cc1ee71a8f6dd783fadf7b84d
2021-01-19 19:42:03 +01:00
Alexander Couzens fd96dc5343 osmo-ns-dummy: don't leak primitive messages
The message in the primitive must be freed by the user

Change-Id: I2a7b19f019485c7b1f15baf20b62edc19b663415
2021-01-19 19:33:41 +01:00
Alexander Couzens ea37724b3c gprs_ns2: allow to use free_vc() with NULL
Usually talloc_free() and other free functions in osmocom allows
to be called with NULL which is then ignored.

Change-Id: If7b0c6916a29d4611d0a40c388414076eb83e6b5
2021-01-19 19:33:41 +01:00
Alexander Couzens 55bc86931e gprs_ns2: add assert on most bind calls
Add a OSMO_ASSERT to all bind calls which doesn't
check if the bind is from the expected type.
The only exception is rx and tx functions (hot path).

Change-Id: Ia4f8932263c60618c7f0dfc32d50ba5a8d57602b
2021-01-19 19:33:41 +01:00
Philipp Maier 7741bc320c gprs_bssgp: add utilities to send and parse BSSGP rim PDUs
At the moment libosmogb offers no convinient way to send RIM PDUs. Also
parsing an incoming RIM messages into destination, source routing
info and RIM container is not available.

Change-Id: I18134fd9938040d2facb6beee3732628b167ce8c
Related: SYS#5103
2021-01-19 18:04:13 +01:00
Alexander Couzens aca31b8b2d test: gprs_ns2: free the nsi after each test
Change-Id: I700da48d7afe6b1a81484a0725faf0c56073446d
2021-01-19 15:06:35 +00:00
Alexander Couzens af5bfebcf3 test: gprs_ns2: replace free_bind() with clear_pdus()
free_bind() should free up all driver specific state but NOT
the bind itself. As the only thing left is clearing the pdus
rename the function to it.

Change-Id: Iac506734c93aca8be045ac13788d07d1bdc78eb3
2021-01-19 15:06:35 +00:00
Philipp Maier 7450f77f57 bssgp_rim: move bssgp_parse_rim_ri and bssgp_create_rim_ri to gprs_bssgp_rim
The function bssgp_parse_rim_ri() and bssgp_create_rim_ri() are located
in gprs_bssgp.c, since there is now a gprs_bssgp_rim.c module it makes
more sense to put them there. Also adjust the code a bit so that its
more intuitive to read.

Change-Id: Icd667f41d5735de56cd9fb257670337c679dd258
Related: SYS#5103
2021-01-18 21:11:44 +01:00
Philipp Maier 9828d28fc3 bssgp_rim: add encoder/decoder for NACC related RIM containers
BSSGP RIM uses a number of nested containers to signal RIM application
specific payload information in a generic way. Lets add the container
structurs required for NACC.

Depends: libosmocore If48f412c32e8e5a3e604a78d12b74787a4786374
Change-Id: Ibbc7fd67658e3040c12abb5706fe9d1f31894352
Related: SYS#5103
2021-01-18 21:11:44 +01:00
Harald Welte 3221f878ee ns2: delay NS_AFF_CAUSE_RECOVERY until NS-VC for data + sig are unblocked
Right now we end up in situations where only a NS-VC for data (BVCI != 0)
becomes unblocked, but the BSSGP and/or user application code is
notified that the NSE has recovered.

In the case of osmo-gbproxy, this will trigger a BVC-RESET on the
BVCI=0, but that obviously only works if the sig_weight > 0...

Closes: OS#4956
Change-Id: I933ee3969c052394d61ec6cf8c7c21d17957d9ab
2021-01-18 16:11:33 +01:00
Harald Welte 603f404e41 gprs_ns2: Give NS-VC FSMs a proper name/identifier
Log output without a proper identifier is mostly useless.

Change-Id: Id9d5b0684584d03685900c6298fe70246793de14
Closes: OS#4876
2021-01-18 14:07:48 +00:00
Harald Welte 509047ba5d gprs_ns2_fr: reduce duplication between gprs_ns2_fr_connect / connect2
gprs_sn2_fr_connect2() is the same as gprs_ns2_fr_connect() with
the lookup-and-create-on-demand of the NSE first.

Rather than copy+paste, they should simply invoke each other.

Change-Id: If835bf138f213e7f58205018e7efe3ecb772c624
2021-01-18 14:07:48 +00:00
Alexander Couzens e19b7966e2 test: gprs_ns2: don't leak the talloc context
Makes the address sanitizer happy

Change-Id: Ibf926d8db88cdb403d29de5e666dfb71eefc7b72
2021-01-18 10:47:47 +01:00
Alexander Couzens 5443ff8af3 gprs_ns2_vc_fsm: fix spaces and remove wrong comment
Change-Id: I52799d8ce8244fae7512a6e14a3cf2408a218c2d
2021-01-18 10:47:47 +01:00
Alexander Couzens d1cd650dd8 gprs_ns2: flag then NSE as dead in nse_free()
The transfer cap call in ns2_prim_status_ind() asserts if
NSE is in an invalid state (nse is either alive or has NSVCS).

Change-Id: I535b3e5dd7240d19dd685652173775b250f5cc2d
2021-01-18 10:47:47 +01:00
Alexander Couzens 7a7b20b770 gprs_ns2_sns: clear local and remote entries when SNS failed
The local and remote entries should be cleared on SNS Size.
Further it can be cleared when SNS failed (e.g. all NSVC become dead)
so VTY doesn't show old entries before entering SNS Size.

Related: OS#4949
Change-Id: Ie4db81acdd5f8ddf1a1f5dc7645d1144545d9c73
2021-01-18 10:47:33 +01:00
Alexander Couzens a14b9d3089 gprs_ns2: when calling nsvc_force_unconf for a dynamic NSE drop the NSE.
The vty command is used for test cases to reset NSE state.
So dynamic NSE shouldn't present.

Related: SYS#5208
Change-Id: I0a4f35c974c8c3b79c48f2f56170722c95254332
2021-01-18 10:47:26 +01:00
Alexander Couzens c4b746284f gprs_ns2_vc: answer UNBLOCK on unblocked nsvc
48.016 7.2: says an UNBLOCK pdu should be answered with UNBLOCK_ACK on
already unblocked NSVC

Related: SYS#5208
Change-Id: Ic92e99b2607d1e54ecb4668667065502a55a2ce0
2021-01-17 16:11:36 +01:00
Alexander Couzens 03f88d910e osmo-ns-dummy: allow to create dynamic NSEs
Without setting the flag the osmo-ns-dummy won't create
any dynamic NSEs.
This flag will be removed in a future release but for now
it will be included.

Related: SYS#5208
Change-Id: I196cc454b5d7bc53848f73596a2f92730b78922b
2021-01-17 16:11:36 +01:00
Alexander Couzens 05ac4e52b9 gprs_ns2: check if persistent nsei or nsvc exists when creating dynamic NSE
When receiving a NS Reset over an unknown NSVC the NS code would create
a dynamic NSE. If the NSEI or NSVCI is already configured to a
persistant NSE/NSVC the packet should be ignored.

Related: SYS#5208
Change-Id: I855911e7d364f2e5b08ea05857747aa63fcf1cd3
2021-01-17 16:11:36 +01:00
Daniel Willmann 89a00f352d ns2: Fix memory leak in IP-SNS
Don't allocate msg twice - it's not nice.

Change-Id: I3fa0076eb480a7bcadb74cc86760dc29b77ac600
Related: OS#4874
2021-01-17 14:20:28 +01:00
Daniel Willmann cf8371ad4d Refactor ns2_nsvc_create_ip*
Move code common in ipv4/6 into a separate function and call that
function.

Change-Id: I076d53bee2e67e1cb3ad6ee5cd05c63ebe3359fb
Related: OS#4948
2021-01-17 08:32:51 +01:00
Daniel Willmann bb8990582f ns2: Add sanity check
Prevent memory corruption or segfaults by asserting that NSE and bind
link layer match. A mismatch should never happen and might cause the
bind to access invalid memory when sending because nsvc->priv doesn't
match what it expects.

Change-Id: I7ca4cd1c5dac8b5e44ffc4825b9373b2d04911ab
Related: OS#4948
2021-01-16 19:47:32 +01:00
Daniel Willmann 967e2c1868 NS2: Fix bind selection of SNS NSVCs
The SNS code ignored the link type of the bind and just bound to every
bind it could find. This resulted in a segfault when an SNS NSVC tries
to send its UDP messages though frame relay.

Fixes: OS#4948
Change-Id: Ibb832a39876362d094cce635192f7b4f84dc2b10
2021-01-14 18:09:44 +00:00
Vadim Yanitskiy 2ecb71bcd4 fixup: configure.ac: fix: do not define HAVE_NEON unconditionally
Instead of removing AC_DEFINE(), I should have used AS_IF().

Change-Id: I20e256bd6fdb0256c95ab7073e07b7437af6a12f
Fixes: I761a7afaeda9d232ac26edff47949e911f8f1f0c
2021-01-14 18:57:52 +01:00
Pau Espin dec7b8c238 ctrl: ports.h: Add OSMO_CTRL_PORT_BSC_NEIGH
Hence 4248 becomes the well-known port for osmo-bsc's Neighbor
Resolution Service.

Related: SYS#4909
Change-Id: Ic77a8cff022c2f939a684ebd1f9f62a82e0de510
2021-01-13 14:48:53 +01:00
Harald Welte efdd641c29 tlv_parser: Fix various out-of-bounds accesses
The libosmocore TLV parser had a number of insufficient bounds checks
leading to reads beyond the end of the respective input buffer.

This patch
* adds proper out-of-bounds checks to all TLV types
* simplifies some of the existing checks
* introduces test cases to test all the corner cases
  where either TAG, or length, or value are not fully contained
  in the input buffer.

Thanks to Ilja Van Sprundel for reporting these problems.

Change-Id: I98b02c914c9e3ecf56050af846292aa6979d7508
2021-01-12 21:11:20 +01:00
Pau Espin ca33a71ca8 Intoduce Packet Switch CGI
This structure is needed in order to identify a given cell within the
BSS during RIM transactions.
The naming was made up by myself since I couldn't find any naming
reference for this kind of data (RAI + CI).
Since LAI + CI = CGI, then RAI + CI = CGI-PS

osmo_rai_name2 family of functions get a "2" suffix due to already
existing functions handling struct struct gprs_ra_id in gsm48.h

Change-Id: If48f412c32e8e5a3e604a78d12b74787a4786374
2021-01-11 14:22:21 +00:00
Vadim Yanitskiy e2ad6ebb7a gprs_bssgp: abuse gsm48_encode_ra() to encode TAC
Both LAC and TAC take 2 octets and follow MCC/MNC fields on the wire.
We abuse gsm48_encode_ra() for encoding of MCC/MNC, but it can also
be abused to encode TAC in bssgp_create_rim_ri().  There is no need
to encode '0000'O and then override it with osmo_store16be().

Change-Id: I986552aa52cf38b1c5290d2e5cd3ff2d1c36a4e5
2021-01-11 14:21:21 +00:00
Harald Welte 5d797c4264 Revert "pkgconfig: link to mnl if available"
This reverts commit 2253224b33.

Reason for revert: Causes massive build failure for osmo-pcu and osmo-sgsn on all the distributions/architectures we build for

Change-Id: I6dbe4507701bee013b29dcc26f32c4e1a3c23613
Closes: OS#4936
2021-01-08 10:14:02 +00:00
Daniel Willmann 09bea0152a bssgp_bvc_fsm: Handle block request from application correctly
This is no event from an incoming message so rx is NULL, and we can't send a
status PDU. Also blocking the signalling BVC is not allowed (unblocking it is already
forbidden).

Change-Id: I3e384b71d57e939efc1596ac1d92380ed5eb916d
Fixes: CID#215716
2021-01-07 18:57:57 +00:00
Daniel Willmann 210774f60b ns2_frgre: Fix missing break statement for recv from IPV6
Change-Id: I549277483fee55f390e0b5ae1dafec6f2d68eae7
Fixes: CID#215836
2021-01-07 18:57:28 +00:00