pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-msc/+/43802?usp=email )
Change subject: sigtran: N-DISCONNECT.req: Use proper SCCP-User release reason ......................................................................
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); }