aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2019-04-20 20:13:31 +0200
committerHarald Welte <laforge@gnumonks.org>2019-04-20 21:13:12 +0200
commit8fa35b840c28fb4f8ef98ac304e78fdc95d61e23 (patch)
tree2c3b5e33d1606393dce5ae2209a5e5b8ea8900f2 /src
parentf60152697008e78ce2a9c98bbcb176a4012cfd69 (diff)
iu_client: Implement transmission of ResetAcknowledge
When receiving an Iu Reset, respond with Iu ResetAcknowledge. Closes: OS#3944 Change-Id: Ia09752983a7e2a952aa144635924edbffd894058
Diffstat (limited to 'src')
-rw-r--r--src/iu_client.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/iu_client.c b/src/iu_client.c
index 4aecfec..92d25f5 100644
--- a/src/iu_client.c
+++ b/src/iu_client.c
@@ -603,8 +603,24 @@ static void cn_ranap_handle_co(void *ctx, ranap_message *message)
static int ranap_handle_cl_reset_req(void *ctx, RANAP_ResetIEs_t *ies)
{
- /* FIXME: send reset response */
- return -1;
+ struct osmo_scu_prim *prim = (struct osmo_scu_prim *) ctx;
+ struct osmo_scu_unitdata_param *ud_prim = &prim->u.unitdata;
+ RANAP_GlobalRNC_ID_t *grnc_id = NULL;
+ struct msgb *resp;
+
+ OSMO_ASSERT(prim->oph.primitive == OSMO_SCU_PRIM_N_UNITDATA);
+
+ /* FIXME: verify ies.cN_DomainIndicator */
+
+ if (ies->presenceMask & RESETIES_RANAP_GLOBALRNC_ID_PRESENT)
+ grnc_id = &ies->globalRNC_ID;
+
+ /* send reset response */
+ resp = ranap_new_msg_reset_ack(ies->cN_DomainIndicator, grnc_id);
+ if (!resp)
+ return -ENOMEM;
+ resp->l2h = resp->data;
+ return osmo_sccp_tx_unitdata_msg(g_scu, &g_local_sccp_addr, &ud_prim->calling_addr, resp);
}
static int ranap_handle_cl_err_ind(void *ctx, RANAP_ErrorIndicationIEs_t *ies)
@@ -795,7 +811,7 @@ static int sccp_sap_up(struct osmo_prim_hdr *oph, void *_scu)
/* connection-less data received */
LOGPIU(LOGL_DEBUG, "N-UNITDATA.ind(%s)\n",
osmo_hexdump(msgb_l2(oph->msg), msgb_l2len(oph->msg)));
- rc = ranap_cn_rx_cl(cn_ranap_handle_cl, scu, msgb_l2(oph->msg), msgb_l2len(oph->msg));
+ rc = ranap_cn_rx_cl(cn_ranap_handle_cl, prim, msgb_l2(oph->msg), msgb_l2len(oph->msg));
break;
default:
rc = -1;