Attention is currently required from: pespin.
osmith has posted comments on this change by pespin. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/40005?usp=email )
Change subject: ipa: Store ASP IPA SLS into its own field
......................................................................
Patch Set 1: Code-Review+1
--
To view, visit https://gerrit.osmocom.org/c/libosmo-sigtran/+/40005?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment
Gerrit-Project: libosmo-sigtran
Gerrit-Branch: master
Gerrit-Change-Id: I6ec346417ceeabfce9c7b856040be2179c59195e
Gerrit-Change-Number: 40005
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Attention: pespin <pespin(a)sysmocom.de>
Gerrit-Comment-Date: Fri, 11 Apr 2025 08:25:31 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
Attention is currently required from: pespin.
osmith has posted comments on this change by pespin. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/40001?usp=email )
Change subject: ipa: Use pseudo-random number for SLS in TCP-client too
......................................................................
Patch Set 1: Code-Review+2
--
To view, visit https://gerrit.osmocom.org/c/libosmo-sigtran/+/40001?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment
Gerrit-Project: libosmo-sigtran
Gerrit-Branch: master
Gerrit-Change-Id: I837505868b608ac5ed658a7e98bb3eeebe3e852c
Gerrit-Change-Number: 40001
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Attention: pespin <pespin(a)sysmocom.de>
Gerrit-Comment-Date: Fri, 11 Apr 2025 08:16:27 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/40006?usp=email )
Change subject: asp: Rename and clarify asp_id field
......................................................................
asp: Rename and clarify asp_id field
The asp_id (RFC4666 ASP Identifier) can be (and may be) different on
each SGP peer of an ASP. Previously, we were storing in the same field
the value provided by the peer, and using this same value when sending
our own ASP Identifier during ASPUP.
This was not causing a problem since actually we have no real way to set
asp_id_present on our own in ASP mode yet, so no local ASP Identifier is
ever being transmitted.
This patch renames the asp_id field to remote_asp_id, since that's the
meaning it has in almost all places where it is being used.
The only place where it is being used so far, during Tx ASPUP, has been
documented and disabled since in reality the asp_id_present was not set
as mentioned above.
Furthermore, the remote ASP Identifier we receive from the peer ASP is
actually meaningful within a given AS, meaning that if an ASP is part of
several AS, we should be storing 1 remote ASP identifier for each AS it
serves. This is documented in ss7_asp7.h for later
Change-Id: I8e4304099db6fb12cf4b40a5b9a4aa3a83c95fde
---
M src/ss7_asp.h
M src/xua_as_fsm.c
M src/xua_asp_fsm.c
3 files changed, 26 insertions(+), 11 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-sigtran refs/changes/06/40006/1
diff --git a/src/ss7_asp.h b/src/ss7_asp.h
index df2f4c3..7a001e0 100644
--- a/src/ss7_asp.h
+++ b/src/ss7_asp.h
@@ -43,9 +43,15 @@
/*! pre-formatted human readable local/remote socket name */
char *sock_name;
- /* ASP Identifier for ASP-UP + NTFY */
- uint32_t asp_id;
- bool asp_id_present;
+ /* ASP Identifier for ASP-UP + NTFY, as received by the peer.
+ * (In IPA ASPs it's used internally to hold 4-bit SLS).
+ * FIXME: This should actually be stored in a AS-ASP relation, since it
+ * can be different per AS, see RFC4666 3.5.1
+ * "The optional ASP Identifier parameter contains a unique value that
+ * is locally significant among the ASPs that support an AS".
+ */
+ uint32_t remote_asp_id;
+ bool remote_asp_id_present;
/* Layer Manager to which we talk */
const struct osmo_xua_layer_manager *lm;
diff --git a/src/xua_as_fsm.c b/src/xua_as_fsm.c
index 2034659..0493b9b 100644
--- a/src/xua_as_fsm.c
+++ b/src/xua_as_fsm.c
@@ -83,9 +83,9 @@
continue;
/* Optional: ASP Identifier (if sent in ASP-UP) */
- if (asp->asp_id_present) {
+ if (asp->remote_asp_id_present) {
npar->presence |= NOTIFY_PAR_P_ASP_ID;
- npar->asp_id = asp->asp_id;
+ npar->asp_id = asp->remote_asp_id;
} else
npar->presence &= ~NOTIFY_PAR_P_ASP_ID;
@@ -370,8 +370,8 @@
.status_info = M3UA_NOTIFY_I_OT_ALT_ASP_ACT,
};
- if (asp_cmp->asp_id_present)
- npar.asp_id = asp_cmp->asp_id;
+ if (asp_cmp->remote_asp_id_present)
+ npar.asp_id = asp_cmp->remote_asp_id;
for (i = 0; i < ARRAY_SIZE(as->cfg.asps); i++) {
struct osmo_ss7_asp *asp = as->cfg.asps[i];
diff --git a/src/xua_asp_fsm.c b/src/xua_asp_fsm.c
index 2a2681f..d1e8b24 100644
--- a/src/xua_asp_fsm.c
+++ b/src/xua_asp_fsm.c
@@ -215,8 +215,17 @@
/* RFC 3868 Ch. 3.5.1 */
xua->hdr = XUA_HDR(SUA_MSGC_ASPSM, SUA_ASPSM_UP);
/* Optional: ASP ID */
- if (asp->asp_id_present)
- xua_msg_add_u32(xua, SUA_IEI_ASP_ID, asp->asp_id);
+#if 0
+ /* TODO: RFC 4666 3.8.1:
+ * 'The "ASP Identifier Required" error is sent by an SGP in
+ * response to an ASP Up message that does not contain an ASP
+ * Identifier parameter when the SGP requires one. The ASP SHOULD
+ * resend the ASP Up message with an ASP Identifier.' */
+ if (ss7_asp_peer_requires_asp_id(asp)) { /* Maybe configure in VTY "asp" node? */
+ asp_id = /* get a unique id of asp within as, eg. the index in as->asps[] */;
+ xua_msg_add_u32(xua, SUA_IEI_ASP_ID, asp_id);
+ }
+#endif
/* Optional: Info String */
break;
case XUA_ASP_E_ASPSM_ASPUP_ACK:
@@ -455,8 +464,8 @@
asp_id_ie = xua_msg_find_tag(data, SUA_IEI_ASP_ID);
/* Optional ASP Identifier: Store for NTFY */
if (asp_id_ie) {
- asp->asp_id = xua_msg_part_get_u32(asp_id_ie);
- asp->asp_id_present = true;
+ asp->remote_asp_id = xua_msg_part_get_u32(asp_id_ie);
+ asp->remote_asp_id_present = true;
}
/* send ACK */
peer_send(fi, XUA_ASP_E_ASPSM_ASPUP_ACK, NULL);
--
To view, visit https://gerrit.osmocom.org/c/libosmo-sigtran/+/40006?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: libosmo-sigtran
Gerrit-Branch: master
Gerrit-Change-Id: I8e4304099db6fb12cf4b40a5b9a4aa3a83c95fde
Gerrit-Change-Number: 40006
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/40005?usp=email )
Change subject: ipa: Store ASP IPA SLS into its own field
......................................................................
ipa: Store ASP IPA SLS into its own field
Storing the 4-bit SLS into asp_id field is a total hack which just
pollutes the code and makes it more difficult to understand.
Add a new field into ss7_asp to store that information cleanly.
Moreover, asp_id field itself is right now a total mess on its own,
since it is used both for local and remote ASP Identifiers at the same
time. This will be fixed in a follow-up commitset.
Change-Id: I6ec346417ceeabfce9c7b856040be2179c59195e
---
M src/osmo_ss7_asp.c
M src/ss7_asp.h
M src/xua_asp_fsm.c
3 files changed, 30 insertions(+), 28 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-sigtran refs/changes/05/40005/1
diff --git a/src/osmo_ss7_asp.c b/src/osmo_ss7_asp.c
index 7e444b4..bb3c2dd 100644
--- a/src/osmo_ss7_asp.c
+++ b/src/osmo_ss7_asp.c
@@ -851,9 +851,7 @@
msg->dst = asp;
rate_ctr_inc2(asp->ctrg, SS7_ASP_CTR_PKT_RX_TOTAL);
- /* we simply use the lower 4 bits of the asp_id, which is initialized to a pseudo-random value upon
- * connect */
- return ipa_rx_msg(asp, msg, asp->asp_id & 0xf);
+ return ipa_rx_msg(asp, msg, asp->ipa.sls);
}
/* netif code tells us we can read something from the socket */
@@ -1035,9 +1033,7 @@
msg->dst = asp;
rate_ctr_inc2(asp->ctrg, SS7_ASP_CTR_PKT_RX_TOTAL);
- /* we simply use the lower 4 bits of the asp_id, which is initialized to a pseudo-random value upon
- * connect */
- return ipa_rx_msg(asp, msg, asp->asp_id & 0xf);
+ return ipa_rx_msg(asp, msg, asp->ipa.sls);
}
/* read call-back for M3UA-over-TCP socket */
diff --git a/src/ss7_asp.h b/src/ss7_asp.h
index 483c5ea..df2f4c3 100644
--- a/src/ss7_asp.h
+++ b/src/ss7_asp.h
@@ -63,6 +63,15 @@
/*! Pending message for non-blocking IPA read */
struct msgb *pending_msg;
+ /* IPA proto ASP specific fields. */
+ struct {
+ /* Incoming IPA PDUs have no SLS field, hence a potentially
+ * unique one within AS is assigned to this ASP and applied
+ * manually when received. */
+ uint8_t sls:4;
+ bool sls_assigned;
+ } ipa;
+
struct {
char *name;
char *description;
diff --git a/src/xua_asp_fsm.c b/src/xua_asp_fsm.c
index cbda08b..2a2681f 100644
--- a/src/xua_asp_fsm.c
+++ b/src/xua_asp_fsm.c
@@ -1104,34 +1104,34 @@
}
}
-/* Assign a 4 bit asp_id (as unqiue as possible) which will be used as SLS for incoming IPA PDUs.*/
-static void _ipa_asp_pick_unused_asp_id_as_sls(struct osmo_ss7_asp *asp, const struct osmo_ss7_as *as)
+/* Assign a 4 bit SLS (as unqiue as possible) for incoming IPA PDUs.*/
+static void _ipa_asp_pick_unused_sls(struct osmo_ss7_asp *asp, const struct osmo_ss7_as *as)
{
- for (unsigned int asp_id = 0; asp_id <= 0x0f; asp_id++) {
+ for (unsigned int sls = 0; sls <= 0x0f; sls++) {
bool used = false;
for (unsigned i = 0; i < ARRAY_SIZE(as->cfg.asps); i++) {
if (!as->cfg.asps[i])
continue;
if (as->cfg.asps[i] == asp)
continue;
- if (!as->cfg.asps[i]->asp_id_present)
+ if (!as->cfg.asps[i]->ipa.sls_assigned)
continue;
- if (as->cfg.asps[i]->asp_id == asp_id) {
+ if (as->cfg.asps[i]->ipa.sls == sls) {
used = true;
break;
}
}
if (used)
continue;
- /* Found an unused asp_id, use it: */
- asp->asp_id = asp_id;
- asp->asp_id_present = true;
- LOGPASP(asp, DLSS7, LOGL_DEBUG, "Assigned unsued asp_id = %u to be used as SLS\n", asp_id);
+ /* Found an unused SLS, use it: */
+ asp->ipa.sls = sls;
+ asp->ipa.sls_assigned = true;
+ LOGPASP(asp, DLSS7, LOGL_DEBUG, "Assigned unsued SLS = %u\n", sls);
return;
}
- LOGPASP(asp, DLSS7, LOGL_INFO, "All asp_ids in IPA AS picked, unique SLS not possible, picking random one\n");
- asp->asp_id = rand() & 0x0f;
- asp->asp_id_present = true;
+ LOGPASP(asp, DLSS7, LOGL_INFO, "All SLS in IPA AS picked, unique SLS not possible, picking random one\n");
+ asp->ipa.sls = rand() & 0x0f;
+ asp->ipa.sls_assigned = true;
}
static void ipa_asp_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *data)
@@ -1160,12 +1160,9 @@
case XUA_ASP_E_AS_ASSIGNED:
as = data;
osmo_talloc_replace_string(iafp->ipa_unit, &iafp->ipa_unit->unit_name, as->cfg.name);
- /* In IPA, asp_id is not really used on the wire, and we
- * actually use internally the lower 4 bits of the field to
- * fill in a potentailly unique SLS to apply to PDUs received from the IPA socket.
- * Now that AS is known, try picking an unused asp_id inside the AS.
- * we use the lower 4 bits of the asp_id field as SLS; */
- _ipa_asp_pick_unused_asp_id_as_sls(iafp->asp, as);
+ /* Now that AS is known, try picking an unused SLS inside the AS.
+ * It will be applied to PDUs received from the IPA socket. */
+ _ipa_asp_pick_unused_sls(iafp->asp, as);
/* Now that the AS is known, start the client side: */
if (iafp->role == OSMO_SS7_ASP_ROLE_ASP && fi->state == IPA_ASP_S_DOWN) {
LOGPFSML(fi, LOGL_NOTICE, "Bringing up ASP now once it has been assigned to an AS\n");
@@ -1310,13 +1307,13 @@
if (as) {
unit_name = as->cfg.name;
- /* Allocacate potentially unique asp_id within AS since AS is already known: */
- _ipa_asp_pick_unused_asp_id_as_sls(asp, as);
+ /* Allocacate potentially unique SLS within AS since AS is already known: */
+ _ipa_asp_pick_unused_sls(asp, as);
} else if (asp->dyn_allocated) {
LOGPFSML(fi, LOGL_INFO, "Dynamic ASP is not assigned to any AS, "
"using ASP name instead of AS name as ipa_unit_name\n");
unit_name = asp->cfg.name;
- /* asp->asp_id will be assigned together with AS unit_name during XUA_ASP_E_AS_ASSIGNED. */
+ /* asp->ipa.sls will be assigned together with AS unit_name during XUA_ASP_E_AS_ASSIGNED. */
} else {
/* ASP in client mode will be brought up when this ASP is added
* to an AS, see XUA_ASP_E_AS_ASSIGNED. */
@@ -1325,7 +1322,7 @@
can_start = false;
}
unit_name = asp->cfg.name;
- /* asp->asp_id will be assigned together with AS unit_name during XUA_ASP_E_AS_ASSIGNED. */
+ /* asp->ipa.sls will be assigned together with AS unit_name during XUA_ASP_E_AS_ASSIGNED. */
}
iafp->role = role;
--
To view, visit https://gerrit.osmocom.org/c/libosmo-sigtran/+/40005?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: libosmo-sigtran
Gerrit-Branch: master
Gerrit-Change-Id: I6ec346417ceeabfce9c7b856040be2179c59195e
Gerrit-Change-Number: 40005
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>