From f11eee312c4c55cb890e60fef366dd6cc1eb0965 Mon Sep 17 00:00:00 2001 From: Sebastian Stumpf Date: Thu, 6 Apr 2017 16:49:31 +0200 Subject: VIRT-PHY: Extracted common virtphy utils. --- src/osmo-bts-virtual/Makefile.am | 4 +- src/osmo-bts-virtual/include/virtphy/common_util.h | 51 +++++++++++++++ src/osmo-bts-virtual/l1_if.c | 76 ---------------------- src/osmo-bts-virtual/shared/common_util.c | 44 +++++++++++++ 4 files changed, 98 insertions(+), 77 deletions(-) create mode 100644 src/osmo-bts-virtual/include/virtphy/common_util.h create mode 100644 src/osmo-bts-virtual/shared/common_util.c diff --git a/src/osmo-bts-virtual/Makefile.am b/src/osmo-bts-virtual/Makefile.am index ac22d8e8..b2503352 100644 --- a/src/osmo-bts-virtual/Makefile.am +++ b/src/osmo-bts-virtual/Makefile.am @@ -2,7 +2,9 @@ AM_CFLAGS = -Wall -fno-strict-aliasing $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(OPENBSC_INCDIR) -Iinclude COMMON_LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) $(LIBOSMOTRAU_LIBS) $(LIBOSMOABIS_LIBS) $(LIBOSMOCTRL_LIBS) $(ORTP_LIBS) +CFLAGS = -g -O0 + bin_PROGRAMS = osmo-bts-virtual -osmo_bts_virtual_SOURCES = main.c bts_model.c virtualbts_vty.c scheduler_virtbts.c l1_if.c shared/virtual_um.c shared/osmo_mcast_sock.c +osmo_bts_virtual_SOURCES = main.c bts_model.c virtualbts_vty.c scheduler_virtbts.c l1_if.c shared/virtual_um.c shared/osmo_mcast_sock.c shared/common_util.c osmo_bts_virtual_LDADD = $(top_builddir)/src/common/libbts.a $(top_builddir)/src/common/libl1sched.a $(COMMON_LDADD) diff --git a/src/osmo-bts-virtual/include/virtphy/common_util.h b/src/osmo-bts-virtual/include/virtphy/common_util.h new file mode 100644 index 00000000..672ff932 --- /dev/null +++ b/src/osmo-bts-virtual/include/virtphy/common_util.h @@ -0,0 +1,51 @@ +/* + * Utility function used both in osmo bts virt and osmocom bb virt. + */ + +#pragma once + +#include +#include + +#define LID_SACCH 0x40 +#define LID_DEDIC 0x00 + +/*! \brief convert GSMTAP channel type to RSL channel number + * \param[in] gsmtap_chantype GSMTAP channel type + * \param[out] rsl_chantype rsl channel type + * \param[out] rsl_chantype rsl link id + * + * Mapping from gsmtap channel: + * GSMTAP_CHANNEL_UNKNOWN * 0x00 + * GSMTAP_CHANNEL_BCCH * 0x01 + * GSMTAP_CHANNEL_CCCH * 0x02 + * GSMTAP_CHANNEL_RACH * 0x03 + * GSMTAP_CHANNEL_AGCH * 0x04 + * GSMTAP_CHANNEL_PCH * 0x05 + * GSMTAP_CHANNEL_SDCCH * 0x06 + * GSMTAP_CHANNEL_SDCCH4 * 0x07 + * GSMTAP_CHANNEL_SDCCH8 * 0x08 + * GSMTAP_CHANNEL_TCH_F * 0x09 + * GSMTAP_CHANNEL_TCH_H * 0x0a + * GSMTAP_CHANNEL_PACCH * 0x0b + * GSMTAP_CHANNEL_CBCH52 * 0x0c + * GSMTAP_CHANNEL_PDCH * 0x0d + * GSMTAP_CHANNEL_PTCCH * 0x0e + * GSMTAP_CHANNEL_CBCH51 * 0x0f + * to rsl channel type: + * RSL_CHAN_NR_MASK * 0xf8 + * RSL_CHAN_NR_1 * * 0x08 + * RSL_CHAN_Bm_ACCHs * 0x08 + * RSL_CHAN_Lm_ACCHs * 0x10 + * RSL_CHAN_SDCCH4_ACCH * 0x20 + * RSL_CHAN_SDCCH8_ACCH * 0x40 + * RSL_CHAN_BCCH * * 0x80 + * RSL_CHAN_RACH * * 0x88 + * RSL_CHAN_PCH_AGCH * 0x90 + * RSL_CHAN_OSMO_PDCH * 0xc0 + * and logical channel link id: + * LID_SACCH * * 0x40 + * LID_DEDIC * * 0x00 + */ +void chantype_gsmtap2rsl(uint8_t gsmtap_chantype, uint8_t *rsl_chantype, + uint8_t *link_id); diff --git a/src/osmo-bts-virtual/l1_if.c b/src/osmo-bts-virtual/l1_if.c index c049140e..160528d5 100644 --- a/src/osmo-bts-virtual/l1_if.c +++ b/src/osmo-bts-virtual/l1_if.c @@ -44,82 +44,6 @@ extern int vbts_sched_start(struct gsm_bts *bts); -/*! \brief convert GSMTAP channel type to RSL channel number - * \param[in] gsmtap_chantype GSMTAP channel type - * \param[out] rsl_chantype rsl channel type - * \param[out] rsl_chantype rsl link id - * - * Mapping from gsmtap channel: - * GSMTAP_CHANNEL_UNKNOWN * 0x00 - * GSMTAP_CHANNEL_BCCH * 0x01 - * GSMTAP_CHANNEL_CCCH * 0x02 - * GSMTAP_CHANNEL_RACH * 0x03 - * GSMTAP_CHANNEL_AGCH * 0x04 - * GSMTAP_CHANNEL_PCH * 0x05 - * GSMTAP_CHANNEL_SDCCH * 0x06 - * GSMTAP_CHANNEL_SDCCH4 * 0x07 - * GSMTAP_CHANNEL_SDCCH8 * 0x08 - * GSMTAP_CHANNEL_TCH_F * 0x09 - * GSMTAP_CHANNEL_TCH_H * 0x0a - * GSMTAP_CHANNEL_PACCH * 0x0b - * GSMTAP_CHANNEL_CBCH52 * 0x0c - * GSMTAP_CHANNEL_PDCH * 0x0d - * GSMTAP_CHANNEL_PTCCH * 0x0e - * GSMTAP_CHANNEL_CBCH51 * 0x0f - * to rsl channel type: - * RSL_CHAN_NR_MASK * 0xf8 - * RSL_CHAN_NR_1 * * 0x08 - * RSL_CHAN_Bm_ACCHs * 0x08 - * RSL_CHAN_Lm_ACCHs * 0x10 - * RSL_CHAN_SDCCH4_ACCH * 0x20 - * RSL_CHAN_SDCCH8_ACCH * 0x40 - * RSL_CHAN_BCCH * * 0x80 - * RSL_CHAN_RACH * * 0x88 - * RSL_CHAN_PCH_AGCH * 0x90 - * RSL_CHAN_OSMO_PDCH * 0xc0 - * and logical channel link id: - * LID_SACCH * * 0x40 - * LID_DEDIC * * 0x00 - * - * TODO: move this to a library used by both ms and bts virt um - */ -void chantype_gsmtap2rsl(uint8_t gsmtap_chantype, uint8_t *rsl_chantype, - uint8_t *link_id) -{ - // switch case with removed acch flag - switch (gsmtap_chantype & ~GSMTAP_CHANNEL_ACCH & 0xff) { - case GSMTAP_CHANNEL_TCH_F: // TCH/F, FACCH/F - *rsl_chantype = RSL_CHAN_Bm_ACCHs; - break; - case GSMTAP_CHANNEL_TCH_H: // TCH/H, FACCH/H - *rsl_chantype = RSL_CHAN_Lm_ACCHs; - break; - case GSMTAP_CHANNEL_SDCCH4: // SDCCH/4 - *rsl_chantype = RSL_CHAN_SDCCH4_ACCH; - break; - case GSMTAP_CHANNEL_SDCCH8: // SDCCH/8 - *rsl_chantype = RSL_CHAN_SDCCH8_ACCH; - break; - case GSMTAP_CHANNEL_BCCH: // BCCH - *rsl_chantype = RSL_CHAN_BCCH; - break; - case GSMTAP_CHANNEL_RACH: // RACH - *rsl_chantype = RSL_CHAN_RACH; - break; - case GSMTAP_CHANNEL_PCH: // PCH - case GSMTAP_CHANNEL_AGCH: // AGCH - *rsl_chantype = RSL_CHAN_PCH_AGCH; - break; - case GSMTAP_CHANNEL_PDCH: - *rsl_chantype = GSMTAP_CHANNEL_PDCH; - break; - } - - *link_id = gsmtap_chantype & GSMTAP_CHANNEL_ACCH ? - LID_SACCH : LID_DEDIC; - -} - /** * Callback to handle incoming messages from the MS. * The incoming message should be GSM_TAP encapsulated. diff --git a/src/osmo-bts-virtual/shared/common_util.c b/src/osmo-bts-virtual/shared/common_util.c new file mode 100644 index 00000000..49dea185 --- /dev/null +++ b/src/osmo-bts-virtual/shared/common_util.c @@ -0,0 +1,44 @@ +/* + * Utility function used both in osmo bts virt and osmocom bb virt. + */ + +#include +#include +#include + +void chantype_gsmtap2rsl(uint8_t gsmtap_chantype, uint8_t *rsl_chantype, + uint8_t *link_id) +{ + // switch case with removed acch flag + switch (gsmtap_chantype & ~GSMTAP_CHANNEL_ACCH & 0xff) { + case GSMTAP_CHANNEL_TCH_F: // TCH/F, FACCH/F + *rsl_chantype = RSL_CHAN_Bm_ACCHs; + break; + case GSMTAP_CHANNEL_TCH_H: // TCH/H, FACCH/H + *rsl_chantype = RSL_CHAN_Lm_ACCHs; + break; + case GSMTAP_CHANNEL_SDCCH4: // SDCCH/4 + *rsl_chantype = RSL_CHAN_SDCCH4_ACCH; + break; + case GSMTAP_CHANNEL_SDCCH8: // SDCCH/8 + *rsl_chantype = RSL_CHAN_SDCCH8_ACCH; + break; + case GSMTAP_CHANNEL_BCCH: // BCCH + *rsl_chantype = RSL_CHAN_BCCH; + break; + case GSMTAP_CHANNEL_RACH: // RACH + *rsl_chantype = RSL_CHAN_RACH; + break; + case GSMTAP_CHANNEL_PCH: // PCH + case GSMTAP_CHANNEL_AGCH: // AGCH + *rsl_chantype = RSL_CHAN_PCH_AGCH; + break; + case GSMTAP_CHANNEL_PDCH: + *rsl_chantype = GSMTAP_CHANNEL_PDCH; + break; + } + + *link_id = gsmtap_chantype & GSMTAP_CHANNEL_ACCH ? LID_SACCH : + LID_DEDIC; + +} -- cgit v1.2.3