pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/40586?usp=email )
Change subject: vty: Make sure user doesn't configure AS in ASP role with a non-local PC as routing-key
......................................................................
vty: Make sure user doesn't configure AS in ASP role with a non-local PC as routing-key
AS in ASP mode doesn't expect to route incomign traffic to other nodes.
They are expected to announce its routing-key (local PC) to the SG so it
knows how to reach it and in turn announce (un)availability to other
SG/ASPs in the network.
Change-Id: Ibbf990fd8dcbdc67ebc4118597b34a5767320cf6
---
M src/ss7_as_vty.c
1 file changed, 9 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-sigtran refs/changes/86/40586/1
diff --git a/src/ss7_as_vty.c b/src/ss7_as_vty.c
index 0b0ddc1..7a01e46 100644
--- a/src/ss7_as_vty.c
+++ b/src/ss7_as_vty.c
@@ -581,6 +581,15 @@
struct osmo_ss7_as *as = vty->index;
vty->node = L_CS7_NODE;
vty->index = as->inst;
+
+ /* Config sanity checks: */
+
+ /* AS in ASP role should be configured with a local PC which they can
+ * then announce using RKM: */
+ if (ss7_as_get_local_role(as) == OSMO_SS7_ASP_ROLE_ASP &&
+ !osmo_ss7_pc_is_local(as->inst, as->cfg.routing_key.pc))
+ vty_out(vty, "%% AS with local role ASP should have a local PC configured in its routing-key. Fix your config!%s", VTY_NEWLINE);
+
return 0;
}
--
To view, visit https://gerrit.osmocom.org/c/libosmo-sigtran/+/40586?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: Ibbf990fd8dcbdc67ebc4118597b34a5767320cf6
Gerrit-Change-Number: 40586
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/40585?usp=email )
Change subject: Make helper function available as internal ss7_as API
......................................................................
Make helper function available as internal ss7_as API
This API will be used in more places starting with follow-up commit.
Change-Id: I818efd9e864fe0bd624a2ff1cba5ccd1d49939c5
---
M src/ss7_as.c
M src/ss7_as.h
M src/xua_as_fsm.c
3 files changed, 23 insertions(+), 21 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-sigtran refs/changes/85/40585/1
diff --git a/src/ss7_as.c b/src/ss7_as.c
index 16da09f..b4eb439 100644
--- a/src/ss7_as.c
+++ b/src/ss7_as.c
@@ -274,6 +274,27 @@
return cnt;
}
+/* Determine which role (SG/ASP/IPSP) we operate in.
+ * return enum osmo_ss7_asp_role on success, negative otherwise. */
+int ss7_as_get_local_role(const struct osmo_ss7_as *as)
+{
+ unsigned int i;
+
+ /* this is a bit tricky. "osmo_ss7_as" has no configuration of a role,
+ * only the ASPs have. As they all must be of the same role, let's simply
+ * find the first one and return its role */
+ for (i = 0; i < ARRAY_SIZE(as->cfg.asps); i++) {
+ struct osmo_ss7_asp *asp = as->cfg.asps[i];
+
+ if (!asp)
+ continue;
+
+ return asp->cfg.role;
+ }
+ /* No ASPs associated to this AS yet? */
+ return -1;
+}
+
/*! Determine if given AS is in the active state.
* \param[in] as Application Server.
* \returns true in case as is active; false otherwise. */
diff --git a/src/ss7_as.h b/src/ss7_as.h
index fe1d86b..be10f48 100644
--- a/src/ss7_as.h
+++ b/src/ss7_as.h
@@ -133,6 +133,7 @@
unsigned int osmo_ss7_as_count_asp(const struct osmo_ss7_as *as);
int ss7_as_add_asp(struct osmo_ss7_as *as, struct osmo_ss7_asp *asp);
+int ss7_as_get_local_role(const struct osmo_ss7_as *as);
void ss7_as_loadshare_binding_table_reset(struct osmo_ss7_as *as);
#define LOGPAS(as, subsys, level, fmt, args ...) \
diff --git a/src/xua_as_fsm.c b/src/xua_as_fsm.c
index 7d8e302..7afcb6d 100644
--- a/src/xua_as_fsm.c
+++ b/src/xua_as_fsm.c
@@ -150,26 +150,6 @@
return sent;
}
-/* determine which role (SG/ASP/IPSP) we operate in */
-static int get_local_role(struct osmo_ss7_as *as)
-{
- unsigned int i;
-
- /* this is a bit tricky. "osmo_ss7_as" has no configuration of a role,
- * only the ASPs have. As they all must be of the same role, let's simply
- * find the first one and return its role */
- for (i = 0; i < ARRAY_SIZE(as->cfg.asps); i++) {
- struct osmo_ss7_asp *asp = as->cfg.asps[i];
-
- if (!asp)
- continue;
-
- return asp->cfg.role;
- }
- /* we don't have any ASPs in this AS? Strange */
- return -1;
-}
-
static struct msgb *xua_as_encode_msg(const struct osmo_ss7_as *as, struct xua_msg *xua)
{
switch (as->cfg.proto) {
@@ -537,7 +517,7 @@
bool became_available = (old_state != XUA_AS_S_ACTIVE && fi->state == XUA_AS_S_ACTIVE);
bool became_unavailable = (old_state == XUA_AS_S_ACTIVE && fi->state != XUA_AS_S_ACTIVE);
- int role = get_local_role(xafp->as);
+ int role = ss7_as_get_local_role(xafp->as);
switch (role) {
case OSMO_SS7_ASP_ROLE_ASP:
--
To view, visit https://gerrit.osmocom.org/c/libosmo-sigtran/+/40585?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: I818efd9e864fe0bd624a2ff1cba5ccd1d49939c5
Gerrit-Change-Number: 40585
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Attention is currently required from: daniel, laforge.
pespin has posted comments on this change by pespin. ( https://gerrit.osmocom.org/c/osmo-bsc/+/40562?usp=email )
Change subject: bsc: Make sure MSC PC is added to sccp-addressbook
......................................................................
Patch Set 2:
(1 comment)
Patchset:
PS2:
ping
--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/40562?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I57dca92eb5f482e9017d9b19cd7f8feebd9e2721
Gerrit-Change-Number: 40562
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Attention: daniel <dwillmann(a)sysmocom.de>
Gerrit-Comment-Date: Fri, 04 Jul 2025 11:57:26 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
jolly has posted comments on this change by jolly. ( https://gerrit.osmocom.org/c/libosmocore/+/40492?usp=email )
Change subject: Add multiple messages buffers to io_uring read operations
......................................................................
Set Ready For Review
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/40492?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: Ic4544b8fcbad5a266db748d6864d3ae93ee06bce
Gerrit-Change-Number: 40492
Gerrit-PatchSet: 3
Gerrit-Owner: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Comment-Date: Fri, 04 Jul 2025 09:06:23 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: No
jolly has posted comments on this change by jolly. ( https://gerrit.osmocom.org/c/libosmocore/+/40490?usp=email )
Change subject: Submit all SQEs to kernel if they don't fit in the io_uring
......................................................................
Set Ready For Review
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/40490?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I476d9db285a1d257a4a5d43ee45ee0116c7d7009
Gerrit-Change-Number: 40490
Gerrit-PatchSet: 3
Gerrit-Owner: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Comment-Date: Fri, 04 Jul 2025 09:06:17 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: No
jolly has posted comments on this change by jolly. ( https://gerrit.osmocom.org/c/libosmocore/+/40493?usp=email )
Change subject: Add multiple messages buffers to io_uring write operations
......................................................................
Set Ready For Review
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/40493?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I8c4e0a785cf66becd7fb5b2caf718c9724b56686
Gerrit-Change-Number: 40493
Gerrit-PatchSet: 4
Gerrit-Owner: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Comment-Date: Fri, 04 Jul 2025 09:05:59 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: No
jolly has posted comments on this change by jolly. ( https://gerrit.osmocom.org/c/libosmocore/+/40491?usp=email )
Change subject: Add multiple messages buffers to struct iofd_msghdr
......................................................................
Set Ready For Review
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/40491?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I4fb1067de4615cc22cc6caf99b481491e7f2ef92
Gerrit-Change-Number: 40491
Gerrit-PatchSet: 3
Gerrit-Owner: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Comment-Date: Fri, 04 Jul 2025 09:05:55 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: No
jolly has posted comments on this change by jolly. ( https://gerrit.osmocom.org/c/libosmocore/+/40494?usp=email )
Change subject: Send multiple read/recvfrom SQEs in advance
......................................................................
Set Ready For Review
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/40494?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: Id50a8900fa2fe6de553e5025feae7e1e8d501e30
Gerrit-Change-Number: 40494
Gerrit-PatchSet: 4
Gerrit-Owner: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Comment-Date: Fri, 04 Jul 2025 09:05:44 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: No
jolly has posted comments on this change by jolly. ( https://gerrit.osmocom.org/c/libosmocore/+/40489?usp=email )
Change subject: Allow io_uring_submit batching just ahead of poll/select
......................................................................
Set Ready For Review
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/40489?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: Id34fe2ced32c63d15b14810e145744f7509064cc
Gerrit-Change-Number: 40489
Gerrit-PatchSet: 1
Gerrit-Owner: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-CC: laforge <laforge(a)osmocom.org>
Gerrit-Comment-Date: Fri, 04 Jul 2025 09:05:36 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: No
jolly has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmocore/+/40584?usp=email )
Change subject: osmo-io: Append received message to pending message segment
......................................................................
osmo-io: Append received message to pending message segment
If there is pending data of an incomplete segmented message, received
data will be appended to this message to complete it. Previously, the
message buffer with incomplete data was reused for subsequent reading
of more data. This does not work, if multiple read elements and
buffers are submitted to an io_uring. This will be done in later
patches.
When the segmentation process finds incomplete message, it will allocate
a message buffer of maximum size + the size of the pending data. This
allows received data to be appended without the risk of buffer
overflows.
Change-Id: I08df9736ccc5e9a7df61ca6dcf94629ee010752f
---
M src/core/osmo_io.c
M src/core/osmo_io_internal.h
M src/core/osmo_io_poll.c
M src/core/osmo_io_uring.c
4 files changed, 23 insertions(+), 29 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/84/40584/1
diff --git a/src/core/osmo_io.c b/src/core/osmo_io.c
index aaf7bcc..7de8479 100644
--- a/src/core/osmo_io.c
+++ b/src/core/osmo_io.c
@@ -174,36 +174,19 @@
talloc_free(msghdr);
}
-/*! convenience wrapper to call msgb_alloc with parameters from osmo_io_fd */
-struct msgb *iofd_msgb_alloc(struct osmo_io_fd *iofd)
+/*! convenience wrapper to call msgb_alloc with parameters from osmo_io_fd (with extra size) */
+struct msgb *iofd_msgb_alloc2(struct osmo_io_fd *iofd, size_t extra)
{
uint16_t headroom = iofd->msgb_alloc.headroom;
- OSMO_ASSERT(iofd->msgb_alloc.size <= 0xffff - headroom);
- return msgb_alloc_headroom_c(iofd, iofd->msgb_alloc.size + headroom, headroom, "osmo_io_msgb");
+ OSMO_ASSERT(iofd->msgb_alloc.size + extra <= 0xffff - headroom);
+ return msgb_alloc_headroom_c(iofd, iofd->msgb_alloc.size + extra + headroom, headroom, "osmo_io_msgb");
}
-/*! return the pending msgb in iofd or NULL if there is none*/
-struct msgb *iofd_msgb_pending(struct osmo_io_fd *iofd)
+/*! convenience wrapper to call msgb_alloc with parameters from osmo_io_fd */
+struct msgb *iofd_msgb_alloc(struct osmo_io_fd *iofd)
{
- struct msgb *msg = NULL;
-
- msg = iofd->pending;
- iofd->pending = NULL;
-
- return msg;
-}
-
-/*! Return the pending msgb or allocate and return a new one */
-struct msgb *iofd_msgb_pending_or_alloc(struct osmo_io_fd *iofd)
-{
- struct msgb *msg = NULL;
-
- msg = iofd_msgb_pending(iofd);
- if (!msg)
- msg = iofd_msgb_alloc(iofd);
-
- return msg;
+ return iofd_msgb_alloc2(iofd, 0);
}
/*! Enqueue a message to be sent.
@@ -317,7 +300,7 @@
/* msgb contains more than one segment */
/* Copy the trailing data over */
- msg_pending = iofd_msgb_alloc(iofd);
+ msg_pending = iofd_msgb_alloc2(iofd, extra_len);
memcpy(msgb_data(msg_pending), data + expected_len, extra_len);
msgb_put(msg_pending, extra_len);
*pending_out = msg_pending;
@@ -348,6 +331,18 @@
return;
}
+ /* If we have a pending message, append the received message.
+ * The pending message was allocated large enough so that a received
+ * message with maximum size can be appended. */
+ if (OSMO_UNLIKELY(iofd->pending)) {
+ OSMO_ASSERT(msgb_tailroom(iofd->pending) >= msgb_length(msg));
+ memcpy(iofd->pending->tail, msgb_data(msg), msgb_length(msg));
+ msgb_put(iofd->pending, msgb_length(msg));
+ msgb_free(msg);
+ msg = iofd->pending;
+ iofd->pending = NULL;
+ }
+
do {
pending = NULL;
res = iofd_handle_segmentation(iofd, msg, &pending);
diff --git a/src/core/osmo_io_internal.h b/src/core/osmo_io_internal.h
index a4b0749..10c136b 100644
--- a/src/core/osmo_io_internal.h
+++ b/src/core/osmo_io_internal.h
@@ -153,9 +153,8 @@
struct iofd_msghdr *iofd_msghdr_alloc(struct osmo_io_fd *iofd, enum iofd_msg_action action, struct msgb *msg, size_t cmsg_size);
void iofd_msghdr_free(struct iofd_msghdr *msghdr);
+struct msgb *iofd_msgb_alloc2(struct osmo_io_fd *iofd, size_t extra);
struct msgb *iofd_msgb_alloc(struct osmo_io_fd *iofd);
-struct msgb *iofd_msgb_pending(struct osmo_io_fd *iofd);
-struct msgb *iofd_msgb_pending_or_alloc(struct osmo_io_fd *iofd);
void iofd_handle_recv(struct osmo_io_fd *iofd, struct msgb *msg, int rc, struct iofd_msghdr *msghdr);
void iofd_handle_send_completion(struct osmo_io_fd *iofd, int rc, struct iofd_msghdr *msghdr);
diff --git a/src/core/osmo_io_poll.c b/src/core/osmo_io_poll.c
index 8782adf..466973d 100644
--- a/src/core/osmo_io_poll.c
+++ b/src/core/osmo_io_poll.c
@@ -50,7 +50,7 @@
if (what & OSMO_FD_READ) {
struct iofd_msghdr hdr;
- msg = iofd_msgb_pending_or_alloc(iofd);
+ msg = iofd_msgb_alloc(iofd);
if (!msg) {
LOGPIO(iofd, LOGL_ERROR, "Could not allocate msgb for reading\n");
OSMO_ASSERT(0);
diff --git a/src/core/osmo_io_uring.c b/src/core/osmo_io_uring.c
index fc60b51..26e89d7 100644
--- a/src/core/osmo_io_uring.c
+++ b/src/core/osmo_io_uring.c
@@ -147,7 +147,7 @@
struct iofd_msghdr *msghdr;
struct io_uring_sqe *sqe;
- msg = iofd_msgb_pending_or_alloc(iofd);
+ msg = iofd_msgb_alloc(iofd);
if (!msg) {
LOGPIO(iofd, LOGL_ERROR, "Could not allocate msgb for reading\n");
OSMO_ASSERT(0);
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/40584?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I08df9736ccc5e9a7df61ca6dcf94629ee010752f
Gerrit-Change-Number: 40584
Gerrit-PatchSet: 1
Gerrit-Owner: jolly <andreas(a)eversberg.eu>