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(a)sysmocom.de>
Gerrit-MessageType: newchange