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

Keyboard Shortcuts

Thread View

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

gerrit-log

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

July 2023

  • 1 participants
  • 3051 discussions
[M] Change in osmo-bts[master]: scheduler: unify argument names/order for _sched_compose_*_ind()
by fixeria 05 Jul '23

05 Jul '23
fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/33583 ) Change subject: scheduler: unify argument names/order for _sched_compose_*_ind() ...................................................................... scheduler: unify argument names/order for _sched_compose_*_ind() This commit aims to make the argument naming/ordering more consistent: * rename l2/l2_len and tch/tch_len to data/data_len; * common arguments first (consistent ordering), specific last. Change-Id: I3d8c90b82f2a55b0c5c2d6b4efb8fd962508534d Related: OS#1572 --- M include/osmo-bts/scheduler_backend.h M src/common/scheduler.c M src/osmo-bts-trx/sched_lchan_pdtch.c M src/osmo-bts-trx/sched_lchan_tchf.c M src/osmo-bts-trx/sched_lchan_tchh.c M src/osmo-bts-trx/sched_lchan_xcch.c 6 files changed, 77 insertions(+), 42 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/83/33583/1 diff --git a/include/osmo-bts/scheduler_backend.h b/include/osmo-bts/scheduler_backend.h index 3b1388f..d465744 100644 --- a/include/osmo-bts/scheduler_backend.h +++ b/include/osmo-bts/scheduler_backend.h @@ -42,16 +42,18 @@ struct msgb *_sched_dequeue_prim(struct l1sched_ts *l1ts, const struct trx_dl_burst_req *br); int _sched_compose_ph_data_ind(struct l1sched_ts *l1ts, uint32_t fn, - enum trx_chan_type chan, uint8_t *l2, - uint8_t l2_len, float rssi, + enum trx_chan_type chan, + uint8_t *data, uint8_t data_len, + uint16_t ber10k, float rssi, int16_t ta_offs_256bits, int16_t link_qual_cb, - uint16_t ber10k, enum osmo_ph_pres_info_type presence_info); int _sched_compose_tch_ind(struct l1sched_ts *l1ts, uint32_t fn, - enum trx_chan_type chan, uint8_t *tch, uint8_t tch_len, - int16_t ta_offs_256bits, uint16_t ber10k, float rssi, - int16_t link_qual_cb, uint8_t is_sub); + enum trx_chan_type chan, + uint8_t *data, uint8_t data_len, + uint16_t ber10k, float rssi, + int16_t ta_offs_256bits, int16_t link_qual_cb, + uint8_t is_sub); int tx_fcch_fn(struct l1sched_ts *l1ts, struct trx_dl_burst_req *br); int tx_sch_fn(struct l1sched_ts *l1ts, struct trx_dl_burst_req *br); diff --git a/src/common/scheduler.c b/src/common/scheduler.c index 7ea6bfa..fc34491 100644 --- a/src/common/scheduler.c +++ b/src/common/scheduler.c @@ -750,10 +750,10 @@ } int _sched_compose_ph_data_ind(struct l1sched_ts *l1ts, uint32_t fn, - enum trx_chan_type chan, uint8_t *l2, - uint8_t l2_len, float rssi, + enum trx_chan_type chan, + uint8_t *data, uint8_t data_len, + uint16_t ber10k, float rssi, int16_t ta_offs_256bits, int16_t link_qual_cb, - uint16_t ber10k, enum osmo_ph_pres_info_type presence_info) { struct msgb *msg; @@ -765,7 +765,7 @@ chan_nr |= RSL_CHAN_OSMO_VAMOS_MASK; /* compose primitive */ - msg = l1sap_msgb_alloc(l2_len); + msg = l1sap_msgb_alloc(data_len); l1sap = msgb_l1sap_prim(msg); osmo_prim_init(&l1sap->oph, SAP_GSM_PH, PRIM_PH_DATA, PRIM_OP_INDICATION, msg); @@ -777,9 +777,9 @@ l1sap->u.data.ta_offs_256bits = ta_offs_256bits; l1sap->u.data.lqual_cb = link_qual_cb; l1sap->u.data.pdch_presence_info = presence_info; - msg->l2h = msgb_put(msg, l2_len); - if (l2_len) - memcpy(msg->l2h, l2, l2_len); + msg->l2h = msgb_put(msg, data_len); + if (data_len) + memcpy(msg->l2h, data, data_len); /* forward primitive */ l1sap_up(l1ts->ts->trx, l1sap); @@ -788,9 +788,11 @@ } int _sched_compose_tch_ind(struct l1sched_ts *l1ts, uint32_t fn, - enum trx_chan_type chan, uint8_t *tch, uint8_t tch_len, - int16_t ta_offs_256bits, uint16_t ber10k, float rssi, - int16_t link_qual_cb, uint8_t is_sub) + enum trx_chan_type chan, + uint8_t *data, uint8_t data_len, + uint16_t ber10k, float rssi, + int16_t ta_offs_256bits, int16_t link_qual_cb, + uint8_t is_sub) { struct msgb *msg; struct osmo_phsap_prim *l1sap; @@ -802,7 +804,7 @@ chan_nr |= RSL_CHAN_OSMO_VAMOS_MASK; /* compose primitive */ - msg = l1sap_msgb_alloc(tch_len); + msg = l1sap_msgb_alloc(data_len); l1sap = msgb_l1sap_prim(msg); osmo_prim_init(&l1sap->oph, SAP_GSM_PH, PRIM_TCH, PRIM_OP_INDICATION, msg); @@ -814,9 +816,9 @@ l1sap->u.tch.lqual_cb = link_qual_cb; l1sap->u.tch.is_sub = is_sub & 1; - msg->l2h = msgb_put(msg, tch_len); - if (tch_len) - memcpy(msg->l2h, tch, tch_len); + msg->l2h = msgb_put(msg, data_len); + if (data_len) + memcpy(msg->l2h, data, data_len); LOGL1S(DL1P, LOGL_DEBUG, l1ts, chan, l1sap->u.tch.fn, "%s Rx -> RTP: %s\n", gsm_lchan_name(lchan), msgb_hexdump_l2(msg)); diff --git a/src/osmo-bts-trx/sched_lchan_pdtch.c b/src/osmo-bts-trx/sched_lchan_pdtch.c index f12961f..2aa43f9 100644 --- a/src/osmo-bts-trx/sched_lchan_pdtch.c +++ b/src/osmo-bts-trx/sched_lchan_pdtch.c @@ -131,10 +131,12 @@ ber10k = compute_ber10k(n_bits_total, n_errors); first_fn = GSM_TDMA_FN_SUB(bi->fn, 3); - return _sched_compose_ph_data_ind(l1ts, - first_fn, bi->chan, l2, rc, - meas_avg.rssi, meas_avg.toa256, - meas_avg.ci_cb, ber10k, + return _sched_compose_ph_data_ind(l1ts, first_fn, bi->chan, + &l2[0], rc, + ber10k, + meas_avg.rssi, + meas_avg.toa256, + meas_avg.ci_cb, presence_info); } diff --git a/src/osmo-bts-trx/sched_lchan_tchf.c b/src/osmo-bts-trx/sched_lchan_tchf.c index 9acbf31..b8f8322 100644 --- a/src/osmo-bts-trx/sched_lchan_tchf.c +++ b/src/osmo-bts-trx/sched_lchan_tchf.c @@ -253,10 +253,12 @@ /* FACCH */ if (rc == GSM_MACBLOCK_LEN) { _sched_compose_ph_data_ind(l1ts, fn_begin, bi->chan, - tch_data + amr, GSM_MACBLOCK_LEN, - meas_avg.rssi, meas_avg.toa256, - meas_avg.ci_cb, ber10k, - PRES_INFO_UNKNOWN); + &tch_data[amr], GSM_MACBLOCK_LEN, + ber10k, + meas_avg.rssi, + meas_avg.toa256, + meas_avg.ci_cb, + PRES_INFO_UNKNOWN); /* If we are in SPEECH mode we will generate a fake (BFI) TCH * indication as well. This indication is needed by the higher @@ -273,9 +275,13 @@ return 0; /* TCH or BFI */ - return _sched_compose_tch_ind(l1ts, fn_begin, bi->chan, tch_data, rc, - meas_avg.toa256, ber10k, meas_avg.rssi, - meas_avg.ci_cb, is_sub); + return _sched_compose_tch_ind(l1ts, fn_begin, bi->chan, + &tch_data[0], rc, + ber10k, + meas_avg.rssi, + meas_avg.toa256, + meas_avg.ci_cb, + is_sub); } /* common section for generation of TCH bursts (TCH/H and TCH/F). diff --git a/src/osmo-bts-trx/sched_lchan_tchh.c b/src/osmo-bts-trx/sched_lchan_tchh.c index 8d1aab3..97b8582 100644 --- a/src/osmo-bts-trx/sched_lchan_tchh.c +++ b/src/osmo-bts-trx/sched_lchan_tchh.c @@ -295,10 +295,12 @@ * report gets dropped in process_l1sap_meas_data(). The averaged results * will be sent with the first (see below) and second (see above) BFIs. */ _sched_compose_ph_data_ind(l1ts, fn_begin, bi->chan, - tch_data + amr, GSM_MACBLOCK_LEN, - tch_mode == GSM48_CMODE_SIGN ? meas_avg.rssi : 0, - meas_avg.toa256, meas_avg.ci_cb, ber10k, - PRES_INFO_UNKNOWN); + &tch_data[amr], GSM_MACBLOCK_LEN, + ber10k, + tch_mode == GSM48_CMODE_SIGN ? meas_avg.rssi : 0, + meas_avg.toa256, + meas_avg.ci_cb, + PRES_INFO_UNKNOWN); ber10k = 0; bfi: /* A FACCH/H frame replaces two speech frames, so we need to send two BFIs. @@ -310,9 +312,13 @@ return 0; /* TCH or BFI */ - return _sched_compose_tch_ind(l1ts, fn_begin, bi->chan, tch_data, rc, - meas_avg.toa256, ber10k, meas_avg.rssi, - meas_avg.ci_cb, is_sub); + return _sched_compose_tch_ind(l1ts, fn_begin, bi->chan, + &tch_data[0], rc, + ber10k, + meas_avg.rssi, + meas_avg.toa256, + meas_avg.ci_cb, + is_sub); } /* common section for generation of TCH bursts (TCH/H and TCH/F). diff --git a/src/osmo-bts-trx/sched_lchan_xcch.c b/src/osmo-bts-trx/sched_lchan_xcch.c index 0fccf3e..87561ea 100644 --- a/src/osmo-bts-trx/sched_lchan_xcch.c +++ b/src/osmo-bts-trx/sched_lchan_xcch.c @@ -144,10 +144,12 @@ if (rep_sacch) memcpy(chan_state->ul_bursts_prev, bursts_p, 464); - return _sched_compose_ph_data_ind(l1ts, *first_fn, - bi->chan, l2, l2_len, - meas_avg.rssi, meas_avg.toa256, - meas_avg.ci_cb, ber10k, + return _sched_compose_ph_data_ind(l1ts, *first_fn, bi->chan, + &l2[0], l2_len, + ber10k, + meas_avg.rssi, + meas_avg.toa256, + meas_avg.ci_cb, PRES_INFO_UNKNOWN); } -- To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/33583 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bts Gerrit-Branch: master Gerrit-Change-Id: I3d8c90b82f2a55b0c5c2d6b4efb8fd962508534d Gerrit-Change-Number: 33583 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-MessageType: newchange
1 0
0 0
[S] Change in osmo-bts[master]: [WIP] osmo-bts-trx: rx_tch[fh]_fn(): separate FACCH decoding
by fixeria 05 Jul '23

05 Jul '23
fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/33586 ) Change subject: [WIP] osmo-bts-trx: rx_tch[fh]_fn(): separate FACCH decoding ...................................................................... [WIP] osmo-bts-trx: rx_tch[fh]_fn(): separate FACCH decoding Change-Id: I4c6736e84c271240d457998de688c0baf59fe578 --- M src/osmo-bts-trx/sched_lchan_tchf.c 1 file changed, 39 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/86/33586/1 diff --git a/src/osmo-bts-trx/sched_lchan_tchf.c b/src/osmo-bts-trx/sched_lchan_tchf.c index ac6fbd1..3c34522 100644 --- a/src/osmo-bts-trx/sched_lchan_tchf.c +++ b/src/osmo-bts-trx/sched_lchan_tchf.c @@ -69,6 +69,36 @@ extern const uint8_t sched_tchh_dl_amr_cmi_map[26]; +# if 0 +static int decode_facch(struct l1sched_ts *l1ts, + const struct trx_ul_burst_ind *bi) +{ + struct l1sched_chan_state *l1cs = &l1ts->chan_state[bi->chan] + const sbit_t *bursts_p = chan_state->ul_bursts; + struct l1sched_meas_set meas_avg; + uint8_t data[GSM_MACBLOCK_LEN]; + int n_errors, n_bits_total; + uint16_t ber10k; + + rc = gsm0503_tch_fr_facch_decode(&data[0], BUFTAIL8(bursts_p), + &n_errors, &n_bits_total); + if (rc != GSM_MACBLOCK_LEN) + return rc; + + /* average measurements of the last 8 bursts, obtain TDMA Fn of the first burst */ + trx_sched_meas_avg(l1cs, &meas_avg, SCHED_MEAS_AVG_M_S8N8); + ber10k = compute_ber10k(n_bits_total, n_errors); + + /* meas_avg.fn now contains TDMA frame number of the first burst */ + _sched_compose_ph_data_ind(l1ts, meas_avg.fn, bi->chan, + &data[0], GSM_MACBLOCK_LEN, + meas_avg.rssi, meas_avg.toa256, + meas_avg.ci_cb, ber10k, + PRES_INFO_UNKNOWN); + return 0; +} +#endif + /* Process a single Uplink TCH/F burst received by the PHY. * This function is visualized in file 'doc/trx_sched_tch.txt'. */ int rx_tchf_fn(struct l1sched_ts *l1ts, const struct trx_ul_burst_ind *bi) -- To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/33586 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bts Gerrit-Branch: master Gerrit-Change-Id: I4c6736e84c271240d457998de688c0baf59fe578 Gerrit-Change-Number: 33586 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-MessageType: newchange
1 0
0 0
[S] Change in osmo-bts[master]: scheduler: use size_t for data_len in _sched_compose_*_ind()
by fixeria 05 Jul '23

05 Jul '23
fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/33585 ) Change subject: scheduler: use size_t for data_len in _sched_compose_*_ind() ...................................................................... scheduler: use size_t for data_len in _sched_compose_*_ind() The payload size for some CSD channel types is bigger than what an uint8_t can represent, for instance 290 bytes for TCH/F14.4. Change-Id: Id75c55509a017d14dfab2a7b4c67e0742125a113 Related: OS#1572 --- M include/osmo-bts/scheduler_backend.h M src/common/scheduler.c 2 files changed, 17 insertions(+), 4 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/85/33585/1 diff --git a/include/osmo-bts/scheduler_backend.h b/include/osmo-bts/scheduler_backend.h index 83dd578..820cca7 100644 --- a/include/osmo-bts/scheduler_backend.h +++ b/include/osmo-bts/scheduler_backend.h @@ -43,14 +43,14 @@ int _sched_compose_ph_data_ind(struct l1sched_ts *l1ts, uint32_t fn, enum trx_chan_type chan, - const uint8_t *data, uint8_t data_len, + const uint8_t *data, size_t data_len, uint16_t ber10k, float rssi, int16_t ta_offs_256bits, int16_t link_qual_cb, enum osmo_ph_pres_info_type presence_info); int _sched_compose_tch_ind(struct l1sched_ts *l1ts, uint32_t fn, enum trx_chan_type chan, - const uint8_t *data, uint8_t data_len, + const uint8_t *data, size_t data_len, uint16_t ber10k, float rssi, int16_t ta_offs_256bits, int16_t link_qual_cb, uint8_t is_sub); diff --git a/src/common/scheduler.c b/src/common/scheduler.c index dc7d94f..007dd7c 100644 --- a/src/common/scheduler.c +++ b/src/common/scheduler.c @@ -751,7 +751,7 @@ int _sched_compose_ph_data_ind(struct l1sched_ts *l1ts, uint32_t fn, enum trx_chan_type chan, - const uint8_t *data, uint8_t data_len, + const uint8_t *data, size_t data_len, uint16_t ber10k, float rssi, int16_t ta_offs_256bits, int16_t link_qual_cb, enum osmo_ph_pres_info_type presence_info) @@ -789,7 +789,7 @@ int _sched_compose_tch_ind(struct l1sched_ts *l1ts, uint32_t fn, enum trx_chan_type chan, - const uint8_t *data, uint8_t data_len, + const uint8_t *data, size_t data_len, uint16_t ber10k, float rssi, int16_t ta_offs_256bits, int16_t link_qual_cb, uint8_t is_sub) -- To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/33585 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bts Gerrit-Branch: master Gerrit-Change-Id: Id75c55509a017d14dfab2a7b4c67e0742125a113 Gerrit-Change-Number: 33585 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-MessageType: newchange
1 0
0 0
[S] Change in osmo-bts[master]: scheduler: constify *data pointer in _sched_compose_*_ind()
by fixeria 05 Jul '23

05 Jul '23
fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/33584 ) Change subject: scheduler: constify *data pointer in _sched_compose_*_ind() ...................................................................... scheduler: constify *data pointer in _sched_compose_*_ind() Change-Id: I617e7ed50d27e047cc2851f5d44d31ad3111ce0a Related: OS#1572 --- M include/osmo-bts/scheduler_backend.h M src/common/scheduler.c 2 files changed, 14 insertions(+), 4 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/84/33584/1 diff --git a/include/osmo-bts/scheduler_backend.h b/include/osmo-bts/scheduler_backend.h index d465744..83dd578 100644 --- a/include/osmo-bts/scheduler_backend.h +++ b/include/osmo-bts/scheduler_backend.h @@ -43,14 +43,14 @@ int _sched_compose_ph_data_ind(struct l1sched_ts *l1ts, uint32_t fn, enum trx_chan_type chan, - uint8_t *data, uint8_t data_len, + const uint8_t *data, uint8_t data_len, uint16_t ber10k, float rssi, int16_t ta_offs_256bits, int16_t link_qual_cb, enum osmo_ph_pres_info_type presence_info); int _sched_compose_tch_ind(struct l1sched_ts *l1ts, uint32_t fn, enum trx_chan_type chan, - uint8_t *data, uint8_t data_len, + const uint8_t *data, uint8_t data_len, uint16_t ber10k, float rssi, int16_t ta_offs_256bits, int16_t link_qual_cb, uint8_t is_sub); diff --git a/src/common/scheduler.c b/src/common/scheduler.c index fc34491..dc7d94f 100644 --- a/src/common/scheduler.c +++ b/src/common/scheduler.c @@ -751,7 +751,7 @@ int _sched_compose_ph_data_ind(struct l1sched_ts *l1ts, uint32_t fn, enum trx_chan_type chan, - uint8_t *data, uint8_t data_len, + const uint8_t *data, uint8_t data_len, uint16_t ber10k, float rssi, int16_t ta_offs_256bits, int16_t link_qual_cb, enum osmo_ph_pres_info_type presence_info) @@ -789,7 +789,7 @@ int _sched_compose_tch_ind(struct l1sched_ts *l1ts, uint32_t fn, enum trx_chan_type chan, - uint8_t *data, uint8_t data_len, + const uint8_t *data, uint8_t data_len, uint16_t ber10k, float rssi, int16_t ta_offs_256bits, int16_t link_qual_cb, uint8_t is_sub) -- To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/33584 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bts Gerrit-Branch: master Gerrit-Change-Id: I617e7ed50d27e047cc2851f5d44d31ad3111ce0a Gerrit-Change-Number: 33584 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-MessageType: newchange
1 0
0 0
[S] Change in libosmo-netif[master]: stream: Adapt to new changes
by arehbein 05 Jul '23

05 Jul '23
arehbein has abandoned this change. ( https://gerrit.osmocom.org/c/libosmo-netif/+/33199 ) Change subject: stream: Adapt to new changes ...................................................................... Abandoned -- To view, visit https://gerrit.osmocom.org/c/libosmo-netif/+/33199 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-netif Gerrit-Branch: master Gerrit-Change-Id: I5f9a5ce85efb4ed512ff6ca1f3e170d2ffb2ba22 Gerrit-Change-Number: 33199 Gerrit-PatchSet: 1 Gerrit-Owner: arehbein <arehbein(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-CC: laforge <laforge(a)osmocom.org> Gerrit-MessageType: abandon
1 0
0 0
[S] Change in libosmo-gprs[master]: gmm: Accept event LOW_LVL_FAIL in RAU/SR_INITIATED states
by pespin 05 Jul '23

05 Jul '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/33566 ) Change subject: gmm: Accept event LOW_LVL_FAIL in RAU/SR_INITIATED states ...................................................................... gmm: Accept event LOW_LVL_FAIL in RAU/SR_INITIATED states This even is triggered by the GSM itself due to internal timeouts as a consequence of lower layers not resolving the request (with accept or reject events). Change-Id: Ic1072629595e75c411b421e71f6ffac5dd41da3b --- M src/gmm/gmm_ms_fsm.c 1 file changed, 21 insertions(+), 0 deletions(-) Approvals: Jenkins Builder: Verified pespin: Looks good to me, approved diff --git a/src/gmm/gmm_ms_fsm.c b/src/gmm/gmm_ms_fsm.c index 770ede7..f219bbe 100644 --- a/src/gmm/gmm_ms_fsm.c +++ b/src/gmm/gmm_ms_fsm.c @@ -243,6 +243,9 @@ enum gsm48_gmm_cause cause; switch (event) { + case GPRS_GMM_MS_EV_LOW_LVL_FAIL: + gmm_ms_fsm_state_chg(fi, GPRS_GMM_MS_ST_REGISTERED); + break; case GPRS_GMM_MS_EV_RAU_REJECTED: cause = *(uint8_t *)data; /* 3GPP TS 24.008 Figure 4.1b */ @@ -273,6 +276,9 @@ static void st_gmm_ms_sr_initiated(struct osmo_fsm_inst *fi, uint32_t event, void *data) { switch (event) { + case GPRS_GMM_MS_EV_LOW_LVL_FAIL: + gmm_ms_fsm_state_chg(fi, GPRS_GMM_MS_ST_REGISTERED); + break; case GPRS_GMM_MS_EV_SR_REJECTED: gmm_ms_fsm_state_chg(fi, GPRS_GMM_MS_ST_REGISTERED); break; @@ -357,6 +363,7 @@ }, [GPRS_GMM_MS_ST_RAU_INITIATED] = { .in_event_mask = + X(GPRS_GMM_MS_EV_LOW_LVL_FAIL) | X(GPRS_GMM_MS_EV_RAU_REJECTED) | X(GPRS_GMM_MS_EV_RAU_ACCEPTED), .out_state_mask = @@ -367,6 +374,7 @@ }, [GPRS_GMM_MS_ST_SR_INITIATED] = { .in_event_mask = + X(GPRS_GMM_MS_EV_LOW_LVL_FAIL) | X(GPRS_GMM_MS_EV_SR_REJECTED) | X(GPRS_GMM_MS_EV_SR_ACCEPTED), .out_state_mask = -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/33566 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: Ic1072629595e75c411b421e71f6ffac5dd41da3b Gerrit-Change-Number: 33566 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-MessageType: merged
1 0
0 0
[M] Change in libosmo-gprs[master]: rlcmac: tbf_dl: Implement T3192
by pespin 05 Jul '23

05 Jul '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/33556 ) Change subject: rlcmac: tbf_dl: Implement T3192 ...................................................................... rlcmac: tbf_dl: Implement T3192 Related: OS#5500 Change-Id: I49c9068d1819d6189103908f6f92ce05952b74e6 --- M include/osmocom/gprs/rlcmac/tbf_dl.h M src/rlcmac/rlcmac.c M src/rlcmac/tbf_dl.c M src/rlcmac/tbf_dl_fsm.c M tests/rlcmac/rlcmac_prim_test.err 5 files changed, 68 insertions(+), 6 deletions(-) Approvals: Jenkins Builder: Verified pespin: Looks good to me, approved diff --git a/include/osmocom/gprs/rlcmac/tbf_dl.h b/include/osmocom/gprs/rlcmac/tbf_dl.h index 7fb3c9e..104b6e6 100644 --- a/include/osmocom/gprs/rlcmac/tbf_dl.h +++ b/include/osmocom/gprs/rlcmac/tbf_dl.h @@ -35,6 +35,7 @@ }; struct osmo_timer_list t3190; + struct osmo_timer_list t3192; }; struct gprs_rlcmac_dl_tbf *gprs_rlcmac_dl_tbf_alloc(struct gprs_rlcmac_entity *gre); diff --git a/src/rlcmac/rlcmac.c b/src/rlcmac/rlcmac.c index f9281fb..f35c04d 100644 --- a/src/rlcmac/rlcmac.c +++ b/src/rlcmac/rlcmac.c @@ -50,6 +50,7 @@ { .T=3168, .default_val=5000, .unit = OSMO_TDEF_MS, .desc="Wait for PACKET UPLINK ASSIGNMENT (updated by BCCH SI13) (ms)" }, { .T=3182, .default_val=5, .unit = OSMO_TDEF_S, .desc="Wait for Acknowledgement (s)" }, { .T=3190, .default_val=5, .unit = OSMO_TDEF_S, .desc="Wait for Valid Downlink Data Received from the Network (s)" }, + { .T=3192, .default_val=0, .unit = OSMO_TDEF_MS, .desc="Wait for release of the TBF after reception of the final block (ms)" }, { 0 } /* empty item at the end */ }; @@ -571,9 +572,18 @@ return rc; } +/* Decode T3192. 3GPP TS 44.060 Table 12.24.2: GPRS Cell Options information element details */ +static unsigned int gprs_rlcmac_decode_t3192(unsigned int t3192_encoded) +{ + static const unsigned int decode_t3192_tbl[8] = {500, 1000, 1500, 0, 80, 120, 160, 200}; + OSMO_ASSERT(t3192_encoded <= 7); + return decode_t3192_tbl[t3192_encoded]; +} + int gprs_rlcmac_handle_bcch_si13(const struct gsm48_system_information_type_13 *si13) { int rc; + unsigned int t3192; LOGRLCMAC(LOGL_DEBUG, "Rx SI13 from lower layers\n"); memcpy(g_rlcmac_ctx->si13, si13, GSM_MACBLOCK_LEN); @@ -594,9 +604,9 @@ (g_rlcmac_ctx->si13ro.u.PBCCH_Not_present.GPRS_Cell_Options.T3168 + 1) * 500, OSMO_TDEF_MS); - /* TODO: Update tdef for T3192 as per TS 44.060 Table 12.24.2 - * osmo_tdef_set(g_rlcmac_ctx->T_defs, 3192, si13ro.u.PBCCH_Not_present.GPRS_Cell_Options.T3192, enum osmo_tdef_unit val_unit); - */ + /* Update tdef for T3192 as per TS 44.060 Table 12.24.2 */ + t3192 = gprs_rlcmac_decode_t3192(g_rlcmac_ctx->si13ro.u.PBCCH_Not_present.GPRS_Cell_Options.T3192); + osmo_tdef_set(g_rlcmac_ctx->T_defs, 3192, t3192, OSMO_TDEF_MS); return rc; } @@ -674,6 +684,16 @@ GPRS_RLCMAC_PDCH_ULC_POLL_DL_ASS, gre); } + + /* 9.3.2.6 Release of downlink Temporary Block Flow: + * If the MS, [...] receives a PACKET DOWNLINK ASSIGNMENT with the Control Ack bit + * set to '1' [...] while its timer T3192 is running, the MS shall stop timer T3192, + * consider this downlink TBF released and act upon the new assignments. + */ + if (dlass->CONTROL_ACK && gre->dl_tbf) { + if (osmo_timer_pending(&gre->dl_tbf->t3192)) + gprs_rlcmac_dl_tbf_free(gre->dl_tbf); + } return rc; } diff --git a/src/rlcmac/tbf_dl.c b/src/rlcmac/tbf_dl.c index c6205c3..a7f0ea9 100644 --- a/src/rlcmac/tbf_dl.c +++ b/src/rlcmac/tbf_dl.c @@ -28,6 +28,7 @@ #include <osmocom/gprs/rlcmac/pdch_ul_controller.h> static void gprs_rlcmac_dl_tbf_t3190_timer_cb(void *data); +static void gprs_rlcmac_dl_tbf_t3192_timer_cb(void *data); struct gprs_rlcmac_dl_tbf *gprs_rlcmac_dl_tbf_alloc(struct gprs_rlcmac_entity *gre) { @@ -54,6 +55,7 @@ OSMO_ASSERT(dl_tbf->blkst); osmo_timer_setup(&dl_tbf->t3190, gprs_rlcmac_dl_tbf_t3190_timer_cb, dl_tbf); + osmo_timer_setup(&dl_tbf->t3192, gprs_rlcmac_dl_tbf_t3192_timer_cb, dl_tbf); return dl_tbf; @@ -75,6 +77,7 @@ gre = tbf->gre; osmo_timer_del(&dl_tbf->t3190); + osmo_timer_del(&dl_tbf->t3192); msgb_free(dl_tbf->llc_rx_msg); dl_tbf->llc_rx_msg = NULL; @@ -109,6 +112,29 @@ osmo_timer_schedule(&dl_tbf->t3190, val_sec, 0); } +/* This timer is used on the mobile station side when the mobile station has + * received all of the RLC data blocks. When timer T3192 expires the mobile station + * shall release the resources associated with the TBF (e.g. TFI) and begin to + * monitor its paging channel. */ +static void gprs_rlcmac_dl_tbf_t3192_timer_cb(void *data) +{ + struct gprs_rlcmac_dl_tbf *dl_tbf = data; + + LOGPTBFDL(dl_tbf, LOGL_INFO, "Timeout of T3192\n"); + + gprs_rlcmac_dl_tbf_free(dl_tbf); +} + +void gprs_rlcmac_dl_tbf_t3192_start(struct gprs_rlcmac_dl_tbf *dl_tbf) +{ + unsigned long val_msec; + val_msec = osmo_tdef_get(g_rlcmac_ctx->T_defs, 3192, OSMO_TDEF_MS, -1); + + LOGPTBFDL(dl_tbf, LOGL_INFO, "Starting T3192 (%lu ms)\n", val_msec); + OSMO_ASSERT(gprs_rlcmac_tbf_dl_state(dl_tbf) == GPRS_RLCMAC_TBF_DL_ST_FINISHED); + osmo_timer_schedule(&dl_tbf->t3192, val_msec / 1000, (val_msec % 1000) * 1000); +} + static uint8_t dl_tbf_dl_slotmask(struct gprs_rlcmac_dl_tbf *dl_tbf) { uint8_t dl_slotmask = 0; @@ -161,10 +187,11 @@ goto free_ret; } - /* Stop T3190 if transmitting final Downlink Ack/Nack */ - if (gprs_rlcmac_tbf_dl_state(dl_tbf) == GPRS_RLCMAC_TBF_DL_ST_FINISHED) + /* Transmitting final Downlink Ack/Nack: Stop T3190 (if still armed), re-arm T3192 */ + if (gprs_rlcmac_tbf_dl_state(dl_tbf) == GPRS_RLCMAC_TBF_DL_ST_FINISHED) { osmo_timer_del(&dl_tbf->t3190); - + gprs_rlcmac_dl_tbf_t3192_start(dl_tbf); + } return msg; free_ret: diff --git a/src/rlcmac/tbf_dl_fsm.c b/src/rlcmac/tbf_dl_fsm.c index 342256f..158b802 100644 --- a/src/rlcmac/tbf_dl_fsm.c +++ b/src/rlcmac/tbf_dl_fsm.c @@ -80,6 +80,8 @@ static void st_finished(struct osmo_fsm_inst *fi, uint32_t event, void *data) { + /* Wait to be freed by T3190/T3192. */ + //struct gprs_rlcmac_tbf_dl_fsm_ctx *ctx = (struct gprs_rlcmac_tbf_dl_fsm_ctx *)fi->priv; switch (event) { case GPRS_RLCMAC_TBF_DL_EV_LAST_DL_DATA_RECVD: diff --git a/tests/rlcmac/rlcmac_prim_test.err b/tests/rlcmac/rlcmac_prim_test.err index 087e371..c6a7a73 100644 --- a/tests/rlcmac/rlcmac_prim_test.err +++ b/tests/rlcmac/rlcmac_prim_test.err @@ -911,6 +911,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 INFO TBF(DL:NR-0:TLLI-00000001) Starting T3192 (0 ms) DLGLOBAL DEBUG Tx to lower layers: L1CTL-PDCH_DATA.request DLGLOBAL INFO DL_TBF_ASS{IDLE}: Deallocated DLGLOBAL INFO DL_TBF{FINISHED}: Deallocated @@ -955,6 +956,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 INFO TBF(DL:NR-0:TLLI-00000001) Starting T3192 (0 ms) 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 -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/33556 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: I49c9068d1819d6189103908f6f92ce05952b74e6 Gerrit-Change-Number: 33556 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-MessageType: merged
1 0
0 0
[M] Change in libosmo-gprs[master]: rlcmac: tbf_dl: Implement T3190
by pespin 05 Jul '23

05 Jul '23
pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/33554 ) Change subject: rlcmac: tbf_dl: Implement T3190 ...................................................................... rlcmac: tbf_dl: Implement T3190 Related: OS#5500 Change-Id: I3f69fde298dcd64d30b9d648a96717a8378864c4 --- M include/osmocom/gprs/rlcmac/tbf_dl.h M src/rlcmac/rlcmac.c M src/rlcmac/tbf_dl.c M src/rlcmac/tbf_dl_fsm.c 4 files changed, 47 insertions(+), 4 deletions(-) Approvals: Jenkins Builder: Verified pespin: Looks good to me, approved diff --git a/include/osmocom/gprs/rlcmac/tbf_dl.h b/include/osmocom/gprs/rlcmac/tbf_dl.h index f398c0a..7fb3c9e 100644 --- a/include/osmocom/gprs/rlcmac/tbf_dl.h +++ b/include/osmocom/gprs/rlcmac/tbf_dl.h @@ -33,14 +33,18 @@ struct gprs_rlcmac_rlc_window *w; struct gprs_rlcmac_rlc_dl_window *dlw; }; + + struct osmo_timer_list t3190; }; struct gprs_rlcmac_dl_tbf *gprs_rlcmac_dl_tbf_alloc(struct gprs_rlcmac_entity *gre); void gprs_rlcmac_dl_tbf_free(struct gprs_rlcmac_dl_tbf *dl_tbf); +void gprs_rlcmac_dl_tbf_t3190_start(struct gprs_rlcmac_dl_tbf *dl_tbf); + int gprs_rlcmac_dl_tbf_configure_l1ctl(struct gprs_rlcmac_dl_tbf *dl_tbf); -struct msgb *gprs_rlcmac_dl_tbf_create_pkt_dl_ack_nack(const struct gprs_rlcmac_dl_tbf *dl_tbf); +struct msgb *gprs_rlcmac_dl_tbf_create_pkt_dl_ack_nack(struct gprs_rlcmac_dl_tbf *dl_tbf); int gprs_rlcmac_dl_tbf_rcv_data_block(struct gprs_rlcmac_dl_tbf *dl_tbf, const struct gprs_rlcmac_rlc_data_info *rlc, diff --git a/src/rlcmac/rlcmac.c b/src/rlcmac/rlcmac.c index 5cf4bb9..f9281fb 100644 --- a/src/rlcmac/rlcmac.c +++ b/src/rlcmac/rlcmac.c @@ -49,6 +49,7 @@ /* T3168: dynamically updated with what's received in BCCH SI13 */ { .T=3168, .default_val=5000, .unit = OSMO_TDEF_MS, .desc="Wait for PACKET UPLINK ASSIGNMENT (updated by BCCH SI13) (ms)" }, { .T=3182, .default_val=5, .unit = OSMO_TDEF_S, .desc="Wait for Acknowledgement (s)" }, + { .T=3190, .default_val=5, .unit = OSMO_TDEF_S, .desc="Wait for Valid Downlink Data Received from the Network (s)" }, { 0 } /* empty item at the end */ }; diff --git a/src/rlcmac/tbf_dl.c b/src/rlcmac/tbf_dl.c index 570b0d7..c6205c3 100644 --- a/src/rlcmac/tbf_dl.c +++ b/src/rlcmac/tbf_dl.c @@ -27,6 +27,8 @@ #include <osmocom/gprs/rlcmac/rlcmac_enc.h> #include <osmocom/gprs/rlcmac/pdch_ul_controller.h> +static void gprs_rlcmac_dl_tbf_t3190_timer_cb(void *data); + struct gprs_rlcmac_dl_tbf *gprs_rlcmac_dl_tbf_alloc(struct gprs_rlcmac_entity *gre) { struct gprs_rlcmac_dl_tbf *dl_tbf; @@ -51,6 +53,8 @@ dl_tbf->blkst = gprs_rlcmac_rlc_block_store_alloc(dl_tbf); OSMO_ASSERT(dl_tbf->blkst); + osmo_timer_setup(&dl_tbf->t3190, gprs_rlcmac_dl_tbf_t3190_timer_cb, dl_tbf); + return dl_tbf; err_tbf_destruct: @@ -70,6 +74,8 @@ tbf = dl_tbf_as_tbf(dl_tbf); gre = tbf->gre; + osmo_timer_del(&dl_tbf->t3190); + msgb_free(dl_tbf->llc_rx_msg); dl_tbf->llc_rx_msg = NULL; @@ -87,6 +93,21 @@ gprs_rlcmac_entity_dl_tbf_freed(gre, dl_tbf); } +static void gprs_rlcmac_dl_tbf_t3190_timer_cb(void *data) +{ + struct gprs_rlcmac_dl_tbf *dl_tbf = data; + + LOGPTBFDL(dl_tbf, LOGL_NOTICE, "Timeout of T3190\n"); + + gprs_rlcmac_dl_tbf_free(dl_tbf); +} + +void gprs_rlcmac_dl_tbf_t3190_start(struct gprs_rlcmac_dl_tbf *dl_tbf) +{ + unsigned long val_sec; + val_sec = osmo_tdef_get(g_rlcmac_ctx->T_defs, 3190, OSMO_TDEF_S, -1); + osmo_timer_schedule(&dl_tbf->t3190, val_sec, 0); +} static uint8_t dl_tbf_dl_slotmask(struct gprs_rlcmac_dl_tbf *dl_tbf) { @@ -113,7 +134,7 @@ return gprs_rlcmac_prim_call_down_cb(rlcmac_prim); } -struct msgb *gprs_rlcmac_dl_tbf_create_pkt_dl_ack_nack(const struct gprs_rlcmac_dl_tbf *dl_tbf) +struct msgb *gprs_rlcmac_dl_tbf_create_pkt_dl_ack_nack(struct gprs_rlcmac_dl_tbf *dl_tbf) { struct msgb *msg; struct bitvec bv; @@ -140,6 +161,10 @@ goto free_ret; } + /* Stop T3190 if transmitting final Downlink Ack/Nack */ + if (gprs_rlcmac_tbf_dl_state(dl_tbf) == GPRS_RLCMAC_TBF_DL_ST_FINISHED) + osmo_timer_del(&dl_tbf->t3190); + return msg; free_ret: @@ -214,7 +239,7 @@ { const struct gprs_rlcmac_rlc_block_info *rdbi; struct gprs_rlcmac_rlc_block *block; - + unsigned int block_idx; const uint16_t ws = gprs_rlcmac_rlc_window_ws(dl_tbf->w); LOGPTBFDL(dl_tbf, LOGL_DEBUG, "DL DATA TFI=%d received (V(Q)=%d .. V(R)=%d)\n", @@ -222,7 +247,8 @@ gprs_rlcmac_rlc_dl_window_v_q(dl_tbf->dlw), gprs_rlcmac_rlc_dl_window_v_r(dl_tbf->dlw)); - unsigned int block_idx; + /* Re-arm T3190: */ + gprs_rlcmac_dl_tbf_t3190_start(dl_tbf); /* Loop over num_blocks */ for (block_idx = 0; block_idx < rlc->num_data_blocks; block_idx++) { diff --git a/src/rlcmac/tbf_dl_fsm.c b/src/rlcmac/tbf_dl_fsm.c index 606b985..342256f 100644 --- a/src/rlcmac/tbf_dl_fsm.c +++ b/src/rlcmac/tbf_dl_fsm.c @@ -58,6 +58,8 @@ /* Configure DL TBF on the lower MAC side: */ gprs_rlcmac_dl_tbf_configure_l1ctl(ctx->dl_tbf); tbf_dl_fsm_state_chg(fi, GPRS_RLCMAC_TBF_DL_ST_FLOW); + /* FIXME: This should ideally be done after TbfStartTime has elapsed: */ + gprs_rlcmac_dl_tbf_t3190_start(ctx->dl_tbf); break; default: OSMO_ASSERT(0); -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/33554 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: I3f69fde298dcd64d30b9d648a96717a8378864c4 Gerrit-Change-Number: 33554 Gerrit-PatchSet: 3 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-MessageType: merged
1 0
0 0
[S] Change in libosmo-gprs[master]: gmm: Accept event LOW_LVL_FAIL in RAU/SR_INITIATED states
by pespin 05 Jul '23

05 Jul '23
pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/33566 ) Change subject: gmm: Accept event LOW_LVL_FAIL in RAU/SR_INITIATED states ...................................................................... Patch Set 2: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/33566 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: Ic1072629595e75c411b421e71f6ffac5dd41da3b Gerrit-Change-Number: 33566 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Comment-Date: Wed, 05 Jul 2023 14:39:45 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 0
0 0
[M] Change in libosmo-gprs[master]: rlcmac: tbf_dl: Implement T3192
by pespin 05 Jul '23

05 Jul '23
pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/33556 ) Change subject: rlcmac: tbf_dl: Implement T3192 ...................................................................... Patch Set 2: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/c/libosmo-gprs/+/33556 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-gprs Gerrit-Branch: master Gerrit-Change-Id: I49c9068d1819d6189103908f6f92ce05952b74e6 Gerrit-Change-Number: 33556 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Comment-Date: Wed, 05 Jul 2023 14:39:43 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • ...
  • 306
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.