aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.am2
-rw-r--r--src/bts.cpp8
-rw-r--r--src/bts.h8
-rw-r--r--src/pcu_main.cpp2
-rw-r--r--src/ta.cpp142
-rw-r--r--src/ta.h40
6 files changed, 7 insertions, 195 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index b5456e00..35ba7a92 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -49,7 +49,6 @@ libgprs_la_SOURCES = \
bts.cpp \
poll_controller.cpp \
encoding.cpp \
- ta.cpp \
sba.cpp \
decoding.cpp \
llc.cpp \
@@ -92,7 +91,6 @@ noinst_HEADERS = \
bts.h \
poll_controller.h \
encoding.h \
- ta.h \
sba.h \
rlc.h \
decoding.h \
diff --git a/src/bts.cpp b/src/bts.cpp
index 010b8e88..7225a78c 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -945,7 +945,13 @@ void gprs_rlcmac_pdch::rcv_measurement_report(Packet_Measurement_Report_t *repor
"block, but there is no resource request "
"scheduled! TLLI=0x%08x\n", report->TLLI);
} else {
- bts()->timing_advance()->remember(report->TLLI, sba->ta);
+ GprsMs *ms = bts()->ms_store().get_ms(report->TLLI);
+ if (!ms)
+ LOGP(DRLCMAC, LOGL_NOTICE, "MS send measurement "
+ "but TLLI 0x%08x is unknown\n", report->TLLI);
+ else
+ ms->set_ta(sba->ta);
+
bts()->sba()->free_sba(sba);
}
gprs_rlcmac_meas_rep(report);
diff --git a/src/bts.h b/src/bts.h
index 2e2d1467..28ecfc1c 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -30,7 +30,6 @@ extern "C" {
#include "poll_controller.h"
#include "sba.h"
-#include "ta.h"
#include "tbf.h"
#include "gprs_ms_storage.h"
#endif
@@ -197,7 +196,6 @@ public:
struct gprs_rlcmac_bts *bts_data();
SBAController *sba();
- TimingAdvance *timing_advance();
/** TODO: change the number to unsigned */
void set_current_frame_number(int frame_number);
@@ -254,7 +252,6 @@ private:
struct gprs_rlcmac_bts m_bts;
PollController m_pollController;
SBAController m_sba;
- TimingAdvance m_ta;
struct rate_ctr_group *m_ratectrs;
gprs_rlcmac_tbf *tbf_by_tfi(uint8_t tfi, uint8_t trx, enum gprs_rlcmac_tbf_direction dir);
@@ -271,11 +268,6 @@ inline int BTS::current_frame_number() const
return m_cur_fn;
}
-inline TimingAdvance *BTS::timing_advance()
-{
- return &m_ta;
-}
-
inline SBAController *BTS::sba()
{
return &m_sba;
diff --git a/src/pcu_main.cpp b/src/pcu_main.cpp
index 08feb894..75e12634 100644
--- a/src/pcu_main.cpp
+++ b/src/pcu_main.cpp
@@ -244,8 +244,6 @@ int main(int argc, char *argv[])
pcu_l1if_close();
- bts->bts->timing_advance()->flush();
-
talloc_report_full(tall_pcu_ctx, stderr);
talloc_free(tall_pcu_ctx);
diff --git a/src/ta.cpp b/src/ta.cpp
deleted file mode 100644
index 0bc1d660..00000000
--- a/src/ta.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * ta.cpp timing advance handling
- * Copyright (C) 2012 Ivan Klyuchnikov
- * Copyright (C) 2012 Andreas Eversberg <jolly@eversberg.eu>
- * Copyright (C) 2013 by Holger Hans Peter Freyther
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <ta.h>
-#include <gprs_rlcmac.h>
-
-extern "C" {
- #include <osmocom/core/talloc.h>
-}
-
-#include <errno.h>
-
-extern void *tall_pcu_ctx;
-
-/*
- * timing advance memory
- */
-
-/* enable to debug timing advance memory */
-//#define DEBUG_TA
-
-struct gprs_rlcmac_ta {
- struct llist_head list;
- uint32_t tlli;
- uint8_t ta;
-};
-
-TimingAdvance::TimingAdvance()
- : m_ta_len(0)
-{
- INIT_LLIST_HEAD(&m_ta_list);
-}
-
-/* remember timing advance of a given TLLI */
-int TimingAdvance::remember(uint32_t tlli, uint8_t ta)
-{
- struct gprs_rlcmac_ta *ta_entry;
-
- /* check for existing entry */
- llist_for_each_entry(ta_entry, &m_ta_list, list) {
- if (ta_entry->tlli == tlli) {
-#ifdef DEBUG_TA
- fprintf(stderr, "update %08x %d\n", tlli, ta);
-#endif
- ta_entry->ta = ta;
- /* relink to end of list */
- llist_del(&ta_entry->list);
- llist_add_tail(&ta_entry->list, &m_ta_list);
- return 0;
- }
- }
-
-#ifdef DEBUG_TA
- fprintf(stderr, "remember %08x %d\n", tlli, ta);
-#endif
- /* if list is full, remove oldest entry */
- if (m_ta_len == 30) {
- ta_entry = llist_entry(m_ta_list.next,
- struct gprs_rlcmac_ta, list);
- llist_del(&ta_entry->list);
- talloc_free(ta_entry);
- m_ta_len--;
- }
-
- /* create new TA entry */
- ta_entry = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_ta);
- if (!ta_entry)
- return -ENOMEM;
-
- ta_entry->tlli = tlli;
- ta_entry->ta = ta;
- llist_add_tail(&ta_entry->list, &m_ta_list);
- m_ta_len++;
-
- return 0;
-}
-
-int TimingAdvance::recall(uint32_t tlli)
-{
- struct gprs_rlcmac_ta *ta_entry;
- uint8_t ta;
-
- llist_for_each_entry(ta_entry, &m_ta_list, list) {
- if (ta_entry->tlli == tlli) {
- ta = ta_entry->ta;
-#ifdef DEBUG_TA
- fprintf(stderr, "recall %08x %d\n", tlli, ta);
-#endif
- return ta;
- }
- }
-#ifdef DEBUG_TA
- fprintf(stderr, "no entry for %08x\n", tlli);
-#endif
-
- return -EINVAL;
-}
-
-int TimingAdvance::flush()
-{
- struct gprs_rlcmac_ta *ta_entry;
- int count = 0;
-
- while (!llist_empty(&m_ta_list)) {
- ta_entry = llist_entry(m_ta_list.next,
- struct gprs_rlcmac_ta, list);
-#ifdef DEBUG_TA
- fprintf(stderr, "flush entry %08x %d\n", ta_entry->tlli,
- ta_entry->ta);
-#endif
- llist_del(&ta_entry->list);
- talloc_free(ta_entry);
- count++;
- }
- m_ta_len = 0;
-
- return count;
-}
-
-int TimingAdvance::update(uint32_t, uint32_t new_tlli, uint8_t ta)
-{
- /* for now just add the new entry and don't bother about the old one */
- return remember(new_tlli, ta);
-}
diff --git a/src/ta.h b/src/ta.h
deleted file mode 100644
index 9b64280f..00000000
--- a/src/ta.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2012 Ivan Klyuchnikov
- * Copyright (C) 2012 Andreas Eversberg <jolly@eversberg.eu>
- * Copyright (C) 2013 by Holger Hans Peter Freyther
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#pragma once
-
-extern "C" {
-#include <osmocom/core/linuxlist.h>
-}
-
-#include <stdint.h>
-
-class TimingAdvance {
-public:
- TimingAdvance();
-
- int update(uint32_t old_tlli, uint32_t new_tlli, uint8_t ta);
- int remember(uint32_t tlli, uint8_t ta);
- int recall(uint32_t tlli);
- int flush();
-
-private:
- size_t m_ta_len;
- llist_head m_ta_list;
-};