add public API: osmo_sccp_instance_next_conn_id()
In struct osmo_sccp_instance, we have a next_id, to find an unused SCCP connection ID. This is used for inbound SCCP connections. At the same time, in each of our SCCP client programs, we have a separate mechanism to find a connection ID for outbound connections. See for example bsc_sccp.c: bsc_sccp_inst_next_conn_id() It makes much more sense for callers to use the same osmo_sccp_instance->next_id counter: - Currently the inbound and outbound counters go out of sync: For example, in osmo-bsc, if we have three MS doing a usual Complete Layer 3, osmo-bsc's counter increments by three. If we then have one Handover Required coming back from the MSC, i.e. inbound SCCP connection, the sccp_inst->next_id is behind by three, and will iterate SCCP connections three times before finding an unused id. - Each implementation has to take care to properly wrap the ID in its valid range, e.g. in osmo-bsc: test_id = (test_id + 1) & 0x00FFFFFF; if (OSMO_UNLIKELY(test_id == 0x00FFFFFF)) test_id = 0; Add public API so that callers can benefit from the internal osmo_sccp_instance->next_id and do not need to duplicate the code for staying within the proper range. Change-Id: If59d524fbe1088a59ae1b69908e2d4bf67113439
This commit is contained in:
parent
8bc881f31a
commit
083ea4b1fc
|
@ -339,3 +339,5 @@ int osmo_sccp_addr_ri_cmp(const struct osmo_sccp_addr *a, const struct osmo_sccp
|
|||
int osmo_sccp_gt_cmp(const struct osmo_sccp_gt *a, const struct osmo_sccp_gt *b);
|
||||
|
||||
const char *osmo_sccp_user_name(struct osmo_sccp_user *scu);
|
||||
|
||||
int osmo_sccp_instance_next_conn_id(struct osmo_sccp_instance *sccp);
|
||||
|
|
|
@ -544,7 +544,7 @@ static struct sccp_connection *conn_create_id(struct osmo_sccp_user *user, uint3
|
|||
* \param[in] sccp The SCCP instance to determine a new connection ID for.
|
||||
* \return unused ID on success (range [0x0, 0x00fffffe]) or negative on elapsed max_attempts without an unused id (<0).
|
||||
*/
|
||||
static int osmo_sccp_instance_next_conn_id(struct osmo_sccp_instance *sccp)
|
||||
int osmo_sccp_instance_next_conn_id(struct osmo_sccp_instance *sccp)
|
||||
{
|
||||
int max_attempts = 0x00FFFFFE;
|
||||
|
||||
|
|
Loading…
Reference in New Issue