[S] Change in osmo-bsc[master]: bscc_sccp: Avoid allocating conn_id 0x00FFFFFF
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/31797 ) Change subject: bscc_sccp: Avoid allocating conn_id 0x00FFFFFF ...................................................................... bscc_sccp: Avoid allocating conn_id 0x00FFFFFF The 0x00FFFFFF source local reference is reserved in M3UA/SCCP, hence avoid allocating a conn_id with that value since later on when reused as a source local reference it would fail to be encoded. Change-Id: I5c62bbfa89140d754edccb4404503cb70d5fde89 --- M src/osmo-bsc/bsc_sccp.c 1 file changed, 28 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/97/31797/1 diff --git a/src/osmo-bsc/bsc_sccp.c b/src/osmo-bsc/bsc_sccp.c index 67834a5..79a6617 100644 --- a/src/osmo-bsc/bsc_sccp.c +++ b/src/osmo-bsc/bsc_sccp.c @@ -31,14 +31,28 @@ static uint32_t next_id = 1; int i; + /* SUA: RFC3868 sec 3.10.4: + * The source reference number is a 4 octet long integer. + * This is allocated by the source SUA instance. + * M3UA/SCCP: ITU-T Q.713 sec 3.3: + * The "source local reference" parameter field is a three-octet field containing a + * reference number which is generated and used by the local node to identify the + * connection section after the connection section is set up. + * The coding "all ones" is reserved for future use. + * Hence, let's simply use 24 bit ids to fit all link types (excluding 0x00ffffff). + */ + /* This looks really suboptimal, but in most cases the static next_id should indicate exactly the next unused * conn_id, and we only iterate all conns once to make super sure that it is not already in use. */ - for (i = 0; i < 0x00FFFFFF; i++) { + for (i = 0; i < 0x00FFFFFE; i++) { struct gsm_subscriber_connection *conn; uint32_t conn_id = next_id; bool conn_id_already_used = false; + next_id = (next_id + 1) & 0x00FFFFFF; + if (next_id == 0x00FFFFFF) + next_id = 0; llist_for_each_entry(conn, &bsc_gsmnet->subscr_conns, entry) { if (conn->sccp.msc && conn->sccp.msc->a.sccp == sccp) { -- To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/31797 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-Change-Id: I5c62bbfa89140d754edccb4404503cb70d5fde89 Gerrit-Change-Number: 31797 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin@sysmocom.de> Gerrit-MessageType: newchange
participants (1)
-
pespin