properly resolve the cnlink from SUA signalling link
diff --git a/src/hnbgw_cn.c b/src/hnbgw_cn.c
index f94a198..5c4a77a 100644
--- a/src/hnbgw_cn.c
+++ b/src/hnbgw_cn.c
@@ -250,7 +250,7 @@
return handle_cn_ranap(cnlink, msgb_l2(oph->msg), msgb_l2len(oph->msg));
}
-static int handle_cn_conn_conf(struct hnbgw_cnlink *cnlink,
+static int handle_cn_conn_conf(void *slink,
const struct osmo_scu_connect_param *param,
struct osmo_prim_hdr *oph)
{
@@ -261,11 +261,12 @@
return 0;
}
-static int handle_cn_data_ind(struct hnbgw_cnlink *cnlink,
+static int handle_cn_data_ind(void *slink,
const struct osmo_scu_data_param *param,
struct osmo_prim_hdr *oph)
{
struct hnbgw_context_map *map;
+ struct hnbgw_cnlink *cnlink = osmo_sua_link_get_user_priv(slink);
/* connection-oriented data is always passed transparently
* towards the specific HNB, via a RUA connection identified by
@@ -281,11 +282,12 @@
msgb_l2(oph->msg), msgb_l2len(oph->msg));
}
-static int handle_cn_disc_ind(struct hnbgw_cnlink *cnlink,
+static int handle_cn_disc_ind(void *slink,
const struct osmo_scu_disconn_param *param,
struct osmo_prim_hdr *oph)
{
struct hnbgw_context_map *map;
+ struct hnbgw_cnlink *cnlink = osmo_sua_link_get_user_priv(slink);
RUA_Cause_t rua_cause = {
.present = RUA_Cause_PR_NOTHING,
@@ -350,7 +352,7 @@
sccp_make_addr_pc_ssn(&cnlink->local_addr, 2, OSMO_SCCP_SSN_RANAP);
sccp_make_addr_pc_ssn(&cnlink->remote_addr, 1, OSMO_SCCP_SSN_RANAP);
- cnlink->sua_user = osmo_sua_user_create(cnlink, sccp_sap_up);
+ cnlink->sua_user = osmo_sua_user_create(cnlink, sccp_sap_up, cnlink);
if (!cnlink->sua_user) {
LOGP(DMAIN, LOGL_ERROR, "Failed to init SUA\n");
goto out_free;
diff --git a/src/tests/dummy_cn_sua.c b/src/tests/dummy_cn_sua.c
index 6d8098a..9e9b98c 100644
--- a/src/tests/dummy_cn_sua.c
+++ b/src/tests/dummy_cn_sua.c
@@ -251,7 +251,7 @@
test_common_init();
- user = osmo_sua_user_create(ctx, sccp_sap_up);
+ user = osmo_sua_user_create(ctx, sccp_sap_up, ctx);
rc = osmo_sua_server_listen(user, "127.0.0.1", 14001);
if (rc < 0) {