diff options
-rw-r--r-- | src/Makefile.am | 3 | ||||
-rw-r--r-- | src/llc.cpp | 79 | ||||
-rw-r--r-- | src/tbf.cpp | 49 | ||||
-rw-r--r-- | src/tbf.h | 1 |
4 files changed, 82 insertions, 50 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 9bc41833..857d0497 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -47,7 +47,8 @@ libgprs_la_SOURCES = \ encoding.cpp \ ta.cpp \ sba.cpp \ - decoding.cpp + decoding.cpp \ + llc.cpp if ENABLE_SYSMOBTS libgprs_la_SOURCES += \ diff --git a/src/llc.cpp b/src/llc.cpp new file mode 100644 index 00000000..f5daa1e8 --- /dev/null +++ b/src/llc.cpp @@ -0,0 +1,79 @@ +/* Copied from tbf.cpp + * + * 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 <tbf.h> +#include <bts.h> + +#include <string.h> + +extern "C" { +#include <osmocom/core/msgb.h> +} + +/* reset LLC frame */ +void gprs_llc::reset() +{ + index = 0; + length = 0; +} + +void gprs_llc::reset_frame_space() +{ + index = 0; +} + +void gprs_llc::enqueue(struct msgb *llc_msg) +{ + msgb_enqueue(&queue, llc_msg); +} + +void gprs_llc::put_frame(const uint8_t *data, size_t len) +{ + memcpy(frame, data, len); + length = len; +} + +void gprs_llc::clear(BTS *bts) +{ + struct msgb *msg; + + while ((msg = msgb_dequeue(&queue))) { + bts->dropped_frame(); + msgb_free(msg); + } +} + +void gprs_llc::init() +{ + INIT_LLIST_HEAD(&queue); +} + +struct msgb *gprs_llc::dequeue() +{ + return msgb_dequeue(&queue); +} + +void gprs_llc::update_frame(struct msgb *msg) +{ + /* TODO: bounds check */ + memcpy(frame, msg->data, msg->len); + length = msg->len; +} diff --git a/src/tbf.cpp b/src/tbf.cpp index 467f02cd..84dc8b67 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -1862,52 +1862,3 @@ const char *tbf_name(gprs_rlcmac_tbf *tbf) return buf; } -/* reset LLC frame */ -void gprs_llc::reset() -{ - index = 0; - length = 0; -} - -void gprs_llc::reset_frame_space() -{ - index = 0; -} - -void gprs_llc::enqueue(struct msgb *llc_msg) -{ - msgb_enqueue(&queue, llc_msg); -} - -void gprs_llc::put_frame(const uint8_t *data, size_t len) -{ - memcpy(frame, data, len); - length = len; -} - -void gprs_llc::clear(BTS *bts) -{ - struct msgb *msg; - - while ((msg = msgb_dequeue(&queue))) { - bts->dropped_frame(); - msgb_free(msg); - } -} - -void gprs_llc::init() -{ - INIT_LLIST_HEAD(&queue); -} - -struct msgb *gprs_llc::dequeue() -{ - return msgb_dequeue(&queue); -} - -void gprs_llc::update_frame(struct msgb *msg) -{ - /* TODO: bounds check */ - memcpy(frame, msg->data, msg->len); - length = msg->len; -} @@ -24,6 +24,7 @@ struct bssgp_bvc_ctx; struct rlc_ul_header; +struct msgb; /* * TBF instance |