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.orgNeels 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>