aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2009-11-30 19:16:47 +0100
committerHarald Welte <laforge@gnumonks.org>2009-11-30 19:16:47 +0100
commitdbb1d883594ba8796acbc7831d4ad042c7070d12 (patch)
tree81175504c637c208b97e994f4ae31cf6d0d47150 /openbsc
parent798418a068fcc95f8f5bcad5ba923ab065d7fa86 (diff)
[handover] export measurement reports via signal
This patch introduces the S_LCHAN_MEAS_REP signal which is used to export measurement reports as input to the yet-to-be-written handover algorithm.
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/include/openbsc/meas_rep.h2
-rw-r--r--openbsc/include/openbsc/signal.h1
-rw-r--r--openbsc/src/abis_rsl.c5
3 files changed, 7 insertions, 1 deletions
diff --git a/openbsc/include/openbsc/meas_rep.h b/openbsc/include/openbsc/meas_rep.h
index 0c2bdabde..b1ad2daa8 100644
--- a/openbsc/include/openbsc/meas_rep.h
+++ b/openbsc/include/openbsc/meas_rep.h
@@ -30,6 +30,8 @@ struct gsm_meas_rep_unidir {
/* parsed uplink and downlink measurement result */
struct gsm_meas_rep {
+ struct gsm_lchan *lchan;
+
u_int8_t nr;
unsigned int flags;
diff --git a/openbsc/include/openbsc/signal.h b/openbsc/include/openbsc/signal.h
index fbd61ae9e..5156fcb79 100644
--- a/openbsc/include/openbsc/signal.h
+++ b/openbsc/include/openbsc/signal.h
@@ -83,6 +83,7 @@ enum signal_lchan {
S_LCHAN_HANDOVER_COMPL, /* 04.08 Handover Completed */
S_LCHAN_HANDOVER_FAIL, /* 04.08 Handover Failed */
S_LCHAN_HANDOVER_DETECT, /* 08.58 Handover Detect */
+ S_LCHAN_MEAS_REP, /* 08.58 Measurement Report */
};
/* SS_SUBSCR signals */
diff --git a/openbsc/src/abis_rsl.c b/openbsc/src/abis_rsl.c
index 8033a3c74..b049c3c8a 100644
--- a/openbsc/src/abis_rsl.c
+++ b/openbsc/src/abis_rsl.c
@@ -1005,6 +1005,8 @@ static int rsl_rx_meas_res(struct msgb *msg)
memset(&mr, 0, sizeof(mr));
+ mr.lchan = msg->lchan;
+
rsl_tlv_parse(&tp, dh->data, msgb_l2len(msg)-sizeof(*dh));
if (!TLVP_PRESENT(&tp, RSL_IE_MEAS_RES_NR) ||
@@ -1048,9 +1050,10 @@ static int rsl_rx_meas_res(struct msgb *msg)
return rc;
}
- /* FIXME: do something with the actual result*/
print_meas_rep(&mr);
+ dispatch_signal(SS_LCHAN, S_LCHAN_MEAS_REP, &mr);
+
return 0;
}