lists.osmocom.org
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

gerrit-log

Thread Start a new thread
Download
Threads by month
  • ----- 2026 -----
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2025 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
gerrit-log@lists.osmocom.org

July 2023

  • 1 participants
  • 3051 discussions
[S] Change in osmo-msc[master]: ran_a_mgcp_codec_from_sc(): cosmetic: remove unneeded breaks
by osmith 25 Jul '23

25 Jul '23
Attention is currently required from: fixeria. osmith has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-msc/+/33913 ) Change subject: ran_a_mgcp_codec_from_sc(): cosmetic: remove unneeded breaks ...................................................................... Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/c/osmo-msc/+/33913 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-msc Gerrit-Branch: master Gerrit-Change-Id: I23d94c2d81c929deb819c02f4ddac3a702a3867d Gerrit-Change-Number: 33913 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Comment-Date: Tue, 25 Jul 2023 10:11:42 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 0
0 0
[S] Change in osmo-hnodeb[master]: rua: Fix null ptr access in hnb->llsk.srv
by pespin 25 Jul '23

25 Jul '23
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-hnodeb/+/33917 ) Change subject: rua: Fix null ptr access in hnb->llsk.srv ...................................................................... rua: Fix null ptr access in hnb->llsk.srv At startup, osmo-hnodeb connects the Iuh socket to the HNBGW, and start the LLSK unix socket link_server waiting for lower layers to connect. If for some reason the lower layers don't connect and an Iuh messages arrives which was to be forwarded to LLSK, it would try to access it without first checking if it was already available. This patch adds a check to avoid a crash when accessing the null pointer. Change-Id: I32d8f91b2fc5401ace386e1085c248476228cd18 --- M src/osmo-hnodeb/rua.c 1 file changed, 22 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-hnodeb refs/changes/17/33917/1 diff --git a/src/osmo-hnodeb/rua.c b/src/osmo-hnodeb/rua.c index e109ae0..d705c7c 100644 --- a/src/osmo-hnodeb/rua.c +++ b/src/osmo-hnodeb/rua.c @@ -115,6 +115,11 @@ ranap_buf_len = ies.ranaP_Message.size; LOGP(DRUA, LOGL_DEBUG, "Rx RUA UDT ranap_len=%zu\n", ranap_buf_len); + if (!hnb->llsk.srv) { + LOGP(DRUA, LOGL_NOTICE, "Discarding rx RUA UDT ranap_len=%zu due to lower layers not available\n", + ranap_buf_len); + goto free_ret; + } LOGP(DLLSK, LOGL_DEBUG, "Tx IUH-UNITDATA.ind ranap_len=%zu\n", ranap_buf_len); iuh_prim = hnb_iuh_makeprim_unitdata_ind(ranap_buf, ranap_buf_len); -- To view, visit https://gerrit.osmocom.org/c/osmo-hnodeb/+/33917 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-hnodeb Gerrit-Branch: master Gerrit-Change-Id: I32d8f91b2fc5401ace386e1085c248476228cd18 Gerrit-Change-Number: 33917 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-MessageType: newchange
1 0
0 0
[M] Change in osmo-ttcn3-hacks[master]: S1AP_Emulation: improve accessibility of unit-data
by dexter 25 Jul '23

25 Jul '23
Attention is currently required from: laforge. dexter has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/33898 ) Change subject: S1AP_Emulation: improve accessibility of unit-data ...................................................................... Patch Set 5: (1 comment) Patchset: PS2: > I think the problem with the "register a template" was that you cannot send templates through test p […] Thanks. For ports I know that there is a problem but I wasn't aware that it is a problem for templates as well. However, I think the new way with registering just the procedureCode is flexible enough. The detailed matching is done in the test fixture anyway. -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/33898 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I041b45b247e365b0d4ee8645c07dc5f26007af82 Gerrit-Change-Number: 33898 Gerrit-PatchSet: 5 Gerrit-Owner: dexter <pmaier(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: laforge <laforge(a)osmocom.org> Gerrit-Comment-Date: Tue, 25 Jul 2023 09:01:06 +0000 Gerrit-HasComments: Yes Gerrit-Has-Labels: No Comment-In-Reply-To: laforge <laforge(a)osmocom.org> Comment-In-Reply-To: dexter <pmaier(a)sysmocom.de> Gerrit-MessageType: comment
1 0
0 0
[S] Change in docker-playground[master]: ttcn3-hnbgw: fix disabling talloc report checks for hnbgw-latest
by pespin 25 Jul '23

25 Jul '23
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/docker-playground/+/33916 ) Change subject: ttcn3-hnbgw: fix disabling talloc report checks for hnbgw-latest ...................................................................... ttcn3-hnbgw: fix disabling talloc report checks for hnbgw-latest Older commit disabled the talloc report checks but forgot to add the same line to the with-pfcp/ variant, and as a result the sed command in jenkins.sh won't work there. Fixes: cb4897e4c09f7213c929dfd85f1657d697e6bf3d Change-Id: Id4eed548b3a552747e95784be3654952e10e96ab --- M ttcn3-hnbgw-test/with-pfcp/HNBGW_Tests.cfg 1 file changed, 15 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/docker-playground refs/changes/16/33916/1 diff --git a/ttcn3-hnbgw-test/with-pfcp/HNBGW_Tests.cfg b/ttcn3-hnbgw-test/with-pfcp/HNBGW_Tests.cfg index 8db8134..16173de 100644 --- a/ttcn3-hnbgw-test/with-pfcp/HNBGW_Tests.cfg +++ b/ttcn3-hnbgw-test/with-pfcp/HNBGW_Tests.cfg @@ -113,7 +113,7 @@ HNBGW_Tests.mp_enable_pfcp_tests := true; HNBGW_Tests.mp_pfcp_ip_local := "172.18.35.203"; HNBGW_Tests.mp_pfcp_ip_remote := "172.18.35.20"; - +HNBGW_Tests.mp_validate_talloc_asn1 := true; [MAIN_CONTROLLER] -- To view, visit https://gerrit.osmocom.org/c/docker-playground/+/33916 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: docker-playground Gerrit-Branch: master Gerrit-Change-Id: Id4eed548b3a552747e95784be3654952e10e96ab Gerrit-Change-Number: 33916 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-MessageType: newchange
1 0
0 0
[M] Change in osmo-ttcn3-hacks[master]: S1AP_Emulation: improve accessibility of unit-data
by pespin 25 Jul '23

25 Jul '23
Attention is currently required from: dexter. pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/33898 ) Change subject: S1AP_Emulation: improve accessibility of unit-data ...................................................................... Patch Set 5: Code-Review+1 -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/33898 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I041b45b247e365b0d4ee8645c07dc5f26007af82 Gerrit-Change-Number: 33898 Gerrit-PatchSet: 5 Gerrit-Owner: dexter <pmaier(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: dexter <pmaier(a)sysmocom.de> Gerrit-Comment-Date: Tue, 25 Jul 2023 08:22:44 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 0
0 0
[S] Change in osmo-msc[master]: ran_a_mgcp_codec_from_sc(): map GSM0808_SCT_CSD to CODEC_CLEARMODE
by pespin 25 Jul '23

25 Jul '23
Attention is currently required from: fixeria. pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-msc/+/33914 ) Change subject: ran_a_mgcp_codec_from_sc(): map GSM0808_SCT_CSD to CODEC_CLEARMODE ...................................................................... Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/c/osmo-msc/+/33914 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-msc Gerrit-Branch: master Gerrit-Change-Id: I4095124be8ffb293863f35bea440cd465048a9fd Gerrit-Change-Number: 33914 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Comment-Date: Tue, 25 Jul 2023 08:21:11 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 0
0 0
[S] Change in osmo-msc[master]: ran_a_mgcp_codec_from_sc(): cosmetic: remove unneeded breaks
by pespin 25 Jul '23

25 Jul '23
Attention is currently required from: fixeria. pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-msc/+/33913 ) Change subject: ran_a_mgcp_codec_from_sc(): cosmetic: remove unneeded breaks ...................................................................... Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/c/osmo-msc/+/33913 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-msc Gerrit-Branch: master Gerrit-Change-Id: I23d94c2d81c929deb819c02f4ddac3a702a3867d Gerrit-Change-Number: 33913 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Comment-Date: Tue, 25 Jul 2023 08:20:58 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 0
0 0
[M] Change in osmocom-bb[master]: modem: handle OSMO_GPRS_RLCMAC_L1CTL_PDCH_{ESTABLISH,RELEASE}
by pespin 25 Jul '23

25 Jul '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmocom-bb/+/33902 ) Change subject: modem: handle OSMO_GPRS_RLCMAC_L1CTL_PDCH_{ESTABLISH,RELEASE} ...................................................................... modem: handle OSMO_GPRS_RLCMAC_L1CTL_PDCH_{ESTABLISH,RELEASE} Change-Id: Ic39ce696834943dc661c85cbf3d54ccd598b60ce Depends: libosmo-gprs.git I2568c58646ce7511367275ac96cd55e7fdd7ec18 --- M src/host/layer23/src/modem/grr.c M src/host/layer23/src/modem/rlcmac.c 2 files changed, 57 insertions(+), 65 deletions(-) Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved diff --git a/src/host/layer23/src/modem/grr.c b/src/host/layer23/src/modem/grr.c index a7185fe..cf94695 100644 --- a/src/host/layer23/src/modem/grr.c +++ b/src/host/layer23/src/modem/grr.c @@ -226,8 +226,6 @@ { const struct gsm48_imm_ass *ia = msgb_l3(msg); struct gsm48_rrlayer *rr = &ms->rrlayer; - uint8_t ch_type, ch_subch, ch_ts; - int rc; /* 3GPP TS 44.018, section 10.5.2.25b "Dedicated mode or TBF". * As per table 9.1.18.1, only the value part (4 bits) is present in the @@ -269,68 +267,7 @@ } } - if (rsl_dec_chan_nr(ia->chan_desc.chan_nr, &ch_type, &ch_subch, &ch_ts) != 0) { - LOGP(DRR, LOGL_ERROR, "%s(): rsl_dec_chan_nr(chan_nr=0x%02x) failed\n", - __func__, ia->chan_desc.chan_nr); - return -EINVAL; - } - - /* FIXME: this event should be triggered by the RLC/MAC layers itself */ - rc = osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_PDCH_ESTABLISH_REQ, NULL); - if (rc != 0) - return rc; - - if (!ia->chan_desc.h0.h) { - /* Non-hopping */ - uint16_t arfcn; - - arfcn = ia->chan_desc.h0.arfcn_low | (ia->chan_desc.h0.arfcn_high << 8); - - LOGP(DRR, LOGL_INFO, "GSM48 IMM ASS (ra=0x%02x, chan_nr=0x%02x, " - "ARFCN=%u, TS=%u, SS=%u, TSC=%u)\n", ia->req_ref.ra, - ia->chan_desc.chan_nr, arfcn, ch_ts, ch_subch, - ia->chan_desc.h0.tsc); - - l1ctl_tx_dm_est_req_h0(ms, arfcn, - RSL_CHAN_OSMO_PDCH | ch_ts, - ia->chan_desc.h0.tsc, GSM48_CMODE_SIGN, 0); - } else { - /* Hopping */ - uint8_t ma_len = 0; - uint8_t maio, hsn; - uint16_t ma[64]; - - hsn = ia->chan_desc.h1.hsn; - maio = ia->chan_desc.h1.maio_low | (ia->chan_desc.h1.maio_high << 2); - - LOGP(DRR, LOGL_INFO, "GSM48 IMM ASS (ra=0x%02x, chan_nr=0x%02x, " - "HSN=%u, MAIO=%u, TS=%u, SS=%u, TSC=%u)\n", ia->req_ref.ra, - ia->chan_desc.chan_nr, hsn, maio, ch_ts, ch_subch, - ia->chan_desc.h1.tsc); - - for (unsigned int i = 1, j = 0; i <= 1024; i++) { - unsigned int arfcn = i & 1023; - unsigned int k; - - if (~ms->cellsel.sel_si.freq[arfcn].mask & 0x01) - continue; - - k = ia->mob_alloc_len - (j >> 3) - 1; - if (ia->mob_alloc[k] & (1 << (j & 7))) - ma[ma_len++] = arfcn; - j++; - } - - l1ctl_tx_dm_est_req_h1(ms, maio, hsn, &ma[0], ma_len, - RSL_CHAN_OSMO_PDCH | ch_ts, - ia->chan_desc.h1.tsc, GSM48_CMODE_SIGN, 0); - } - - rc = forward_to_rlcmac(ms, msg); - if (rc < 0) - return rc; - - return 0; + return forward_to_rlcmac(ms, msg); } /* TS 44.018 9.1.22 "Paging request type 1" */ @@ -643,9 +580,50 @@ break; } case GRR_EV_PDCH_ESTABLISH_REQ: - /* TODO: send L1CTL_DM_EST_REQ here */ + { + const struct osmo_gprs_rlcmac_l1ctl_prim *lp = data; + + if (!lp->pdch_est_req.fh) { + LOGPFSML(fi, LOGL_INFO, + "PDCH Establish.Req: TSC=%u, H0, ARFCN=%u\n", + lp->pdch_est_req.tsc, lp->pdch_est_req.arfcn); + l1ctl_tx_dm_est_req_h0(ms, lp->pdch_est_req.arfcn, + RSL_CHAN_OSMO_PDCH | lp->pdch_est_req.ts_nr, + lp->pdch_est_req.tsc, GSM48_CMODE_SIGN, 0); + } else { + /* Hopping */ + uint8_t ma_len = 0; + uint16_t ma[64]; + + LOGPFSML(fi, LOGL_INFO, + "PDCH Establish.Req: TSC=%u, H1, HSN=%u, MAIO=%u\n", + lp->pdch_est_req.tsc, + lp->pdch_est_req.fhp.hsn, + lp->pdch_est_req.fhp.maio); + + for (unsigned int i = 1, j = 0; i <= 1024; i++) { + unsigned int arfcn = i & 1023; + unsigned int k; + + if (~ms->cellsel.sel_si.freq[arfcn].mask & 0x01) + continue; + + k = lp->pdch_est_req.fhp.ma_len - (j >> 3) - 1; + if (lp->pdch_est_req.fhp.ma[k] & (1 << (j & 7))) + ma[ma_len++] = arfcn; + j++; + } + + l1ctl_tx_dm_est_req_h1(ms, + lp->pdch_est_req.fhp.maio, + lp->pdch_est_req.fhp.hsn, + &ma[0], ma_len, + RSL_CHAN_OSMO_PDCH | lp->pdch_est_req.ts_nr, + lp->pdch_est_req.tsc, GSM48_CMODE_SIGN, 0); + } osmo_fsm_inst_state_chg(fi, GRR_ST_PACKET_TRANSFER, 0, 0); break; + } default: OSMO_ASSERT(0); } diff --git a/src/host/layer23/src/modem/rlcmac.c b/src/host/layer23/src/modem/rlcmac.c index d209ec4..0f98e79 100644 --- a/src/host/layer23/src/modem/rlcmac.c +++ b/src/host/layer23/src/modem/rlcmac.c @@ -152,6 +152,10 @@ return osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_PDCH_UL_TBF_CFG_REQ, lp); case OSMO_PRIM(OSMO_GPRS_RLCMAC_L1CTL_CFG_DL_TBF, PRIM_OP_REQUEST): return osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_PDCH_DL_TBF_CFG_REQ, lp); + case OSMO_PRIM(OSMO_GPRS_RLCMAC_L1CTL_PDCH_ESTABLISH, PRIM_OP_REQUEST): + return osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_PDCH_ESTABLISH_REQ, lp); + case OSMO_PRIM(OSMO_GPRS_RLCMAC_L1CTL_PDCH_RELEASE, PRIM_OP_REQUEST): + return osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_PDCH_RELEASE_REQ, lp); default: LOGP(DRLCMAC, LOGL_DEBUG, "%s(): Unexpected Rx %s\n", __func__, pdu_name); OSMO_ASSERT(0); -- To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/33902 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Change-Id: Ic39ce696834943dc661c85cbf3d54ccd598b60ce Gerrit-Change-Number: 33902 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-CC: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-MessageType: merged
1 0
0 0
[L] Change in osmocom-bb[master]: layer23: modem: implement GPRS-RR FSM
by pespin 25 Jul '23

25 Jul '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmocom-bb/+/33901 ) Change subject: layer23: modem: implement GPRS-RR FSM ...................................................................... layer23: modem: implement GPRS-RR FSM Change-Id: I8a7d85df7b07d85ac86e0b7e340f6bbacc65e1bc --- M src/host/layer23/include/osmocom/bb/common/ms.h M src/host/layer23/include/osmocom/bb/modem/grr.h M src/host/layer23/src/modem/app_modem.c M src/host/layer23/src/modem/grr.c M src/host/layer23/src/modem/rlcmac.c M src/host/layer23/src/modem/vty.c 6 files changed, 350 insertions(+), 133 deletions(-) Approvals: laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved; Verified diff --git a/src/host/layer23/include/osmocom/bb/common/ms.h b/src/host/layer23/include/osmocom/bb/common/ms.h index bfbf879..8d1ffc4 100644 --- a/src/host/layer23/include/osmocom/bb/common/ms.h +++ b/src/host/layer23/include/osmocom/bb/common/ms.h @@ -100,6 +100,7 @@ /* GPRS */ struct gprs_settings gprs; struct osmobb_ms_gmm_layer gmmlayer; + struct osmo_fsm_inst *grr_fi; /* Audio I/O */ struct gapk_io_state *gapk_io; diff --git a/src/host/layer23/include/osmocom/bb/modem/grr.h b/src/host/layer23/include/osmocom/bb/modem/grr.h index 1f2b08c..3472a10 100644 --- a/src/host/layer23/include/osmocom/bb/modem/grr.h +++ b/src/host/layer23/include/osmocom/bb/modem/grr.h @@ -6,7 +6,28 @@ struct msgb; struct osmocom_ms; struct lapdm_entity; +struct osmo_fsm; + +enum grr_fsm_state { + GRR_ST_PACKET_NOT_READY, + GRR_ST_PACKET_IDLE, + GRR_ST_PACKET_TRANSFER, +}; + +enum grr_fsm_event { + GRR_EV_BCCH_BLOCK_IND, + GRR_EV_PCH_AGCH_BLOCK_IND, + GRR_EV_RACH_REQ, + GRR_EV_RACH_CNF, + GRR_EV_PDCH_ESTABLISH_REQ, + GRR_EV_PDCH_RELEASE_REQ, + GRR_EV_PDCH_UL_TBF_CFG_REQ, + GRR_EV_PDCH_DL_TBF_CFG_REQ, + GRR_EV_PDCH_BLOCK_REQ, + GRR_EV_PDCH_BLOCK_IND, +}; + +extern struct osmo_fsm grr_fsm_def; int modem_grr_rslms_cb(struct msgb *msg, struct lapdm_entity *le, void *ctx); -int modem_grr_tx_chan_req(struct osmocom_ms *ms, uint8_t chan_req); uint8_t modem_grr_gen_chan_req(bool single_block); diff --git a/src/host/layer23/src/modem/app_modem.c b/src/host/layer23/src/modem/app_modem.c index fdb3821..6871384 100644 --- a/src/host/layer23/src/modem/app_modem.c +++ b/src/host/layer23/src/modem/app_modem.c @@ -62,34 +62,6 @@ struct modem_app app_data; -static bool modem_can_gprs_attach(const struct osmocom_ms *ms) -{ - const struct gsm_subscriber *subscr = &ms->subscr; - const struct gsm322_cellsel *cs = &ms->cellsel; - const struct gsm48_sysinfo *si = &cs->sel_si; - - if (!subscr->sim_valid) - goto ret_false; - - if (!si->si1 || !si->si3 || !si->si4 || !si->si13) - goto ret_false; - - if (!si->gprs.supported) - goto ret_false; - - return true; - -ret_false: - LOGP(DRLCMAC, LOGL_INFO, "Delaying GPRS attach, waiting for:%s%s%s%s%s%s\n", - subscr->sim_valid ? "" : " imsi", - si->si1 ? "" : " si1", - si->si3 ? "" : " si3", - si->si4 ? "" : " si4", - si->si13 ? "" : " si13", - si->gprs.supported ? "" : " GprsIndicator"); - return false; -} - int modem_gprs_attach_if_needed(struct osmocom_ms *ms) { int rc; @@ -97,7 +69,10 @@ if (app_data.modem_state != MODEM_ST_IDLE) return 0; - if (!modem_can_gprs_attach(ms)) + if (ms->grr_fi->state == GRR_ST_PACKET_NOT_READY) + return 0; + + if (!ms->subscr.sim_valid) return 0; app_data.modem_state = MODEM_ST_ATTACHING; @@ -201,6 +176,8 @@ switch (signal) { case S_L1CTL_RESET: ms = signal_data; + if (ms->started) + break; layer3_app_reset(); app_data.ms = ms; @@ -285,6 +262,12 @@ return rc; } + /* TODO: move to a separate function */ + app_data.ms->grr_fi = osmo_fsm_inst_alloc(&grr_fsm_def, NULL, + app_data.ms, LOGL_DEBUG, + app_data.ms->name); + OSMO_ASSERT(app_data.ms->grr_fi != NULL); + osmo_signal_register_handler(SS_L1CTL, &global_signal_cb, NULL); osmo_signal_register_handler(SS_L23_SUBSCR, &modem_l23_subscr_signal_cb, NULL); lapdm_channel_set_l3(&app_data.ms->lapdm_channel, &modem_grr_rslms_cb, app_data.ms); diff --git a/src/host/layer23/src/modem/grr.c b/src/host/layer23/src/modem/grr.c index bd55f30..a7185fe 100644 --- a/src/host/layer23/src/modem/grr.c +++ b/src/host/layer23/src/modem/grr.c @@ -1,5 +1,8 @@ /* * (C) 2022-2023 by sysmocom - s.f.m.c. GmbH <info(a)sysmocom.de> + * Author: Pau Espin Pedrol <pespin(a)sysmocom.de> + * Author: Vadim Yanitskiy <vyanitskiy(a)sysmocom.de> + * * All Rights Reserved * * This program is free software; you can redistribute it and/or modify @@ -23,6 +26,7 @@ #include <string.h> #include <errno.h> +#include <osmocom/core/fsm.h> #include <osmocom/core/msgb.h> #include <osmocom/core/utils.h> #include <osmocom/core/logging.h> @@ -41,6 +45,7 @@ #include <osmocom/bb/common/l1ctl.h> #include <osmocom/bb/common/ms.h> #include <osmocom/bb/modem/modem.h> +#include <osmocom/bb/modem/grr.h> #include <osmocom/bb/mobile/gsm322.h> #include <osmocom/bb/mobile/gsm48_rr.h> @@ -87,29 +92,6 @@ return false; } -int modem_grr_tx_chan_req(struct osmocom_ms *ms, uint8_t chan_req) -{ - struct gsm322_cellsel *cs = &ms->cellsel; - struct gsm48_rrlayer *rr = &ms->rrlayer; - - OSMO_ASSERT(rr->state == GSM48_RR_ST_IDLE); - - if (!cs->sel_si.si1 || !cs->sel_si.si13) - return -EAGAIN; - if (!cs->sel_si.gprs.supported) - return -ENOTSUP; - - rr->cr_ra = chan_req; - memset(&rr->cr_hist[0], 0x00, sizeof(rr->cr_hist)); - - LOGP(DRR, LOGL_NOTICE, "Sending CHANNEL REQUEST (0x%02x)\n", rr->cr_ra); - l1ctl_tx_rach_req(ms, RSL_CHAN_RACH, 0x00, rr->cr_ra, 0, - cs->ccch_mode == CCCH_MODE_COMBINED); - - rr->state = GSM48_RR_ST_CONN_PEND; - return 0; -} - static int forward_to_rlcmac(struct osmocom_ms *ms, struct msgb *msg) { struct osmo_gprs_rlcmac_prim *rlcmac_prim; @@ -135,7 +117,6 @@ return rc; } - modem_gprs_attach_if_needed(ms); return 0; } @@ -171,7 +152,6 @@ LOGP(DRR, LOGL_NOTICE, "Found GPRS Indicator (RA Colour %u, SI13 on BCCH %s)\n", cs->sel_si.gprs.ra_colour, cs->sel_si.gprs.si13_pos ? "Ext" : "Norm"); - modem_gprs_attach_if_needed(ms); return 0; } @@ -199,7 +179,6 @@ LOGP(DRR, LOGL_NOTICE, "Found GPRS Indicator (RA Colour %u, SI13 on BCCH %s)\n", cs->sel_si.gprs.ra_colour, cs->sel_si.gprs.si13_pos ? "Ext" : "Norm"); - modem_gprs_attach_if_needed(ms); return 0; } @@ -218,10 +197,7 @@ return rc; /* Forward SI13 to RLC/MAC layer */ - rc = forward_to_rlcmac(ms, msg); - - modem_gprs_attach_if_needed(ms); - return rc; + return forward_to_rlcmac(ms, msg); } static int grr_rx_bcch(struct osmocom_ms *ms, struct msgb *msg) @@ -299,6 +275,11 @@ return -EINVAL; } + /* FIXME: this event should be triggered by the RLC/MAC layers itself */ + rc = osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_PDCH_ESTABLISH_REQ, NULL); + if (rc != 0) + return rc; + if (!ia->chan_desc.h0.h) { /* Non-hopping */ uint16_t arfcn; @@ -349,7 +330,6 @@ if (rc < 0) return rc; - rr->state = GSM48_RR_ST_DEDICATED; return 0; } @@ -461,9 +441,9 @@ switch (rllh->chan_nr) { case RSL_CHAN_PCH_AGCH: - return grr_rx_ccch(ms, msg); + return osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_PCH_AGCH_BLOCK_IND, msg); case RSL_CHAN_BCCH: - return grr_rx_bcch(ms, msg); + return osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_BCCH_BLOCK_IND, msg); default: return 0; } @@ -486,25 +466,11 @@ static int grr_rx_rslms_cchan(struct osmocom_ms *ms, struct msgb *msg) { const struct abis_rsl_cchan_hdr *ch = msgb_l2(msg); - struct gsm48_rrlayer *rr = &ms->rrlayer; switch (ch->c.msg_type) { case RSL_MT_CHAN_CONF: /* RACH.conf */ - if (rr->state == GSM48_RR_ST_CONN_PEND) { - const struct gsm48_req_ref *ref = (void *)&ch->data[1]; - LOGP(DRSL, LOGL_NOTICE, - "Rx RACH.conf (RA=0x%02x, T1=%u, T3=%u, T2=%u, FN=%u)\n", - rr->cr_ra, ref->t1, ref->t3_high << 3 | ref->t3_low, ref->t2, - _gsm48_req_ref2fn(ref)); - /* shift the CHANNEL REQUEST history buffer */ - memmove(&rr->cr_hist[1], &rr->cr_hist[0], ARRAY_SIZE(rr->cr_hist) - 1); - /* store the new entry */ - rr->cr_hist[0].ref = *ref; - rr->cr_hist[0].ref.ra = rr->cr_ra; - rr->cr_hist[0].valid = 1; - return 0; - } - /* fall-through */ + return osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_RACH_CNF, + (void *)&ch->data[1]); default: LOGP(DRSL, LOGL_NOTICE, "Unhandled RSLms CCHAN message " "(msg_type 0x%02x)\n", ch->c.msg_type); @@ -534,3 +500,277 @@ msgb_free(msg); return rc; } + +///////////////////////////////////////////////////////////////////////////////////////// + +#define S(x) (1 << (x)) + +#include <osmocom/gsm/gsm0502.h> // XXX + +static void handle_pdch_block_ind(struct osmocom_ms *ms, struct msgb *msg) +{ + const struct l1ctl_gprs_dl_block_ind *ind = (void *)msg->l1h; + const uint32_t fn = osmo_load32be(&ind->hdr.fn); + struct osmo_gprs_rlcmac_prim *prim; + + /* FIXME: sadly, rlcmac_prim_l1ctl_alloc() is not exposed */ + prim = osmo_gprs_rlcmac_prim_alloc_l1ctl_pdch_data_ind(0, 0, 0, 0, 0, NULL, 0); + prim->l1ctl = (struct osmo_gprs_rlcmac_l1ctl_prim) { + .pdch_data_ind = { + .fn = fn, + .ts_nr = ind->hdr.tn, + .rx_lev = ind->meas.rx_lev, + .ber10k = osmo_load16be(&ind->meas.ber10k), + .ci_cb = osmo_load16be(&ind->meas.ci_cb), + .data_len = msgb_l2len(msg), + .data = msgb_l2(msg), + } + }; + osmo_gprs_rlcmac_prim_lower_up(prim); + + /* Do not send RTS.ind if we got PTCCH/D */ + if (fn % 104 == 12) + return; + + /* Every fn % 13 == 12 we have either a PTCCH or an IDLE slot, thus + * every fn % 13 == 8 we add 5 frames, or 4 frames othrwise. The + * resulting value is first fn of the next block. */ + const uint32_t rts_fn = GSM_TDMA_FN_SUM(fn, (fn % 13 == 8) ? 5 : 4); + prim = osmo_gprs_rlcmac_prim_alloc_l1ctl_pdch_rts_ind(ind->hdr.tn, rts_fn, ind->usf); + osmo_gprs_rlcmac_prim_lower_up(prim); +} + +static bool grr_cell_is_usable(const struct osmocom_ms *ms) +{ + const struct gsm322_cellsel *cs = &ms->cellsel; + const struct gsm48_sysinfo *si = &cs->sel_si; + + if (!si->si1 || !si->si3 || !si->si4 || !si->si13) + return false; + if (!si->gprs.supported) + return false; + + return true; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +static void grr_st_packet_not_ready_action(struct osmo_fsm_inst *fi, + uint32_t event, void *data) +{ + struct osmocom_ms *ms = fi->priv; + + switch (event) { + case GRR_EV_BCCH_BLOCK_IND: + grr_rx_bcch(ms, (struct msgb *)data); + if (grr_cell_is_usable(ms)) { + LOGPFSML(fi, LOGL_NOTICE, "Cell is usable, GRR becomes ready\n"); + osmo_fsm_inst_state_chg(fi, GRR_ST_PACKET_IDLE, 0, 0); + } + break; + case GRR_EV_PCH_AGCH_BLOCK_IND: + grr_rx_ccch(ms, (struct msgb *)data); + break; + default: + OSMO_ASSERT(0); + } +} + +static void grr_st_packet_idle_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state) +{ + struct osmocom_ms *ms = fi->priv; + + modem_gprs_attach_if_needed(ms); +} + +static void grr_st_packet_idle_action(struct osmo_fsm_inst *fi, + uint32_t event, void *data) +{ + struct osmocom_ms *ms = fi->priv; + + switch (event) { + case GRR_EV_BCCH_BLOCK_IND: + grr_rx_bcch(ms, (struct msgb *)data); + if (!grr_cell_is_usable(ms)) { + LOGPFSML(fi, LOGL_NOTICE, "Cell is not usable, GRR becomes not ready\n"); + osmo_fsm_inst_state_chg(fi, GRR_ST_PACKET_NOT_READY, 0, 0); + } + break; + case GRR_EV_PCH_AGCH_BLOCK_IND: + grr_rx_ccch(ms, (struct msgb *)data); + break; + case GRR_EV_RACH_REQ: + { + const struct osmo_gprs_rlcmac_l1ctl_prim *lp = data; + struct gsm48_rrlayer *rr = &ms->rrlayer; + + if (lp->rach_req.is_11bit) { /* TODO: implement 11-bit RACH */ + LOGPFSML(fi, LOGL_ERROR, "11-bit RACH is not supported\n"); + return; + } + + rr->cr_ra = lp->rach_req.ra; + memset(&rr->cr_hist[0], 0x00, sizeof(rr->cr_hist)); + + LOGPFSML(fi, LOGL_INFO, "Sending CHANNEL REQUEST (0x%02x)\n", rr->cr_ra); + l1ctl_tx_rach_req(ms, RSL_CHAN_RACH, 0x00, rr->cr_ra, 0, + ms->cellsel.ccch_mode == CCCH_MODE_COMBINED); + + rr->state = GSM48_RR_ST_CONN_PEND; + break; + } + case GRR_EV_RACH_CNF: + { + struct gsm48_rrlayer *rr = &ms->rrlayer; + const struct gsm48_req_ref *ref = data; + + LOGPFSML(fi, LOGL_NOTICE, + "Rx RACH.conf (RA=0x%02x, T1=%u, T3=%u, T2=%u, FN=%u)\n", + rr->cr_ra, ref->t1, ref->t3_high << 3 | ref->t3_low, ref->t2, + _gsm48_req_ref2fn(ref)); + + if (ms->rrlayer.state != GSM48_RR_ST_CONN_PEND) { + LOGPFSML(fi, LOGL_ERROR, "Rx unexpected RACH.conf\n"); + return; + } + + /* shift the CHANNEL REQUEST history buffer */ + memmove(&rr->cr_hist[1], &rr->cr_hist[0], ARRAY_SIZE(rr->cr_hist) - 1); + /* store the new entry */ + rr->cr_hist[0].ref = *ref; + rr->cr_hist[0].ref.ra = rr->cr_ra; + rr->cr_hist[0].valid = 1; + break; + } + case GRR_EV_PDCH_ESTABLISH_REQ: + /* TODO: send L1CTL_DM_EST_REQ here */ + osmo_fsm_inst_state_chg(fi, GRR_ST_PACKET_TRANSFER, 0, 0); + break; + default: + OSMO_ASSERT(0); + } +} + +static void grr_st_packet_transfer_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state) +{ + struct osmocom_ms *ms = fi->priv; + + ms->rrlayer.state = GSM48_RR_ST_DEDICATED; +} + +static void grr_st_packet_transfer_onleave(struct osmo_fsm_inst *fi, uint32_t next_state) +{ + struct osmocom_ms *ms = fi->priv; + + ms->rrlayer.state = GSM48_RR_ST_IDLE; +} + +static void grr_st_packet_transfer_action(struct osmo_fsm_inst *fi, + uint32_t event, void *data) +{ + struct osmocom_ms *ms = fi->priv; + + switch (event) { + case GRR_EV_PDCH_UL_TBF_CFG_REQ: + { + const struct osmo_gprs_rlcmac_l1ctl_prim *lp = data; + l1ctl_tx_gprs_ul_tbf_cfg_req(ms, + lp->cfg_ul_tbf_req.ul_tbf_nr, + lp->cfg_ul_tbf_req.ul_slotmask); + break; + } + case GRR_EV_PDCH_DL_TBF_CFG_REQ: + { + const struct osmo_gprs_rlcmac_l1ctl_prim *lp = data; + l1ctl_tx_gprs_dl_tbf_cfg_req(ms, + lp->cfg_dl_tbf_req.dl_tbf_nr, + lp->cfg_dl_tbf_req.dl_slotmask, + lp->cfg_dl_tbf_req.dl_tfi); + break; + } + case GRR_EV_PDCH_BLOCK_REQ: + { + const struct osmo_gprs_rlcmac_l1ctl_prim *lp = data; + l1ctl_tx_gprs_ul_block_req(ms, + lp->pdch_data_req.fn, + lp->pdch_data_req.ts_nr, + lp->pdch_data_req.data, + lp->pdch_data_req.data_len); + break; + } + case GRR_EV_PDCH_BLOCK_IND: + handle_pdch_block_ind(ms, (struct msgb *)data); + break; + case GRR_EV_PDCH_RELEASE_REQ: + l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL); + l1ctl_tx_fbsb_req(ms, ms->test_arfcn, + L1CTL_FBSB_F_FB01SB, 100, 0, + ms->cellsel.ccch_mode, dbm2rxlev(-85)); + osmo_fsm_inst_state_chg(fi, GRR_ST_PACKET_IDLE, 0, 0); + break; + default: + OSMO_ASSERT(0); + } +} + +static const struct osmo_fsm_state grr_fsm_states[] = { + [GRR_ST_PACKET_NOT_READY] = { + .name = "PACKET_NOT_READY", + .out_state_mask = S(GRR_ST_PACKET_IDLE), + .in_event_mask = S(GRR_EV_BCCH_BLOCK_IND) + | S(GRR_EV_PCH_AGCH_BLOCK_IND), + .action = &grr_st_packet_not_ready_action, + }, + [GRR_ST_PACKET_IDLE] = { + .name = "PACKET_IDLE", + .out_state_mask = S(GRR_ST_PACKET_NOT_READY) + | S(GRR_ST_PACKET_TRANSFER), + .in_event_mask = S(GRR_EV_BCCH_BLOCK_IND) + | S(GRR_EV_PCH_AGCH_BLOCK_IND) + | S(GRR_EV_RACH_REQ) + | S(GRR_EV_RACH_CNF) + | S(GRR_EV_PDCH_ESTABLISH_REQ), + .action = &grr_st_packet_idle_action, + .onenter = &grr_st_packet_idle_onenter, + }, + [GRR_ST_PACKET_TRANSFER] = { + .name = "PACKET_TRANSFER", + .out_state_mask = S(GRR_ST_PACKET_NOT_READY) + | S(GRR_ST_PACKET_IDLE), + .in_event_mask = S(GRR_EV_PDCH_UL_TBF_CFG_REQ) + | S(GRR_EV_PDCH_DL_TBF_CFG_REQ) + | S(GRR_EV_PDCH_BLOCK_REQ) + | S(GRR_EV_PDCH_BLOCK_IND) + | S(GRR_EV_PDCH_RELEASE_REQ), + .action = &grr_st_packet_transfer_action, + .onenter = &grr_st_packet_transfer_onenter, + .onleave = &grr_st_packet_transfer_onleave, + }, +}; + +static const struct value_string grr_fsm_event_names[] = { + OSMO_VALUE_STRING(GRR_EV_BCCH_BLOCK_IND), + OSMO_VALUE_STRING(GRR_EV_PCH_AGCH_BLOCK_IND), + OSMO_VALUE_STRING(GRR_EV_RACH_REQ), + OSMO_VALUE_STRING(GRR_EV_RACH_CNF), + OSMO_VALUE_STRING(GRR_EV_PDCH_ESTABLISH_REQ), + OSMO_VALUE_STRING(GRR_EV_PDCH_RELEASE_REQ), + OSMO_VALUE_STRING(GRR_EV_PDCH_UL_TBF_CFG_REQ), + OSMO_VALUE_STRING(GRR_EV_PDCH_DL_TBF_CFG_REQ), + OSMO_VALUE_STRING(GRR_EV_PDCH_BLOCK_REQ), + OSMO_VALUE_STRING(GRR_EV_PDCH_BLOCK_IND), + { 0, NULL } +}; + +struct osmo_fsm grr_fsm_def = { + .name = "GPRS-RR", + .log_subsys = DRR, + .states = grr_fsm_states, + .num_states = ARRAY_SIZE(grr_fsm_states), + .event_names = grr_fsm_event_names, +}; + +static __attribute__((constructor)) void on_dso_load(void) +{ + OSMO_ASSERT(osmo_fsm_register(&grr_fsm_def) == 0); +} diff --git a/src/host/layer23/src/modem/rlcmac.c b/src/host/layer23/src/modem/rlcmac.c index fcd2b2e..d209ec4 100644 --- a/src/host/layer23/src/modem/rlcmac.c +++ b/src/host/layer23/src/modem/rlcmac.c @@ -22,6 +22,7 @@ #include <stdint.h> #include <stdbool.h> +#include <osmocom/core/fsm.h> #include <osmocom/core/msgb.h> #include <osmocom/core/bits.h> #include <osmocom/core/prim.h> @@ -38,13 +39,10 @@ #include <osmocom/gprs/gmm/gmm_prim.h> #include <osmocom/bb/common/logging.h> -#include <osmocom/bb/common/l1ctl.h> #include <osmocom/bb/common/ms.h> #include <osmocom/bb/modem/rlcmac.h> #include <osmocom/bb/modem/grr.h> -#include <l1ctl_proto.h> - static int modem_rlcmac_handle_grr(struct osmo_gprs_rlcmac_prim *rlcmac_prim) { int rc; @@ -141,33 +139,19 @@ static int modem_rlcmac_prim_down_cb(struct osmo_gprs_rlcmac_prim *prim, void *user_data) { - const struct osmo_gprs_rlcmac_l1ctl_prim *lp = &prim->l1ctl; + struct osmo_gprs_rlcmac_l1ctl_prim *lp = &prim->l1ctl; const char *pdu_name = osmo_gprs_rlcmac_prim_name(prim); struct osmocom_ms *ms = user_data; switch (OSMO_PRIM_HDR(&prim->oph)) { case OSMO_PRIM(OSMO_GPRS_RLCMAC_L1CTL_RACH, PRIM_OP_REQUEST): - if (lp->rach_req.is_11bit) { - LOGP(DRLCMAC, LOGL_NOTICE, - "%s(): 11-bit RACH is not supported\n", __func__); - return -ENOTSUP; - } - return modem_grr_tx_chan_req(ms, lp->rach_req.ra); + return osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_RACH_REQ, lp); case OSMO_PRIM(OSMO_GPRS_RLCMAC_L1CTL_PDCH_DATA, PRIM_OP_REQUEST): - return l1ctl_tx_gprs_ul_block_req(ms, - lp->pdch_data_req.fn, - lp->pdch_data_req.ts_nr, - lp->pdch_data_req.data, - lp->pdch_data_req.data_len); + return osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_PDCH_BLOCK_REQ, lp); case OSMO_PRIM(OSMO_GPRS_RLCMAC_L1CTL_CFG_UL_TBF, PRIM_OP_REQUEST): - return l1ctl_tx_gprs_ul_tbf_cfg_req(ms, - lp->cfg_ul_tbf_req.ul_tbf_nr, - lp->cfg_ul_tbf_req.ul_slotmask); + return osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_PDCH_UL_TBF_CFG_REQ, lp); case OSMO_PRIM(OSMO_GPRS_RLCMAC_L1CTL_CFG_DL_TBF, PRIM_OP_REQUEST): - return l1ctl_tx_gprs_dl_tbf_cfg_req(ms, - lp->cfg_dl_tbf_req.dl_tbf_nr, - lp->cfg_dl_tbf_req.dl_slotmask, - lp->cfg_dl_tbf_req.dl_tfi); + return osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_PDCH_DL_TBF_CFG_REQ, lp); default: LOGP(DRLCMAC, LOGL_DEBUG, "%s(): Unexpected Rx %s\n", __func__, pdu_name); OSMO_ASSERT(0); @@ -176,37 +160,7 @@ static int l1ctl_dl_block_cb(struct osmocom_ms *ms, struct msgb *msg) { - const struct l1ctl_gprs_dl_block_ind *ind = (void *)msg->l1h; - const uint32_t fn = osmo_load32be(&ind->hdr.fn); - struct osmo_gprs_rlcmac_prim *prim; - - /* FIXME: sadly, rlcmac_prim_l1ctl_alloc() is not exposed */ - prim = osmo_gprs_rlcmac_prim_alloc_l1ctl_pdch_data_ind(0, 0, 0, 0, 0, NULL, 0); - prim->l1ctl = (struct osmo_gprs_rlcmac_l1ctl_prim) { - .pdch_data_ind = { - .fn = fn, - .ts_nr = ind->hdr.tn, - .rx_lev = ind->meas.rx_lev, - .ber10k = osmo_load16be(&ind->meas.ber10k), - .ci_cb = osmo_load16be(&ind->meas.ci_cb), - .data_len = msgb_l2len(msg), - .data = msgb_l2(msg), - } - }; - osmo_gprs_rlcmac_prim_lower_up(prim); - - /* Do not send RTS.ind if we got PTCCH/D */ - if (fn % 104 == 12) - return 0; - - /* Every fn % 13 == 12 we have either a PTCCH or an IDLE slot, thus - * every fn % 13 == 8 we add 5 frames, or 4 frames othrwise. The - * resulting value is first fn of the next block. */ - const uint32_t rts_fn = GSM_TDMA_FN_SUM(fn, (fn % 13 == 8) ? 5 : 4); - prim = osmo_gprs_rlcmac_prim_alloc_l1ctl_pdch_rts_ind(ind->hdr.tn, rts_fn, ind->usf); - osmo_gprs_rlcmac_prim_lower_up(prim); - - return 0; + return osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_PDCH_BLOCK_IND, msg); } int modem_rlcmac_init(struct osmocom_ms *ms) diff --git a/src/host/layer23/src/modem/vty.c b/src/host/layer23/src/modem/vty.c index d827993..da29165 100644 --- a/src/host/layer23/src/modem/vty.c +++ b/src/host/layer23/src/modem/vty.c @@ -19,6 +19,7 @@ #include <stdint.h> #include <stdbool.h> +#include <osmocom/core/fsm.h> #include <osmocom/core/utils.h> #include <osmocom/core/talloc.h> #include <osmocom/core/linuxlist.h> @@ -27,6 +28,7 @@ #include <osmocom/gprs/llc/llc_prim.h> #include <osmocom/gprs/gmm/gmm_prim.h> #include <osmocom/gprs/sm/sm_prim.h> +#include <osmocom/gprs/rlcmac/rlcmac_prim.h> #include <osmocom/vty/vty.h> @@ -84,7 +86,14 @@ return CMD_WARNING; chan_req = modem_grr_gen_chan_req(argv[1][0] == '2'); - if (modem_grr_tx_chan_req(ms, chan_req) != 0) { + const struct osmo_gprs_rlcmac_l1ctl_prim lp = { + .rach_req = { + .is_11bit = false, + .ra = chan_req, + } + }; + + if (osmo_fsm_inst_dispatch(ms->grr_fi, GRR_EV_RACH_REQ, (void *)&lp)) { vty_out(vty, "Failed to send a CHANNEL REQUEST%s", VTY_NEWLINE); return CMD_WARNING; } -- To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/33901 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Change-Id: I8a7d85df7b07d85ac86e0b7e340f6bbacc65e1bc Gerrit-Change-Number: 33901 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-CC: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-MessageType: merged
1 0
0 0
[S] Change in osmocom-bb[master]: trxcon: trx_if_cmd_poweron(): send CMD POWERON unconditionally
by pespin 25 Jul '23

25 Jul '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmocom-bb/+/33903 ) Change subject: trxcon: trx_if_cmd_poweron(): send CMD POWERON unconditionally ...................................................................... trxcon: trx_if_cmd_poweron(): send CMD POWERON unconditionally This works-around a race condition happening when the upper layers are sending L1CTL RESET.req immediately followed by L1CTL FBSB.req. The problem is that the TRXC logic is considering the transceiver powered on until a response to CMD POWEROFF is received. Change-Id: I967ce047eb198f1eaf8446bb4c1f87a98d3de264 Related: OS#5500 --- M src/host/trxcon/src/trx_if.c 1 file changed, 17 insertions(+), 0 deletions(-) Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved diff --git a/src/host/trxcon/src/trx_if.c b/src/host/trxcon/src/trx_if.c index d98bea2..fad1026 100644 --- a/src/host/trxcon/src/trx_if.c +++ b/src/host/trxcon/src/trx_if.c @@ -261,8 +261,10 @@ static int trx_if_cmd_poweron(struct trx_instance *trx) { +#if 0 if (trx->powered_up) return -EAGAIN; +#endif return trx_ctrl_cmd(trx, 1, "POWERON", ""); } -- To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/33903 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Change-Id: I967ce047eb198f1eaf8446bb4c1f87a98d3de264 Gerrit-Change-Number: 33903 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-CC: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-MessageType: merged
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • ...
  • 306
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.