pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-pcu/+/33105 )
Change subject: tbf: Improve TBF name description in logs
......................................................................
tbf: Improve TBF name description in logs
Change format to print the state at the end, to resemble more the same
format used by FSMs.
Furthermore, by moving it at the end, print it only when "enclousure" is
requested, aka when not requested by FSM to update its internal name.
The consequence of this logc is that log lines printed from FSM don't
end up with the same state string printed twice in different places.
While at it, shorten the EGPRS/GPRS indicator to one character, which
should be understandable enough since it matches what's usually seen in
mobile phones to signal one or another.
Change-Id: I86b5f042fae77721b22fc026228677bd56768ba9
---
M src/tbf.cpp
M tests/alloc/AllocTest.err
M tests/app_info/AppInfoTest.err
M tests/ms/MsTest.err
M tests/tbf/TbfTest.err
M tests/types/TypesTest.err
M tests/ulc/PdchUlcTest.err
7 files changed, 446,018 insertions(+), 445,999 deletions(-)
Approvals:
dexter: Looks good to me, but someone else must approve
Jenkins Builder: Verified
laforge: Looks good to me, but someone else must approve
pespin: Looks good to me, approved
--
To view, visit https://gerrit.osmocom.org/c/osmo-pcu/+/33105
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Change-Id: I86b5f042fae77721b22fc026228677bd56768ba9
Gerrit-Change-Number: 33105
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged
laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/33124 )
Change subject: Switch from pycryptodome to pycryptodomex
......................................................................
Switch from pycryptodome to pycryptodomex
So for some weird historical reasons, the same python module is
available as pycryptodome (Crypto.* namespace) and pycryptodomex
(Cryptodome.* namespace). See the following information on the project
homepage: https://www.pycryptodome.org/src/installation
To make things extra-weird, Debian choose to package pycryptodomex as
python3-pycryptodome
(https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=886291).
So in order to support both Debian-packaged and differently-installed
packages, let's switch to pycryotodomex on all platforms/installers.
Change-Id: I04daed01f51f9702595ef9f9e0d7fcdf1e4adb62
---
M README.md
M pySim/ota.py
M pySim/utils.py
M requirements.txt
M setup.py
5 files changed, 29 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/24/33124/1
diff --git a/README.md b/README.md
index 025b518..db13a52 100644
--- a/README.md
+++ b/README.md
@@ -46,7 +46,7 @@
- termcolor
- colorlog
- packaging
- - pycryptodome
+ - pycryptodomex
Example for Debian:
```sh
@@ -54,6 +54,7 @@
pcscd libpcsclite-dev \
python3 \
python3-setuptools \
+ python3-pycryptodome \
python3-pyscard \
python3-pip
pip3 install --user -r requirements.txt
diff --git a/pySim/ota.py b/pySim/ota.py
index 83303a6..5955a08 100644
--- a/pySim/ota.py
+++ b/pySim/ota.py
@@ -150,8 +150,8 @@
pass
-from Crypto.Cipher import DES, DES3, AES
-from Crypto.Hash import CMAC
+from Cryptodome.Cipher import DES, DES3, AES
+from Cryptodome.Hash import CMAC
class OtaAlgo(abc.ABC):
iv = property(lambda self: bytes([0] * self.blocksize))
diff --git a/pySim/utils.py b/pySim/utils.py
index 6b8ee37..537014f 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -616,9 +616,9 @@
"""
Run the milenage algorithm to calculate OPC from Ki and OP
"""
- from Crypto.Cipher import AES
+ from Cryptodome.Cipher import AES
# pylint: disable=no-name-in-module
- from Crypto.Util.strxor import strxor
+ from Cryptodome.Util.strxor import strxor
from pySim.utils import b2h
# We pass in hex string and now need to work on bytes
diff --git a/requirements.txt b/requirements.txt
index fb94472..b12cb4d 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -9,5 +9,5 @@
pyyaml>=5.1
termcolor
colorlog
-pycryptodome
+pycryptodomex
packaging
diff --git a/setup.py b/setup.py
index d14ebc6..d4fb15f 100644
--- a/setup.py
+++ b/setup.py
@@ -20,7 +20,7 @@
"pyyaml >= 5.1",
"termcolor",
"colorlog",
- "pycryptodome",
+ "pycryptodomex",
"packaging",
],
scripts=[
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/33124
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I04daed01f51f9702595ef9f9e0d7fcdf1e4adb62
Gerrit-Change-Number: 33124
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-MessageType: newchange
Attention is currently required from: pespin.
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-pcu/+/33120 )
Change subject: Error trying to obtain FN from RFN if curr_fn not known
......................................................................
Error trying to obtain FN from RFN if curr_fn not known
This may happen if a RACH.ind is received before any DATA.ind has been
received.
With usual osmo-bts-trx or osmo-bts-sysmo, this shouldn't happen
nowadays, but it is still a problem with osmo-bts-virtual, where lower
layers don't submit NOPE.ind in the absence of data, and hence it won't
sent DATA.ind to osmo-pcu all the time.
This change helps in showcasing confusing scenarios where the RFN
generated in the Imm Ass was wrong.
Change-Id: I29b7ba828fe890f90e35686bbb04d4abfe56b955
---
M src/bts.cpp
1 file changed, 30 insertions(+), 4 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/20/33120/1
diff --git a/src/bts.cpp b/src/bts.cpp
index 8d6f156..6cac93f 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -740,20 +740,27 @@
/* Determine the full frame number from a relative frame number */
uint32_t bts_rfn_to_fn(const struct gprs_rlcmac_bts *bts, uint32_t rfn)
{
- uint32_t m_cur_rfn;
+ uint32_t m_cur_fn, m_cur_rfn;
uint32_t fn_rounded;
/* Ensure that all following calculations are performed with the
* relative frame number */
OSMO_ASSERT(rfn < RFN_MODULUS);
+ m_cur_fn = bts_current_frame_number(bts);
+ if (m_cur_fn == FN_UNSET) {
+ LOGP(DRLCMAC, LOGL_ERROR, "Unable to calculate full FN from RFN %u: Current FN not known!\n",
+ rfn);
+ return rfn;
+ }
+
/* Compute an internal relative frame number from the full internal
frame number */
- m_cur_rfn = fn2rfn(bts->cur_fn);
+ m_cur_rfn = fn2rfn(m_cur_fn);
/* Compute a "rounded" version of the internal frame number, which
* exactly fits in the RFN_MODULUS raster */
- fn_rounded = GSM_TDMA_FN_SUB(bts->cur_fn, m_cur_rfn);
+ fn_rounded = GSM_TDMA_FN_SUB(m_cur_fn, m_cur_rfn);
/* If the delta between the internal and the external relative frame
* number exceeds a certain limit, we need to assume that the incoming
@@ -762,7 +769,7 @@
if (GSM_TDMA_FN_DIFF(rfn, m_cur_rfn) > RFN_THRESHOLD) {
LOGP(DRLCMAC, LOGL_DEBUG,
"Race condition between rfn (%u) and m_cur_fn (%u) detected: rfn belongs to the previous modulus %u cycle, wrapping...\n",
- rfn, bts->cur_fn, RFN_MODULUS);
+ rfn, m_cur_fn, RFN_MODULUS);
if (fn_rounded < RFN_MODULUS) {
LOGP(DRLCMAC, LOGL_DEBUG,
"Cornercase detected: wrapping crosses %u border\n",
--
To view, visit https://gerrit.osmocom.org/c/osmo-pcu/+/33120
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Change-Id: I29b7ba828fe890f90e35686bbb04d4abfe56b955
Gerrit-Change-Number: 33120
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Attention: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: newchange
Attention is currently required from: laforge, pespin, dexter.
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-pcu/+/33119 )
Change subject: Use always RFN when handling RACH indications
......................................................................
Use always RFN when handling RACH indications
The previous code was really confusing, passing full FNs as RFNs under
certain external conditions, and then assuming the RFN input of
rfn_to_fn() function could actually be a FN.
As a result, we had a lot of code behaving slightly different depending
on whether the incomding FN from pcuif was filled in by a BSC or a BTS.
Avoid this b ehavior differentiation and always assume the most
restricted one, aka RFN.
Change-Id: Ib3b5702168195b595711cd0ff32c211b9aba429d
---
M src/bts.cpp
M src/pcu_l1_if.cpp
M src/pcu_utils.h
M tests/tbf/TbfTest.cpp
4 files changed, 44 insertions(+), 22 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/19/33119/1
diff --git a/src/bts.cpp b/src/bts.cpp
index d4bb35f..8d6f156 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -52,7 +52,6 @@
#include <errno.h>
#include <string.h>
-#define RFN_MODULUS 42432
#define RFN_THRESHOLD RFN_MODULUS / 2
extern void *tall_pcu_ctx;
@@ -744,25 +743,13 @@
uint32_t m_cur_rfn;
uint32_t fn_rounded;
- /* make sure RFN does not exceed the maximum possible value of a valid
- * GSM frame number. */
- OSMO_ASSERT(rfn < GSM_MAX_FN);
-
- /* Note: If a BTS is sending in a rach request it will be fully aware
- * of the frame number. If the PCU is used in a BSC-co-located setup.
- * The BSC will forward the incoming RACH request. The RACH request
- * only contains the relative frame number (Fn % 42432) in its request
- * reference. This PCU implementation has to fit both scenarios, so
- * we need to assume that Fn is a relative frame number. */
-
/* Ensure that all following calculations are performed with the
* relative frame number */
- if (rfn >= RFN_MODULUS)
- return rfn;
+ OSMO_ASSERT(rfn < RFN_MODULUS);
/* Compute an internal relative frame number from the full internal
frame number */
- m_cur_rfn = bts->cur_fn % RFN_MODULUS;
+ m_cur_rfn = fn2rfn(bts->cur_fn);
/* Compute a "rounded" version of the internal frame number, which
* exactly fits in the RFN_MODULUS raster */
diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp
index aadc640..cda7af7 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -630,7 +630,7 @@
.ra = 0x00,
.trx_nr = trx_nr,
.ts_nr = ts_nr,
- .rfn = fn,
+ .rfn = fn2rfn(fn),
.qta = qta,
};
@@ -640,11 +640,22 @@
static int pcu_rx_rach_ind(struct gprs_rlcmac_bts *bts, const struct gsm_pcu_if_rach_ind *rach_ind)
{
int rc = 0;
- int current_fn = bts_current_frame_number(bts);
+ uint32_t current_fn = bts_current_frame_number(bts);
+ uint16_t rfn;
- LOGP(DL1IF, LOGL_INFO, "RACH request received: sapi=%d "
- "qta=%d, ra=0x%02x, fn=%u, cur_fn=%d, is_11bit=%d\n", rach_ind->sapi, rach_ind->qta,
- rach_ind->ra, rach_ind->fn, current_fn, rach_ind->is_11bit);
+ /* Note: If a BSC is sending a RACH req to us, it is actually forwarding it to
+ * us from BTS as a result of receiving an RFN (Fn % 42432) over RSL
+ * (see 3GPP TS 48.058, section 9.3.19).
+ * If a BTS is sending a RACH req to us, it may contain a full FN
+ * (current osmo-bts does that) instead of an RFN.
+ * For consistency, and taking into account the BSC case limitations,
+ * work always with RFNs here:
+ */
+ rfn = fn2rfn(rach_ind->fn);
+
+ LOGP(DL1IF, LOGL_INFO,
+ "RACH request received: sapi=%d qta=%d, ra=0x%02x, fn=%u (rfn=%u), cur_fn=%d, is_11bit=%d\n",
+ rach_ind->sapi, rach_ind->qta, rach_ind->ra, rach_ind->fn, rfn, current_fn, rach_ind->is_11bit);
if (OSMO_UNLIKELY(rach_ind->fn > GSM_TDMA_HYPERFRAME - 1)) {
LOGP(DL1IF, LOGL_ERROR, "RACH request contains fn=%u that exceeds valid limits (0-%u) -- ignored!\n",
@@ -658,7 +669,7 @@
.ra = rach_ind->ra,
.trx_nr = rach_ind->trx_nr,
.ts_nr = rach_ind->ts_nr,
- .rfn = rach_ind->fn,
+ .rfn = rfn,
.qta = rach_ind->qta,
};
diff --git a/src/pcu_utils.h b/src/pcu_utils.h
index 2dd86ac..0be37e9 100644
--- a/src/pcu_utils.h
+++ b/src/pcu_utils.h
@@ -77,6 +77,12 @@
return x & -x;
}
+#define RFN_MODULUS 42432
+static inline uint16_t fn2rfn(uint32_t fn)
+{
+ return fn % RFN_MODULUS;
+}
+
/* Used to store a C++ class in a llist used by C code */
struct llist_item {
struct llist_head list; /* item used by llist */
diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp
index bbd6821..ae8b56f 100644
--- a/tests/tbf/TbfTest.cpp
+++ b/tests/tbf/TbfTest.cpp
@@ -80,7 +80,7 @@
.ra = ra,
.trx_nr = 0,
.ts_nr = 0,
- .rfn = Fn,
+ .rfn = fn2rfn(Fn),
.qta = qta,
};
--
To view, visit https://gerrit.osmocom.org/c/osmo-pcu/+/33119
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Change-Id: Ib3b5702168195b595711cd0ff32c211b9aba429d
Gerrit-Change-Number: 33119
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Attention: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: dexter <pmaier(a)sysmocom.de>
Gerrit-MessageType: newchange