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

March 2023

  • 1 participants
  • 3642 discussions
[S] Change in libosmo-gprs[master]: rlcmac: rlcmac_dec.c: Add missing headers
by pespin 09 Mar '23

09 Mar '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/31752 ) Change subject: rlcmac: rlcmac_dec.c: Add missing headers ...................................................................... rlcmac: rlcmac_dec.c: Add missing headers Change-Id: Ie7fc1a8b101d8ee978a6a770ffe0190fb0de605a --- M src/rlcmac/rlcmac_dec.c 1 file changed, 12 insertions(+), 0 deletions(-) Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified laforge: Looks good to me, approved diff --git a/src/rlcmac/rlcmac_dec.c b/src/rlcmac/rlcmac_dec.c index 8129d30..d607aae 100644 --- a/src/rlcmac/rlcmac_dec.c +++ b/src/rlcmac/rlcmac_dec.c @@ -25,6 +25,9 @@ #include <osmocom/gsm/gsm0502.h> #include <osmocom/gsm/gsm_utils.h> +#include <osmocom/gsm/gsm0502.h> +#include <osmocom/gsm/gsm_utils.h> + #include <osmocom/gprs/rlcmac/rlcmac_private.h> #include <osmocom/gprs/rlcmac/rlcmac_dec.h> #include <osmocom/gprs/rlcmac/rlc.h> -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/31752 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: Ie7fc1a8b101d8ee978a6a770ffe0190fb0de605a Gerrit-Change-Number: 31752 Gerrit-PatchSet: 2 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
1 0
0 0
[S] Change in libosmo-gprs[master]: rlcmac: gprs_rlcmac_prim_call_down/up_cb(): Avoid propagating rc=1
by pespin 09 Mar '23

09 Mar '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/31754 ) Change subject: rlcmac: gprs_rlcmac_prim_call_down/up_cb(): Avoid propagating rc=1 ...................................................................... rlcmac: gprs_rlcmac_prim_call_down/up_cb(): Avoid propagating rc=1 rc=1 Only has meaning in call to rlcmac_down_cb(). gprs_rlcmac_prim_call_down_cb() called by internal rlcmac code guarantess the prim is always freed, and hence returning 1 has not meaning there. Same applies for up direction. Change-Id: Ibd9c44150e8dbec5fbaa98e14aa16703935dac71 --- M src/rlcmac/rlcmac_prim.c 1 file changed, 22 insertions(+), 0 deletions(-) Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified laforge: Looks good to me, approved diff --git a/src/rlcmac/rlcmac_prim.c b/src/rlcmac/rlcmac_prim.c index 0e9cb45..4bcd925 100644 --- a/src/rlcmac/rlcmac_prim.c +++ b/src/rlcmac/rlcmac_prim.c @@ -362,6 +362,8 @@ /* Special return value '1' means: do not free */ if (rc != 1) msgb_free(rlcmac_prim->oph.msg); + else + rc = 0; return rc; } @@ -452,6 +454,8 @@ /* Special return value '1' means: do not free */ if (rc != 1) msgb_free(rlcmac_prim->oph.msg); + else + rc = 0; return rc; } @@ -559,5 +563,7 @@ /* Special return value '1' means: do not free */ if (rc != 1) msgb_free(msg); + else + rc = 0; return rc; } -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/31754 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: Ibd9c44150e8dbec5fbaa98e14aa16703935dac71 Gerrit-Change-Number: 31754 Gerrit-PatchSet: 2 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
1 0
0 0
[M] Change in libosmo-gprs[master]: rlcmac: Log tx of primitive to lower layers
by pespin 09 Mar '23

09 Mar '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/31753 ) Change subject: rlcmac: Log tx of primitive to lower layers ...................................................................... rlcmac: Log tx of primitive to lower layers Change-Id: Ifc3a71c2177657f17020b5ad87c43598942edf76 --- M src/rlcmac/rlcmac_prim.c M tests/rlcmac/rlcmac_prim_test.err 2 files changed, 80 insertions(+), 0 deletions(-) Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified laforge: Looks good to me, approved diff --git a/src/rlcmac/rlcmac_prim.c b/src/rlcmac/rlcmac_prim.c index 2b3e8b2..0e9cb45 100644 --- a/src/rlcmac/rlcmac_prim.c +++ b/src/rlcmac/rlcmac_prim.c @@ -442,6 +442,9 @@ int gprs_rlcmac_prim_call_down_cb(struct osmo_gprs_rlcmac_prim *rlcmac_prim) { int rc; + + LOGRLCMAC(LOGL_DEBUG, "Tx to lower layers: %s\n", osmo_gprs_rlcmac_prim_name(rlcmac_prim)); + if (g_ctx->rlcmac_down_cb) rc = g_ctx->rlcmac_down_cb(rlcmac_prim, g_ctx->rlcmac_down_cb_user_data); else diff --git a/tests/rlcmac/rlcmac_prim_test.err b/tests/rlcmac/rlcmac_prim_test.err index 5d997dd..3b53649 100644 --- a/tests/rlcmac/rlcmac_prim_test.err +++ b/tests/rlcmac/rlcmac_prim_test.err @@ -6,6 +6,7 @@ DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7e +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS @@ -14,6 +15,7 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication @@ -29,6 +31,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164 DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Sending new block at BSN 1, CS=CS-2 DLGLOBAL DEBUG -- Chunk with length 7 is less than remaining space (26): add length header to delimit LLC frame @@ -42,6 +45,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FLOW}: state_chg to FINISHED DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (2) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL INFO TS=7 FN=8 Rx Pkt UL ACK/NACK DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Got GPRS UL ACK bitmap: SSN: 1, BSN 0 to 2 - 1 (2 blocks), "RR" @@ -59,6 +63,7 @@ DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Tx Packet Control Ack DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF{RELEASING}: Deallocated +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request DLGLOBAL INFO TLLI=0x00002342 not found, creating entity on the fly DLGLOBAL INFO UL_TBF{NEW}: Allocated @@ -67,6 +72,7 @@ DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x79 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS @@ -75,16 +81,19 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL INFO UL_TBF{FLOW}: Timeout of T3164 DLGLOBAL INFO UL_TBF{FLOW}: T3164 timeout attempts=1 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to NEW DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x00 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7b +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS @@ -93,16 +102,19 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL INFO UL_TBF{FLOW}: Timeout of T3164 DLGLOBAL INFO UL_TBF{FLOW}: T3164 timeout attempts=2 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to NEW DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x00 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x79 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS @@ -111,16 +123,19 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL INFO UL_TBF{FLOW}: Timeout of T3164 DLGLOBAL INFO UL_TBF{FLOW}: T3164 timeout attempts=3 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to NEW DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x00 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x78 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS @@ -129,6 +144,7 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL INFO UL_TBF{FLOW}: Timeout of T3164 @@ -144,6 +160,7 @@ DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7a +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS @@ -152,6 +169,7 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication @@ -167,14 +185,17 @@ DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164 DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL INFO UL_TBF{FLOW}: Timeout of T3166 DLGLOBAL INFO UL_TBF{FLOW}: T3166 timeout attempts=1 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to NEW DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x00 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7c +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS @@ -183,6 +204,7 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication @@ -195,14 +217,17 @@ DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164 DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL INFO UL_TBF{FLOW}: Timeout of T3166 DLGLOBAL INFO UL_TBF{FLOW}: T3166 timeout attempts=2 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to NEW DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x00 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x79 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS @@ -211,6 +236,7 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication @@ -223,14 +249,17 @@ DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164 DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL INFO UL_TBF{FLOW}: Timeout of T3166 DLGLOBAL INFO UL_TBF{FLOW}: T3166 timeout attempts=3 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to NEW DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x00 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7d +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS @@ -239,6 +268,7 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication @@ -251,6 +281,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164 DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL INFO UL_TBF{FLOW}: Timeout of T3166 DLGLOBAL INFO UL_TBF{FLOW}: T3166 timeout attempts=4 DLGLOBAL NOTICE UL_TBF{FLOW}: TBF establishment failure (T3166 timeout attempts=4) @@ -266,6 +297,7 @@ DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7a +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS @@ -274,6 +306,7 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication @@ -289,6 +322,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164 DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Sending new block at BSN 1, CS=CS-2 DLGLOBAL DEBUG -- Chunk with length 7 is less than remaining space (26): add length header to delimit LLC frame @@ -302,6 +336,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FLOW}: state_chg to FINISHED DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (2) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 0, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 0 @@ -310,6 +345,7 @@ DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying data unit 0 (BSN 0) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) msg block (BSN 0, CS-2): 3c 01 01 00 00 23 42 01 c0 00 08 01 01 d5 71 00 00 08 29 26 24 00 00 00 00 71 62 f2 24 6c 84 44 04 00 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (3) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 1 BSN2 -1) @@ -319,6 +355,7 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FINISHED}: Data block with CV=0 retransmit attempts=1 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (4) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 0, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 0 @@ -327,6 +364,7 @@ DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying data unit 0 (BSN 0) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) msg block (BSN 0, CS-2): 3c 01 01 00 00 23 42 01 c0 00 08 01 01 d5 71 00 00 08 29 26 24 00 00 00 00 71 62 f2 24 6c 84 44 04 00 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (5) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 1 BSN2 -1) @@ -336,6 +374,7 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FINISHED}: Data block with CV=0 retransmit attempts=2 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (6) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 0, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 0 @@ -344,6 +383,7 @@ DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying data unit 0 (BSN 0) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) msg block (BSN 0, CS-2): 3c 01 01 00 00 23 42 01 c0 00 08 01 01 d5 71 00 00 08 29 26 24 00 00 00 00 71 62 f2 24 6c 84 44 04 00 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (7) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 1 BSN2 -1) @@ -353,6 +393,7 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FINISHED}: Data block with CV=0 retransmit attempts=3 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (8) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 0, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 0 @@ -364,11 +405,14 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Received Event N3104_MAX DLGLOBAL INFO UL_TBF{FINISHED}: state_chg to NEW DLGLOBAL INFO UL_TBF{NEW}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x00 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7b +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 @@ -376,6 +420,7 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated @@ -388,6 +433,7 @@ DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7a +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS @@ -396,6 +442,7 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication @@ -411,6 +458,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164 DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL INFO TS=7 FN=4 Rx Pkt UL ACK/NACK DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Got GPRS UL ACK bitmap: SSN: 1, BSN 0 to 1 - 1 (1 blocks), "R" @@ -432,6 +480,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FLOW}: Last UL block sent (CV=0), start T3182 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to FINISHED +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL INFO UL_TBF{FINISHED}: Timeout of T3182 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF{FINISHED}: Deallocated @@ -443,6 +492,7 @@ DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7b +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS @@ -451,6 +501,7 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication @@ -466,6 +517,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164 DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL INFO TS=7 FN=4 Rx Pkt UL ACK/NACK DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Got GPRS UL ACK bitmap: SSN: 1, BSN 0 to 1 - 1 (1 blocks), "R" @@ -487,6 +539,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FLOW}: Last UL block sent (CV=0), start T3182 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to FINISHED +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 1, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 @@ -497,6 +550,7 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FINISHED}: Data block with CV=0 retransmit attempts=1 DLGLOBAL INFO UL_TBF{FINISHED}: Last UL block sent (CV=0), start T3182 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 1, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 @@ -507,6 +561,7 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FINISHED}: Data block with CV=0 retransmit attempts=2 DLGLOBAL INFO UL_TBF{FINISHED}: Last UL block sent (CV=0), start T3182 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 1, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 @@ -517,6 +572,7 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FINISHED}: Data block with CV=0 retransmit attempts=3 DLGLOBAL INFO UL_TBF{FINISHED}: Last UL block sent (CV=0), start T3182 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 1, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 @@ -530,6 +586,7 @@ DLGLOBAL NOTICE UL_TBF{FINISHED}: TBF establishment failure (Data block with CV=0 retransmit attempts=4) DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF{FINISHED}: Deallocated +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request DLGLOBAL INFO TLLI=0x00002342 not found, creating entity on the fly DLGLOBAL INFO UL_TBF{NEW}: Allocated @@ -538,6 +595,7 @@ DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7b +DLGLOBAL DEBUG Tx to lower layers: L1CTL-RACH.request DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS @@ -546,6 +604,7 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication @@ -565,6 +624,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FLOW}: state_chg to FINISHED DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL INFO TS=7 FN=4 Rx Pkt UL ACK/NACK DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Got GPRS UL ACK bitmap: SSN: 1, BSN 0 to 1 - 1 (1 blocks), "R" @@ -589,6 +649,7 @@ DLGLOBAL INFO UL_TBF{RELEASING}: Deallocated DLGLOBAL INFO UL_TBF_ASS{SCHED_PKT_RES_REQ}: Received Event CREATE_RLCMAC_MSG DLGLOBAL INFO UL_TBF_ASS{SCHED_PKT_RES_REQ}: state_chg to WAIT_PKT_UL_ASS +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL INFO UL_TBF_ASS{WAIT_PKT_UL_ASS}: Deallocated DLGLOBAL INFO UL_TBF{ASSIGN}: Deallocated DLGLOBAL INFO Rx from upper layers: GMMRR-ASSIGN.request @@ -598,6 +659,7 @@ DLGLOBAL INFO DL_TBF{NEW}: Allocated DLGLOBAL INFO DL_TBF{NEW}: Received Event DL_ASS_COMPL DLGLOBAL INFO TBF(DL:NR-0:TLLI-00000001) Send L1CTL-CF_DL_TBF.req dl_slotmask=0x80 dl_tfi=0 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_DL_TBF.request DLGLOBAL INFO DL_TBF{NEW}: state_chg to FLOW DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) Rx new DL data @@ -619,6 +681,7 @@ DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG (ts=7,fn=21,usf=0) Tx DL ACK/NACK FinalAck=1 DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) - V(N): "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIR" R=Received I=Invalid +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL INFO DL_TBF{FINISHED}: Deallocated DLGLOBAL INFO Rx from upper layers: GMMRR-ASSIGN.request DLGLOBAL INFO GMMRR-ASSIGN.req: creating new entity TLLI=0x00000001 @@ -627,6 +690,7 @@ DLGLOBAL INFO DL_TBF{NEW}: Allocated DLGLOBAL INFO DL_TBF{NEW}: Received Event DL_ASS_COMPL DLGLOBAL INFO TBF(DL:NR-0:TLLI-00000001) Send L1CTL-CF_DL_TBF.req dl_slotmask=0x80 dl_tfi=0 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_DL_TBF.request DLGLOBAL INFO DL_TBF{NEW}: state_chg to FLOW DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) Rx new DL data @@ -655,6 +719,7 @@ DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_PKT_UL_ASS +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL INFO TS=7 FN=26 Rx Pkt UL ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_PKT_UL_ASS}: Received Event RX_PKT_UL_ASS @@ -662,10 +727,12 @@ DLGLOBAL INFO UL_TBF_ASS{WAIT_PKT_UL_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0xc0 +DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00000001) Tx Packet Control Ack +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00000001) Sending new block at BSN 0, CS=CS-2 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00000001) Dequeue next LLC (len=14) @@ -682,6 +749,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FLOW}: Last UL block sent (CV=0), start T3182 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to FINISHED +DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL INFO DL_TBF{FINISHED}: Deallocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF{FINISHED}: Deallocated -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/31753 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: Ifc3a71c2177657f17020b5ad87c43598942edf76 Gerrit-Change-Number: 31753 Gerrit-PatchSet: 2 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
1 0
0 0
[S] Change in libosmo-gprs[master]: rlcmac: Log sched of PktCtrlAck requested by UL ASS poll
by pespin 09 Mar '23

09 Mar '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/31756 ) ( 1 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one. )Change subject: rlcmac: Log sched of PktCtrlAck requested by UL ASS poll ...................................................................... rlcmac: Log sched of PktCtrlAck requested by UL ASS poll Change-Id: I81ac177d7abdcd49d2b231ae059ec859b433dd03 --- M src/rlcmac/sched.c M tests/rlcmac/rlcmac_prim_test.err 2 files changed, 12 insertions(+), 0 deletions(-) Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve diff --git a/src/rlcmac/sched.c b/src/rlcmac/sched.c index 2630940..f77deab 100644 --- a/src/rlcmac/sched.c +++ b/src/rlcmac/sched.c @@ -204,6 +204,8 @@ return msg; } if (tbfs->poll_ul_ass) { + LOGRLCMAC(LOGL_DEBUG, "(ts=%u,fn=%u,usf=%u) Tx Pkt Control Ack (UL ASS poll)\n", + bi->ts, bi->fn, bi->usf); msg = gprs_rlcmac_tbf_create_pkt_ctrl_ack(ul_tbf_as_tbf(tbfs->poll_ul_ass)); if (msg) return msg; diff --git a/tests/rlcmac/rlcmac_prim_test.err b/tests/rlcmac/rlcmac_prim_test.err index 3b53649..1aedd64 100644 --- a/tests/rlcmac/rlcmac_prim_test.err +++ b/tests/rlcmac/rlcmac_prim_test.err @@ -731,6 +731,7 @@ DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG (ts=7,fn=43,usf=2) Tx Pkt Control Ack (UL ASS poll) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00000001) Tx Packet Control Ack DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/31756 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: I81ac177d7abdcd49d2b231ae059ec859b433dd03 Gerrit-Change-Number: 31756 Gerrit-PatchSet: 2 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
1 0
0 0
[M] Change in libosmo-gprs[master]: rlcmac: Move create_pkt_ctrl_ack() to tbf base class
by pespin 09 Mar '23

09 Mar '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/31755 ) Change subject: rlcmac: Move create_pkt_ctrl_ack() to tbf base class ...................................................................... rlcmac: Move create_pkt_ctrl_ack() to tbf base class The code to generate a PKT CTRL ACK is the same for a DL TBF and an UL TBF. Move it to the generic base class in order to be able to generate it for a DL TBF in a follow up patch. Change-Id: I767696b445842ebc32b35c320273b13f63076ca4 --- M include/osmocom/gprs/rlcmac/tbf.h M include/osmocom/gprs/rlcmac/tbf_ul.h M src/rlcmac/sched.c M src/rlcmac/tbf.c M src/rlcmac/tbf_ul.c 5 files changed, 68 insertions(+), 38 deletions(-) Approvals: fixeria: Looks good to me, but someone else must approve Jenkins Builder: Verified laforge: Looks good to me, approved diff --git a/include/osmocom/gprs/rlcmac/tbf.h b/include/osmocom/gprs/rlcmac/tbf.h index 2886c83..83a887d 100644 --- a/include/osmocom/gprs/rlcmac/tbf.h +++ b/include/osmocom/gprs/rlcmac/tbf.h @@ -27,3 +27,14 @@ void gprs_rlcmac_tbf_destructor(struct gprs_rlcmac_tbf *tbf); void gprs_rlcmac_tbf_free(struct gprs_rlcmac_tbf *tbf); + +struct msgb *gprs_rlcmac_tbf_create_pkt_ctrl_ack(const struct gprs_rlcmac_tbf *tbf); + +#define LOGPTBF(tbf, lvl, fmt, args...) \ + LOGP(g_rlcmac_log_cat[tbf->direction == GPRS_RLCMAC_TBF_DIR_DL ? \ + OSMO_GPRS_RLCMAC_LOGC_TBFDL : \ + OSMO_GPRS_RLCMAC_LOGC_TBFUL], \ + lvl, "TBF(%s:NR-%" PRIu8 ":TLLI-%08x) " fmt, \ + tbf->direction == GPRS_RLCMAC_TBF_DIR_DL ? "DL" : "UL", \ + tbf->nr, tbf->gre->tlli, \ + ## args) diff --git a/include/osmocom/gprs/rlcmac/tbf_ul.h b/include/osmocom/gprs/rlcmac/tbf_ul.h index ab85f50..e5cfa91 100644 --- a/include/osmocom/gprs/rlcmac/tbf_ul.h +++ b/include/osmocom/gprs/rlcmac/tbf_ul.h @@ -54,7 +54,6 @@ struct msgb *gprs_rlcmac_ul_tbf_data_create(struct gprs_rlcmac_ul_tbf *ul_tbf, const struct gprs_rlcmac_rts_block_ind *bi); struct msgb *gprs_rlcmac_ul_tbf_dummy_create(const struct gprs_rlcmac_ul_tbf *ul_tbf); -struct msgb *gprs_rlcmac_ul_tbf_create_pkt_ctrl_ack(const struct gprs_rlcmac_ul_tbf *ul_tbf); int gprs_rlcmac_ul_tbf_handle_pkt_ul_ack_nack(struct gprs_rlcmac_ul_tbf *ul_tbf, const RlcMacDownlink_t *dl_block); diff --git a/src/rlcmac/sched.c b/src/rlcmac/sched.c index 0431631..2630940 100644 --- a/src/rlcmac/sched.c +++ b/src/rlcmac/sched.c @@ -198,13 +198,13 @@ if (tbfs->poll_ul_ack) { LOGRLCMAC(LOGL_DEBUG, "(ts=%u,fn=%u,usf=%u) Tx Pkt Control Ack (UL ACK/NACK poll)\n", bi->ts, bi->fn, bi->usf); - msg = gprs_rlcmac_ul_tbf_create_pkt_ctrl_ack(tbfs->poll_ul_ack); + msg = gprs_rlcmac_tbf_create_pkt_ctrl_ack(ul_tbf_as_tbf(tbfs->poll_ul_ack)); /* Last UL message, freeing */ gprs_rlcmac_ul_tbf_free(tbfs->poll_ul_ack); return msg; } if (tbfs->poll_ul_ass) { - msg = gprs_rlcmac_ul_tbf_create_pkt_ctrl_ack(tbfs->poll_ul_ass); + msg = gprs_rlcmac_tbf_create_pkt_ctrl_ack(ul_tbf_as_tbf(tbfs->poll_ul_ass)); if (msg) return msg; } diff --git a/src/rlcmac/tbf.c b/src/rlcmac/tbf.c index ea15d69..c18ad83 100644 --- a/src/rlcmac/tbf.c +++ b/src/rlcmac/tbf.c @@ -19,8 +19,14 @@ * */ +#include <osmocom/core/bitvec.h> +#include <osmocom/core/msgb.h> +#include <osmocom/gsm/protocol/gsm_04_08.h> + #include <osmocom/gprs/rlcmac/tbf.h> #include <osmocom/gprs/rlcmac/tbf_ul.h> +#include <osmocom/gprs/rlcmac/gre.h> +#include <osmocom/gprs/rlcmac/rlcmac_enc.h> void gprs_rlcmac_tbf_constructor(struct gprs_rlcmac_tbf *tbf, enum gprs_rlcmac_tbf_direction direction, @@ -41,3 +47,38 @@ gprs_rlcmac_ul_tbf_free(tbf_as_ul_tbf(tbf)); /* else: TODO dl_tbf not yet implemented */ } + +struct msgb *gprs_rlcmac_tbf_create_pkt_ctrl_ack(const struct gprs_rlcmac_tbf *tbf) +{ + struct msgb *msg; + struct bitvec bv; + RlcMacUplink_t ul_block; + int rc; + + OSMO_ASSERT(tbf); + + msg = msgb_alloc(GSM_MACBLOCK_LEN, "pkt_ctrl_ack"); + if (!msg) + return NULL; + + /* Initialize a bit vector that uses allocated msgb as the data buffer. */ + bv = (struct bitvec){ + .data = msgb_put(msg, GSM_MACBLOCK_LEN), + .data_len = GSM_MACBLOCK_LEN, + }; + bitvec_unhex(&bv, GPRS_RLCMAC_DUMMY_VEC); + + gprs_rlcmac_enc_prepare_pkt_ctrl_ack(&ul_block, tbf->gre->tlli); + rc = osmo_gprs_rlcmac_encode_uplink(&bv, &ul_block); + if (rc < 0) { + LOGPTBF(tbf, LOGL_ERROR, "Encoding of Packet Control ACK failed (%d)\n", rc); + goto free_ret; + } + LOGPTBF(tbf, LOGL_DEBUG, "Tx Packet Control Ack\n"); + + return msg; + +free_ret: + msgb_free(msg); + return NULL; +} diff --git a/src/rlcmac/tbf_ul.c b/src/rlcmac/tbf_ul.c index fcd7f56..143c880 100644 --- a/src/rlcmac/tbf_ul.c +++ b/src/rlcmac/tbf_ul.c @@ -310,41 +310,6 @@ return NULL; } -struct msgb *gprs_rlcmac_ul_tbf_create_pkt_ctrl_ack(const struct gprs_rlcmac_ul_tbf *ul_tbf) -{ - struct msgb *msg; - struct bitvec bv; - RlcMacUplink_t ul_block; - int rc; - - OSMO_ASSERT(ul_tbf); - - msg = msgb_alloc(GSM_MACBLOCK_LEN, "pkt_ctrl_ack"); - if (!msg) - return NULL; - - /* Initialize a bit vector that uses allocated msgb as the data buffer. */ - bv = (struct bitvec){ - .data = msgb_put(msg, GSM_MACBLOCK_LEN), - .data_len = GSM_MACBLOCK_LEN, - }; - bitvec_unhex(&bv, GPRS_RLCMAC_DUMMY_VEC); - - gprs_rlcmac_enc_prepare_pkt_ctrl_ack(&ul_block, ul_tbf->tbf.gre->tlli); - rc = osmo_gprs_rlcmac_encode_uplink(&bv, &ul_block); - if (rc < 0) { - LOGPTBFUL(ul_tbf, LOGL_ERROR, "Encoding of Packet Control ACK failed (%d)\n", rc); - goto free_ret; - } - LOGPTBFUL(ul_tbf, LOGL_DEBUG, "Tx Packet Control Ack\n"); - - return msg; - -free_ret: - msgb_free(msg); - return NULL; -} - bool gprs_rlcmac_ul_tbf_have_data(const struct gprs_rlcmac_ul_tbf *ul_tbf) { return (ul_tbf->llc_tx_msg && msgb_length(ul_tbf->llc_tx_msg) > 0) || -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/31755 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: I767696b445842ebc32b35c320273b13f63076ca4 Gerrit-Change-Number: 31755 Gerrit-PatchSet: 2 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
1 0
0 0
[L] Change in libosmo-gprs[master]: rlcmac: Implement DL TBF CCCH & PACCH allocation with TBF Starting Time
by pespin 09 Mar '23

09 Mar '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/31757 ) Change subject: rlcmac: Implement DL TBF CCCH & PACCH allocation with TBF Starting Time ...................................................................... rlcmac: Implement DL TBF CCCH & PACCH allocation with TBF Starting Time Change-Id: Idafb4e37971e93c7e8667b8669a29755485e95bb --- M include/osmocom/gprs/rlcmac/Makefile.am M include/osmocom/gprs/rlcmac/gre.h A include/osmocom/gprs/rlcmac/tbf_dl_ass_fsm.h M src/rlcmac/Makefile.am M src/rlcmac/gre.c M src/rlcmac/misc.c M src/rlcmac/rlcmac.c M src/rlcmac/sched.c A src/rlcmac/tbf_dl_ass_fsm.c M tests/rlcmac/rlcmac_prim_test.err 10 files changed, 562 insertions(+), 31 deletions(-) Approvals: Jenkins Builder: Verified pespin: Looks good to me, approved diff --git a/include/osmocom/gprs/rlcmac/Makefile.am b/include/osmocom/gprs/rlcmac/Makefile.am index 81cfecd..a117a34 100644 --- a/include/osmocom/gprs/rlcmac/Makefile.am +++ b/include/osmocom/gprs/rlcmac/Makefile.am @@ -18,6 +18,7 @@ tbf_ul.h \ tbf_ul_fsm.h \ tbf_ul_ass_fsm.h \ + tbf_dl_ass_fsm.h \ types_private.h \ $(NULL) diff --git a/include/osmocom/gprs/rlcmac/gre.h b/include/osmocom/gprs/rlcmac/gre.h index f6397a6..8322cf7 100644 --- a/include/osmocom/gprs/rlcmac/gre.h +++ b/include/osmocom/gprs/rlcmac/gre.h @@ -3,6 +3,7 @@ #include <osmocom/gprs/rlcmac/rlcmac.h> #include <osmocom/gprs/rlcmac/llc_queue.h> +#include <osmocom/gprs/rlcmac/tbf_dl_ass_fsm.h> struct gprs_rlcmac_dl_tbf; struct gprs_rlcmac_ul_tbf; @@ -13,6 +14,9 @@ struct gprs_rlcmac_llc_queue *llc_queue; + /* Manage TBF Starting Time delay during TBF assignment: */ + struct gprs_rlcmac_tbf_dl_ass_fsm_ctx dl_tbf_dl_ass_fsm; + struct gprs_rlcmac_dl_tbf *dl_tbf; struct gprs_rlcmac_ul_tbf *ul_tbf; }; diff --git a/include/osmocom/gprs/rlcmac/tbf_dl_ass_fsm.h b/include/osmocom/gprs/rlcmac/tbf_dl_ass_fsm.h new file mode 100644 index 0000000..e45e488 --- /dev/null +++ b/include/osmocom/gprs/rlcmac/tbf_dl_ass_fsm.h @@ -0,0 +1,62 @@ +/* DL TBF Assignment FSM, 3GPP TS 44.060 */ +#pragma once + +#include <stdint.h> +#include <stdbool.h> + +#include <osmocom/core/fsm.h> +#include <osmocom/core/msgb.h> + +#include <osmocom/gprs/rlcmac/csn1_defs.h> +#include <osmocom/gprs/rlcmac/rlcmac_private.h> +#include <osmocom/gprs/rlcmac/rlcmac_dec.h> + +enum gprs_rlcmac_tbf_dl_ass_fsm_states { + GPRS_RLCMAC_TBF_DL_ASS_ST_IDLE = 0, /* new created TBF */ + GPRS_RLCMAC_TBF_DL_ASS_ST_WAIT_TBF_STARTING_TIME, /* wait for Immediate Assignment */ + GPRS_RLCMAC_TBF_DL_ASS_ST_COMPL, /* Completed, will update TBF and return to IDLE state */ +}; + +struct gprs_rlcmac_tbf_dl_ass_fsm_ctx { + struct osmo_fsm_inst *fi; + struct gprs_rlcmac_entity *gre; /* backpointer */ + struct gprs_rlcmac_dl_tbf_allocation alloc; + union { + IA_RestOctets_t iaro; /* CCCH Imm Ass rest octets */ + RlcMacDownlink_t dl_block; /* PACCH pkt dl ass */ + }; + bool tbf_starting_time_exists; + uint32_t tbf_starting_time; + uint8_t ts_nr; +}; + +enum tbf_dl_ass_fsm_event { + GPRS_RLCMAC_TBF_DL_ASS_EV_RX_CCCH_IMM_ASS, /* Start Downlink/Uplink assignment from CCCH Imm Ass (data: strcut tbf_start_ev_rx_ccch_imm_ass_ctx) */ + GPRS_RLCMAC_TBF_DL_ASS_EV_RX_PACCH_PKT_ASS, /* Start Downlink/Uplink assignment from Pkt Dl/Ul Ass (data: strcut tbf_start_ev_rx_pacch_pkt_ass_ctx) */ + GPRS_RLCMAC_TBF_DL_ASS_EV_TBF_STARTING_TIME, /* TBF Starting Time reached */ +}; + +struct tbf_start_ev_rx_ccch_imm_ass_ctx { + uint8_t ts_nr; + uint32_t fn; + const struct gsm48_imm_ass *ia; + const IA_RestOctets_t *iaro; +}; + +struct tbf_start_ev_rx_pacch_pkt_ass_ctx { + uint8_t ts_nr; + uint32_t fn; + const RlcMacDownlink_t *dl_block; /* decoded Pkt{Ul,Dl}Ass */ +}; +int gprs_rlcmac_tbf_dl_ass_fsm_init(void); +void gprs_rlcmac_tbf_dl_ass_fsm_set_log_cat(int logcat); + +int gprs_rlcmac_tbf_dl_ass_fsm_constructor(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx, struct gprs_rlcmac_entity *gre); +void gprs_rlcmac_tbf_dl_ass_fsm_destructor(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx); + +int gprs_rlcmac_tbf_start_from_ccch(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx, const struct tbf_start_ev_rx_ccch_imm_ass_ctx *d); +int gprs_rlcmac_tbf_start_from_pacch(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx, const struct tbf_start_ev_rx_pacch_pkt_ass_ctx *d); + +bool gprs_rlcmac_tbf_start_pending(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx); +void gprs_rlcmac_tbf_start_fn_tick(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx, uint32_t fn, uint8_t ts_nr); +enum gprs_rlcmac_tbf_dl_ass_fsm_states gprs_rlcmac_tbf_start_state(const struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx); diff --git a/src/rlcmac/Makefile.am b/src/rlcmac/Makefile.am index 9133df0..78bf9ed 100644 --- a/src/rlcmac/Makefile.am +++ b/src/rlcmac/Makefile.am @@ -47,6 +47,7 @@ tbf_ul.c \ tbf_ul_fsm.c \ tbf_ul_ass_fsm.c \ + tbf_dl_ass_fsm.c \ ts_44_060.c \ ts_44_064.c \ misc.c \ diff --git a/src/rlcmac/gre.c b/src/rlcmac/gre.c index 53d53c7..87953c1 100644 --- a/src/rlcmac/gre.c +++ b/src/rlcmac/gre.c @@ -25,6 +25,7 @@ #include <osmocom/gprs/rlcmac/rlcmac_prim.h> #include <osmocom/gprs/rlcmac/rlcmac_private.h> #include <osmocom/gprs/rlcmac/tbf_dl.h> +#include <osmocom/gprs/rlcmac/tbf_dl_ass_fsm.h> #include <osmocom/gprs/rlcmac/tbf_ul_fsm.h> #include <osmocom/gprs/rlcmac/tbf_ul.h> #include <osmocom/gprs/rlcmac/gre.h> @@ -32,6 +33,7 @@ struct gprs_rlcmac_entity *gprs_rlcmac_entity_alloc(uint32_t tlli) { struct gprs_rlcmac_entity *gre; + int rc; gre = talloc_zero(g_ctx, struct gprs_rlcmac_entity); if (!gre) @@ -44,6 +46,10 @@ g_ctx->cfg.codel.use, g_ctx->cfg.codel.interval_msec); + rc = gprs_rlcmac_tbf_dl_ass_fsm_constructor(&gre->dl_tbf_dl_ass_fsm, gre); + if (rc < 0) + goto err_free_gre; + gre->tlli = tlli; llist_add_tail(&gre->entry, &g_ctx->gre_list); @@ -59,6 +65,7 @@ if (!gre) return; + gprs_rlcmac_tbf_dl_ass_fsm_destructor(&gre->dl_tbf_dl_ass_fsm); gprs_rlcmac_dl_tbf_free(gre->dl_tbf); gprs_rlcmac_ul_tbf_free(gre->ul_tbf); gprs_rlcmac_llc_queue_free(gre->llc_queue); diff --git a/src/rlcmac/misc.c b/src/rlcmac/misc.c index 7317bd1..fb3d25b 100644 --- a/src/rlcmac/misc.c +++ b/src/rlcmac/misc.c @@ -21,6 +21,7 @@ #include <osmocom/gprs/rlcmac/tbf_dl_fsm.h> #include <osmocom/gprs/rlcmac/tbf_ul_fsm.h> #include <osmocom/gprs/rlcmac/tbf_ul_ass_fsm.h> +#include <osmocom/gprs/rlcmac/tbf_dl_ass_fsm.h> int g_rlcmac_log_cat[_OSMO_GPRS_RLCMAC_LOGC_MAX] = { [0 ... _OSMO_GPRS_RLCMAC_LOGC_MAX - 1] = DLGLOBAL @@ -32,6 +33,9 @@ g_rlcmac_log_cat[logc] = logc_num; switch (logc) { + case OSMO_GPRS_RLCMAC_LOGC_RLCMAC: + gprs_rlcmac_tbf_dl_ass_fsm_set_log_cat(logc_num); + break; case OSMO_GPRS_RLCMAC_LOGC_TBFUL: gprs_rlcmac_tbf_ul_fsm_set_log_cat(logc_num); gprs_rlcmac_tbf_ul_ass_fsm_set_log_cat(logc_num); diff --git a/src/rlcmac/rlcmac.c b/src/rlcmac/rlcmac.c index 4647fff..8ff6c68 100644 --- a/src/rlcmac/rlcmac.c +++ b/src/rlcmac/rlcmac.c @@ -86,6 +86,11 @@ osmo_tdefs_reset(g_ctx->T_defs); if (first_init) { + rc = gprs_rlcmac_tbf_dl_ass_fsm_init(); + if (rc != 0) { + TALLOC_FREE(g_ctx); + return rc; + } rc = gprs_rlcmac_tbf_dl_fsm_init(); if (rc != 0) { TALLOC_FREE(g_ctx); @@ -195,8 +200,8 @@ { int rc; struct gprs_rlcmac_entity *gre; - struct gprs_rlcmac_dl_tbf *dl_tbf; const Packet_Downlink_ImmAssignment_t *pkdlass; + struct tbf_start_ev_rx_ccch_imm_ass_ctx ev_data; if (iaro->UnionType == 1) { /* TODO */ @@ -211,17 +216,13 @@ return -ENOENT; } - LOGGRE(gre, LOGL_INFO, "Got PCH IMM_ASS (DL_TBF): DL_TFI=%u TS=%u\n", - pkdlass->TFI_ASSIGNMENT, ts_nr); - dl_tbf = gprs_rlcmac_dl_tbf_alloc(gre); - dl_tbf->cur_alloc.dl_tfi = pkdlass->TFI_ASSIGNMENT; - dl_tbf->cur_alloc.ts[ts_nr].allocated = true; - - /* replace old DL TBF with new one: */ - gprs_rlcmac_dl_tbf_free(gre->dl_tbf); - gre->dl_tbf = dl_tbf; - - rc = osmo_fsm_inst_dispatch(dl_tbf->state_fsm.fi, GPRS_RLCMAC_TBF_UL_EV_DL_ASS_COMPL, NULL); + ev_data = (struct tbf_start_ev_rx_ccch_imm_ass_ctx) { + .ts_nr = ts_nr, + .fn = fn, + .ia = ia, + .iaro = iaro, + }; + rc = gprs_rlcmac_tbf_start_from_ccch(&gre->dl_tbf_dl_ass_fsm, &ev_data); return rc; } @@ -333,6 +334,82 @@ return rc; } +static struct gprs_rlcmac_tbf *find_tbf_by_global_tfi(const Global_TFI_t *gtfi) +{ + struct gprs_rlcmac_ul_tbf *ul_tbf; + struct gprs_rlcmac_dl_tbf *dl_tbf; + switch (gtfi->UnionType) { + case 0: /* UL TFI */ + ul_tbf = gprs_rlcmac_find_ul_tbf_by_tfi(gtfi->u.UPLINK_TFI); + if (ul_tbf) + return ul_tbf_as_tbf(ul_tbf); + break; + case 1: /* DL TFI */ + dl_tbf = gprs_rlcmac_find_dl_tbf_by_tfi(gtfi->u.DOWNLINK_TFI); + if (dl_tbf) + return dl_tbf_as_tbf(dl_tbf); + break; + default: + OSMO_ASSERT(0); + } + return NULL; +} + +static struct gprs_rlcmac_entity *find_gre_by_global_tfi(const Global_TFI_t *gtfi) +{ + struct gprs_rlcmac_tbf *tbf = find_tbf_by_global_tfi(gtfi); + if (tbf) + return tbf->gre; + return NULL; +} + + +static int gprs_rlcmac_handle_pkt_dl_ass(const struct osmo_gprs_rlcmac_prim *rlcmac_prim, const RlcMacDownlink_t *dl_block) +{ + struct gprs_rlcmac_tbf *tbf = NULL; + struct gprs_rlcmac_entity *gre = NULL; + const Packet_Downlink_Assignment_t *dlass = &dl_block->u.Packet_Downlink_Assignment; + struct tbf_start_ev_rx_pacch_pkt_ass_ctx ev_data; + int rc; + + /* Attempt to find relevant MS in assignment state from ID (set "gre" ptr): */ + switch (dlass->ID.UnionType) { + case 0: /* GLOBAL_TFI: */ + tbf = find_tbf_by_global_tfi(&dlass->ID.u.Global_TFI); + if (tbf) + gre = tbf->gre; + break; + case 1: /* TLLI */ + gre = gprs_rlcmac_find_entity_by_tlli(dlass->ID.u.TLLI); + break; + default: + OSMO_ASSERT(0); + } + + if (!gre) { + LOGRLCMAC(LOGL_INFO, "TS=%u FN=%u Rx Pkt DL ASS: MS not found\n", + rlcmac_prim->l1ctl.pdch_data_ind.ts_nr, + rlcmac_prim->l1ctl.pdch_data_ind.fn); + return -ENOENT; + } + + ev_data = (struct tbf_start_ev_rx_pacch_pkt_ass_ctx) { + .ts_nr = rlcmac_prim->l1ctl.pdch_data_ind.ts_nr, + .fn = rlcmac_prim->l1ctl.pdch_data_ind.fn, + .dl_block = dl_block, + }; + rc = gprs_rlcmac_tbf_start_from_pacch(&gre->dl_tbf_dl_ass_fsm, &ev_data); + + if (tbf && dl_block->SP) { + uint32_t poll_fn = rrbp2fn(rlcmac_prim->l1ctl.pdch_data_ind.fn, dl_block->RRBP); + gprs_rlcmac_pdch_ulc_reserve(g_ctx->sched.ulc[rlcmac_prim->l1ctl.pdch_data_ind.ts_nr], + poll_fn, + GPRS_RLCMAC_PDCH_ULC_POLL_DL_ASS, + tbf); + } + return rc; +} + static int gprs_rlcmac_handle_pkt_ul_ack_nack(const struct osmo_gprs_rlcmac_prim *rlcmac_prim, const RlcMacDownlink_t *dl_block) { struct gprs_rlcmac_ul_tbf *ul_tbf; @@ -362,28 +439,13 @@ static int gprs_rlcmac_handle_pkt_ul_ass(const struct osmo_gprs_rlcmac_prim *rlcmac_prim, const RlcMacDownlink_t *dl_block) { struct gprs_rlcmac_entity *gre = NULL; - struct gprs_rlcmac_ul_tbf *ul_tbf = NULL; - struct gprs_rlcmac_dl_tbf *dl_tbf; const Packet_Uplink_Assignment_t *ulass = &dl_block->u.Packet_Uplink_Assignment; int rc; /* Attempt to find relevant MS owning UL TBF in assignment state from ID (set "gre" ptr): */ switch (ulass->ID.UnionType) { case 0: /* GLOBAL_TFI: */ - switch (ulass->ID.u.Global_TFI.UnionType) { - case 0: /* UL TFI */ - ul_tbf = gprs_rlcmac_find_ul_tbf_by_tfi(ulass->ID.u.Global_TFI.u.UPLINK_TFI); - if (ul_tbf) - gre = ul_tbf->tbf.gre; - break; - case 1: /* DL TFI */ - dl_tbf = gprs_rlcmac_find_dl_tbf_by_tfi(ulass->ID.u.Global_TFI.u.DOWNLINK_TFI); - if (dl_tbf) - gre = dl_tbf->tbf.gre; - break; - default: - OSMO_ASSERT(0); - } + gre = find_gre_by_global_tfi(&ulass->ID.u.Global_TFI); break; case 1: /* TLLI */ gre = gprs_rlcmac_find_entity_by_tlli(ulass->ID.u.TLLI); @@ -443,6 +505,9 @@ get_value_string(osmo_gprs_rlcmac_dl_msg_type_names, dl_ctrl_block->u.MESSAGE_TYPE)); switch (dl_ctrl_block->u.MESSAGE_TYPE) { + case OSMO_GPRS_RLCMAC_DL_MSGT_PACKET_DOWNLINK_ASSIGNMENT: + rc = gprs_rlcmac_handle_pkt_dl_ass(rlcmac_prim, dl_ctrl_block); + break; case OSMO_GPRS_RLCMAC_DL_MSGT_PACKET_UPLINK_ACK_NACK: rc = gprs_rlcmac_handle_pkt_ul_ack_nack(rlcmac_prim, dl_ctrl_block); break; diff --git a/src/rlcmac/sched.c b/src/rlcmac/sched.c index f77deab..46e43ab 100644 --- a/src/rlcmac/sched.c +++ b/src/rlcmac/sched.c @@ -38,6 +38,7 @@ struct gprs_rlcmac_ul_tbf *poll_ul_ack_new_ul_tbf; /* 9.3.2.4.2 (answer with PKT RES REQ) */ struct gprs_rlcmac_ul_tbf *poll_ul_ack; /* 11.2.2 (answer with PKT CTRL ACK) */ struct gprs_rlcmac_ul_tbf *poll_ul_ass; /* (answer Pkt UL ASS with PKT CTRL ACK) */ + struct gprs_rlcmac_tbf *poll_dl_ass; /* (answer Pkt DL ASS with PKT CTRL ACK) */ struct gprs_rlcmac_ul_tbf *ul_ass; /* PCU grants USF/SBA: transmit Pkt Res Req (2phase access)*/ }; @@ -79,7 +80,7 @@ tbfs->poll_ul_ass = tbf_as_ul_tbf(node->tbf); break; case GPRS_RLCMAC_PDCH_ULC_POLL_DL_ASS: - /* TODO */ + tbfs->poll_dl_ass = node->tbf; break; case GPRS_RLCMAC_PDCH_ULC_POLL_UL_ACK: /* TS 44.060: 9.3.2.4.2 If the PACKET UPLINK ACK/NACK message @@ -203,6 +204,13 @@ gprs_rlcmac_ul_tbf_free(tbfs->poll_ul_ack); return msg; } + if (tbfs->poll_dl_ass) { + LOGRLCMAC(LOGL_DEBUG, "(ts=%u,fn=%u,usf=%u) Tx Pkt Control Ack (DL ASS poll)\n", + bi->ts, bi->fn, bi->usf); + msg = gprs_rlcmac_tbf_create_pkt_ctrl_ack(tbfs->poll_dl_ass); + if (msg) + return msg; + } if (tbfs->poll_ul_ass) { LOGRLCMAC(LOGL_DEBUG, "(ts=%u,fn=%u,usf=%u) Tx Pkt Control Ack (UL ASS poll)\n", bi->ts, bi->fn, bi->usf); @@ -259,9 +267,12 @@ static void rts_tick(const struct gprs_rlcmac_rts_block_ind *bi) { struct gprs_rlcmac_entity *gre; + llist_for_each_entry(gre, &g_ctx->gre_list, entry) { if (gre->ul_tbf && gprs_rlcmac_tbf_ul_ass_waiting_tbf_starting_time(gre->ul_tbf)) gprs_rlcmac_tbf_ul_ass_fn_tick(gre->ul_tbf, bi->fn, bi->ts); + if (gprs_rlcmac_tbf_start_pending(&gre->dl_tbf_dl_ass_fsm)) + gprs_rlcmac_tbf_start_fn_tick(&gre->dl_tbf_dl_ass_fsm, bi->fn, bi->ts); } } diff --git a/src/rlcmac/tbf_dl_ass_fsm.c b/src/rlcmac/tbf_dl_ass_fsm.c new file mode 100644 index 0000000..9f13e75 --- /dev/null +++ b/src/rlcmac/tbf_dl_ass_fsm.c @@ -0,0 +1,343 @@ +/* TBF as per 3GPP TS 44.064 */ +/* + * (C) 2023 by sysmocom - s.f.m.c. GmbH <info(a)sysmocom.de> + * + * All Rights Reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +#include <errno.h> +#include <talloc.h> +#include <osmocom/core/tdef.h> +#include <osmocom/core/fsm.h> +#include <osmocom/core/bitvec.h> + +#include <osmocom/gprs/rlcmac/types.h> +#include <osmocom/gprs/rlcmac/tbf_dl_ass_fsm.h> +#include <osmocom/gprs/rlcmac/tbf_dl.h> +#include <osmocom/gprs/rlcmac/gre.h> +#include <osmocom/gprs/rlcmac/sched.h> +#include <osmocom/gprs/rlcmac/csn1_defs.h> +#include <osmocom/gprs/rlcmac/rlcmac_enc.h> +#include <osmocom/gprs/rlcmac/pdch_ul_controller.h> + +#define X(s) (1 << (s)) + +static const struct value_string tbf_dl_ass_fsm_event_names[] = { + { GPRS_RLCMAC_TBF_DL_ASS_EV_RX_CCCH_IMM_ASS, "RX_CCCH_IMM_ASS" }, + { GPRS_RLCMAC_TBF_DL_ASS_EV_RX_PACCH_PKT_ASS, "RX_PACCH_PKT_ASS" }, + { GPRS_RLCMAC_TBF_DL_ASS_EV_TBF_STARTING_TIME, "TBF_STARTING_TIME" }, + { 0, NULL } +}; + +static const struct osmo_tdef_state_timeout tbf_dl_ass_fsm_timeouts[32] = { + [GPRS_RLCMAC_TBF_DL_ASS_ST_IDLE] = { }, + [GPRS_RLCMAC_TBF_DL_ASS_ST_WAIT_TBF_STARTING_TIME] = { }, + [GPRS_RLCMAC_TBF_DL_ASS_ST_COMPL] = { }, +}; + +/* Transition to a state, using the T timer defined in tbf_fsm_timeouts. + * The actual timeout value is in turn obtained from conn->T_defs. + * Assumes local variable fi exists. */ + #define tbf_dl_ass_fsm_state_chg(fi, NEXT_STATE) \ + osmo_tdef_fsm_inst_state_chg(fi, NEXT_STATE, \ + tbf_dl_ass_fsm_timeouts, \ + g_ctx->T_defs, \ + -1) + +static int handle_imm_ass(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx, const struct tbf_start_ev_rx_ccch_imm_ass_ctx *d) +{ + const Packet_Downlink_ImmAssignment_t *pkdlass; + + switch (d->iaro->UnionType) { + case 1: /* d->iaro->u.lh.* (IA_RestOctetsLH_t) */ + switch (d->iaro->u.lh.lh0x.UnionType) { + case 1: /* d->iaro->u.ll.lh0x.MultiBlock_PktDlAss.* (IA_MultiBlock_PktDlAss_t) */ + return -ENOTSUP; /* TODO */ + } + case 3: /* d->iaro->u.hh.* (IA_RestOctetsHH_t) */ + switch (d->iaro->u.hh.UnionType) { + case 0: /* d->iaro->u.hh.u.UplinkDownlinkAssignment.* (IA_PacketAssignment_UL_DL_t) */ + switch (d->iaro->u.hh.u.UplinkDownlinkAssignment.UnionType) { + case 1: /* d->iaro->u.hh.u.UplinkDownlinkAssignment.ul_dl.Packet_Downlink_ImmAssignment.* (Packet_Downlink_ImmAssignment_t) */ + pkdlass = &d->iaro->u.hh.u.UplinkDownlinkAssignment.ul_dl.Packet_Downlink_ImmAssignment; + ctx->alloc.dl_tfi = pkdlass->TFI_ASSIGNMENT; + + ctx->tbf_starting_time_exists = pkdlass->Exist_TBF_STARTING_TIME; + if (ctx->tbf_starting_time_exists) + ctx->tbf_starting_time = TBF_StartingTime_to_fn(&pkdlass->TBF_STARTING_TIME, d->fn); + + ctx->alloc.num_ts = 1; + ctx->alloc.ts[d->ts_nr].allocated = true; + LOGPFSML(ctx->fi, LOGL_INFO, "Got PCH IMM_ASS (DL_TBF): DL_TFI=%u TS=%u\n", + pkdlass->TFI_ASSIGNMENT, d->ts_nr); + return 0; + } + } + break; + } + + OSMO_ASSERT(0); + return -EFAULT; +} + +static int handle_pkt_dl_ass(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx, const struct tbf_start_ev_rx_pacch_pkt_ass_ctx *d) +{ + + const Packet_Downlink_Assignment_t *dlass = &d->dl_block->u.Packet_Downlink_Assignment; + unsigned int i; + + if (dlass->Exist_DOWNLINK_TFI_ASSIGNMENT) + ctx->alloc.dl_tfi = dlass->DOWNLINK_TFI_ASSIGNMENT; + else + ctx->alloc.dl_tfi = 0xff; + + ctx->tbf_starting_time_exists = dlass->Exist_TBF_Starting_Time; + if (ctx->tbf_starting_time_exists) + ctx->tbf_starting_time = TBF_Starting_Frame_Number_to_fn(&dlass->TBF_Starting_Time, d->fn); + + ctx->alloc.num_ts = 0; + for (i = 0; i < 8; i++) { + ctx->alloc.ts[i].allocated = (dlass->TIMESLOT_ALLOCATION >> i) & 0x01; + if (ctx->alloc.ts[i].allocated) + ctx->alloc.num_ts++; + } + return 0; +} + +static void st_idle_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state) +{ + struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx = (struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *)fi->priv; + + /* Reset state: */ + ctx->tbf_starting_time_exists = false; + ctx->tbf_starting_time = 0; + ctx->ts_nr = 0; + memset(&ctx->alloc, 0, sizeof(ctx->alloc)); +} + +static void st_idle(struct osmo_fsm_inst *fi, uint32_t event, void *data) +{ + struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx = (struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *)fi->priv; + struct tbf_start_ev_rx_ccch_imm_ass_ctx *ev_ccch_imm_ass; + struct tbf_start_ev_rx_pacch_pkt_ass_ctx *ev_pacch_pkt_ass; + + switch (event) { + case GPRS_RLCMAC_TBF_DL_ASS_EV_RX_CCCH_IMM_ASS: + ev_ccch_imm_ass = (struct tbf_start_ev_rx_ccch_imm_ass_ctx *)data; + if (handle_imm_ass(ctx, ev_ccch_imm_ass) < 0) + return; + memcpy(&ctx->iaro, ev_ccch_imm_ass->iaro, sizeof(ctx->iaro)); + if (ctx->tbf_starting_time_exists && + fn_cmp(ctx->tbf_starting_time, ev_ccch_imm_ass->fn) > 0) + tbf_dl_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_DL_ASS_ST_WAIT_TBF_STARTING_TIME); + else + tbf_dl_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_DL_ASS_ST_COMPL); + break; + case GPRS_RLCMAC_TBF_DL_ASS_EV_RX_PACCH_PKT_ASS: + ev_pacch_pkt_ass = (struct tbf_start_ev_rx_pacch_pkt_ass_ctx *)data; + if (handle_pkt_dl_ass(ctx, ev_pacch_pkt_ass) < 0) + return; + memcpy(&ctx->dl_block, ev_pacch_pkt_ass->dl_block, sizeof(ctx->dl_block)); + if (ctx->tbf_starting_time_exists && + fn_cmp(ctx->tbf_starting_time, ev_pacch_pkt_ass->fn) > 0) + tbf_dl_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_DL_ASS_ST_WAIT_TBF_STARTING_TIME); + else + tbf_dl_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_DL_ASS_ST_COMPL); + break; + default: + OSMO_ASSERT(0); + } +} + +static void st_wait_tbf_starting_time(struct osmo_fsm_inst *fi, uint32_t event, void *data) +{ + struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx = (struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *)fi->priv; + const struct tbf_start_ev_rx_ccch_imm_ass_ctx *ev_ccch_imm_ass; + struct tbf_start_ev_rx_pacch_pkt_ass_ctx *ev_pacch_pkt_ass; + + switch (event) { + case GPRS_RLCMAC_TBF_DL_ASS_EV_RX_CCCH_IMM_ASS: + ev_ccch_imm_ass = (struct tbf_start_ev_rx_ccch_imm_ass_ctx *)data; + if (handle_imm_ass(ctx, ev_ccch_imm_ass) < 0) + return; + memcpy(&ctx->iaro, ev_ccch_imm_ass->iaro, sizeof(ctx->iaro)); + if (ctx->tbf_starting_time_exists && + fn_cmp(ctx->tbf_starting_time, ev_ccch_imm_ass->fn) > 0) + tbf_dl_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_DL_ASS_ST_WAIT_TBF_STARTING_TIME); + else + tbf_dl_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_DL_ASS_ST_COMPL); + break; + case GPRS_RLCMAC_TBF_DL_ASS_EV_RX_PACCH_PKT_ASS: + ev_pacch_pkt_ass = (struct tbf_start_ev_rx_pacch_pkt_ass_ctx *)data; + if (handle_pkt_dl_ass(ctx, ev_pacch_pkt_ass) < 0) + return; + memcpy(&ctx->dl_block, ev_pacch_pkt_ass->dl_block, sizeof(ctx->dl_block)); + if (ctx->tbf_starting_time_exists && + fn_cmp(ctx->tbf_starting_time, ev_pacch_pkt_ass->fn) > 0) + tbf_dl_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_DL_ASS_ST_WAIT_TBF_STARTING_TIME); + else + tbf_dl_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_DL_ASS_ST_COMPL); + break; + case GPRS_RLCMAC_TBF_DL_ASS_EV_TBF_STARTING_TIME: + tbf_dl_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_DL_ASS_ST_COMPL); + break; + default: + OSMO_ASSERT(0); + } +} + +static void st_compl_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state) +{ + struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx = (struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *)fi->priv; + struct gprs_rlcmac_dl_tbf *dl_tbf; + + dl_tbf = gprs_rlcmac_dl_tbf_alloc(ctx->gre); + + /* Update TBF with allocated content: */ + memcpy(&dl_tbf->cur_alloc, &ctx->alloc, sizeof(ctx->alloc)); + + /* Replace old DL TBF with new one. 8.1.1.1.3: "the mobile station shall + * release all ongoing downlink TBFs not addressed by this message and + * shall act on the message. All ongoing uplink TBFs shall be maintained;" + */ + gprs_rlcmac_dl_tbf_free(ctx->gre->dl_tbf); + ctx->gre->dl_tbf = dl_tbf; + + /* Inform the main TBF state about the assignment completed: */ + osmo_fsm_inst_dispatch(dl_tbf->state_fsm.fi, GPRS_RLCMAC_TBF_UL_EV_DL_ASS_COMPL, NULL); + /* Go back to IDLE state. */ + tbf_dl_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_DL_ASS_ST_IDLE); +} + +static struct osmo_fsm_state tbf_dl_ass_fsm_states[] = { + [GPRS_RLCMAC_TBF_DL_ASS_ST_IDLE] = { + .in_event_mask = + X(GPRS_RLCMAC_TBF_DL_ASS_EV_RX_CCCH_IMM_ASS) | + X(GPRS_RLCMAC_TBF_DL_ASS_EV_RX_PACCH_PKT_ASS), + .out_state_mask = + X(GPRS_RLCMAC_TBF_DL_ASS_ST_WAIT_TBF_STARTING_TIME) | + X(GPRS_RLCMAC_TBF_DL_ASS_ST_COMPL), + .name = "IDLE", + .onenter = st_idle_on_enter, + .action = st_idle, + }, + [GPRS_RLCMAC_TBF_DL_ASS_ST_WAIT_TBF_STARTING_TIME] = { + .in_event_mask = + X(GPRS_RLCMAC_TBF_DL_ASS_EV_RX_CCCH_IMM_ASS) | + X(GPRS_RLCMAC_TBF_DL_ASS_EV_RX_PACCH_PKT_ASS) | + X(GPRS_RLCMAC_TBF_DL_ASS_EV_TBF_STARTING_TIME), + .out_state_mask = + X(GPRS_RLCMAC_TBF_DL_ASS_ST_WAIT_TBF_STARTING_TIME) | + X(GPRS_RLCMAC_TBF_DL_ASS_ST_COMPL), + .name = "WAIT_TBF_STARTING_TIME", + .action = st_wait_tbf_starting_time, + }, + [GPRS_RLCMAC_TBF_DL_ASS_ST_COMPL] = { + .in_event_mask = 0, + .out_state_mask = + X(GPRS_RLCMAC_TBF_DL_ASS_ST_IDLE), + .name = "COMPLETED", + .onenter = st_compl_on_enter, + }, +}; + + +static int tbf_dl_ass_fsm_timer_cb(struct osmo_fsm_inst *fi) +{ + //struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx = (struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *)fi->priv; + switch (fi->T) { + default: + OSMO_ASSERT(0); + } + return 0; +} + +static struct osmo_fsm tbf_dl_ass_fsm = { + .name = "DL_TBF_ASS", + .states = tbf_dl_ass_fsm_states, + .num_states = ARRAY_SIZE(tbf_dl_ass_fsm_states), + .timer_cb = tbf_dl_ass_fsm_timer_cb, + .log_subsys = DLGLOBAL, /* updated dynamically through gprs_rlcmac_tbf_dl_ass_fsm_set_log_cat() */ + .event_names = tbf_dl_ass_fsm_event_names, +}; + +int gprs_rlcmac_tbf_dl_ass_fsm_init(void) +{ + return osmo_fsm_register(&tbf_dl_ass_fsm); +} + +void gprs_rlcmac_tbf_dl_ass_fsm_set_log_cat(int logcat) +{ + tbf_dl_ass_fsm.log_subsys = logcat; +} + +int gprs_rlcmac_tbf_dl_ass_fsm_constructor(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx, struct gprs_rlcmac_entity *gre) +{ + ctx->gre = gre; + ctx->fi = osmo_fsm_inst_alloc(&tbf_dl_ass_fsm, gre, ctx, LOGL_INFO, NULL); + if (!ctx->fi) + return -ENODATA; + + return 0; +} + +void gprs_rlcmac_tbf_dl_ass_fsm_destructor(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx) +{ + osmo_fsm_inst_free(ctx->fi); + ctx->fi = NULL; +} + +/* A DL TBF assaigned was received over CCCH. */ +int gprs_rlcmac_tbf_start_from_ccch(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx, const struct tbf_start_ev_rx_ccch_imm_ass_ctx *d) +{ + int rc; + rc = osmo_fsm_inst_dispatch(ctx->fi, + GPRS_RLCMAC_TBF_DL_ASS_EV_RX_CCCH_IMM_ASS, + (void *)d); + return rc; +} + +/* A DL TBF assaigned was received over PACCH (of an UL TBF or previous DL TBF). */ +int gprs_rlcmac_tbf_start_from_pacch(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx, const struct tbf_start_ev_rx_pacch_pkt_ass_ctx *d) +{ + int rc; + rc = osmo_fsm_inst_dispatch(ctx->fi, + GPRS_RLCMAC_TBF_DL_ASS_EV_RX_PACCH_PKT_ASS, + (void *)d); + return rc; +} + +bool gprs_rlcmac_tbf_start_pending(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx) +{ + return ctx->fi->state == GPRS_RLCMAC_TBF_DL_ASS_ST_WAIT_TBF_STARTING_TIME; +} + +/* The scheduled ticks the new FN, which may trigger changes internally if TBF Starting Time is reached */ +void gprs_rlcmac_tbf_start_fn_tick(struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx, uint32_t fn, uint8_t ts_nr) +{ + OSMO_ASSERT(gprs_rlcmac_tbf_start_pending(ctx)); + if (fn != ctx->tbf_starting_time || + ts_nr != ctx->ts_nr) + return; + + osmo_fsm_inst_dispatch(ctx->fi, GPRS_RLCMAC_TBF_DL_ASS_EV_TBF_STARTING_TIME, NULL); +} + +enum gprs_rlcmac_tbf_dl_ass_fsm_states gprs_rlcmac_tbf_start_state(const struct gprs_rlcmac_tbf_dl_ass_fsm_ctx *ctx) +{ + return ctx->fi->state; +} diff --git a/tests/rlcmac/rlcmac_prim_test.err b/tests/rlcmac/rlcmac_prim_test.err index 1aedd64..f0b55d0 100644 --- a/tests/rlcmac/rlcmac_prim_test.err +++ b/tests/rlcmac/rlcmac_prim_test.err @@ -1,5 +1,6 @@ DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request DLGLOBAL INFO TLLI=0x00002342 not found, creating entity on the fly +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF{NEW}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START @@ -64,8 +65,10 @@ DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF{RELEASING}: Deallocated DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request DLGLOBAL INFO TLLI=0x00002342 not found, creating entity on the fly +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF{NEW}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START @@ -152,8 +155,10 @@ DLGLOBAL NOTICE UL_TBF{FLOW}: TBF establishment failure (T3164 timeout attempts=4) DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF{FLOW}: Deallocated +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request DLGLOBAL INFO TLLI=0x00002342 not found, creating entity on the fly +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF{NEW}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START @@ -287,10 +292,12 @@ DLGLOBAL NOTICE UL_TBF{FLOW}: TBF establishment failure (T3166 timeout attempts=4) DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF{FLOW}: Deallocated +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL DEBUG Rx SI13 from lower layers DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request DLGLOBAL INFO TLLI=0x00002342 not found, creating entity on the fly +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF{NEW}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START @@ -423,10 +430,12 @@ DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_UL_TBF.request DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF{FLOW}: Deallocated DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request DLGLOBAL INFO TLLI=0x00002342 not found, creating entity on the fly +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF{NEW}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START @@ -484,8 +493,10 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Timeout of T3182 DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF{FINISHED}: Deallocated +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request DLGLOBAL INFO TLLI=0x00002342 not found, creating entity on the fly +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF{NEW}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START @@ -587,8 +598,10 @@ DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF{FINISHED}: Deallocated DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request DLGLOBAL INFO TLLI=0x00002342 not found, creating entity on the fly +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF{NEW}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Received Event START @@ -650,17 +663,22 @@ DLGLOBAL INFO UL_TBF_ASS{SCHED_PKT_RES_REQ}: Received Event CREATE_RLCMAC_MSG DLGLOBAL INFO UL_TBF_ASS{SCHED_PKT_RES_REQ}: state_chg to WAIT_PKT_UL_ASS DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF_ASS{WAIT_PKT_UL_ASS}: Deallocated DLGLOBAL INFO UL_TBF{ASSIGN}: Deallocated DLGLOBAL INFO Rx from upper layers: GMMRR-ASSIGN.request DLGLOBAL INFO GMMRR-ASSIGN.req: creating new entity TLLI=0x00000001 +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Allocated DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication -DLGLOBAL INFO GRE(00000001) Got PCH IMM_ASS (DL_TBF): DL_TFI=0 TS=7 +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Received Event RX_CCCH_IMM_ASS +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Got PCH IMM_ASS (DL_TBF): DL_TFI=0 TS=7 +DLGLOBAL INFO DL_TBF_ASS{IDLE}: state_chg to COMPLETED DLGLOBAL INFO DL_TBF{NEW}: Allocated DLGLOBAL INFO DL_TBF{NEW}: Received Event DL_ASS_COMPL DLGLOBAL INFO TBF(DL:NR-0:TLLI-00000001) Send L1CTL-CF_DL_TBF.req dl_slotmask=0x80 dl_tfi=0 DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_DL_TBF.request DLGLOBAL INFO DL_TBF{NEW}: state_chg to FLOW +DLGLOBAL INFO DL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) Rx new DL data DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) DL DATA TFI=0 received (V(Q)=0 .. V(R)=0) @@ -682,16 +700,21 @@ DLGLOBAL DEBUG (ts=7,fn=21,usf=0) Tx DL ACK/NACK FinalAck=1 DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) - V(N): "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIR" R=Received I=Invalid DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO DL_TBF{FINISHED}: Deallocated DLGLOBAL INFO Rx from upper layers: GMMRR-ASSIGN.request DLGLOBAL INFO GMMRR-ASSIGN.req: creating new entity TLLI=0x00000001 +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Allocated DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication -DLGLOBAL INFO GRE(00000001) Got PCH IMM_ASS (DL_TBF): DL_TFI=0 TS=7 +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Received Event RX_CCCH_IMM_ASS +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Got PCH IMM_ASS (DL_TBF): DL_TFI=0 TS=7 +DLGLOBAL INFO DL_TBF_ASS{IDLE}: state_chg to COMPLETED DLGLOBAL INFO DL_TBF{NEW}: Allocated DLGLOBAL INFO DL_TBF{NEW}: Received Event DL_ASS_COMPL DLGLOBAL INFO TBF(DL:NR-0:TLLI-00000001) Send L1CTL-CF_DL_TBF.req dl_slotmask=0x80 dl_tfi=0 DLGLOBAL DEBUG Tx to lower layers: L1CTL-CFG_DL_TBF.request DLGLOBAL INFO DL_TBF{NEW}: state_chg to FLOW +DLGLOBAL INFO DL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) Rx new DL data DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) DL DATA TFI=0 received (V(Q)=0 .. V(R)=0) @@ -751,6 +774,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: Last UL block sent (CV=0), start T3182 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to FINISHED DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request +DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO DL_TBF{FINISHED}: Deallocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF{FINISHED}: Deallocated -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/31757 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: Idafb4e37971e93c7e8667b8669a29755485e95bb Gerrit-Change-Number: 31757 Gerrit-PatchSet: 3 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-MessageType: merged
1 0
0 0
[L] Change in libosmo-gprs[master]: rlcmac: ul_tbf: Implement support for TBF Starting Time
by pespin 09 Mar '23

09 Mar '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/31751 ) Change subject: rlcmac: ul_tbf: Implement support for TBF Starting Time ...................................................................... rlcmac: ul_tbf: Implement support for TBF Starting Time While reworking tbf_ul_ass_fsm, avoid being in "ASSIGN" state while waiting to send Pkt Ctrl Ack. The PCU is free to ask the TBF to transmit data before receiving Pkt Ctrl Ack; the time where it can start transmitting data is actually controlled by TBF Starting Time. Change-Id: Id81f16743f2c464e01caf27ba2eb8c0fc715fe8a --- M include/osmocom/gprs/rlcmac/rlcmac_dec.h M include/osmocom/gprs/rlcmac/rlcmac_private.h M include/osmocom/gprs/rlcmac/sched.h M include/osmocom/gprs/rlcmac/tbf_ul_ass_fsm.h M src/rlcmac/pdch_ul_controller.c M src/rlcmac/rlcmac.c M src/rlcmac/rlcmac_dec.c M src/rlcmac/rlcmac_prim.c M src/rlcmac/sched.c M src/rlcmac/tbf_ul_ass_fsm.c M tests/rlcmac/rlcmac_prim_test.err 11 files changed, 239 insertions(+), 53 deletions(-) Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved diff --git a/include/osmocom/gprs/rlcmac/rlcmac_dec.h b/include/osmocom/gprs/rlcmac/rlcmac_dec.h index ea92a0f..f707dcb 100644 --- a/include/osmocom/gprs/rlcmac/rlcmac_dec.h +++ b/include/osmocom/gprs/rlcmac/rlcmac_dec.h @@ -46,3 +46,7 @@ int gprs_rlcmac_decode_gprs_acknack_bits(const Ack_Nack_Description_t *desc, struct bitvec *bits, int *bsn_begin, int *bsn_end, struct gprs_rlcmac_rlc_ul_window *ulw); + +uint32_t TBF_StartingTime_to_fn(const StartingTime_t *tbf_start_time, uint32_t curr_fn); +uint32_t TBF_Starting_Frame_Number_to_fn(const Starting_Frame_Number_t *tbf_start_fn, uint32_t curr_fn); + diff --git a/include/osmocom/gprs/rlcmac/rlcmac_private.h b/include/osmocom/gprs/rlcmac/rlcmac_private.h index e2d2494..cd03066 100644 --- a/include/osmocom/gprs/rlcmac/rlcmac_private.h +++ b/include/osmocom/gprs/rlcmac/rlcmac_private.h @@ -88,7 +88,7 @@ struct gprs_rlcmac_entity *gprs_rlcmac_find_entity_by_tlli(uint32_t tlli); struct gprs_rlcmac_dl_tbf *gprs_rlcmac_find_dl_tbf_by_tfi(uint8_t dl_tfi); struct gprs_rlcmac_ul_tbf *gprs_rlcmac_find_ul_tbf_by_tfi(uint8_t ul_tfi); -int gprs_rlcmac_handle_ccch_imm_ass(const struct gsm48_imm_ass *ia); +int gprs_rlcmac_handle_ccch_imm_ass(const struct gsm48_imm_ass *ia, uint32_t fn); int gprs_rlcmac_handle_bcch_si13(const struct gsm48_system_information_type_13 *si13); int gprs_rlcmac_handle_gprs_dl_block(const struct osmo_gprs_rlcmac_prim *rlcmac_prim, enum gprs_rlcmac_coding_scheme cs); diff --git a/include/osmocom/gprs/rlcmac/sched.h b/include/osmocom/gprs/rlcmac/sched.h index c7fa82a..18fbe7d 100644 --- a/include/osmocom/gprs/rlcmac/sched.h +++ b/include/osmocom/gprs/rlcmac/sched.h @@ -12,3 +12,23 @@ uint32_t rrbp2fn(uint32_t cur_fn, uint8_t rrbp); int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_rts_block_ind *bi); + +static inline bool fn_valid(uint32_t fn) +{ + uint32_t f = fn % 13; + return f == 0 || f == 4 || f == 8; +} + +#define GSM_MAX_FN_THRESH (GSM_MAX_FN >> 1) +/* 0: equal, -1: fn1 BEFORE fn2, 1: fn1 AFTER fn2 */ +static inline int fn_cmp(uint32_t fn1, uint32_t fn2) +{ + if (fn1 == fn2) + return 0; + /* FN1 goes before FN2: */ + if ((fn1 < fn2 && (fn2 - fn1) < GSM_MAX_FN_THRESH) || + (fn1 > fn2 && (fn1 - fn2) > GSM_MAX_FN_THRESH)) + return -1; + /* FN1 goes after FN2: */ + return 1; +} diff --git a/include/osmocom/gprs/rlcmac/tbf_ul_ass_fsm.h b/include/osmocom/gprs/rlcmac/tbf_ul_ass_fsm.h index c5a785d..9026459 100644 --- a/include/osmocom/gprs/rlcmac/tbf_ul_ass_fsm.h +++ b/include/osmocom/gprs/rlcmac/tbf_ul_ass_fsm.h @@ -20,9 +20,10 @@ enum gprs_rlcmac_tbf_ul_ass_fsm_states { GPRS_RLCMAC_TBF_UL_ASS_ST_IDLE = 0, /* new created TBF */ GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_CCCH_IMM_ASS, /* wait for Immediate Assignment */ + GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME1, /* Wait for Tbf Starting Time (1phase) */ GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_RES_REQ, /* wait PDCH sched (USF) */ GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_PKT_UL_ASS, /* Wait for PCU to send the new assignment */ - GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_CTRL_ACK, /* Wait for scheduler to send PKT CTRL ACK */ + GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME2, /* Wait for Tbf Starting Time (2phase) */ GPRS_RLCMAC_TBF_UL_ASS_ST_COMPL, /* Completed, will update TBF and return to IDLE state */ }; @@ -37,6 +38,8 @@ uint8_t rach_req_ra; struct gprs_rlcmac_ul_tbf_allocation phase1_alloc; struct gprs_rlcmac_ul_tbf_allocation phase2_alloc; + bool tbf_starting_time_exists; + uint32_t tbf_starting_time; /* Number of packet resource request transmitted (T3168) */ unsigned int pkt_res_req_proc_attempts; }; @@ -46,12 +49,14 @@ GPRS_RLCMAC_TBF_UL_ASS_EV_START_DIRECT_2PHASE, /* Start Uplink assignment directly into 2phase from an older UL TBF */ GPRS_RLCMAC_TBF_UL_ASS_EV_START_FROM_DL_TBF, /* Uplink assignment requested by DL TBF ACK/NACK, wait to receive Pkt Ul Ass on its PACCH */ GPRS_RLCMAC_TBF_UL_ASS_EV_RX_CCCH_IMM_ASS, /* (data: struct tbf_ul_ass_ev_rx_ccch_imm_ass_ctx *) */ + GPRS_RLCMAC_TBF_UL_ASS_EV_TBF_STARTING_TIME, /* Scheduler ticking reaches TBF Starting Time */ GPRS_RLCMAC_TBF_UL_ASS_EV_CREATE_RLCMAC_MSG, /* Generate RLC/MAC block (data: struct tbf_ul_ass_ev_create_rlcmac_msg_ctx) */ GPRS_RLCMAC_TBF_UL_ASS_EV_RX_PKT_UL_ASS, /* (data: struct tbf_ul_ass_ev_create_rlcmac_msg_ctx) */ }; struct tbf_ul_ass_ev_rx_ccch_imm_ass_ctx { uint8_t ts_nr; + uint32_t fn; const struct gsm48_imm_ass *ia; const IA_RestOctets_t *iaro; }; @@ -80,6 +85,8 @@ bool gprs_rlcmac_tbf_ul_ass_pending(struct gprs_rlcmac_ul_tbf *ul_tbf); bool gprs_rlcmac_tbf_ul_ass_match_rach_req(struct gprs_rlcmac_ul_tbf *ul_tbf, uint8_t ra); +bool gprs_rlcmac_tbf_ul_ass_waiting_tbf_starting_time(const struct gprs_rlcmac_ul_tbf *ul_tbf); +void gprs_rlcmac_tbf_ul_ass_fn_tick(const struct gprs_rlcmac_ul_tbf *ul_tbf, uint32_t fn, uint8_t ts_nr); bool gprs_rlcmac_tbf_ul_ass_rts(const struct gprs_rlcmac_ul_tbf *ul_tbf, const struct gprs_rlcmac_rts_block_ind *bi); struct msgb *gprs_rlcmac_tbf_ul_ass_create_rlcmac_msg(const struct gprs_rlcmac_ul_tbf *ul_tbf, const struct gprs_rlcmac_rts_block_ind *bi); diff --git a/src/rlcmac/pdch_ul_controller.c b/src/rlcmac/pdch_ul_controller.c index 7a3b753..731caf0 100644 --- a/src/rlcmac/pdch_ul_controller.c +++ b/src/rlcmac/pdch_ul_controller.c @@ -26,6 +26,7 @@ #include <osmocom/gprs/rlcmac/pdch_ul_controller.h> #include <osmocom/gprs/rlcmac/rlcmac_private.h> #include <osmocom/gprs/rlcmac/types_private.h> +#include <osmocom/gprs/rlcmac/sched.h> /* TS 44.060 Table 10.4.5.1 states maximum RRBP is N + 26. Give extra space for time diff between Tx and Rx? */ #define MAX_FN_RESERVED (27 + 50) @@ -39,20 +40,6 @@ { 0, NULL } }; -#define GSM_MAX_FN_THRESH (GSM_MAX_FN >> 1) -/* 0: equal, -1: fn1 BEFORE fn2, 1: fn1 AFTER fn2 */ -static inline int fn_cmp(uint32_t fn1, uint32_t fn2) -{ - if (fn1 == fn2) - return 0; - /* FN1 goes before FN2: */ - if ((fn1 < fn2 && (fn2 - fn1) < GSM_MAX_FN_THRESH) || - (fn1 > fn2 && (fn1 - fn2) > GSM_MAX_FN_THRESH)) - return -1; - /* FN1 goes after FN2: */ - return 1; -} - struct gprs_rlcmac_pdch_ulc *gprs_rlcmac_pdch_ulc_alloc(void *ctx, uint8_t ts_nr) { struct gprs_rlcmac_pdch_ulc *ulc; diff --git a/src/rlcmac/rlcmac.c b/src/rlcmac/rlcmac.c index 3b30fb6..4647fff 100644 --- a/src/rlcmac/rlcmac.c +++ b/src/rlcmac/rlcmac.c @@ -165,12 +165,13 @@ return NULL; } -static int gprs_rlcmac_handle_ccch_imm_ass_ul_tbf(uint8_t ts_nr, const struct gsm48_imm_ass *ia, const IA_RestOctets_t *iaro) +static int gprs_rlcmac_handle_ccch_imm_ass_ul_tbf(uint8_t ts_nr, uint32_t fn, const struct gsm48_imm_ass *ia, const IA_RestOctets_t *iaro) { int rc = -ENOENT; struct gprs_rlcmac_entity *gre; struct gprs_rlcmac_ul_tbf *ul_tbf; struct tbf_ul_ass_ev_rx_ccch_imm_ass_ctx d = { + .fn = fn, .ts_nr = ts_nr, .ia = ia, .iaro = iaro @@ -190,7 +191,7 @@ return rc; } -static int gprs_rlcmac_handle_ccch_imm_ass_dl_tbf(uint8_t ts_nr, const struct gsm48_imm_ass *ia, const IA_RestOctets_t *iaro) +static int gprs_rlcmac_handle_ccch_imm_ass_dl_tbf(uint8_t ts_nr, uint32_t fn, const struct gsm48_imm_ass *ia, const IA_RestOctets_t *iaro) { int rc; struct gprs_rlcmac_entity *gre; @@ -224,7 +225,7 @@ return rc; } -int gprs_rlcmac_handle_ccch_imm_ass(const struct gsm48_imm_ass *ia) +int gprs_rlcmac_handle_ccch_imm_ass(const struct gsm48_imm_ass *ia, uint32_t fn) { int rc; uint8_t ch_type, ch_subch, ch_ts; @@ -253,10 +254,10 @@ case 1: /* iaro.u.lh.* (IA_RestOctetsLH_t) */ switch (iaro.u.lh.lh0x.UnionType) { case 0: /* iaro.u.ll.lh0x.EGPRS_PktUlAss.* (IA_EGPRS_PktUlAss_t) */ - rc = gprs_rlcmac_handle_ccch_imm_ass_ul_tbf(ch_ts, ia, &iaro); + rc = gprs_rlcmac_handle_ccch_imm_ass_ul_tbf(ch_ts, fn, ia, &iaro); break; case 1: /* iaro.u.ll.lh0x.MultiBlock_PktDlAss.* (IA_MultiBlock_PktDlAss_t) */ - rc = gprs_rlcmac_handle_ccch_imm_ass_dl_tbf(ch_ts, ia, &iaro); + rc = gprs_rlcmac_handle_ccch_imm_ass_dl_tbf(ch_ts, fn, ia, &iaro); break; } /* TODO: iaro.u.lh.AdditionsR13.* (IA_AdditionsR13_t) */ @@ -279,17 +280,17 @@ case 1: /* iaro.u.hh.u.UplinkDownlinkAssignment.ul_dl.Packet_Uplink_ImmAssignment.Access.DynamicOrFixedAllocation.* (GPRS_DynamicOrFixedAllocation_t) */ switch (iaro.u.hh.u.UplinkDownlinkAssignment.ul_dl.Packet_Uplink_ImmAssignment.Access.DynamicOrFixedAllocation.UnionType) { case 0: /* iaro.u.hh.u.UplinkDownlinkAssignment.ul_dl.Packet_Uplink_ImmAssignment.Access.DynamicOrFixedAllocation.Allocation.DynamicAllocation (DynamicAllocation_t) */ - rc = gprs_rlcmac_handle_ccch_imm_ass_ul_tbf(ch_ts, ia, &iaro); + rc = gprs_rlcmac_handle_ccch_imm_ass_ul_tbf(ch_ts, fn, ia, &iaro); break; case 1: /* iaro.u.hh.u.UplinkDownlinkAssignment.ul_dl.Packet_Uplink_ImmAssignment.Access.DynamicOrFixedAllocation.Allocation.FixedAllocationDummy (guint8) */ - rc = gprs_rlcmac_handle_ccch_imm_ass_ul_tbf(ch_ts, ia, &iaro); + rc = gprs_rlcmac_handle_ccch_imm_ass_ul_tbf(ch_ts, fn, ia, &iaro); break; } break; } break; case 1: /* iaro.u.hh.u.UplinkDownlinkAssignment.ul_dl.Packet_Downlink_ImmAssignment* (Packet_Downlink_ImmAssignment_t) */ - rc = gprs_rlcmac_handle_ccch_imm_ass_dl_tbf(ch_ts, ia, &iaro); + rc = gprs_rlcmac_handle_ccch_imm_ass_dl_tbf(ch_ts, fn, ia, &iaro); break; } break; diff --git a/src/rlcmac/rlcmac_dec.c b/src/rlcmac/rlcmac_dec.c index fa88c26..8129d30 100644 --- a/src/rlcmac/rlcmac_dec.c +++ b/src/rlcmac/rlcmac_dec.c @@ -22,11 +22,14 @@ #include <stdint.h> #include <osmocom/core/logging.h> +#include <osmocom/gsm/gsm0502.h> +#include <osmocom/gsm/gsm_utils.h> #include <osmocom/gprs/rlcmac/rlcmac_private.h> #include <osmocom/gprs/rlcmac/rlcmac_dec.h> #include <osmocom/gprs/rlcmac/rlc.h> #include <osmocom/gprs/rlcmac/rlc_window_ul.h> +#include <osmocom/gprs/rlcmac/sched.h> #define LENGTH_TO_END 255 /*! @@ -422,3 +425,47 @@ return num_blocks; } + +/* 12.21 Starting Frame Number Description */ +uint32_t TBF_StartingTime_to_fn(const StartingTime_t *tbf_start_time, uint32_t curr_fn) +{ + const struct gsm_time g_time = { + .t1 = tbf_start_time->N32, + .t2 = tbf_start_time->N51, + .t3 = tbf_start_time->N26 + }; + return gsm_gsmtime2fn(&g_time); + +} + +/* 12.21.2 Relative Frame Number Encoding */ +static uint32_t k_to_fn(uint16_t k, uint32_t curr_fn) +{ + uint32_t fn = 0; + + switch (k % 3) { + case 0: + case 1: + fn = GSM_TDMA_FN_SUM(curr_fn, 4 + 4 * k + (k / 3)); + if (!fn_valid(fn)) + GSM_TDMA_FN_INC(fn); + break; + case 2: + fn = GSM_TDMA_FN_SUM(curr_fn, 5 + 4 * k + (k / 3)); + break; + } + OSMO_ASSERT(fn_valid(fn)); + return fn; +} + +uint32_t TBF_Starting_Frame_Number_to_fn(const Starting_Frame_Number_t *tbf_start_fn, uint32_t curr_fn) +{ + switch (tbf_start_fn->UnionType) { + case 0: /* 12.21.1 Absolute Frame Number Encoding */ + return TBF_StartingTime_to_fn(&tbf_start_fn->u.StartingTime, curr_fn); + case 1: /* 12.21.2 Relative Frame Number Encoding */ + return k_to_fn(tbf_start_fn->u.k, curr_fn); + default: + OSMO_ASSERT(0); + } +} diff --git a/src/rlcmac/rlcmac_prim.c b/src/rlcmac/rlcmac_prim.c index 8cf53ba..2b3e8b2 100644 --- a/src/rlcmac/rlcmac_prim.c +++ b/src/rlcmac/rlcmac_prim.c @@ -504,7 +504,8 @@ switch (rlcmac_prim->l1ctl.ccch_data_ind.data[2]) { case GSM48_MT_RR_IMM_ASS: - rc = gprs_rlcmac_handle_ccch_imm_ass((struct gsm48_imm_ass *)rlcmac_prim->l1ctl.ccch_data_ind.data); + rc = gprs_rlcmac_handle_ccch_imm_ass((struct gsm48_imm_ass *)rlcmac_prim->l1ctl.ccch_data_ind.data, + rlcmac_prim->l1ctl.ccch_data_ind.fn); break; case GSM48_MT_RR_SYSINFO_13: rc = gprs_rlcmac_handle_bcch_si13((struct gsm48_system_information_type_13 *)rlcmac_prim->l1ctl.ccch_data_ind.data); diff --git a/src/rlcmac/sched.c b/src/rlcmac/sched.c index 6ec76c7..0431631 100644 --- a/src/rlcmac/sched.c +++ b/src/rlcmac/sched.c @@ -41,12 +41,6 @@ struct gprs_rlcmac_ul_tbf *ul_ass; /* PCU grants USF/SBA: transmit Pkt Res Req (2phase access)*/ }; -static inline bool fn_valid(uint32_t fn) -{ - uint32_t f = fn % 13; - return f == 0 || f == 4 || f == 8; -} - uint32_t rrbp2fn(uint32_t cur_fn, uint8_t rrbp) { uint32_t poll_fn; @@ -210,7 +204,7 @@ return msg; } if (tbfs->poll_ul_ass) { - msg = gprs_rlcmac_tbf_ul_ass_create_rlcmac_msg(tbfs->poll_ul_ass, bi); + msg = gprs_rlcmac_ul_tbf_create_pkt_ctrl_ack(tbfs->poll_ul_ass); if (msg) return msg; } @@ -260,6 +254,15 @@ return gprs_rlcmac_ul_tbf_dummy_create(ul_tbf); } +static void rts_tick(const struct gprs_rlcmac_rts_block_ind *bi) +{ + struct gprs_rlcmac_entity *gre; + llist_for_each_entry(gre, &g_ctx->gre_list, entry) { + if (gre->ul_tbf && gprs_rlcmac_tbf_ul_ass_waiting_tbf_starting_time(gre->ul_tbf)) + gprs_rlcmac_tbf_ul_ass_fn_tick(gre->ul_tbf, bi->fn, bi->ts); + } +} + int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_rts_block_ind *bi) { struct msgb *msg = NULL; @@ -267,6 +270,8 @@ struct osmo_gprs_rlcmac_prim *rlcmac_prim_tx; int rc = 0; + rts_tick(bi); + get_ctrl_msg_tbf_candidates(bi, &tbf_cand); if ((msg = sched_select_ctrl_msg(bi, &tbf_cand))) diff --git a/src/rlcmac/tbf_ul_ass_fsm.c b/src/rlcmac/tbf_ul_ass_fsm.c index e2775be..48c1bf8 100644 --- a/src/rlcmac/tbf_ul_ass_fsm.c +++ b/src/rlcmac/tbf_ul_ass_fsm.c @@ -24,6 +24,8 @@ #include <osmocom/core/tdef.h> #include <osmocom/core/fsm.h> #include <osmocom/core/bitvec.h> +#include <osmocom/gsm/gsm_utils.h> +#include <osmocom/gsm/gsm0502.h> #include <osmocom/gprs/rlcmac/types.h> #include <osmocom/gprs/rlcmac/tbf_ul_ass_fsm.h> @@ -32,6 +34,7 @@ #include <osmocom/gprs/rlcmac/sched.h> #include <osmocom/gprs/rlcmac/csn1_defs.h> #include <osmocom/gprs/rlcmac/rlcmac_enc.h> +#include <osmocom/gprs/rlcmac/rlcmac_dec.h> #include <osmocom/gprs/rlcmac/pdch_ul_controller.h> #define X(s) (1 << (s)) @@ -39,8 +42,9 @@ static const struct value_string tbf_ul_ass_fsm_event_names[] = { { GPRS_RLCMAC_TBF_UL_ASS_EV_START, "START" }, { GPRS_RLCMAC_TBF_UL_ASS_EV_START_DIRECT_2PHASE, "START_DIRECT_2PHASE" }, - { GPRS_RLCMAC_TBF_UL_ASS_EV_START_FROM_DL_TBF, "START_FROM_DL_TBF" }, + { GPRS_RLCMAC_TBF_UL_ASS_EV_START_FROM_DL_TBF, "START_FROM_DL_TBF" }, { GPRS_RLCMAC_TBF_UL_ASS_EV_RX_CCCH_IMM_ASS, "RX_CCCH_IMM_ASS" }, + { GPRS_RLCMAC_TBF_UL_ASS_EV_TBF_STARTING_TIME, "TBF_STARTING_TIME" }, { GPRS_RLCMAC_TBF_UL_ASS_EV_CREATE_RLCMAC_MSG, "CREATE_RLCMAC_MSG" }, { GPRS_RLCMAC_TBF_UL_ASS_EV_RX_PKT_UL_ASS, "RX_PKT_UL_ASS" }, { 0, NULL } @@ -49,9 +53,10 @@ static const struct osmo_tdef_state_timeout tbf_ul_ass_fsm_timeouts[32] = { [GPRS_RLCMAC_TBF_UL_ASS_ST_IDLE] = { }, [GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_CCCH_IMM_ASS] = { }, + [GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME1] = { }, [GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_RES_REQ] = { }, [GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_PKT_UL_ASS] = { .T = 3168 }, - [GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_CTRL_ACK] = { }, + [GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME2] = { }, [GPRS_RLCMAC_TBF_UL_ASS_ST_COMPL] = { }, }; @@ -141,6 +146,10 @@ return -ENOTSUP; case 1: /* d->iaro->u.hh.u.UplinkDownlinkAssignment.ul_dl.Packet_Uplink_ImmAssignment.Access.DynamicOrFixedAllocation.* (GPRS_DynamicOrFixedAllocation_t) */ ctx->ul_tbf->tx_cs = d->iaro->u.hh.u.UplinkDownlinkAssignment.ul_dl.Packet_Uplink_ImmAssignment.Access.DynamicOrFixedAllocation.CHANNEL_CODING_COMMAND + 1; + ctx->tbf_starting_time_exists = d->iaro->u.hh.u.UplinkDownlinkAssignment.ul_dl.Packet_Uplink_ImmAssignment.Access.DynamicOrFixedAllocation.Exist_TBF_STARTING_TIME; + if (ctx->tbf_starting_time_exists) + ctx->tbf_starting_time = TBF_StartingTime_to_fn(&d->iaro->u.hh.u.UplinkDownlinkAssignment.ul_dl.Packet_Uplink_ImmAssignment.Access.DynamicOrFixedAllocation.TBF_STARTING_TIME, + d->fn); LOGPFSML(ctx->fi, LOGL_INFO, "ImmAss initial CS=%s\n", gprs_rlcmac_mcs_name(ctx->ul_tbf->tx_cs)); switch (d->iaro->u.hh.u.UplinkDownlinkAssignment.ul_dl.Packet_Uplink_ImmAssignment.Access.DynamicOrFixedAllocation.UnionType) { case 0: /* d->iaro->u.hh.u.UplinkDownlinkAssignment.ul_dl.Packet_Uplink_ImmAssignment.Access.DynamicOrFixedAllocation.Allocation.DynamicAllocation (DynamicAllocation_t) */ @@ -181,7 +190,11 @@ case 1: /* Dynamic Allocation (Dynamic_Allocation_t) */ if (ulass->u.PUA_GPRS_Struct.u.Dynamic_Allocation.Exist_UPLINK_TFI_ASSIGNMENT) ctx->phase2_alloc.ul_tfi = ulass->u.PUA_GPRS_Struct.u.Dynamic_Allocation.UPLINK_TFI_ASSIGNMENT; - /* TODO: P0, PR_MODE, USF_GRANULARITY, RLC_DATA_BLOCKS_GRANTED, TBF_Starting_Time */ + /* TODO: P0, PR_MODE, USF_GRANULARITY, RLC_DATA_BLOCKS_GRANTED */ + ctx->tbf_starting_time_exists = ulass->u.PUA_GPRS_Struct.u.Dynamic_Allocation.Exist_TBF_Starting_Time; + if (ctx->tbf_starting_time_exists) + ctx->tbf_starting_time = TBF_Starting_Frame_Number_to_fn(&ulass->u.PUA_GPRS_Struct.u.Dynamic_Allocation.TBF_Starting_Time, + d->fn); switch (ulass->u.PUA_GPRS_Struct.u.Dynamic_Allocation.UnionType) { case 0: /* Timeslot_Allocation_t */ ts_alloc = &ulass->u.PUA_GPRS_Struct.u.Dynamic_Allocation.u.Timeslot_Allocation[0]; @@ -271,6 +284,42 @@ ev_rx_ccch_imm_ass_ctx = data; if (handle_imm_ass(ctx, ev_rx_ccch_imm_ass_ctx) < 0) return; + if (ctx->tbf_starting_time_exists && + fn_cmp(ctx->tbf_starting_time, ev_rx_ccch_imm_ass_ctx->fn) > 0) { + tbf_ul_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME1); + return; + } + if (ctx->ass_type == GPRS_RLCMAC_TBF_UL_ASS_TYPE_1PHASE) + tbf_ul_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_UL_ASS_ST_COMPL); + else + tbf_ul_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_RES_REQ); + break; + default: + OSMO_ASSERT(0); + } +} + +static void st_wait_tbf_starting_time1(struct osmo_fsm_inst *fi, uint32_t event, void *data) +{ + struct gprs_rlcmac_tbf_ul_ass_fsm_ctx *ctx = (struct gprs_rlcmac_tbf_ul_ass_fsm_ctx *)fi->priv; + const struct tbf_ul_ass_ev_rx_ccch_imm_ass_ctx *ev_rx_ccch_imm_ass_ctx; + + switch (event) { + case GPRS_RLCMAC_TBF_UL_ASS_EV_RX_CCCH_IMM_ASS: + ev_rx_ccch_imm_ass_ctx = data; + if (handle_imm_ass(ctx, ev_rx_ccch_imm_ass_ctx) < 0) + return; + if (ctx->tbf_starting_time_exists && + fn_cmp(ctx->tbf_starting_time, ev_rx_ccch_imm_ass_ctx->fn) > 0) { + tbf_ul_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME1); + return; + } + if (ctx->ass_type == GPRS_RLCMAC_TBF_UL_ASS_TYPE_1PHASE) + tbf_ul_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_UL_ASS_ST_COMPL); + else + tbf_ul_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_RES_REQ); + break; + case GPRS_RLCMAC_TBF_UL_ASS_EV_TBF_STARTING_TIME: if (ctx->ass_type == GPRS_RLCMAC_TBF_UL_ASS_TYPE_1PHASE) tbf_ul_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_UL_ASS_ST_COMPL); else @@ -317,7 +366,11 @@ gprs_rlcmac_pdch_ulc_reserve(g_ctx->sched.ulc[d->ts_nr], poll_fn, GPRS_RLCMAC_PDCH_ULC_POLL_UL_ASS, ul_tbf_as_tbf(ctx->ul_tbf)); - tbf_ul_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_CTRL_ACK); + } + + if (ctx->tbf_starting_time_exists && + fn_cmp(ctx->tbf_starting_time, d->fn) > 0) { + tbf_ul_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME2); } else { tbf_ul_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_UL_ASS_ST_COMPL); } @@ -327,17 +380,34 @@ } } -static void st_sched_pkt_ctrl_ack(struct osmo_fsm_inst *fi, uint32_t event, void *data) +static void st_wait_tbf_starting_time2(struct osmo_fsm_inst *fi, uint32_t event, void *data) { struct gprs_rlcmac_tbf_ul_ass_fsm_ctx *ctx = (struct gprs_rlcmac_tbf_ul_ass_fsm_ctx *)fi->priv; - struct tbf_ul_ass_ev_create_rlcmac_msg_ctx *data_ctx; + struct tbf_ul_ass_ev_rx_pkt_ul_ass_ctx *d; + int rc; switch (event) { - case GPRS_RLCMAC_TBF_UL_ASS_EV_CREATE_RLCMAC_MSG: - data_ctx = (struct tbf_ul_ass_ev_create_rlcmac_msg_ctx *)data; - data_ctx->msg = gprs_rlcmac_ul_tbf_create_pkt_ctrl_ack(ctx->ul_tbf); - if (!data_ctx->msg) - return; + case GPRS_RLCMAC_TBF_UL_ASS_EV_RX_PKT_UL_ASS: + d = data; + rc = handle_pkt_ul_ass(ctx, d); + if (rc < 0) + LOGPFSML(fi, LOGL_ERROR, "Rx Pkt Ul Ass: failed to parse!\n"); + // TODO: what to do if Pkt_ul_ass is "reject"? need to check spec, depending on cause. + /* If RRBP contains valid data, schedule a response (PKT CONTROL ACK or PKT RESOURCE REQ). */ + if (d->dl_block->SP) { + uint32_t poll_fn = rrbp2fn(d->fn, d->dl_block->RRBP); + gprs_rlcmac_pdch_ulc_reserve(g_ctx->sched.ulc[d->ts_nr], poll_fn, + GPRS_RLCMAC_PDCH_ULC_POLL_UL_ASS, + ul_tbf_as_tbf(ctx->ul_tbf)); + } + + if (ctx->tbf_starting_time_exists && + fn_cmp(ctx->tbf_starting_time, d->fn) > 0) { + tbf_ul_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME2); + } else { + tbf_ul_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_UL_ASS_ST_COMPL); + } + case GPRS_RLCMAC_TBF_UL_ASS_EV_TBF_STARTING_TIME: tbf_ul_ass_fsm_state_chg(fi, GPRS_RLCMAC_TBF_UL_ASS_ST_COMPL); break; default: @@ -378,11 +448,23 @@ .in_event_mask = X(GPRS_RLCMAC_TBF_UL_ASS_EV_RX_CCCH_IMM_ASS), .out_state_mask = + X(GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME1) | X(GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_RES_REQ) | X(GPRS_RLCMAC_TBF_UL_ASS_ST_COMPL), .name = "WAIT_CCCH_IMM_ASS", .action = st_wait_ccch_imm_ass, }, + [GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME1] = { + .in_event_mask = + X(GPRS_RLCMAC_TBF_UL_ASS_EV_RX_CCCH_IMM_ASS) | + X(GPRS_RLCMAC_TBF_UL_ASS_EV_TBF_STARTING_TIME), + .out_state_mask = + X(GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME1) | + X(GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_RES_REQ) | + X(GPRS_RLCMAC_TBF_UL_ASS_ST_COMPL), + .name = "WAIT_TBF_STARTING_TIME1", + .action = st_wait_tbf_starting_time1, + }, [GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_RES_REQ] = { .in_event_mask = X(GPRS_RLCMAC_TBF_UL_ASS_EV_CREATE_RLCMAC_MSG), @@ -396,18 +478,21 @@ X(GPRS_RLCMAC_TBF_UL_ASS_EV_RX_PKT_UL_ASS), .out_state_mask = X(GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_RES_REQ) | - X(GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_CTRL_ACK) | + X(GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME2) | X(GPRS_RLCMAC_TBF_UL_ASS_ST_COMPL), .name = "WAIT_PKT_UL_ASS", .action = st_wait_pkt_ul_ass, }, - [GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_CTRL_ACK] = { + [GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME2] = { .in_event_mask = - X(GPRS_RLCMAC_TBF_UL_ASS_EV_CREATE_RLCMAC_MSG), + X(GPRS_RLCMAC_TBF_UL_ASS_EV_RX_PKT_UL_ASS) | + X(GPRS_RLCMAC_TBF_UL_ASS_EV_TBF_STARTING_TIME), .out_state_mask = + X(GPRS_RLCMAC_TBF_UL_ASS_ST_SCHED_PKT_RES_REQ) | + X(GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME2) | X(GPRS_RLCMAC_TBF_UL_ASS_ST_COMPL), - .name = "SCHED_PKT_CTRL_ACK", - .action = st_sched_pkt_ctrl_ack, + .name = "WAIT_TBF_STARTING_TIME2", + .action = st_wait_tbf_starting_time2, }, [GPRS_RLCMAC_TBF_UL_ASS_ST_COMPL] = { .in_event_mask = 0, @@ -539,6 +624,23 @@ ul_tbf->ul_ass_fsm.rach_req_ra == ra; } +bool gprs_rlcmac_tbf_ul_ass_waiting_tbf_starting_time(const struct gprs_rlcmac_ul_tbf *ul_tbf) +{ + return ul_tbf->ul_ass_fsm.fi->state == GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME1 || + ul_tbf->ul_ass_fsm.fi->state == GPRS_RLCMAC_TBF_UL_ASS_ST_WAIT_TBF_STARTING_TIME2; +} + +/* The scheduled ticks the new FN, which may trigger changes internally if TBF Starting Time is reached */ +void gprs_rlcmac_tbf_ul_ass_fn_tick(const struct gprs_rlcmac_ul_tbf *ul_tbf, uint32_t fn, uint8_t ts_nr) +{ + OSMO_ASSERT(gprs_rlcmac_tbf_ul_ass_waiting_tbf_starting_time(ul_tbf)); + OSMO_ASSERT(ul_tbf->ul_ass_fsm.tbf_starting_time_exists); + if (fn != ul_tbf->ul_ass_fsm.tbf_starting_time) + return; + + osmo_fsm_inst_dispatch(ul_tbf->ul_ass_fsm.fi, GPRS_RLCMAC_TBF_UL_ASS_EV_TBF_STARTING_TIME, NULL); +} + enum gprs_rlcmac_tbf_ul_ass_fsm_states gprs_rlcmac_tbf_ul_ass_state(const struct gprs_rlcmac_ul_tbf *ul_tbf) { const struct gprs_rlcmac_tbf_ul_ass_fsm_ctx *ctx = &ul_tbf->ul_ass_fsm; diff --git a/tests/rlcmac/rlcmac_prim_test.err b/tests/rlcmac/rlcmac_prim_test.err index af14349..5d997dd 100644 --- a/tests/rlcmac/rlcmac_prim_test.err +++ b/tests/rlcmac/rlcmac_prim_test.err @@ -659,16 +659,14 @@ DLGLOBAL INFO TS=7 FN=26 Rx Pkt UL ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_PKT_UL_ASS}: Received Event RX_PKT_UL_ASS DLGLOBAL DEBUG Register POLL (TS=7 FN=43, reason=UL_ASS) -DLGLOBAL INFO UL_TBF_ASS{WAIT_PKT_UL_ASS}: state_chg to SCHED_PKT_CTRL_ACK -DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication -DLGLOBAL INFO UL_TBF_ASS{SCHED_PKT_CTRL_ACK}: Received Event CREATE_RLCMAC_MSG -DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00000001) Tx Packet Control Ack -DLGLOBAL INFO UL_TBF_ASS{SCHED_PKT_CTRL_ACK}: state_chg to COMPLETED +DLGLOBAL INFO UL_TBF_ASS{WAIT_PKT_UL_ASS}: state_chg to COMPLETED DLGLOBAL INFO UL_TBF{ASSIGN}: Received Event UL_ASS_COMPL DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0xc0 DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00000001) Tx Packet Control Ack +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00000001) Sending new block at BSN 0, CS=CS-2 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00000001) Dequeue next LLC (len=14) DLGLOBAL DEBUG -- Chunk with length 14 is less than remaining space (30): add length header to delimit LLC frame -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/31751 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: Id81f16743f2c464e01caf27ba2eb8c0fc715fe8a Gerrit-Change-Number: 31751 Gerrit-PatchSet: 2 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
1 0
0 0
[S] Change in libosmo-gprs[master]: rlcmac: Ignore DATA.ind with len=0
by pespin 09 Mar '23

09 Mar '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/31732 ) Change subject: rlcmac: Ignore DATA.ind with len=0 ...................................................................... rlcmac: Ignore DATA.ind with len=0 Change-Id: I342c7999261832a5d981e5831e428d2cbd82729e --- M src/rlcmac/rlcmac_prim.c 1 file changed, 17 insertions(+), 1 deletion(-) Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved diff --git a/src/rlcmac/rlcmac_prim.c b/src/rlcmac/rlcmac_prim.c index dcf4424..54adba9 100644 --- a/src/rlcmac/rlcmac_prim.c +++ b/src/rlcmac/rlcmac_prim.c @@ -467,8 +467,15 @@ static int rlcmac_prim_handle_l1ctl_pdch_data_ind(struct osmo_gprs_rlcmac_prim *rlcmac_prim) { - enum gprs_rlcmac_coding_scheme cs = gprs_rlcmac_mcs_get_by_size_dl(rlcmac_prim->l1ctl.pdch_data_ind.data_len); + enum gprs_rlcmac_coding_scheme cs; + /* ignore empty DATA.ind */ + if (OSMO_UNLIKELY(rlcmac_prim->l1ctl.pdch_data_ind.data_len == 0)) { + LOGRLCMAC(LOGL_DEBUG, "Dropping DL data block with length 0\n"); + return 0; + } + + cs = gprs_rlcmac_mcs_get_by_size_dl(rlcmac_prim->l1ctl.pdch_data_ind.data_len); if (cs == GPRS_RLCMAC_CS_UNKNOWN) { LOGRLCMAC(LOGL_ERROR, "Dropping DL data block with invalid length %u: %s\n", rlcmac_prim->l1ctl.pdch_data_ind.data_len, -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/31732 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: I342c7999261832a5d981e5831e428d2cbd82729e Gerrit-Change-Number: 31732 Gerrit-PatchSet: 2 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
1 0
0 0
[M] Change in libosmo-gprs[master]: rlcmac: Lower logging rx prim from lower layers
by pespin 09 Mar '23

09 Mar '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/31733 ) Change subject: rlcmac: Lower logging rx prim from lower layers ...................................................................... rlcmac: Lower logging rx prim from lower layers Let's set it as DEBUG, since that code path can be called quite a lot. Change-Id: I0b13fa374003a7c48bc259a8c45227b86beca454 --- M src/rlcmac/rlcmac_prim.c M tests/rlcmac/rlcmac_prim_test.err 2 files changed, 66 insertions(+), 55 deletions(-) Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified laforge: Looks good to me, approved diff --git a/src/rlcmac/rlcmac_prim.c b/src/rlcmac/rlcmac_prim.c index 54adba9..8cf53ba 100644 --- a/src/rlcmac/rlcmac_prim.c +++ b/src/rlcmac/rlcmac_prim.c @@ -542,7 +542,7 @@ struct msgb *msg = rlcmac_prim->oph.msg; int rc; - LOGRLCMAC(LOGL_INFO, "Rx from lower layers: %s\n", osmo_gprs_rlcmac_prim_name(rlcmac_prim)); + LOGRLCMAC(LOGL_DEBUG, "Rx from lower layers: %s\n", osmo_gprs_rlcmac_prim_name(rlcmac_prim)); switch (rlcmac_prim->oph.sap) { case OSMO_GPRS_RLCMAC_SAP_L1CTL: diff --git a/tests/rlcmac/rlcmac_prim_test.err b/tests/rlcmac/rlcmac_prim_test.err index 6ffd87d..af14349 100644 --- a/tests/rlcmac/rlcmac_prim_test.err +++ b/tests/rlcmac/rlcmac_prim_test.err @@ -7,7 +7,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7e DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -16,7 +16,7 @@ DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Sending new block at BSN 0, CS=CS-2 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Dequeue next LLC (len=33) DLGLOBAL DEBUG -- Chunk with length 33 larger than space (26) left in block: copy only remaining space, and we are done @@ -29,7 +29,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164 DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Sending new block at BSN 1, CS=CS-2 DLGLOBAL DEBUG -- Chunk with length 7 is less than remaining space (26): add length header to delimit LLC frame DLGLOBAL DEBUG -- Final block, so we done. @@ -42,7 +42,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FLOW}: state_chg to FINISHED DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (2) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL INFO TS=7 FN=8 Rx Pkt UL ACK/NACK DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Got GPRS UL ACK bitmap: SSN: 1, BSN 0 to 2 - 1 (2 blocks), "RR" DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) ack: (BSN=0)"RR"(BSN=1) R=ACK I=NACK @@ -54,7 +54,7 @@ DLGLOBAL DEBUG UL_TBF{FINISHED}: Final ACK received DLGLOBAL INFO UL_TBF{FINISHED}: state_chg to RELEASING DLGLOBAL DEBUG Register POLL (TS=7 FN=21, reason=UL_ACK) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG (ts=7,fn=21,usf=0) Tx Pkt Control Ack (UL ACK/NACK poll) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Tx Packet Control Ack DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated @@ -68,7 +68,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x79 DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -86,7 +86,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7b DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -104,7 +104,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x79 DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -122,7 +122,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x78 DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -145,7 +145,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7a DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -154,7 +154,7 @@ DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Sending new block at BSN 0, CS=CS-2 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Dequeue next LLC (len=33) DLGLOBAL DEBUG -- Chunk with length 33 larger than space (26) left in block: copy only remaining space, and we are done @@ -176,7 +176,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7c DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -185,7 +185,7 @@ DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 0 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 0 BSN2 -1) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying 1 RLC blocks, 1 BSNs @@ -204,7 +204,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x79 DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -213,7 +213,7 @@ DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 0 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 0 BSN2 -1) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying 1 RLC blocks, 1 BSNs @@ -232,7 +232,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7d DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -241,7 +241,7 @@ DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 0 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 0 BSN2 -1) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying 1 RLC blocks, 1 BSNs @@ -256,7 +256,7 @@ DLGLOBAL NOTICE UL_TBF{FLOW}: TBF establishment failure (T3166 timeout attempts=4) DLGLOBAL INFO UL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO UL_TBF{FLOW}: Deallocated -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL DEBUG Rx SI13 from lower layers DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request DLGLOBAL INFO TLLI=0x00002342 not found, creating entity on the fly @@ -267,7 +267,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7a DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -276,7 +276,7 @@ DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Sending new block at BSN 0, CS=CS-2 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Dequeue next LLC (len=33) DLGLOBAL DEBUG -- Chunk with length 33 larger than space (26) left in block: copy only remaining space, and we are done @@ -289,7 +289,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164 DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Sending new block at BSN 1, CS=CS-2 DLGLOBAL DEBUG -- Chunk with length 7 is less than remaining space (26): add length header to delimit LLC frame DLGLOBAL DEBUG -- Final block, so we done. @@ -302,7 +302,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FLOW}: state_chg to FINISHED DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (2) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 0, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 0 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 0 BSN2 -1) @@ -310,7 +310,7 @@ DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying data unit 0 (BSN 0) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) msg block (BSN 0, CS-2): 3c 01 01 00 00 23 42 01 c0 00 08 01 01 d5 71 00 00 08 29 26 24 00 00 00 00 71 62 f2 24 6c 84 44 04 00 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (3) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 1 BSN2 -1) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying 1 RLC blocks, 1 BSNs @@ -319,7 +319,7 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FINISHED}: Data block with CV=0 retransmit attempts=1 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (4) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 0, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 0 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 0 BSN2 -1) @@ -327,7 +327,7 @@ DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying data unit 0 (BSN 0) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) msg block (BSN 0, CS-2): 3c 01 01 00 00 23 42 01 c0 00 08 01 01 d5 71 00 00 08 29 26 24 00 00 00 00 71 62 f2 24 6c 84 44 04 00 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (5) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 1 BSN2 -1) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying 1 RLC blocks, 1 BSNs @@ -336,7 +336,7 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FINISHED}: Data block with CV=0 retransmit attempts=2 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (6) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 0, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 0 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 0 BSN2 -1) @@ -344,7 +344,7 @@ DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying data unit 0 (BSN 0) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) msg block (BSN 0, CS-2): 3c 01 01 00 00 23 42 01 c0 00 08 01 01 d5 71 00 00 08 29 26 24 00 00 00 00 71 62 f2 24 6c 84 44 04 00 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (7) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 1 BSN2 -1) DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Copying 1 RLC blocks, 1 BSNs @@ -353,7 +353,7 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FINISHED}: Data block with CV=0 retransmit attempts=3 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (8) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 0, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 0 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 0 BSN2 -1) @@ -369,7 +369,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7b DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -389,7 +389,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7a DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -398,7 +398,7 @@ DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Sending new block at BSN 0, CS=CS-2 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Dequeue next LLC (len=33) DLGLOBAL DEBUG -- Chunk with length 33 larger than space (26) left in block: copy only remaining space, and we are done @@ -411,7 +411,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164 DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL INFO TS=7 FN=4 Rx Pkt UL ACK/NACK DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Got GPRS UL ACK bitmap: SSN: 1, BSN 0 to 1 - 1 (1 blocks), "R" DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) ack: (BSN=0)"R"(BSN=0) R=ACK I=NACK @@ -419,7 +419,7 @@ DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) V(B): (V(A)=1)""(V(S)-1=0) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid DLGLOBAL INFO UL_TBF{FLOW}: Received Event RX_UL_ACK_NACK DLGLOBAL INFO UL_TBF{FLOW}: Contention resolution succeeded, stop T3166 -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Sending new block at BSN 1, CS=CS-2 DLGLOBAL DEBUG -- Chunk with length 7 is less than remaining space (30): add length header to delimit LLC frame DLGLOBAL DEBUG -- Final block, so we done. @@ -444,7 +444,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7b DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -453,7 +453,7 @@ DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Sending new block at BSN 0, CS=CS-2 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Dequeue next LLC (len=33) DLGLOBAL DEBUG -- Chunk with length 33 larger than space (26) left in block: copy only remaining space, and we are done @@ -466,7 +466,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent, stop T3164 DLGLOBAL INFO UL_TBF{FLOW}: First UL block sent (1 phase access), start T3166 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL INFO TS=7 FN=4 Rx Pkt UL ACK/NACK DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Got GPRS UL ACK bitmap: SSN: 1, BSN 0 to 1 - 1 (1 blocks), "R" DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) ack: (BSN=0)"R"(BSN=0) R=ACK I=NACK @@ -474,7 +474,7 @@ DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) V(B): (V(A)=1)""(V(S)-1=0) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid DLGLOBAL INFO UL_TBF{FLOW}: Received Event RX_UL_ACK_NACK DLGLOBAL INFO UL_TBF{FLOW}: Contention resolution succeeded, stop T3166 -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Sending new block at BSN 1, CS=CS-2 DLGLOBAL DEBUG -- Chunk with length 7 is less than remaining space (30): add length header to delimit LLC frame DLGLOBAL DEBUG -- Final block, so we done. @@ -487,7 +487,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FLOW}: Last UL block sent (CV=0), start T3182 DLGLOBAL INFO UL_TBF{FLOW}: state_chg to FINISHED -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 1, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 1 BSN2 -1) @@ -497,7 +497,7 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FINISHED}: Data block with CV=0 retransmit attempts=1 DLGLOBAL INFO UL_TBF{FINISHED}: Last UL block sent (CV=0), start T3182 -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 1, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 1 BSN2 -1) @@ -507,7 +507,7 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FINISHED}: Data block with CV=0 retransmit attempts=2 DLGLOBAL INFO UL_TBF{FINISHED}: Last UL block sent (CV=0), start T3182 -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 1, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 1 BSN2 -1) @@ -517,7 +517,7 @@ DLGLOBAL INFO UL_TBF{FINISHED}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FINISHED}: Data block with CV=0 retransmit attempts=3 DLGLOBAL INFO UL_TBF{FINISHED}: Last UL block sent (CV=0), start T3182 -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Restarting at BSN 1, because all blocks have been transmitted. DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Resending BSN 1 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) need_padding 0 spb_status 0 spb 0 (BSN1 1 BSN2 -1) @@ -539,7 +539,7 @@ DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: Send RACH.req ra=0x7b DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_CCCH_IMM_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: Received Event RX_CCCH_IMM_ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss initial CS=CS-2 DLGLOBAL INFO UL_TBF_ASS{WAIT_CCCH_IMM_ASS}: ImmAss DynamicAlloc (1phase access) ts_nr=7 usf=0 @@ -548,7 +548,7 @@ DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0x80 DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Sending new block at BSN 0, CS=CS-2 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Dequeue next LLC (len=14) DLGLOBAL DEBUG -- Chunk with length 14 is less than remaining space (26): add length header to delimit LLC frame @@ -565,7 +565,7 @@ DLGLOBAL INFO UL_TBF{FLOW}: Received Event LAST_UL_DATA_SENT DLGLOBAL INFO UL_TBF{FLOW}: state_chg to FINISHED DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) N3104 inc (1) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL INFO TS=7 FN=4 Rx Pkt UL ACK/NACK DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) Got GPRS UL ACK bitmap: SSN: 1, BSN 0 to 1 - 1 (1 blocks), "R" DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00002342) ack: (BSN=0)"R"(BSN=0) R=ACK I=NACK @@ -577,7 +577,7 @@ DLGLOBAL INFO UL_TBF{FINISHED}: state_chg to RELEASING DLGLOBAL DEBUG Register POLL (TS=7 FN=17, reason=UL_ACK) DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG (ts=7,fn=17,usf=0) Tx Pkt Resource Request (UL ACK/NACK poll) DLGLOBAL INFO UL_TBF{NEW}: Allocated DLGLOBAL INFO UL_TBF_ASS{IDLE}: Allocated @@ -593,13 +593,13 @@ DLGLOBAL INFO UL_TBF{ASSIGN}: Deallocated DLGLOBAL INFO Rx from upper layers: GMMRR-ASSIGN.request DLGLOBAL INFO GMMRR-ASSIGN.req: creating new entity TLLI=0x00000001 -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO GRE(00000001) Got PCH IMM_ASS (DL_TBF): DL_TFI=0 TS=7 DLGLOBAL INFO DL_TBF{NEW}: Allocated DLGLOBAL INFO DL_TBF{NEW}: Received Event DL_ASS_COMPL DLGLOBAL INFO TBF(DL:NR-0:TLLI-00000001) Send L1CTL-CF_DL_TBF.req dl_slotmask=0x80 dl_tfi=0 DLGLOBAL INFO DL_TBF{NEW}: state_chg to FLOW -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) Rx new DL data DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) DL DATA TFI=0 received (V(Q)=0 .. V(R)=0) DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) Got CS-1 RLC data block: FBI=1, BSN=0, SPB=0, S/P=1 RRBP=1, E=0, bitoffs=24 @@ -616,19 +616,19 @@ DLGLOBAL INFO DL_TBF{FLOW}: Received Event LAST_DL_DATA_RECVD DLGLOBAL INFO DL_TBF{FLOW}: state_chg to FINISHED DLGLOBAL DEBUG Register POLL (TS=7 FN=21, reason=DL_ACK) -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG (ts=7,fn=21,usf=0) Tx DL ACK/NACK FinalAck=1 DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) - V(N): "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIR" R=Received I=Invalid DLGLOBAL INFO DL_TBF{FINISHED}: Deallocated DLGLOBAL INFO Rx from upper layers: GMMRR-ASSIGN.request DLGLOBAL INFO GMMRR-ASSIGN.req: creating new entity TLLI=0x00000001 -DLGLOBAL INFO Rx from lower layers: L1CTL-CCCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-CCCH_DATA.indication DLGLOBAL INFO GRE(00000001) Got PCH IMM_ASS (DL_TBF): DL_TFI=0 TS=7 DLGLOBAL INFO DL_TBF{NEW}: Allocated DLGLOBAL INFO DL_TBF{NEW}: Received Event DL_ASS_COMPL DLGLOBAL INFO TBF(DL:NR-0:TLLI-00000001) Send L1CTL-CF_DL_TBF.req dl_slotmask=0x80 dl_tfi=0 DLGLOBAL INFO DL_TBF{NEW}: state_chg to FLOW -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) Rx new DL data DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) DL DATA TFI=0 received (V(Q)=0 .. V(R)=0) DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) Got CS-1 RLC data block: FBI=1, BSN=0, SPB=0, S/P=1 RRBP=1, E=0, bitoffs=24 @@ -646,7 +646,7 @@ DLGLOBAL INFO DL_TBF{FLOW}: state_chg to FINISHED DLGLOBAL DEBUG Register POLL (TS=7 FN=21, reason=DL_ACK) DLGLOBAL INFO Rx from upper layers: GRR-UNITDATA.request -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG (ts=7,fn=21,usf=0) Tx DL ACK/NACK FinalAck=1 DLGLOBAL DEBUG TBF(DL:NR-0:TLLI-00000001) - V(N): "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIR" R=Received I=Invalid DLGLOBAL INFO UL_TBF{NEW}: Allocated @@ -655,12 +655,12 @@ DLGLOBAL INFO UL_TBF{NEW}: Received Event UL_ASS_START DLGLOBAL INFO UL_TBF{NEW}: state_chg to ASSIGN DLGLOBAL INFO UL_TBF_ASS{IDLE}: state_chg to WAIT_PKT_UL_ASS -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_DATA.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_DATA.indication DLGLOBAL INFO TS=7 FN=26 Rx Pkt UL ASS DLGLOBAL INFO UL_TBF_ASS{WAIT_PKT_UL_ASS}: Received Event RX_PKT_UL_ASS DLGLOBAL DEBUG Register POLL (TS=7 FN=43, reason=UL_ASS) DLGLOBAL INFO UL_TBF_ASS{WAIT_PKT_UL_ASS}: state_chg to SCHED_PKT_CTRL_ACK -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL INFO UL_TBF_ASS{SCHED_PKT_CTRL_ACK}: Received Event CREATE_RLCMAC_MSG DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00000001) Tx Packet Control Ack DLGLOBAL INFO UL_TBF_ASS{SCHED_PKT_CTRL_ACK}: state_chg to COMPLETED @@ -668,7 +668,7 @@ DLGLOBAL INFO UL_TBF{ASSIGN}: Send L1CTL-CF_UL_TBF.req ul_slotmask=0xc0 DLGLOBAL INFO UL_TBF{ASSIGN}: state_chg to FLOW DLGLOBAL INFO UL_TBF_ASS{COMPLETED}: state_chg to IDLE -DLGLOBAL INFO Rx from lower layers: L1CTL-PDCH_RTS.indication +DLGLOBAL DEBUG Rx from lower layers: L1CTL-PDCH_RTS.indication DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00000001) Sending new block at BSN 0, CS=CS-2 DLGLOBAL DEBUG TBF(UL:NR-0:TLLI-00000001) Dequeue next LLC (len=14) DLGLOBAL DEBUG -- Chunk with length 14 is less than remaining space (30): add length header to delimit LLC frame -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/31733 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: I0b13fa374003a7c48bc259a8c45227b86beca454 Gerrit-Change-Number: 31733 Gerrit-PatchSet: 2 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
1 0
0 0
[L] Change in libosmo-gprs[master]: rlcmac: Implement DL TBF CCCH & PACCH allocation with TBF Starting Time
by pespin 09 Mar '23

09 Mar '23
pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/31757 ) Change subject: rlcmac: Implement DL TBF CCCH & PACCH allocation with TBF Starting Time ...................................................................... Patch Set 3: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/31757 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: Idafb4e37971e93c7e8667b8669a29755485e95bb Gerrit-Change-Number: 31757 Gerrit-PatchSet: 3 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Comment-Date: Thu, 09 Mar 2023 17:52:22 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • ...
  • 365
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.