aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Maier <pmaier@sysmocom.de>2023-10-10 13:59:38 +0200
committerPhilipp Maier <pmaier@sysmocom.de>2023-10-10 14:05:05 +0200
commitea58a2bd16456207c90e65eb4c578b42faa5d299 (patch)
tree2a34b607226ef679c8d40c4d18bf26298ce6162b
parent952f5c7b9566aff2322fb226d23103bd503fa152 (diff)
pcuif_proto: drop support for PCUIF v10pmaier/pcuiftest
We now use PCUIF v11 in the TTCN3 tests exclusively and also osmo-bts and osmo-bsc only support PCUIF v11. There is no longer a need to maintain a backward compatibility to PCUIF v10 in osmo-pcu. Related: OS#5927 Change-Id: I68a3f59d5c960ae3a4fbd74f9d4a894295cb9ed8
-rw-r--r--include/osmocom/pcu/pcuif_proto.h7
-rw-r--r--src/bts.cpp40
-rw-r--r--src/gprs_rlcmac.c6
-rw-r--r--src/pcu_l1_if.cpp77
4 files changed, 19 insertions, 111 deletions
diff --git a/include/osmocom/pcu/pcuif_proto.h b/include/osmocom/pcu/pcuif_proto.h
index 9df85d9b..cfa422b5 100644
--- a/include/osmocom/pcu/pcuif_proto.h
+++ b/include/osmocom/pcu/pcuif_proto.h
@@ -13,7 +13,7 @@
/* msg_type */
#define PCU_IF_MSG_DATA_REQ 0x00 /* send data to given channel */
-#define PCU_IF_MSG_DATA_CNF 0x01 /* confirm (e.g. transmission on PCH) */
+#define PCU_IF_MSG_DATA_CNF 0x01 /* (deprecated) */
#define PCU_IF_MSG_DATA_IND 0x02 /* receive data from given channel */
#define PCU_IF_MSG_SUSP_REQ 0x03 /* BTS forwards GPRS SUSP REQ to PCU */
#define PCU_IF_MSG_APP_INFO_REQ 0x04 /* BTS asks PCU to transmit APP INFO via PACCH */
@@ -35,8 +35,8 @@
/* sapi */
#define PCU_IF_SAPI_RACH 0x01 /* channel request on CCCH */
-#define PCU_IF_SAPI_AGCH 0x02 /* assignment on AGCH */
-#define PCU_IF_SAPI_PCH 0x03 /* paging/assignment on PCH */
+#define PCU_IF_SAPI_AGCH 0x02 /* (deprecated) */
+#define PCU_IF_SAPI_PCH 0x03 /* (deprecated) */
#define PCU_IF_SAPI_BCCH 0x04 /* SI on BCCH */
#define PCU_IF_SAPI_PDTCH 0x05 /* packet data/control/ccch block */
#define PCU_IF_SAPI_PRACH 0x06 /* packet random access channel */
@@ -297,7 +297,6 @@ struct gsm_pcu_if {
union {
struct gsm_pcu_if_data data_req;
- struct gsm_pcu_if_data data_cnf;
struct gsm_pcu_if_data_cnf data_cnf2;
struct gsm_pcu_if_data data_ind;
struct gsm_pcu_if_susp_req susp_req;
diff --git a/src/bts.cpp b/src/bts.cpp
index 50c21a3e..6dffa2d7 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -1033,10 +1033,7 @@ int bts_rcv_rach(struct gprs_rlcmac_bts *bts, const struct rach_ind_params *rip)
rip->burst_type);
bts_do_rate_ctr_inc(bts, CTR_IMMEDIATE_ASSIGN_UL_TBF);
if (plen >= 0) {
- if (the_pcu->pcu_if_version >= 0x0b)
- pcu_l1if_tx_agch2(bts, bv, plen, false, GSM_RESERVED_TMSI);
- else
- pcu_l1if_tx_agch(bts, bv, plen);
+ pcu_l1if_tx_agch2(bts, bv, plen, false, GSM_RESERVED_TMSI);
rc = 0;
} else {
rc = plen;
@@ -1051,10 +1048,7 @@ send_imm_ass_rej:
(uint8_t)osmo_tdef_get(bts->T_defs_bts, 3142, OSMO_TDEF_S, -1));
bts_do_rate_ctr_inc(bts, CTR_IMMEDIATE_ASSIGN_REJ);
if (plen >= 0) {
- if (the_pcu->pcu_if_version >= 0x0b)
- pcu_l1if_tx_agch2(bts, bv, plen, false, GSM_RESERVED_TMSI);
- else
- pcu_l1if_tx_agch(bts, bv, plen);
+ pcu_l1if_tx_agch2(bts, bv, plen, false, GSM_RESERVED_TMSI);
}
bitvec_free(bv);
/* rc was already properly set before goto */
@@ -1136,24 +1130,20 @@ void bts_snd_dl_ass(struct gprs_rlcmac_bts *bts, const struct gprs_rlcmac_dl_tbf
if (plen >= 0) {
bts_do_rate_ctr_inc(bts, CTR_IMMEDIATE_ASSIGN_DL_TBF);
- if (the_pcu->pcu_if_version >= 0x0b) {
- if (ms_imsi_is_valid(tbf->ms())) {
- pcu_l1if_tx_pch2(bts, immediate_assignment, plen, true, tbf->imsi(), tbf->tlli());
- } else {
- /* During GMM ATTACH REQUEST, the IMSI is not yet known to the PCU or SGSN. (It is
- * requested after the GMM ATTACH REQUEST with the GMM IDENTITY REQUEST.) When the PCU
- * has to assign a DL TBF but the IMSI is not known, then the IMMEDIATE ASSIGNMENT is
- * sent on the AGCH. The reason for this is that without an IMSI we can not calculate
- + the paging group, which would be necessary for transmission on PCH. Since the IMSI
- * is usually only unknown during the GMM ATTACH REQUEST, we may assume that the MS
- * is in non-DRX mode and hence it is listening on all CCCH blocks, including AGCH.
- *
- * See also: 3gpp TS 44.060, section 5.5.1.5
- * 3gpp TS 45.002, section 6.5.3, 6.5.6 */
- pcu_l1if_tx_agch2(bts, immediate_assignment, plen, true, tbf->tlli());
- }
+ if (ms_imsi_is_valid(tbf->ms())) {
+ pcu_l1if_tx_pch2(bts, immediate_assignment, plen, true, tbf->imsi(), tbf->tlli());
} else {
- pcu_l1if_tx_pch(bts, immediate_assignment, plen, tbf->imsi());
+ /* During GMM ATTACH REQUEST, the IMSI is not yet known to the PCU or SGSN. (It is
+ * requested after the GMM ATTACH REQUEST with the GMM IDENTITY REQUEST.) When the PCU
+ * has to assign a DL TBF but the IMSI is not known, then the IMMEDIATE ASSIGNMENT is
+ * sent on the AGCH. The reason for this is that without an IMSI we can not calculate
+ * the paging group, which would be necessary for transmission on PCH. Since the IMSI
+ * is usually only unknown during the GMM ATTACH REQUEST, we may assume that the MS
+ * is in non-DRX mode and hence it is listening on all CCCH blocks, including AGCH.
+ *
+ * See also: 3gpp TS 44.060, section 5.5.1.5
+ * 3gpp TS 45.002, section 6.5.3, 6.5.6 */
+ pcu_l1if_tx_agch2(bts, immediate_assignment, plen, true, tbf->tlli());
}
}
diff --git a/src/gprs_rlcmac.c b/src/gprs_rlcmac.c
index d15445e3..b2cbecaa 100644
--- a/src/gprs_rlcmac.c
+++ b/src/gprs_rlcmac.c
@@ -44,11 +44,7 @@ int gprs_rlcmac_paging_request(struct gprs_rlcmac_bts *bts, const struct osmo_mo
}
bts_do_rate_ctr_inc(bts, CTR_PCH_REQUESTS);
- if (the_pcu->pcu_if_version >= 0x0b)
- pcu_l1if_tx_pch2(bts, paging_request, plen, false, imsi, GSM_RESERVED_TMSI);
- else
- pcu_l1if_tx_pch(bts, paging_request, plen, imsi);
-
+ pcu_l1if_tx_pch2(bts, paging_request, plen, false, imsi, GSM_RESERVED_TMSI);
bitvec_free(paging_request);
return 0;
diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp
index 4fcec319..a615d2ea 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -249,22 +249,6 @@ void pcu_l1if_tx_ptcch(struct gprs_rlcmac_bts *bts,
pcu_tx_data_req(bts, trx, ts, PCU_IF_SAPI_PTCCH, arfcn, fn, block_nr, data, data_len);
}
-void pcu_l1if_tx_agch(struct gprs_rlcmac_bts *bts, bitvec *block, int plen)
-{
- /* TODO: When PCUIF v.11 has become mainline, we will use pcu_l1if_tx_agch2() exclusively.
- * This will make this function obsolote, so we can remove it. */
- uint8_t data[GSM_MACBLOCK_LEN]; /* prefix PLEN */
-
- /* FIXME: why does OpenBTS has no PLEN and no fill in message? */
- bitvec_pack(block, data + 1);
- data[0] = (plen << 2) | 0x01;
-
- if (the_pcu->gsmtap_categ_mask & (1 << PCU_GSMTAP_C_DL_AGCH))
- gsmtap_send(the_pcu->gsmtap, 0, 0, GSMTAP_CHANNEL_AGCH, 0, 0, 0, 0, data, GSM_MACBLOCK_LEN);
-
- pcu_tx_data_req(bts, 0, 0, PCU_IF_SAPI_AGCH, 0, 0, 0, data, sizeof(data));
-}
-
/* Send a MAC block via the access grant channel. This will (obviously) only work for MAC blocks that contain
* an IMMEDIATE ASSIGNMENT. In case the confirm flag is set, the receiving end is required to send a confirmation
* back when the IMMEDIATE ASSIGNMENT has been sent. */
@@ -283,43 +267,6 @@ void pcu_l1if_tx_agch2(struct gprs_rlcmac_bts *bts, bitvec *block, int plen, boo
pcu_tx_data_req(bts, 0, 0, PCU_IF_SAPI_AGCH_2, 0, 0, 0, (uint8_t*)&agch, sizeof(agch));
}
-#define IMSI_DIGITS_FOR_PAGING 3
-/* Send a MAC block via the paging channel. (See also comment below) */
-void pcu_l1if_tx_pch(struct gprs_rlcmac_bts *bts, bitvec *block, int plen, const char *imsi)
-{
- /* TODO: When PCUIF v.11 has become mainline, we will use pcu_l1if_tx_pch2() exclusively.
- * This will make this function obsolote, so we can remove it. */
-
- uint8_t data[IMSI_DIGITS_FOR_PAGING + GSM_MACBLOCK_LEN];
-
- /* prepend last three IMSI digits (if present) from which BTS/BSC will calculate the paging group */
- if (imsi && strlen(imsi) >= IMSI_DIGITS_FOR_PAGING)
- memcpy(data, imsi + strlen(imsi) - IMSI_DIGITS_FOR_PAGING, IMSI_DIGITS_FOR_PAGING);
- else
- memset(data, '0', IMSI_DIGITS_FOR_PAGING);
-
- /* OS#6097: if strlen(imsi) == 0: We assume the MS is in non-DRX
- * mode (TS 44.060 5.5.1.5) and hence it is listening on all CCCH blocks
- * (TS 45.002 6.5.3, 6.5.6).
- * Hence, pgroup 000 is taken "randomly" to send it over it. This of
- * course not optimal since it can actually be sent on any CCCH blocks,
- * so we are delaying the ImmAss for no good reason. But anyway,
- * pcu_l1if_tx_pch() is deprecated and pcu_l1if_tx_pch2() should be
- * used instead, which doesn't suffer from this problem.
- */
-
- /* block provided by upper layer comes without first byte (plen), prepend it manually: */
- OSMO_ASSERT(sizeof(data) >= IMSI_DIGITS_FOR_PAGING + 1 + block->data_len);
- data[IMSI_DIGITS_FOR_PAGING] = (plen << 2) | 0x01;
- bitvec_pack(block, data + IMSI_DIGITS_FOR_PAGING + 1);
-
- if (the_pcu->gsmtap_categ_mask & (1 << PCU_GSMTAP_C_DL_PCH))
- gsmtap_send(the_pcu->gsmtap, 0, 0, GSMTAP_CHANNEL_PCH, 0, 0, 0, 0,
- data + IMSI_DIGITS_FOR_PAGING, GSM_MACBLOCK_LEN);
-
- pcu_tx_data_req(bts, 0, 0, PCU_IF_SAPI_PCH, 0, 0, 0, data, sizeof(data));
-}
-
/* Send a MAC block via the paging channel. This will (obviously) only work for MAC blocks that contain an
* IMMEDIATE ASSIGNMENT or a PAGING COMMAND message. In case the MAC block contains an IMMEDIATE ASSIGNMENT
* message, the receiving end is required to confirm when the IMMEDIATE ASSIGNMENT has been sent. */
@@ -556,26 +503,6 @@ static int pcu_rx_data_ind(struct gprs_rlcmac_bts *bts, struct gsm_pcu_if_data *
return rc;
}
-static int pcu_rx_data_cnf(struct gprs_rlcmac_bts *bts, struct gsm_pcu_if_data *data_cnf)
-{
- int rc = 0;
-
- LOGP(DL1IF, LOGL_DEBUG, "Data confirm received: sapi=%d\n", data_cnf->sapi);
-
- switch (data_cnf->sapi) {
- case PCU_IF_SAPI_PCH:
- if (data_cnf->data[2] == GSM48_MT_RR_IMM_ASS)
- bts_rcv_imm_ass_cnf(bts, data_cnf->data, GSM_RESERVED_TMSI);
- break;
- default:
- LOGP(DL1IF, LOGL_ERROR, "Received PCU data confirm with "
- "unsupported sapi %d\n", data_cnf->sapi);
- rc = -EINVAL;
- }
-
- return rc;
-}
-
static int pcu_rx_data_cnf2(struct gprs_rlcmac_bts *bts, struct gsm_pcu_if_data_cnf *data_cnf)
{
int rc = 0;
@@ -1294,10 +1221,6 @@ int pcu_rx(struct gsm_pcu_if *pcu_prim, size_t pcu_prim_length)
CHECK_IF_MSG_SIZE(pcu_prim_length, pcu_prim->u.data_ind);
rc = pcu_rx_data_ind(bts, &pcu_prim->u.data_ind);
break;
- case PCU_IF_MSG_DATA_CNF:
- CHECK_IF_MSG_SIZE(pcu_prim_length, pcu_prim->u.data_cnf);
- rc = pcu_rx_data_cnf(bts, &pcu_prim->u.data_cnf);
- break;
case PCU_IF_MSG_DATA_CNF_2:
CHECK_IF_MSG_SIZE(pcu_prim_length, pcu_prim->u.data_cnf2);
rc = pcu_rx_data_cnf2(bts, &pcu_prim->u.data_cnf2);