Hi Neels, from your IRC question today:
when opening a new conn on SCCP, what's the proper
way to get a
conn_id? I want to feed OSMO_SCU_PRIM_N_CONNECT into
osmo_sccp_user_sap_down(), but it seems the caller needs to pick a
conn_id??
Whatever way you can think of to cough up a unique identifer for that connection.
I assumed that libosmo-sccp implicitly picks an unused
local conn
reference, but that's not the case.
Note that in this sentence you're now talking about the "SCCP local
reference", which is something communicated on the wire between two SCCP
providers (implementations). Hence, it is managed inside the
SCCP provider[s] and can be seen in the source local reference /
destination local reference field of the SCCP messages.
That's *not strictly* the SCCP connection identifier which has
significance only across the SCCP User SAP (i.e. between SCCP User and
SCCP Provider on the same system), and which never is visible on any
SCCP message on the wire. It's just an implementation shortcut of the
Osmocom implementation that uses the same identifiers on both sides,
rather than allocating separate ones.
But getting back to your question: If the SCCP provider was to receive
a N-CONNECT.req without some kind of identifier, and simply allocate
one, how would that identifier be communicated back to the user? Those
primitives work asynchronosuly. You'd have to come up with
yet-another-identifier, like a "primitive tag" where that tag then would
be eacho'ed back in the N-CONNECT.resp - and you end up again having to
allocate some unique identifier :P
sccp_scoc.c has conn_create() which seems to pick an
unused id, but
that part is static in a .c file
hnbgw just uses 1:1 the same conn_id from RUA to RANAP
and thus doesn't invent new ones
Now I'm confused. RUA isn't running over SCCP, right?
osmo-bsc goes through its list of
&bsc_gsmnet->subscr_conns to pick an unused id
I can do that in osmo-msc, but it seems to me libosmo-sccp should have common API for
that
The SCCP User SAP is modelled strictly after the ITU specs. Always
imagine yourself in a situation where the SCCP user and SCCP provider
are running in different processes and they don't have access to each
others's state - and all they can exchange are the SCCP User SAP
primitives in some serialized form. While libosmo-sccp doesn't work
like this (so far), we should always keep that in mind and keep the SAP
boundary clean.
As there's no primitive in ITU-T Q.7xx for "allocate me a local
reference", we don't have one :/
I'm not sure what we should do here. If we introduce that kind of SCU
primitive, then the questions is how are they allocated/released? Who
is in charge of that? What kind of object would the SCCP provider use
to keep track of allocated IDs for which there is no connection yet, as
the N-CONNECT.req was not yet received?
The current situation is not great. After all, theoretically there
could be an incoming new SCCP connection for which the provider choses
the same ID that the user at the same time choses for a new outbound
connection -> boom. One could use something like the highest-order bit
to distinguish between user-allocated and provider-allocated
identifiers.
Regards,
Harald
--
- Harald Welte <laforge(a)gnumonks.org>
http://laforge.gnumonks.org/
============================================================================
"Privacy in residential applications is a desirable marketing option."
(ETSI EN 300 175-7 Ch. A6)