Jenkins Builder has posted comments on this change by dexter. ( https://gerrit.osmocom.org/c/osmo-bsc/+/38091?usp=email )
Change subject: pcuif: fix TXT_IND/PCU_VERSION BTS initialization behavior
......................................................................
Patch Set 1:
(2 comments)
File src/osmo-bsc/pcu_sock.c:
Robot Comment from checkpatch (run ID jenkins-gerrit-lint-18448):
https://gerrit.osmocom.org/c/osmo-bsc/+/38091/comment/0dd377ce_b4a95249?usp… :
PS1, Line 687: LOGP(DPCU, LOGL_ERROR, "Unknown TXT_IND type %u received\n",
code indent should use tabs where possible
Robot Comment from checkpatch (run ID jenkins-gerrit-lint-18448):
https://gerrit.osmocom.org/c/osmo-bsc/+/38091/comment/e1756257_2065e479?usp… :
PS1, Line 705: #define ENSURE_BTS_OBJECT() \
Macros starting with if should be enclosed by a do - while loop to avoid possible if/else logic defects
--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/38091?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: Ie92f5833a80b06e78c6cec8f03f054e2e2625fad
Gerrit-Change-Number: 38091
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-CC: Jenkins Builder
Gerrit-Comment-Date: Wed, 11 Sep 2024 10:19:54 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
dexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38093?usp=email )
Change subject: pcuif: fix TXT_IND/PCU_VERSION BTS initialization behavior
......................................................................
pcuif: fix TXT_IND/PCU_VERSION BTS initialization behavior
The PCU sends a TXT_IND with the PCU_VERSION as first message after
the socket connection is established. The BSC uses this messages
to trigger some initialization (allocate BTS object inside the
PCU, send SI to the PCU).
Unfortunately the PCU will send the TXT_IND with the PCU_VERSION
always with to BTS 0. The 0 in this case is a hardcoded fake BTS
number (There is no BTS object allocated under this number in the
PCU at this point). However, the BTS/BSC will then do the
initialization process for BTS 0, which is incorrect.
Let's fix this design error by introducing a broadcast BTS number,
we then send the TXT_IND with the PCU_VERSION to that broadcast
BTS number. The BTS/BSC will then do the initialization for all
BTS objects it is aware of and use their correct BTS numbers.
Related: OS#6507
Change-Id: Idce13d55fc5bdbf5b366e3a60d9b46aacfc701a9
Depends: osmo-bsc.git Ie92f5833a80b06e78c6cec8f03f054e2e2625fad
Depends: osmo-bts.git I5316d3b7cef416eb19bb256f4ccc1468b3efe1c6
Depends: osmo-pcu.git Id01966a1ee52d0f5e465dc2e0eaf85e5b7942f81
Depends: docker-playground.git I15f7150b51047379a557a1f8df6330eca597f2e3
---
M bts/BTS_Tests.default
M bts/BTS_Tests.ttcn
M library/PCUIF_Types.ttcn
M pcu/PCUIF_Components.ttcn
M pcu/PCU_Tests.default
M pcu/PCU_Tests_NS.ttcn
6 files changed, 32 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/93/38093/1
diff --git a/bts/BTS_Tests.default b/bts/BTS_Tests.default
index 578aa36..b4a1cf1 100644
--- a/bts/BTS_Tests.default
+++ b/bts/BTS_Tests.default
@@ -29,7 +29,7 @@
[MODULE_PARAMETERS]
Osmocom_VTY_Functions.mp_prompt_prefix := "OsmoBTS";
-PCUIF_Types.mp_pcuif_version := 12;
+PCUIF_Types.mp_pcuif_version := 13;
# Configuration for each individual transceiver
BTS_Tests.mp_trx_pars := {
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 07e824a..2023f79 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -5446,7 +5446,15 @@
f_init();
map(self:PCU, system:PCU);
f_init_pcu(PCU, testcasename(), g_pcu_conn_id, g_pcu_last_info);
- PCU.send(t_SD_PCUIF(g_pcu_conn_id, ts_PCUIF_TXT_IND(0, PCU_VERSION, testcasename())));
+
+ if (mp_pcuif_version <= 12) {
+ /* Older PCU versions send the TXT indication with the PCU_VERSION to BTS 0, even though
+ * this message is technically not related to any specific BTS. */
+ PCU.send(t_SD_PCUIF(g_pcu_conn_id, ts_PCUIF_TXT_IND(0, PCU_VERSION, testcasename())));
+ } else {
+ PCU.send(t_SD_PCUIF(g_pcu_conn_id, ts_PCUIF_TXT_IND(PCU_IF_BTS_NR_BCAST,
+ PCU_VERSION, testcasename())));
+ }
}
/* PDCH activation via PCU socket; check for presence of RTS.req */
diff --git a/library/PCUIF_Types.ttcn b/library/PCUIF_Types.ttcn
index 7083884..7e39b5c 100644
--- a/library/PCUIF_Types.ttcn
+++ b/library/PCUIF_Types.ttcn
@@ -17,11 +17,11 @@
modulepar {
/* PCUIF version supported by the IUT */
- PCUIF_Version mp_pcuif_version := 12;
+ PCUIF_Version mp_pcuif_version := 13;
};
const charstring PCU_SOCK_DEFAULT := "/tmp/pcu_bts";
-type integer PCUIF_Version (11..12); /* supported versions */
+type integer PCUIF_Version (11..13); /* supported versions */
type enumerated PCUIF_MsgType {
PCU_IF_MSG_DATA_REQ ('00'O),
@@ -377,6 +377,8 @@
PCUIF_container container
} with { variant "" };
+const uint8_t PCU_IF_BTS_NR_BCAST := 255;
+
type record PCUIF_Message {
PCUIF_MsgType msg_type,
uint8_t bts_nr,
diff --git a/pcu/PCUIF_Components.ttcn b/pcu/PCUIF_Components.ttcn
index 6e956ba..d77a26f 100644
--- a/pcu/PCUIF_Components.ttcn
+++ b/pcu/PCUIF_Components.ttcn
@@ -492,6 +492,7 @@
var BTS_PDTCH_Block pcu_msg_pdtch;
var BTS_PTCCH_Block pcu_msg_ptcch;
var BTS_CCCH_Block pcu_msg_rr;
+ var uint8_t pcu_bts_nr_rx;
g_info_ind := info_ind;
@@ -502,9 +503,17 @@
/* Wait until the PCU is connected */
PCUIF.receive(tr_RAW_PCU_EV(PCU_EV_CONNECT));
+ if (mp_pcuif_version <= 12) {
+ /* Older PCU versions send the TXT indication with the PCU_VERSION to BTS 0, even though
+ * this message is technically not related to any specific BTS. */
+ pcu_bts_nr_rx := 0;
+ } else {
+ pcu_bts_nr_rx := PCU_IF_BTS_NR_BCAST
+ }
+
alt {
/* Wait for TXT.ind (PCU_VERSION) and respond with INFO.ind (SI13) */
- [] PCUIF.receive(tr_PCUIF_TXT_IND(bts_nr, PCU_VERSION, ?)) -> value pcu_msg {
+ [] PCUIF.receive(tr_PCUIF_TXT_IND(pcu_bts_nr_rx, PCU_VERSION, ?)) -> value pcu_msg {
log("Rx TXT.ind from the PCU, version is ", pcu_msg.u.txt_ind.text);
/* Send System Information 13 to the PCU */
diff --git a/pcu/PCU_Tests.default b/pcu/PCU_Tests.default
index c72720b..30c6c83 100644
--- a/pcu/PCU_Tests.default
+++ b/pcu/PCU_Tests.default
@@ -29,7 +29,7 @@
}
};
Osmocom_VTY_Functions.mp_prompt_prefix := "OsmoPCU";
-PCUIF_Types.mp_pcuif_version := 12;
+PCUIF_Types.mp_pcuif_version := 13;
[TESTPORT_PARAMETERS]
*.PCU.socket_type := "SEQPACKET"
diff --git a/pcu/PCU_Tests_NS.ttcn b/pcu/PCU_Tests_NS.ttcn
index eea8d3f..cb7529b 100644
--- a/pcu/PCU_Tests_NS.ttcn
+++ b/pcu/PCU_Tests_NS.ttcn
@@ -56,7 +56,13 @@
PCU.receive(UD_connected:?);
/* Wait for PCU_VERSION and return INFO_IND */
- PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_TXT_IND(0, PCU_VERSION, ?)));
+ if (mp_pcuif_version <= 12) {
+ /* Older PCU versions send the TXT indication with the PCU_VERSION to BTS 0, even though
+ * this message is technically not related to any specific BTS. */
+ PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_TXT_IND(0, PCU_VERSION, ?)));
+ } else {
+ PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_TXT_IND(PCU_IF_BTS_NR_BCAST, PCU_VERSION, ?)));
+ }
/* FIXME: make sure to use parameters from mp_gb_cfg.bvc[0].cell_id in the PCU INFO IND */
var template PCUIF_Message info_ind_msg := ts_PCUIF_INFO_IND(0, info_ind);
PCU.send(t_SD_PCUIF(g_pcu_conn_id, info_ind_msg));
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38093?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Idce13d55fc5bdbf5b366e3a60d9b46aacfc701a9
Gerrit-Change-Number: 38093
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
dexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-pcu/+/38092?usp=email )
Change subject: pcuif: fix TXT_IND/PCU_VERSION BTS initialization behavior
......................................................................
pcuif: fix TXT_IND/PCU_VERSION BTS initialization behavior
The PCU sends a TXT_IND with the PCU_VERSION as first message after
the socket connection is established. The BTS/BSC uses those messages
to trigger some initialization (allocate BTS object inside the
PCU, send SI to the PCU).
Unfortunately the PCU will send the TXT_IND with the PCU_VERSION
always with to BTS 0. The 0 in this case is a hardcoded fake BTS
number (There is no BTS object allocated under this number in the
PCU at this point). However, the BTS/BSC will then do the
initialization process for BTS 0, which works by chance for the
BTS where the BTS number is always 0, in the case of the BSC there
may be multiple BTS configured, so there may be arbitrary BTS
numbers.
Let's fix this design error by introducing a broadcast BTS number,
we then send the TXT_IND with the PCU_VERSION to that broadcast
BTS number. The BTS/BSC will then do the initialization for all BTSs
with the correct BTS numbers it is aware of.
Related: OS#6507
Change-Id: Id01966a1ee52d0f5e465dc2e0eaf85e5b7942f81
Depends: osmo-bsc.git Ie92f5833a80b06e78c6cec8f03f054e2e2625fad
Depends: osmo-bts.git I5316d3b7cef416eb19bb256f4ccc1468b3efe1c6
Depends: osmo-ttcn3-hacks.git Idce13d55fc5bdbf5b366e3a60d9b46aacfc701a9
Depends: docker-playground.git I15f7150b51047379a557a1f8df6330eca597f2e3
---
M include/osmocom/pcu/pcuif_proto.h
M src/pcu_l1_if.cpp
2 files changed, 6 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/92/38092/1
diff --git a/include/osmocom/pcu/pcuif_proto.h b/include/osmocom/pcu/pcuif_proto.h
index 33036c3..f2e7073 100644
--- a/include/osmocom/pcu/pcuif_proto.h
+++ b/include/osmocom/pcu/pcuif_proto.h
@@ -8,7 +8,7 @@
#define PCU_SOCK_DEFAULT "/tmp/pcu_bts"
-#define PCU_IF_VERSION 0x0c
+#define PCU_IF_VERSION 0x0d
#define TXT_MAX_LEN 128
/* msg_type */
@@ -298,6 +298,10 @@
bool confirm;
} __attribute__((packed));
+/* reserved BTS number to indicate that the PCUIF INDICATION is not targeted to a
+ * specific BTS. (commonly used with TXT indications to transfer the PCU version number) */
+#define PCU_IF_BTS_NR_BCAST 0xff
+
struct gsm_pcu_if {
/* context based information */
uint8_t msg_type; /* message type */
diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp
index fb44bd8..411b85b 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -124,7 +124,7 @@
struct gsm_pcu_if_txt_ind *txt;
va_list ap;
char *rep;
- struct msgb *msg = pcu_msgb_alloc(PCU_IF_MSG_TXT_IND, 0);
+ struct msgb *msg = pcu_msgb_alloc(PCU_IF_MSG_TXT_IND, PCU_IF_BTS_NR_BCAST);
if (!msg)
return -ENOMEM;
--
To view, visit https://gerrit.osmocom.org/c/osmo-pcu/+/38092?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Change-Id: Id01966a1ee52d0f5e465dc2e0eaf85e5b7942f81
Gerrit-Change-Number: 38092
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
dexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/38091?usp=email )
Change subject: pcuif: fix TXT_IND/PCU_VERSION BTS initialization behavior
......................................................................
pcuif: fix TXT_IND/PCU_VERSION BTS initialization behavior
The PCU sends a TXT_IND with the PCU_VERSION as first message after
the socket connection is established. The BSC uses those messages
to trigger some initialization (allocate BTS object inside the
PCU, send SI to the PCU).
Unfortunately the PCU will send the TXT_IND with the PCU_VERSION
always with to BTS 0. The 0 in this case is a hardcoded fake BTS
number (There is no BTS object allocated under this number in the
PCU at this point). However, the BSC will then do the initialization
process for BTS 0, which is incorrect.
Let's fix this design error by introducing a broadcast BTS number,
we then send the TXT_IND with the PCU_VERSION to that broadcast
BTS number. The BSC will then do the initialization for all BTSs with
BSC co located PCU under their correct BTS number.
Related: OS#6507
Change-Id: Ie92f5833a80b06e78c6cec8f03f054e2e2625fad
Depends: osmo-bts.git I5316d3b7cef416eb19bb256f4ccc1468b3efe1c6
Depends: osmo-pcu.git Id01966a1ee52d0f5e465dc2e0eaf85e5b7942f81
Depends: osmo-ttcn3-hacks.git Idce13d55fc5bdbf5b366e3a60d9b46aacfc701a9
Depends: docker-playground.git I15f7150b51047379a557a1f8df6330eca597f2e3
---
M include/osmocom/bsc/pcuif_proto.h
M src/osmo-bsc/pcu_sock.c
2 files changed, 40 insertions(+), 13 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/91/38091/1
diff --git a/include/osmocom/bsc/pcuif_proto.h b/include/osmocom/bsc/pcuif_proto.h
index 33036c3..f2e7073 100644
--- a/include/osmocom/bsc/pcuif_proto.h
+++ b/include/osmocom/bsc/pcuif_proto.h
@@ -8,7 +8,7 @@
#define PCU_SOCK_DEFAULT "/tmp/pcu_bts"
-#define PCU_IF_VERSION 0x0c
+#define PCU_IF_VERSION 0x0d
#define TXT_MAX_LEN 128
/* msg_type */
@@ -298,6 +298,10 @@
bool confirm;
} __attribute__((packed));
+/* reserved BTS number to indicate that the PCUIF INDICATION is not targeted to a
+ * specific BTS. (commonly used with TXT indications to transfer the PCU version number) */
+#define PCU_IF_BTS_NR_BCAST 0xff
+
struct gsm_pcu_if {
/* context based information */
uint8_t msg_type; /* message type */
diff --git a/src/osmo-bsc/pcu_sock.c b/src/osmo-bsc/pcu_sock.c
index 7b1aeae..3cac153 100644
--- a/src/osmo-bsc/pcu_sock.c
+++ b/src/osmo-bsc/pcu_sock.c
@@ -650,24 +650,41 @@
return 0;
}
-static int pcu_rx_txt_ind(struct gsm_bts *bts,
+static int pcu_rx_txt_ind(struct gsm_network *net, struct gsm_bts *bts,
const struct gsm_pcu_if_txt_ind *txt)
{
- int rc;
+ int rc = 0;
switch (txt->type) {
case PCU_VERSION:
- LOG_BTS(bts, DPCU, LOGL_INFO, "OsmoPCU version %s connected\n",
+ LOGP(DPCU, LOGL_INFO, "OsmoPCU version %s connected\n",
txt->text);
- rc = pcu_tx_si_all(bts);
+
+ /* we use the reception of the PCU_VERSION as a trigger to make the PCU available for
+ * all BTSs handled by this process (currently this is exactly one BTS, see FIXME notes) */
+ llist_for_each_entry(bts, &net->bts_list, list) {
+ if (bsc_co_located_pcu(bts)) {
+ if (pcu_tx_si_all(bts) < 0)
+ rc = -EINVAL;
+ }
+ }
if (rc < 0)
return -EINVAL;
break;
case PCU_OML_ALERT:
- LOG_BTS(bts, DPCU, LOGL_ERROR, "PCU external alarm: %s\n", txt->text);
+ if (bts) {
+ /* The PCU_OML_ALERT is directed to a spcific BTS object */
+ LOG_BTS(bts, DPCU, LOGL_ERROR, "PCU external alarm: %s\n", txt->text);
+ } else {
+ /* The PCU_OML_ALERT is directed to all BTS objects (currently this is exactly one BTS,
+ * see FIXME notes) */
+ llist_for_each_entry(bts, &net->bts_list, list) {
+ LOG_BTS(bts, DPCU, LOGL_ERROR, "PCU external alarm: %s\n", txt->text);
+ }
+ }
break;
default:
- LOG_BTS(bts, DPCU, LOGL_ERROR, "Unknown TXT_IND type %u received\n",
+ LOGP(DPCU, LOGL_ERROR, "Unknown TXT_IND type %u received\n",
txt->type);
return -EINVAL;
}
@@ -684,25 +701,31 @@
return -EINVAL; \
} \
} while (0)
+
+#define ENSURE_BTS_OBJECT() \
+ if ((bts = gsm_bts_num(net, pcu_prim->bts_nr)) == NULL) { \
+ LOGP(DPCU, LOGL_ERROR, "Received PCU Prim for non-existent BTS %u\n", pcu_prim->bts_nr); \
+ return -EINVAL; \
+ }
+
static int pcu_rx(struct gsm_network *net, uint8_t msg_type,
struct gsm_pcu_if *pcu_prim, size_t prim_len)
{
int rc = 0;
- struct gsm_bts *bts;
-
- bts = gsm_bts_num(net, pcu_prim->bts_nr);
- if (!bts)
- return -EINVAL;
+ struct gsm_bts *bts = NULL;
switch (msg_type) {
case PCU_IF_MSG_DATA_REQ:
case PCU_IF_MSG_PAG_REQ:
+ ENSURE_BTS_OBJECT();
CHECK_IF_MSG_SIZE(prim_len, pcu_prim->u.data_req);
rc = pcu_rx_data_req(bts, msg_type, &pcu_prim->u.data_req);
break;
case PCU_IF_MSG_TXT_IND:
+ if (pcu_prim->bts_nr != PCU_IF_BTS_NR_BCAST)
+ ENSURE_BTS_OBJECT();
CHECK_IF_MSG_SIZE(prim_len, pcu_prim->u.txt_ind);
- rc = pcu_rx_txt_ind(bts, &pcu_prim->u.txt_ind);
+ rc = pcu_rx_txt_ind(net, bts, &pcu_prim->u.txt_ind);
break;
default:
LOGP(DPCU, LOGL_ERROR, "Received unknown PCU msg type %d\n",
--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/38091?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: Ie92f5833a80b06e78c6cec8f03f054e2e2625fad
Gerrit-Change-Number: 38091
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Jenkins Builder has posted comments on this change by dexter. ( https://gerrit.osmocom.org/c/osmo-bts/+/38090?usp=email )
Change subject: pcuif: fix TXT_IND/PCU_VERSION BTS initialization behavior
......................................................................
Patch Set 1:
(1 comment)
File src/common/pcu_sock.c:
Robot Comment from checkpatch (run ID jenkins-gerrit-lint-18447):
https://gerrit.osmocom.org/c/osmo-bts/+/38090/comment/8764321e_d2eee3f4?usp… :
PS1, Line 954: #define ENSURE_BTS_OBJECT() \
Macros starting with if should be enclosed by a do - while loop to avoid possible if/else logic defects
--
To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/38090?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I5316d3b7cef416eb19bb256f4ccc1468b3efe1c6
Gerrit-Change-Number: 38090
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-CC: Jenkins Builder
Gerrit-Comment-Date: Wed, 11 Sep 2024 10:18:38 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
dexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/38090?usp=email )
Change subject: pcuif: fix TXT_IND/PCU_VERSION BTS initialization behavior
......................................................................
pcuif: fix TXT_IND/PCU_VERSION BTS initialization behavior
The PCU sends a TXT_IND with the PCU_VERSION as first message after
the socket connection is established. The BTS uses those messages
to trigger some initialization (allocate BTS object inside the
PCU, send SI to the PCU).
Unfortunately the PCU will send the TXT_IND with the PCU_VERSION
always with to BTS 0. The 0 in this case is a hardcoded fake BTS
number (There is no BTS object allocated under this number in the
PCU at this point). The BTS will then do the initialization process
for BTS 0, which is only correct by chance since osmo-bts currently
only supports one BTS object with the number 0. Nevertheless it is
incorrect to use the BTS number from the TXT_IND to resolve the BTS
object.
Let's fix this design error by introducing a broadcast BTS number,
we then send the TXT_IND with the PCU_VERSION to that broadcast
BTS number. The BTS will then do the initialization for all BTS
objects it is aware of (BTS 0)
Related: OS#6507
Change-Id: I5316d3b7cef416eb19bb256f4ccc1468b3efe1c6
Depends: osmo-bsc.git Ie92f5833a80b06e78c6cec8f03f054e2e2625fad
Depends: osmo-pcu.git Id01966a1ee52d0f5e465dc2e0eaf85e5b7942f81
Depends: osmo-ttcn3-hacks.git Idce13d55fc5bdbf5b366e3a60d9b46aacfc701a9
Depends: docker-playground.git I15f7150b51047379a557a1f8df6330eca597f2e3
---
M include/osmo-bts/pcuif_proto.h
M src/common/pcu_sock.c
2 files changed, 43 insertions(+), 18 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/90/38090/1
diff --git a/include/osmo-bts/pcuif_proto.h b/include/osmo-bts/pcuif_proto.h
index 04936af..5e64980 100644
--- a/include/osmo-bts/pcuif_proto.h
+++ b/include/osmo-bts/pcuif_proto.h
@@ -7,7 +7,7 @@
#define PCU_SOCK_DEFAULT "/tmp/pcu_bts"
-#define PCU_IF_VERSION 0x0c
+#define PCU_IF_VERSION 0x0d
#define TXT_MAX_LEN 128
/* msg_type */
@@ -257,6 +257,10 @@
bool confirm;
} __attribute__((packed));
+/* reserved BTS number to indicate that the PCUIF INDICATION is not targeted to a
+ * specific BTS. (commonly used with TXT indications to transfer the PCU version number) */
+#define PCU_IF_BTS_NR_BCAST 0xff
+
struct gsm_pcu_if {
/* context based information */
uint8_t msg_type; /* message type */
diff --git a/src/common/pcu_sock.c b/src/common/pcu_sock.c
index 048e766..bf2e395 100644
--- a/src/common/pcu_sock.c
+++ b/src/common/pcu_sock.c
@@ -858,27 +858,40 @@
static int pcu_rx_txt_ind(struct gsm_bts *bts,
struct gsm_pcu_if_txt_ind *txt)
{
- int rc;
+ int rc = 0;
switch (txt->type) {
case PCU_VERSION:
LOGP(DPCU, LOGL_INFO, "OsmoPCU version %s connected\n",
txt->text);
- oml_tx_failure_event_rep(&bts->gprs.cell.mo, NM_SEVER_CEASED, OSMO_EVT_PCU_VERS, txt->text);
- osmo_strlcpy(bts->pcu_version, txt->text, MAX_VERSION_LENGTH);
- /* patch SI to advertise GPRS, *if* the SI sent by BSC said so */
- regenerate_si3_restoctets(bts);
- regenerate_si4_restoctets(bts);
+ /* we use the reception of the PCU_VERSION as a trigger to make the PCU available for
+ * all BTSs handled by this process (currently this is exactly one BTS, see FIXME notes) */
+ llist_for_each_entry(bts, &g_bts_sm->bts_list, list) {
+ oml_tx_failure_event_rep(&bts->gprs.cell.mo, NM_SEVER_CEASED, OSMO_EVT_PCU_VERS, txt->text);
+ osmo_strlcpy(bts->pcu_version, txt->text, MAX_VERSION_LENGTH);
- rc = pcu_tx_si_all(bts);
+ /* patch SI to advertise GPRS, *if* the SI sent by BSC said so */
+ regenerate_si3_restoctets(bts);
+ regenerate_si4_restoctets(bts);
+
+ if (pcu_tx_si_all(bts) < 0)
+ rc = -EINVAL;
+ }
if (rc < 0)
- return -EINVAL;
-
+ return rc;
break;
case PCU_OML_ALERT:
- oml_tx_failure_event_rep(&bts->gprs.cell.mo, NM_SEVER_INDETERMINATE, OSMO_EVT_EXT_ALARM,
- txt->text);
+ if (bts) {
+ /* The PCU_OML_ALERT is directed to a spcific BTS object */
+ oml_tx_failure_event_rep(&bts->gprs.cell.mo, NM_SEVER_INDETERMINATE, OSMO_EVT_EXT_ALARM, txt->text);
+ } else {
+ /* The PCU_OML_ALERT is directed to all BTS objects (currently this is exactly one BTS,
+ * see FIXME notes) */
+ llist_for_each_entry(bts, &g_bts_sm->bts_list, list) {
+ oml_tx_failure_event_rep(&bts->gprs.cell.mo, NM_SEVER_INDETERMINATE, OSMO_EVT_EXT_ALARM, txt->text);
+ }
+ }
break;
default:
LOGP(DPCU, LOGL_ERROR, "Unknown TXT_IND type %u received\n",
@@ -937,35 +950,43 @@
return -EINVAL; \
} \
} while (0)
+
+#define ENSURE_BTS_OBJECT() \
+ if ((bts = gsm_bts_num(g_bts_sm, pcu_prim->bts_nr)) == NULL) { \
+ LOGP(DPCU, LOGL_ERROR, "Received PCU Prim for non-existent BTS %u\n", pcu_prim->bts_nr); \
+ return -EINVAL; \
+ }
+
static int pcu_rx(uint8_t msg_type, struct gsm_pcu_if *pcu_prim, size_t prim_len)
{
int rc = 0;
- struct gsm_bts *bts;
+ struct gsm_bts *bts = NULL;
size_t exp_len;
- if ((bts = gsm_bts_num(g_bts_sm, pcu_prim->bts_nr)) == NULL) {
- LOGP(DPCU, LOGL_ERROR, "Received PCU Prim for non-existent BTS %u\n", pcu_prim->bts_nr);
- return -EINVAL;
- }
-
switch (msg_type) {
case PCU_IF_MSG_DATA_REQ:
+ ENSURE_BTS_OBJECT();
CHECK_IF_MSG_SIZE(prim_len, pcu_prim->u.data_req);
rc = pcu_rx_data_req(bts, msg_type, &pcu_prim->u.data_req);
break;
case PCU_IF_MSG_PAG_REQ:
+ ENSURE_BTS_OBJECT();
CHECK_IF_MSG_SIZE(prim_len, pcu_prim->u.pag_req);
rc = pcu_rx_pag_req(bts, msg_type, &pcu_prim->u.pag_req);
break;
case PCU_IF_MSG_ACT_REQ:
+ ENSURE_BTS_OBJECT();
CHECK_IF_MSG_SIZE(prim_len, pcu_prim->u.act_req);
rc = pcu_rx_act_req(bts, &pcu_prim->u.act_req);
break;
case PCU_IF_MSG_TXT_IND:
+ if (pcu_prim->bts_nr != PCU_IF_BTS_NR_BCAST)
+ ENSURE_BTS_OBJECT();
CHECK_IF_MSG_SIZE(prim_len, pcu_prim->u.txt_ind);
rc = pcu_rx_txt_ind(bts, &pcu_prim->u.txt_ind);
break;
case PCU_IF_MSG_CONTAINER:
+ ENSURE_BTS_OBJECT();
CHECK_IF_MSG_SIZE(prim_len, pcu_prim->u.container);
/* ^ check if we can access container fields, v check with container data length */
exp_len = PCUIF_HDR_SIZE + sizeof(pcu_prim->u.container) + osmo_load16be(&pcu_prim->u.container.length);
--
To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/38090?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I5316d3b7cef416eb19bb256f4ccc1468b3efe1c6
Gerrit-Change-Number: 38090
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
osmith has submitted this change. ( https://gerrit.osmocom.org/c/docker-playground/+/37973?usp=email )
Change subject: debian-bookworm-build-arm: FROM: add arm32v7
......................................................................
debian-bookworm-build-arm: FROM: add arm32v7
Use the arm32v7 architecture explicitly, instead of implicitly using the
same architecture as the host. That way we can use the arm32v7 image on
a raspberry pi 4, even if the host system is 64 bit arm.
Using 32 bit arm instead of aarch64 is needed for the osmo-trx jenkins
jobs, which test -mfpu=neon and -mfpu=neon-vfpv4 build flags.
Related: https://github.com/docker-library/official-images#architectures-other-than-…
Change-Id: I93986569a9f492237da28fbc534ac5ccd176f120
---
M debian-bookworm-build-arm/Dockerfile
1 file changed, 1 insertion(+), 1 deletion(-)
Approvals:
pespin: Looks good to me, but someone else must approve
osmith: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/debian-bookworm-build-arm/Dockerfile b/debian-bookworm-build-arm/Dockerfile
index 9b725a7..a6a1b21 100644
--- a/debian-bookworm-build-arm/Dockerfile
+++ b/debian-bookworm-build-arm/Dockerfile
@@ -3,7 +3,7 @@
# See master-builds.yml, gerrit-verifications.yml in osmo-ci.git.
ARG REGISTRY=docker.io
ARG UPSTREAM_DISTRO=debian:bookworm
-FROM ${REGISTRY}/${UPSTREAM_DISTRO}
+FROM ${REGISTRY}/arm32v7/${UPSTREAM_DISTRO}
# Arguments used after FROM must be specified again
ARG OSMOCOM_REPO_MIRROR="https://downloads.osmocom.org"
--
To view, visit https://gerrit.osmocom.org/c/docker-playground/+/37973?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: docker-playground
Gerrit-Branch: master
Gerrit-Change-Id: I93986569a9f492237da28fbc534ac5ccd176f120
Gerrit-Change-Number: 37973
Gerrit-PatchSet: 2
Gerrit-Owner: osmith <osmith(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>