Change in libosmo-sccp[master]: add osmo_sccp_inst_unused_conn_id()

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Fri Mar 15 14:58:01 UTC 2019


Neels Hofmeyr has uploaded this change for review. ( https://gerrit.osmocom.org/13278


Change subject: add osmo_sccp_inst_unused_conn_id()
......................................................................

add osmo_sccp_inst_unused_conn_id()

On incoming connections, sccp_scoc.c assigns a new local reference
(osmo_scu_prim conn_id) to a conn. When creating a new outgoing connection, the
caller needs to provide that.

Allow callers to use the same local reference creation code that is used on
incoming connections.

Change-Id: I6e1b4897f4143b97bf90bfd8d0ae5d50bbd2e1dd
---
M include/osmocom/sigtran/sccp_sap.h
M src/sccp_scoc.c
2 files changed, 25 insertions(+), 4 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmo-sccp refs/changes/78/13278/1

diff --git a/include/osmocom/sigtran/sccp_sap.h b/include/osmocom/sigtran/sccp_sap.h
index f1fdd98..def8459 100644
--- a/include/osmocom/sigtran/sccp_sap.h
+++ b/include/osmocom/sigtran/sccp_sap.h
@@ -250,6 +250,8 @@
 struct osmo_ss7_instance *osmo_sccp_get_ss7(const struct osmo_sccp_instance *sccp);
 struct osmo_sccp_instance *osmo_sccp_get_sccp(const struct osmo_sccp_user *scu);
 
+int osmo_sccp_instance_unused_conn_id(struct osmo_sccp_instance *inst, uint32_t *conn_id);
+
 void osmo_sccp_user_unbind(struct osmo_sccp_user *scu);
 void osmo_sccp_user_set_priv(struct osmo_sccp_user *scu, void *priv);
 void *osmo_sccp_user_get_priv(struct osmo_sccp_user *scu);
diff --git a/src/sccp_scoc.c b/src/sccp_scoc.c
index 6a56692..db3ded7 100644
--- a/src/sccp_scoc.c
+++ b/src/sccp_scoc.c
@@ -47,6 +47,7 @@
  */
 
 #include <string.h>
+#include <errno.h>
 
 #include <osmocom/core/utils.h>
 #include <osmocom/core/linuxlist.h>
@@ -485,14 +486,30 @@
 	return conn;
 }
 
+/* Return a free connection ID (local reference) */
+int osmo_sccp_instance_unused_conn_id(struct osmo_sccp_instance *inst, uint32_t *conn_id)
+{
+	uint32_t id;
+	uint32_t started_at = inst->next_id;
+
+	do {
+		id = inst->next_id++;
+		if (inst->next_id == started_at) {
+			LOGP(DLSCCP, LOGL_ERROR, "No unused local reference available\n");
+			return -ENOSPC;
+		}
+	} while (conn_find_by_id(inst, id));
+
+	*conn_id = id;
+	return 0;
+}
+
 /* Search for next free connection ID (local reference) and allocate conn */
 static struct sccp_connection *conn_create(struct osmo_sccp_instance *inst)
 {
 	uint32_t conn_id;
-
-	do {
-		conn_id = inst->next_id++;
-	} while (conn_find_by_id(inst, conn_id));
+	if (osmo_sccp_instance_unused_conn_id(inst, &conn_id))
+		return NULL;
 
 	return conn_create_id(inst, conn_id);
 }
@@ -1616,6 +1633,8 @@
 		}
 		/* Allocate new connection */
 		conn = conn_create(inst);
+		if (!conn)
+			return;
 		conn->user = scu;
 		conn->incoming = true;
 	} else {

-- 
To view, visit https://gerrit.osmocom.org/13278
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: libosmo-sccp
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I6e1b4897f4143b97bf90bfd8d0ae5d50bbd2e1dd
Gerrit-Change-Number: 13278
Gerrit-PatchSet: 1
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190315/395ee22b/attachment.htm>


More information about the gerrit-log mailing list