From d25ba11eef6400ebef2e18fcb7def1df87e31d92 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Thu, 14 May 2020 15:14:00 +0200 Subject: add osmo_sccp_user_find() as public API To allow osmo-bsc to add more than one MSC peer on a single SCCP instance, it must add a local SCCP user only once per SCCP instance. The first configured MSC adds a local user, all subsequent MSC should use the same local SCCP user. So, it is most convenient to provide a public function to return such user if it exists. Add as thin wrapper instead of renaming and moving the internal sccp_user_find(): to keep the patch smaller, and to match the way osmo_sccp_user_bind_pc() is a 1:1 wrapper for sccp_user_bind_pc(). Related: OS#3682 Change-Id: I9ecbab16b45268f626950303d6ff8296dd6acda0 --- include/osmocom/sigtran/sccp_sap.h | 2 ++ src/sccp_user.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/osmocom/sigtran/sccp_sap.h b/include/osmocom/sigtran/sccp_sap.h index 9d285eb..e012635 100644 --- a/include/osmocom/sigtran/sccp_sap.h +++ b/include/osmocom/sigtran/sccp_sap.h @@ -261,6 +261,8 @@ osmo_sccp_user_bind_pc(struct osmo_sccp_instance *inst, const char *name, struct osmo_sccp_user * osmo_sccp_user_bind(struct osmo_sccp_instance *inst, const char *name, osmo_prim_cb prim_cb, uint16_t ssn); +struct osmo_sccp_user * +osmo_sccp_user_find(struct osmo_sccp_instance *inst, uint16_t ssn, uint32_t pc); int osmo_sccp_user_sap_down(struct osmo_sccp_user *scu, struct osmo_prim_hdr *oph); int osmo_sccp_user_sap_down_nofree(struct osmo_sccp_user *scu, struct osmo_prim_hdr *oph); diff --git a/src/sccp_user.c b/src/sccp_user.c index d85fc1d..a36ac93 100644 --- a/src/sccp_user.c +++ b/src/sccp_user.c @@ -39,6 +39,8 @@ #include "xua_internal.h" /*! \brief Find a SCCP User registered for given PC+SSN or SSN only + * First search all users with a valid PC for a full PC+SSN match. + * If no such match was found, search all users with an invalid PC for an SSN-only match. * \param[in] inst SCCP Instance in which to search * \param[in] ssn Sub-System Number to search for * \param[in] pc Point Code to search for @@ -63,6 +65,20 @@ sccp_user_find(struct osmo_sccp_instance *inst, uint16_t ssn, uint32_t pc) return NULL; } +/*! Find a SCCP User registered for given PC+SSN or SSN only. + * First search all users with a valid PC for a full PC+SSN match. + * If no match was found, search all users with an invalid PC for an SSN-only match. + * \param[in] inst SCCP Instance in which to search. + * \param[in] ssn Sub-System Number to search for. + * \param[in] pc Point Code to search for. + * \returns Matching SCCP User; NULL if none found. + */ +struct osmo_sccp_user * +osmo_sccp_user_find(struct osmo_sccp_instance *inst, uint16_t ssn, uint32_t pc) +{ + return sccp_user_find(inst, ssn, pc); +} + /*! \brief Bind a SCCP User to a given Point Code * \param[in] inst SCCP Instance * \param[in] name human-readable name -- cgit v1.2.3