Attention is currently required from: neels.
laforge has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-msc/+/27916 )
Change subject: CM Serv Rej: do not crash on use count mismatch
......................................................................
Patch Set 1: Code-Review+1
--
To view, visit https://gerrit.osmocom.org/c/osmo-msc/+/27916
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Change-Id: I2009df42d1f27ec0d011e22bfc46dbc17afe7239
Gerrit-Change-Number: 27916
Gerrit-PatchSet: 1
Gerrit-Owner: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-CC: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Comment-Date: Mon, 25 Apr 2022 15:02:14 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment
Attention is currently required from: fixeria, dexter.
laforge has posted comments on this change. ( https://gerrit.osmocom.org/c/pysim/+/27882 )
Change subject: transport/pcsc: throw ReaderError with a message
......................................................................
Patch Set 1: Code-Review+1
(1 comment)
File pySim/transport/pcsc.py:
https://gerrit.osmocom.org/c/pysim/+/27882/comment/2300b69f_ca3ec794
PS1, Line 37: with
language-wise "No reader found for number X" would make more sense, IMHO.
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/27882
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Id08c4990857f7083a8d1cefc90ff85fc20ab6fef
Gerrit-Change-Number: 27882
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Attention: dexter <pmaier(a)sysmocom.de>
Gerrit-Comment-Date: Mon, 25 Apr 2022 14:59:03 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment
Attention is currently required from: laforge.
Hello Jenkins Builder,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/c/osmo-remsim/+/27929
to look at the new patch set (#2).
Change subject: Check RSPRO component type; print error if type doesn't match
......................................................................
Check RSPRO component type; print error if type doesn't match
If one component connects to another component, verify that the
remote component type (bank/server/client) matches our expectation.
This is important in order to detect a misconfiguration of port numbers,
for example.
Closes: OS#5548
Change-Id: I89a4fc4331e8a0622f8f146c7fc235d34d990497
---
M src/bankd/bankd_main.c
M src/client/remsim_client.c
2 files changed, 21 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-remsim refs/changes/29/27929/2
--
To view, visit https://gerrit.osmocom.org/c/osmo-remsim/+/27929
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-remsim
Gerrit-Branch: master
Gerrit-Change-Id: I89a4fc4331e8a0622f8f146c7fc235d34d990497
Gerrit-Change-Number: 27929
Gerrit-PatchSet: 2
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newpatchset
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-bsc/+/27885 )
Change subject: paging: Submit up to 20 paging requests in a single work iteration
......................................................................
paging: Submit up to 20 paging requests in a single work iteration
Having one paging request being sent every PAGING_TIMER (500msec) is too
slow in case BSC is serving lots of subscribers on a BTS. Hence, we want
to send many paging requests at once while still trying not to fill the
BTS buffer.
Morever, we don't want to send tons of paging requests at once, hence we
limit the amount of paging requests sent in one timer iteration
(MAX_PAGE_REQ_PER_ITER) in order to avoid the BSC doing lots of work
there at once, keeping it busy from processing other tasks.
Related: SYS#5922
Change-Id: I609fa67834b426456f48f6fb2acb601c5905f178
---
M src/osmo-bsc/paging.c
1 file changed, 48 insertions(+), 34 deletions(-)
Approvals:
laforge: Looks good to me, but someone else must approve
fixeria: Looks good to me, but someone else must approve
pespin: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/src/osmo-bsc/paging.c b/src/osmo-bsc/paging.c
index 898fa95..f81713e 100644
--- a/src/osmo-bsc/paging.c
+++ b/src/osmo-bsc/paging.c
@@ -60,6 +60,9 @@
#define PAGING_TIMER 0, 500000
+/* How many paging requests to Tx on RSL at max before going back to main loop */
+#define MAX_PAGE_REQ_PER_ITER 20
+
/*
* Kill one paging request update the internal list...
*/
@@ -182,7 +185,8 @@
*/
static void paging_handle_pending_requests(struct gsm_bts_paging_state *paging_bts)
{
- struct gsm_paging_request *request = NULL;
+ struct gsm_paging_request *request, *initial_request;
+ unsigned int num_paged = 0;
/*
* Determine if the pending_requests list is empty and
@@ -193,43 +197,53 @@
return;
}
- /*
- * In case the BTS does not provide us with load indication and we
- * ran out of slots, call an autofill routine. It might be that the
- * BTS did not like our paging messages and then we have counted down
- * to zero and we do not get any messages.
- */
- if (paging_bts->available_slots == 0) {
- osmo_timer_schedule(&paging_bts->credit_timer, 5, 0);
- return;
- }
-
- request = llist_first_entry(&paging_bts->pending_requests,
- struct gsm_paging_request, entry);
-
- /* we need to determine the number of free channels */
- if (paging_bts->free_chans_need != -1 &&
- can_send_pag_req(request->bts, request->chan_type) != 0) {
- LOG_PAGING_BTS(request, request->bts, DPAG, LOGL_INFO,
- "Paging delayed: not enough free channels (<%d)\n",
- paging_bts->free_chans_need);
- goto skip_paging;
- }
-
/* Skip paging if the bts is down. */
- if (!request->bts->oml_link)
- goto skip_paging;
+ if (!paging_bts->bts->oml_link)
+ goto sched_next_iter;
- /* handle the paging request now */
- page_ms(request);
- paging_bts->available_slots--;
- request->attempts++;
+ /* do while loop: Try send at most first MAX_PAGE_REQ_PER_ITER paging
+ * requests (or before if there are no more available slots). Since
+ * transmitted requests are re-appended at the end of the list, we check
+ * until we find the first req again, in order to avoid retransmitting
+ * repeated requests until next time paging is scheduled. */
+ initial_request = llist_first_entry(&paging_bts->pending_requests,
+ struct gsm_paging_request, entry);
+ request = initial_request;
+ do {
+ /*
+ * In case the BTS does not provide us with load indication and we
+ * ran out of slots, call an autofill routine. It might be that the
+ * BTS did not like our paging messages and then we have counted down
+ * to zero and we do not get any messages.
+ */
+ if (paging_bts->available_slots == 0) {
+ osmo_timer_schedule(&paging_bts->credit_timer, 5, 0);
+ return;
+ }
- /* take the current and add it to the back */
- llist_del(&request->entry);
- llist_add_tail(&request->entry, &paging_bts->pending_requests);
+ /* we need to determine the number of free channels */
+ if (paging_bts->free_chans_need != -1 &&
+ can_send_pag_req(request->bts, request->chan_type) != 0) {
+ LOG_PAGING_BTS(request, request->bts, DPAG, LOGL_INFO,
+ "Paging delayed: not enough free channels (<%d)\n",
+ paging_bts->free_chans_need);
+ goto sched_next_iter;
+ }
-skip_paging:
+ /* handle the paging request now */
+ page_ms(request);
+ paging_bts->available_slots--;
+ request->attempts++;
+ num_paged++;
+
+ llist_del(&request->entry);
+ llist_add_tail(&request->entry, &paging_bts->pending_requests);
+ request = llist_first_entry(&paging_bts->pending_requests,
+ struct gsm_paging_request, entry);
+ } while (request != initial_request && num_paged < MAX_PAGE_REQ_PER_ITER);
+
+ /* Once done iterating, prepare next scheduling: */
+sched_next_iter:
osmo_timer_schedule(&paging_bts->work_timer, PAGING_TIMER);
}
--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/27885
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I609fa67834b426456f48f6fb2acb601c5905f178
Gerrit-Change-Number: 27885
Gerrit-PatchSet: 7
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-bsc/+/27897 )
Change subject: paging: Prioritize requests for new subscribers over retransmitions
......................................................................
paging: Prioritize requests for new subscribers over retransmitions
Currently, the Tx paging_req queue at the BSC always has new paging
requests adding at the end (as long as the subscriber is not already in
the queue).
That means, if the queue is full of retransmitions, it will take a long
time until the first paging_req is sent towards that subscriber.
The rationale here is that it makes sense to attempt the first paging
ASAP, and give lower prio to paging_req retransmitions, since it may
well be that those other subsribers are not available/reachable and
won't answer.
Related: SYS#5922
Change-Id: I1ae6d97152c458247bc538233b97c2d245196359
---
M src/osmo-bsc/paging.c
1 file changed, 24 insertions(+), 20 deletions(-)
Approvals:
laforge: Looks good to me, but someone else must approve
fixeria: Looks good to me, but someone else must approve
pespin: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/src/osmo-bsc/paging.c b/src/osmo-bsc/paging.c
index f81713e..3275473 100644
--- a/src/osmo-bsc/paging.c
+++ b/src/osmo-bsc/paging.c
@@ -266,20 +266,6 @@
osmo_timer_setup(&bts->paging.credit_timer, paging_give_credit, &bts->paging);
}
-/*! do we have any pending paging requests for given subscriber? */
-static int paging_pending_request(struct gsm_bts_paging_state *bts,
- struct bsc_subscr *bsub)
-{
- struct gsm_paging_request *req;
-
- llist_for_each_entry(req, &bts->pending_requests, entry) {
- if (bsub == req->bsub)
- return 1;
- }
-
- return 0;
-}
-
/*! Call-back once T3113 (paging timeout) expires for given paging_request */
static void paging_T3113_expired(void *data)
{
@@ -342,15 +328,27 @@
static int _paging_request(const struct bsc_paging_params *params, struct gsm_bts *bts)
{
struct gsm_bts_paging_state *bts_entry = &bts->paging;
- struct gsm_paging_request *req;
+ struct gsm_paging_request *req, *last_initial_req = NULL;
unsigned int t3113_timeout_s;
rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_PAGING_ATTEMPTED));
- if (paging_pending_request(bts_entry, params->bsub)) {
- LOG_PAGING_BTS(params, bts, DPAG, LOGL_INFO, "Paging request already pending for this subscriber\n");
- rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_PAGING_ALREADY));
- return -EEXIST;
+ /* Iterate list of pending requests to find if we already have one for
+ * the given subscriber. While on it, find the last
+ * not-yet-ever-once-transmitted request; the new request will be added
+ * immediately after it, giving higher prio to initial transmissions
+ * (no retrans). This avoids new subscribers being paged to be delayed
+ * if the paging queue is full due to a lot of retranmissions.
+ * Retranmissions usually mean MS are not reachable/available, so the
+ * rationale here is to prioritize new subs which may be available. */
+ llist_for_each_entry(req, &bts_entry->pending_requests, entry) {
+ if (params->bsub == req->bsub) {
+ LOG_PAGING_BTS(params, bts, DPAG, LOGL_INFO, "Paging request already pending for this subscriber\n");
+ rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_PAGING_ALREADY));
+ return -EEXIST;
+ }
+ if (req->attempts == 0)
+ last_initial_req = req;
}
LOG_PAGING_BTS(params, bts, DPAG, LOGL_DEBUG, "Start paging\n");
@@ -364,9 +362,15 @@
req->chan_type = params->chan_needed;
req->msc = params->msc;
osmo_timer_setup(&req->T3113, paging_T3113_expired, req);
+
+ /* there's no initial req (attempts==0), add to the start of the list */
+ if (last_initial_req == NULL)
+ llist_add(&req->entry, &bts_entry->pending_requests);
+ else/* Add in the middle of the list after last_initial_req */
+ __llist_add(&req->entry, &last_initial_req->entry, last_initial_req->entry.next);
+
t3113_timeout_s = calculate_timer_3113(bts);
osmo_timer_schedule(&req->T3113, t3113_timeout_s, 0);
- llist_add_tail(&req->entry, &bts_entry->pending_requests);
paging_schedule_if_needed(bts_entry);
return 0;
--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/27897
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I1ae6d97152c458247bc538233b97c2d245196359
Gerrit-Change-Number: 27897
Gerrit-PatchSet: 6
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-CC: dexter <pmaier(a)sysmocom.de>
Gerrit-CC: neels <nhofmeyr(a)sysmocom.de>
Gerrit-MessageType: merged