Commit Graph

45 Commits

Author SHA1 Message Date
Pau Espin f320ac5841 audio: Introduce SAPI v1 with unordered RFCI support
This commit introduces support for the new llsk_audio SAPI v1.
This new version is almost the same as v0, with the exception that
primitive <REQUEST,HNB_AUDIO_PRIM_CONN_ESTABLISH> wins an extra field
appended at the end:
"""
uint8_t rfci[HNB_MAX_RFCIS]; /* values range 6 bits */
"""

This allows lowerlayers to provide an unordered array of RFCIs, which
was seen may happen under some conditions. For instance:
"""
rfci[HNB_MAX_RFCIS] = { 2, 3, 1};
[0] RFCI 2
[1] RFCI 3
[2] RFCI 1
"""

OsmoHNodeB still supports v0 if the lowerlayer asks for it, and will
continue having the exact behavior as before in this case (using
position in the array as RFCI). Hence, no compatibility breakage occurs
in this patch. New clients, on the other hand, can provide the extra
information by announcing V1 support during version negotiation at
startup.

Related: SYS#5516
Change-Id: I860d18b80c1041bf63a1570d435e0568c0f6b01b
2022-06-08 18:38:37 +02:00
Pau Espin 780def0114 llsk: Validate received SAPI versions at startup
Change-Id: I172abfee3bfadb383aa6bce6fe76306291c7cd7f
2022-06-08 18:06:09 +02:00
Pau Espin 0843c8ae6e hnb: move llsk fields inside substruct
More fields will be added, let's better organize them this way.

Change-Id: Idfe644a7c2eccd94b602816a86e38b56264141af
2022-06-08 18:03:38 +02:00
Pau Espin fc660017e8 llsk: Fix typo in log message
Change-Id: I3c8be85e56df23cd68e58f0112238647add3d97f
2022-06-08 18:03:35 +02:00
Pau Espin 3dffff3147 rtp: Update code to libosmogsm IuUP API changes
NOTICE: This commit implies an API change when using libosmogsm.
However, the previous API was never available in any libosmogsm release,
and only available in both libosmogsm and osmo-hnodeb master, so we are
only breaking compatibility between different master versions, which is
acceptable.

Related: SYS#5969
Change-Id: Ia26a945147d68511bb1750d51ed91909e48b4139
2022-05-25 18:55:09 +02:00
Pau Espin 70b65c55f6 gtp: Fix uninitialized var if no extension flags set in gtp header
The logic was plain wrong, bug introduced while typing initial code.

Closes: Coverity CID#243535
Change-Id: I497667edd0571fff91ab41c8b57bdcf277e5988d
2022-01-07 13:44:31 +01:00
Pau Espin 14cceb5dfb Get rid of libgtp for GTP-U
It doesn't make much sense to pull whole libgtp to implement only the
user plan side of GTP. Let's drop it and add a minimal GTP-U
implementation here.

Related: SYS#5516
Change-Id: I53ad4915aaed3bc7574036e963be10514e370fe2
2021-12-23 15:55:21 +01:00
Pau Espin e4f127f1a3 Add initial support for IuUP RTP based Transport Layer
Use the recently introduced IuUP support in libosmocore to send and receive
proper IuUP over RTP instead of regular RTP.
The LLSK AUDIO primitives are updated to provide required information
back and forth.

Depends: libosmocore.git Change-Id Ibe356fa7b1abaca0091e368db8478e79c09c6cb0
Related: SYS#5516
Change-Id: Ie137809e1f91dfd702853c52be97ca79e8604eab
2021-12-23 15:55:17 +01:00
Pau Espin 272f296cd3 gtp: Fix possible null pointer dereference
Closes: Coverity CID#242771
Change-Id: I412082cc5fa93818d321210c34a2d22c038cb985
2021-12-17 13:45:36 +01:00
Pau Espin 64d8fd6298 llsk_audio: Fix false positive about uninitialized var access
Let's make gcc in Ubuntu 21.10 happy.

Change-Id: If085b0ca0e1d3e7237696eb67cf6301ea84793e0
2021-12-17 13:37:32 +01:00
Pau Espin 3363db5c90 llsk_gtp: Early return if conn alloc fails
Change-Id: Iaf597b76ceb9cce3f27c42625f963f740c8f213e
2021-12-17 13:35:36 +01:00
Pau Espin 381c4cccc5 rtp: Use dynamic Payload Type 96
Change-Id: I6ca83c274200d8fc0fb3d8914e970b05df91f6ea
2021-12-16 13:01:13 +01:00
Pau Espin 7550ba3d05 Update AUDIO and GTP SAPs to support multiple conns per UE
This is needed for instance:
* AUDIO: video calls
* GTP: secondary pdp contexts

For better abstraction, now both AUDIO and GTP conns use unique ID
namespaces, and one ID is used to identify each one. Each conn relate in
turn to a UE since a context_id is passed during connection
establishment.

Related: SYS#5516
Change-Id: Ib3f60d5ba21defe5259c25e2034fc2217c4d93df
2021-12-16 13:01:12 +01:00
Pau Espin ecc76ef69a Fix several Coverity found issues
Closes: CID#242770
Closes: CID#242769
Closes: CID#242767
Change-Id: I6d73a970919889953539fbacc601d679d7ec4113
2021-12-16 12:58:51 +01:00
Pau Espin a7dc04ef26 First implementation of the LLSK gtp SAPI
This first implementation uses libgtp to manage the GTPv1-U socket and
pdp contexts, as a proof of concept to have something working for now.
At a later step, it is expected to drop libgtp and use some adhoc code
to handle GTP-U.

Related: SYS#5516
Change-Id: I5a6f5dfc4e508c92adb35210b4dc576d64353366
2021-12-14 15:47:53 +01:00
Pau Espin b3af382157 First implementation of the LLSK audio SAPI
This first version can send and receive regular RTP, but does not talk IuUP.
Support for IuUP will be added in a future patch. This way we can
already test the whole LLSK<->RTP path.

Change-Id: I9909a7c054ddaabb1bb63d7d06331cc79f642b5d
2021-12-14 12:43:19 +01:00
Pau Espin cd1baf0649 Initial implementation of LowerLayer UD Socket
The LLSK socket is an interface allowing thid-parties to implement and
hook their RLC/MAC/RRC stack to osmo-hnodbe, which takes care of
interconnection with the rest of the RAN and core network (Iuh, RTP,
GTP-U, etc.).

Related: SYS#5516
Change-Id: Icaabb2206d6f141d4fba47dedf71f8ec37e6257d
2021-12-14 12:43:15 +01:00
Pau Espin d8da64bb46 Drop NAS and RANAP code and VTY commands
The higher level bits were used in originally imported hnb-test code in
order to control interaction with the HNBGW over the VTY. This is no
longer needed in osmo-hnodeb, as NAS is in layers above the ones being
handled by an hNodeB.
Regarding RANAP, most of it is going to be handled by the LowerLayer UD
socket peer to be introduced in the future, so we can drop most of it,
as in osmo-hnodeb we'll basically be speaking RUA to the HNBGW and
passing RANAP buffers transparently.
We keep the .c/.h files since some small helpers functions will be
ntroduced later on when adding support for the mentioned LL socket.

Related: SYS#5516
Change-Id: I6aae54734c1c4607beede19169f16bafe35b3a61
2021-11-30 11:02:52 +01:00
Pau Espin 5689081325 hnbap: Improve rx path and implement HnbRegisterReject
The process is shut down if we receive such a message.

Change-Id: Id4656140b7f51b07860dcbeed449ed68c3a9f85a
2021-11-24 21:31:32 +01:00
Pau Espin 807e52a2da Implement initial shutdown + reconnect FSM
The shutdown_fsm doesn't do much right now, but it's included there in
order to allow easy clean up of resources upon Iuh reconnect in the
future, as well as reset the lower layers.

Change-Id: Id35d692218af366843186b0966b62f65bb9eb620
2021-11-24 21:23:45 +01:00
Pau Espin 65489ed7c6 iuh: Improve logging of SCTP notifications
Change-Id: I08842665effec6e70a3c7f6b93ea62c45549d69d
2021-11-24 21:22:42 +01:00
Pau Espin 9828dbed18 Introduce SCTP log category
Change-Id: I2c9cb54958807bd68c04a4c0d3a0f355dd641282
2021-11-24 21:22:42 +01:00
Pau Espin 4310b0d57a Move Iuh code to its own module
The Iuh code will be further extended next to properly support
reconnect, and hnb will also gain proper shutdown support soon.

Change-Id: I6e94210ab06a34b70c61bb074c58d7b0f4ee75de
2021-11-24 21:22:38 +01:00
Pau Espin c40d445506 ranap: Fix compiler warnings passing func callback
Fixes following warning types:
"passing argument 1 of ‘ranap_cn_rx_co’ from incompatible pointer type
[-Wincompatible-pointer-types]"

Change-Id: If80b57a8d36c28dee7db28cb36a88ed41e0a7328
2021-11-02 12:41:14 +01:00
Pau Espin b80125f5c9 hnb.c: Fix memleak in hnb_iuh_read_cb
Port from osmo-iuh.git Change-Id I6ecbce6aab11e1382ff9f71d901e1c6ac145f835.

Change-Id: If5d5d41693e26f485aa5372129dccf0dcfb7fa6c
2021-11-02 12:41:14 +01:00
Pau Espin 72ef4c0cd4 Generate proper rnc_id and plmn in LuRequest
Change-Id: Ib40b5eb96b7cc13c424076a4ca725019514d52af
2021-11-02 12:41:14 +01:00
Pau Espin c475158e0c Configure HNB-Identity over VTY and use it in HnbRegisterRequest
Change-Id: Ida47bbb85b5438a2ec9805005bc2ab834c79b765
2021-11-02 12:41:14 +01:00
Pau Espin e2c17101be Configure CI,LAC,RAC,SAC over VTY and use it in HnbRegisterRequest
Change-Id: I06f21758e361b7d4d7141086d758893bee434e5c
2021-11-02 12:41:14 +01:00
Pau Espin 3423fada07 Configure PLMN over VTY and use it in HnbRegisterRequest
Change-Id: I6d67aa547d5496fe1407744e1dde07d2a41df500
2021-11-02 12:41:14 +01:00
Pau Espin b4cc30ae1d Send HnbRegisterRequest when HnodeB connects on Iuh
Change-Id: I901fd456221a3bdc3f4f95b7fd3b9484c7830f24
2021-11-02 12:41:14 +01:00
Pau Espin feb5d9a1c7 use osmo_stream_cli to manage sctp Iuh conn
Let's use already available functionality to handle the conn for us.
This is specially useful since we gain a connect_cb.

Change-Id: I9d884231577aa47af22cd6319130ca5c9e595d61
2021-11-02 12:41:14 +01:00
Pau Espin 5b86a80193 Use osmocom logging in non-main files
Change-Id: I649b17803aeffd20354aa76dde61094959f08e43
2021-11-02 12:41:14 +01:00
Pau Espin 9b5e3d46d0 hnb: Move wqueue to .iuh, add wrapper to use it
Change-Id: I38498858fc315ad3d57644d7b905f5393f43e884
2021-11-02 12:41:14 +01:00
Pau Espin bf3cb41af5 Set up Iuh conn params through VTY
Change-Id: Id5a17742643e8f02c22228e3055bcc213423a416
2021-11-02 12:41:14 +01:00
Pau Espin 5e3098d56a More work on main.c to add osmocom functionalitites
Change-Id: I61a5ee2e100f79cef7e42dbd981e308597c30900
2021-11-02 12:41:14 +01:00
Pau Espin 50502a77b0 main.c: Fix cap in naming for vty_info.name
It was decided the program name is OsmoHNodeB, and we already use that
one everywhere.

Change-Id: I8ce83aa17ad7dd3ec991e4d7d9cca01dc1bf4681
2021-11-02 12:41:14 +01:00
Pau Espin 24326610a6 Move protocol related code in main.c to related proto files
Change-Id: I771b3d3f61207137477eed2b316a5f670fb79ef2
2021-11-02 12:41:14 +01:00
Pau Espin c1307f75b2 Allocate g_hnb as a pointer, move code to hnb.c/h
Change-Id: I5ec61d2a72d55d182e1498939209b30b6e652467
2021-11-02 12:41:14 +01:00
Pau Espin 8403def059 Move hnbap related code to hnbap.c/h
Change-Id: I8356421169bebe1d411b05b19241ea639dc3f733
2021-11-02 12:41:14 +01:00
Pau Espin 5d269725b6 Move rua related code to rua.c/h
Change-Id: Ibefe952fe1b642cab5c4abe36383a7ebb05f39c3
2021-11-02 12:41:14 +01:00
Pau Espin e98c2ac463 main.c: Drop commented out code
We can always get it back from git history if necessary, let's drop it.

Change-Id: I6ea1e3b8692cc6e162962d2e812eb1342c100251
2021-11-02 12:41:14 +01:00
Pau Espin 8125fd0d95 Move existing vty code to its own vty.c/h file
Change-Id: I88107e9ed03ff8f807b57a3ea0d189fd70864861
2021-11-02 12:41:14 +01:00
Pau Espin 67a3c4a7c6 Import hnb-test from osmo-iuh.git
Import from osmo-iuh.git Change-Id Iba106dcc18e3d429b4b9808610a44ac29b798172,
with minimal renaming of s/hnb_test/hnb/ and required mangling to have
it compile and run.

Change-Id: I36fd4aa5d39222371bd36e9f540b91e36a26de43
2021-11-02 12:41:12 +01:00
Pau Espin 18ac28abd6 configure: link against libsctp
osmo-hnodeb calls sctp_recvmsg directly, which is provided by libsctp.
Hence, we need to depend and link on it.

Change-Id: I793d6fe8601cf9a8dd72bf6884b469204b513c11
2021-11-02 12:40:54 +01:00
Pau Espin 243ccbafd6 Add project skeleton
This commit contains all the relevant project structure to build the
osmo-hnodeb binary, its doc, tests, packaging, etc.

The osmo-hnodeb binary itself is still just an empty main().

Related: SYS#5516
Change-Id: I6ae3215ae4b956689d2adc88db7c3ead5df14f37
2021-10-21 13:48:46 +02:00