Vadim Yanitskiy has uploaded this change for review. (
https://gerrit.osmocom.org/11251
Change subject: layer23/common: move signal loss criteria to L23SAP
..
layer23/common: move signal loss criteria to L23SAP
Change-Id: Ib70bf9104cf3b5489413dd90819fd4955ec16f95
---
M src/host/layer23/src/common/l1ctl.c
M src/host/layer23/src/common/l23sap.c
2 files changed, 83 insertions(+), 67 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/51/11251/1
diff --git a/src/host/layer23/src/common/l1ctl.c
b/src/host/layer23/src/common/l1ctl.c
index 4346da9..a08fac2 100644
--- a/src/host/layer23/src/common/l1ctl.c
+++ b/src/host/layer23/src/common/l1ctl.c
@@ -122,8 +122,6 @@
{
struct l1ctl_info_dl *dl;
struct l1ctl_data_ind *ccch;
- struct rx_meas_stat *meas = >meas;
- uint8_t chan_type, chan_ts, chan_ss;
struct gsm_time tm;
if (msgb_l1len(msg) < sizeof(*dl)) {
@@ -138,76 +136,11 @@
ccch = (struct l1ctl_data_ind *) msg->l2h;
gsm_fn2gsmtime(, ntohl(dl->frame_nr));
- rsl_dec_chan_nr(dl->chan_nr, _type, _ss, _ts);
DEBUGP(DL1C, "%s (%.4u/%.2u/%.2u) %d dBm: %s\n",
rsl_chan_nr_str(dl->chan_nr), tm.t1, tm.t2, tm.t3,
(int)dl->rx_level-110,
osmo_hexdump(ccch->data, sizeof(ccch->data)));
- meas->last_fn = ntohl(dl->frame_nr);
- meas->frames++;
- meas->snr += dl->snr;
- meas->berr += dl->num_biterr;
- meas->rxlev += dl->rx_level;
-
- /* counting loss criteria */
- if (!(dl->link_id & 0x40)) {
- switch (chan_type) {
- case RSL_CHAN_PCH_AGCH:
- /* only look at one CCCH frame in each 51 multiframe.
-* FIXME: implement DRX
-* - select correct paging block that is for us.
-* - initialize ds_fail according to BS_PA_MFRMS.
-*/
- if ((dl->frame_nr % 51) != 6)
- break;
- if (!meas->ds_fail)
- break;
- if (dl->fire_crc >= 2)
- meas->dsc -= 4;
- else
- meas->dsc += 1;
- if (meas->dsc > meas->ds_fail)
- meas->dsc = meas->ds_fail;
- if (meas->dsc < meas->ds_fail)
- LOGP(DL1C, LOGL_INFO, "LOSS counter for CCCH
%d\n", meas->dsc);
- if (meas->dsc > 0)
- break;
- meas->ds_fail = 0;
- osmo_signal_dispatch(SS_L1CTL, S_L1CTL_LOSS_IND, ms);
- break;
- }
- } else {
- switch (chan_type) {
- case RSL_CHAN_Bm_ACCHs:
- case RSL_CHAN_Lm_ACCHs:
- case RSL_CHAN_SDCCH4_ACCH:
- case RSL_CHAN_SDCCH8_ACCH:
- if (!meas->rl_fail)
- break;
- if (dl->fire_crc >= 2)
- meas->s -= 1;
- else
- meas->s += 2;
- if (meas->s > meas->rl_fail)
- meas->s = meas->rl_fail;
- if (meas->s < meas->rl_fail)
- LOGP(DL1C, LOGL_NOTICE, "LOSS counter for ACCH
%d\n", meas->s);
- if (meas->s > 0)
- break;
- meas->rl_fail = 0;
- osmo_signal_dispatch(SS_L1CTL, S_L1CTL_LOSS_IND, ms);
- break;
- }
- }
-
- if (dl->fire_crc >= 2) {
- LOGP(DL1C, LOGL_NOTICE, "Dropping frame with %u bit errors\n",
- dl->num_biterr);
- msgb_free(msg);
- return 0;
- }
-
/* Send it up towards LAPDm via L23SAP */
return l23sap_data_ind(ms, msg);
}
diff --git a/src/host/layer23/src/common/l23sap.c
b/src/host/layer23/src/common/l23sap.c
index a34f515..fbdc75c 100644
--- a/src/host/layer23/src/common/l23sap.c
+++ b/src/host/layer23/src/common/l23sap.c
@@ -2,6 +2,7 @@
* L23SAP (L2&3 Service Access Point), an interface between
* L1 implementation and the upper layers (i.e. L2&3).
*
+ * (C) 2010 by Andreas Eversberg
* (C) 2011 by Harald Welte
* (C) 2018 by Vadim Yanitskiy
*
@@ -34,6 +35,7 @@
#include
#include
#include
+#include
#include
#include
@@ -47,6 +49,81 @@
extern struct gsmtap_inst *gsmtap_inst;
+static int l23sap_check_dl_loss(struct osmocom_ms *ms,
+ struct l1ctl_info_dl *dl)
+{
+ struct rx_meas_stat *meas = >meas;
+ uint8_t chan_type, chan_ts, chan_ss;
+
+