pespin has uploaded this change for review.
sigtran: N-DISCONNECT.req: Use proper SCCP-User release reason
Until recently, libosmo-sigtran was incorrectly expecting low-level
wire-format cause in N-DISCONNECT.req. Nowadays it supports specific
reason values in the SCCP-User SAP, so use those instead.
Change-Id: I05de368c1b0a6b89165f2fe6b44211f06b4d5437
Related: OS#2601
---
M TODO-RELEASE
M include/osmocom/msc/sccp_ran.h
M src/libmsc/ran_conn.c
M src/libmsc/ran_peer.c
M src/libmsc/sccp_ran.c
5 files changed, 12 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/02/43802/1
diff --git a/TODO-RELEASE b/TODO-RELEASE
index 0ed7189..b6d61b1 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -7,3 +7,4 @@
# If any interfaces have been added since the last public release: c:r:a + 1.
# If any interfaces have been removed or changed since the last public release: c:r:0.
#library what description / commit summary line
+libosmo-sigtran >2.3.0 OSMO_SCCP_REL_REASON_NSU_*
diff --git a/include/osmocom/msc/sccp_ran.h b/include/osmocom/msc/sccp_ran.h
index a4bd4ca..9e576d2 100644
--- a/include/osmocom/msc/sccp_ran.h
+++ b/include/osmocom/msc/sccp_ran.h
@@ -280,4 +280,4 @@
int sccp_ran_down_l2_co(struct sccp_ran_inst *sri, uint32_t conn_id, struct msgb *l2);
int sccp_ran_down_l2_cl(struct sccp_ran_inst *sri, const struct osmo_sccp_addr *called_addr, struct msgb *l2);
-int sccp_ran_disconnect(struct sccp_ran_inst *ran, uint32_t conn_id, uint32_t cause);
+int sccp_ran_disconnect(struct sccp_ran_inst *ran, uint32_t conn_id, enum osmo_sccp_release_reason_nsu reason);
diff --git a/src/libmsc/ran_conn.c b/src/libmsc/ran_conn.c
index a86b27e..b5696d8 100644
--- a/src/libmsc/ran_conn.c
+++ b/src/libmsc/ran_conn.c
@@ -148,7 +148,9 @@
if (conn->ran_peer) {
/* Todo: pass a useful SCCP cause? */
- sccp_ran_disconnect(conn->ran_peer->sri, conn->sccp_conn_id, 0);
+ sccp_ran_disconnect(conn->ran_peer->sri,
+ conn->sccp_conn_id,
+ OSMO_SCCP_REL_REASON_NSU_DISC_NORMAL);
conn->ran_peer = NULL;
}
diff --git a/src/libmsc/ran_peer.c b/src/libmsc/ran_peer.c
index 1e9b4b6..0423a83 100644
--- a/src/libmsc/ran_peer.c
+++ b/src/libmsc/ran_peer.c
@@ -269,7 +269,7 @@
|| sccp_ran_down_l2_co(rp->sri, conn_id, clear))
LOG_RAN_PEER(rp, LOGL_ERROR, "Cannot sent Clear command\n");
- sccp_ran_disconnect(rp->sri, conn_id, 0);
+ sccp_ran_disconnect(rp->sri, conn_id, OSMO_SCCP_REL_REASON_NSU_DISC_NORMAL);
}
static void ran_peer_st_wait_rx_reset(struct osmo_fsm_inst *fi, uint32_t event, void *data)
@@ -344,7 +344,8 @@
OSMO_ASSERT(ctx);
LOG_RAN_PEER(rp, LOGL_ERROR, "Receiving CO message on RAN peer that has not done a proper RESET yet."
" Disconnecting on incoming message, sending RESET to RAN peer.\n");
- sccp_ran_disconnect(rp->sri, ctx->conn_id, 0);
+ sccp_ran_disconnect(rp->sri, ctx->conn_id,
+ OSMO_SCCP_REL_REASON_NSU_DISC_END_USER_FAILURE);
/* No valid RESET procedure has happened here yet. */
ran_peer_reset(rp);
return;
diff --git a/src/libmsc/sccp_ran.c b/src/libmsc/sccp_ran.c
index bc3d659..46fd196 100644
--- a/src/libmsc/sccp_ran.c
+++ b/src/libmsc/sccp_ran.c
@@ -220,7 +220,8 @@
rc = sri->ran->sccp_ran_ops.up_l2(sri, peer_addr, true, conn_id, oph->msg);
if (rc)
- osmo_sccp_tx_disconn(scu, conn_id, my_addr, SCCP_RETURN_CAUSE_UNQUALIFIED);
+ osmo_sccp_tx_disconn(scu, conn_id, my_addr,
+ OSMO_SCCP_REL_REASON_NSU_CREF_END_USER_ORIGIN);
break;
case OSMO_PRIM(OSMO_SCU_PRIM_N_DATA, PRIM_OP_INDICATION):
@@ -349,7 +350,7 @@
return osmo_sccp_user_sap_down_nofree(sri->scu, &prim->oph);
}
-int sccp_ran_disconnect(struct sccp_ran_inst *sri, uint32_t conn_id, uint32_t cause)
+int sccp_ran_disconnect(struct sccp_ran_inst *sri, uint32_t conn_id, enum osmo_sccp_release_reason_nsu reason)
{
- return osmo_sccp_tx_disconn(sri->scu, conn_id, NULL, cause);
+ return osmo_sccp_tx_disconn(sri->scu, conn_id, NULL, reason);
}
To view, visit change 43802. To unsubscribe, or for help writing mail filters, visit settings.