summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/sigtran/sccp_sap.h4
-rw-r--r--src/sccp_user.c22
2 files changed, 26 insertions, 0 deletions
diff --git a/include/osmocom/sigtran/sccp_sap.h b/include/osmocom/sigtran/sccp_sap.h
index 24d64d9..732df2a 100644
--- a/include/osmocom/sigtran/sccp_sap.h
+++ b/include/osmocom/sigtran/sccp_sap.h
@@ -253,3 +253,7 @@ osmo_sccp_addr_by_name(struct osmo_sccp_addr *dest_addr,
const char *name);
const char *osmo_sccp_name_by_addr(const struct osmo_sccp_addr *addr);
+
+void osmo_sccp_local_addr_by_instance(struct osmo_sccp_addr *dest_addr,
+ const struct osmo_sccp_instance *inst,
+ uint32_t ssn);
diff --git a/src/sccp_user.c b/src/sccp_user.c
index 89a0320..495b6dc 100644
--- a/src/sccp_user.c
+++ b/src/sccp_user.c
@@ -22,6 +22,7 @@
*/
#include <stdbool.h>
+#include <string.h>
#include <osmocom/core/linuxlist.h>
#include <osmocom/core/logging.h>
@@ -30,6 +31,7 @@
#include <osmocom/sigtran/sccp_sap.h>
#include <osmocom/sigtran/mtp_sap.h>
#include <osmocom/sigtran/protocol/mtp.h>
+#include <osmocom/sigtran/sccp_helpers.h>
#include "sccp_internal.h"
#include "xua_internal.h"
@@ -231,6 +233,26 @@ void osmo_sccp_instance_destroy(struct osmo_sccp_instance *inst)
talloc_free(inst);
}
+/*! \brief derive a basic local SCCP-Address from a given SCCP instance.
+ * \param[out] dest_addr pointer to output address memory
+ * \param[in] inst SCCP instance
+ * \param[in] ssn Subsystem Number */
+void osmo_sccp_local_addr_by_instance(struct osmo_sccp_addr *dest_addr,
+ const struct osmo_sccp_instance *inst,
+ uint32_t ssn)
+{
+ struct osmo_ss7_instance *ss7;
+
+ OSMO_ASSERT(dest_addr);
+ OSMO_ASSERT(inst);
+ ss7 = inst->ss7;
+ OSMO_ASSERT(ss7);
+
+ *dest_addr = (struct osmo_sccp_addr){};
+
+ osmo_sccp_make_addr_pc_ssn(dest_addr, ss7->cfg.primary_pc, ssn);
+}
+
/***********************************************************************
* Convenience function for CLIENT
***********************************************************************/