aboutsummaryrefslogtreecommitdiffstats
path: root/src/sysmo_l1_fwd.c
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2016-05-13 10:27:35 +0200
committerHolger Freyther <holger@freyther.de>2016-05-17 16:19:32 +0000
commitde810f2005b7a97fa8385d42f0a2399ceff6452a (patch)
treea0d1ae2d9f9ffec41474fca73b1550d006702b97 /src/sysmo_l1_fwd.c
parentcad867ec8d550638065d1115ef2a6296cfe557db (diff)
Restructure sources
Move hardware-spicefic files into subdirectory similar to the way it's done in OsmoBTS to make adding new hardware support easier. Change-Id: I05004ad9032759a5dbfa57290ed1df83e89d5cb8 Related: SYS#2443 Reviewed-on: https://gerrit.osmocom.org/58 Tested-by: Jenkins Builder Reviewed-by: Holger Freyther <holger@freyther.de>
Diffstat (limited to 'src/sysmo_l1_fwd.c')
-rw-r--r--src/sysmo_l1_fwd.c145
1 files changed, 0 insertions, 145 deletions
diff --git a/src/sysmo_l1_fwd.c b/src/sysmo_l1_fwd.c
deleted file mode 100644
index 535a7f00..00000000
--- a/src/sysmo_l1_fwd.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Interface handler for Sysmocom L1 (forwarding) */
-
-/* (C) 2011 by Harald Welte <laforge@gnumonks.org>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 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 Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <osmocom/core/talloc.h>
-#include <osmocom/core/utils.h>
-#include <osmocom/core/select.h>
-#include <osmocom/core/write_queue.h>
-#include <osmocom/core/msgb.h>
-#include <osmocom/core/socket.h>
-#include <osmocom/core/timer.h>
-#include <osmocom/gsm/gsm_utils.h>
-
-#include <sysmocom/femtobts/superfemto.h>
-#include <sysmocom/femtobts/gsml1prim.h>
-#include <sysmocom/femtobts/gsml1const.h>
-#include <sysmocom/femtobts/gsml1types.h>
-
-#include "gprs_debug.h"
-#include "sysmo_l1_if.h"
-
-
-#define L1FWD_L1_PORT 9999
-#define L1FWD_SYS_PORT 9998
-#define L1FWD_TCH_PORT 9997
-#define L1FWD_PDTCH_PORT 9996
-
-static const uint16_t fwd_udp_ports[] = {
- [MQ_SYS_WRITE] = L1FWD_SYS_PORT,
- [MQ_L1_WRITE] = L1FWD_L1_PORT,
- [MQ_TCH_WRITE] = L1FWD_TCH_PORT,
- [MQ_PDTCH_WRITE]= L1FWD_PDTCH_PORT,
-};
-
-static int fwd_read_cb(struct osmo_fd *ofd)
-{
- struct msgb *msg = msgb_alloc_headroom(sizeof(SuperFemto_Prim_t) + 128,
- 128, "udp_rx");
- struct femtol1_hdl *fl1h = ofd->data;
- int rc;
-
- if (!msg)
- return -ENOMEM;
-
- msg->l1h = msg->data;
- rc = read(ofd->fd, msg->l1h, msgb_tailroom(msg));
- if (rc < 0) {
- LOGP(DL1IF, LOGL_ERROR, "Short read from UDP\n");
- msgb_free(msg);
- return rc;
- } else if (rc == 0) {
- LOGP(DL1IF, LOGL_ERROR, "Len=0 from UDP\n");
- msgb_free(msg);
- return rc;
- }
- msgb_put(msg, rc);
-
- if (ofd->priv_nr == MQ_SYS_WRITE)
- rc = l1if_handle_sysprim(fl1h, msg);
- else
- rc = l1if_handle_l1prim(ofd->priv_nr, fl1h, msg);
-
- return rc;
-}
-
-static int prim_write_cb(struct osmo_fd *ofd, struct msgb *msg)
-{
- /* write to the fd */
- return write(ofd->fd, msg->head, msg->len);
-}
-
-int l1if_transport_open(int q, struct femtol1_hdl *fl1h)
-{
- int rc;
- char *bts_host = getenv("L1FWD_BTS_HOST");
-
- printf("sizeof(GsmL1_Prim_t) = %zu\n", sizeof(GsmL1_Prim_t));
- printf("sizeof(SuperFemto_Prim_t) = %zu\n", sizeof(SuperFemto_Prim_t));
-
- if (!bts_host) {
- fprintf(stderr, "You have to set the L1FWD_BTS_HOST environment variable\n");
- exit(2);
- }
-
- struct osmo_wqueue *wq = &fl1h->write_q[q];
- struct osmo_fd *ofd = &wq->bfd;
-
- osmo_wqueue_init(wq, 10);
- wq->write_cb = prim_write_cb;
- wq->read_cb = fwd_read_cb;
-
- ofd->data = fl1h;
- ofd->priv_nr = q;
- ofd->when |= BSC_FD_READ;
-
- rc = osmo_sock_init_ofd(ofd, AF_UNSPEC, SOCK_DGRAM, IPPROTO_UDP,
- bts_host, fwd_udp_ports[q],
- OSMO_SOCK_F_CONNECT);
- if (rc < 0)
- return rc;
-
- return 0;
-}
-
-int l1if_transport_close(int q, struct femtol1_hdl *fl1h)
-{
- struct osmo_wqueue *wq = &fl1h->write_q[q];
- struct osmo_fd *ofd = &wq->bfd;
-
- osmo_wqueue_clear(wq);
- osmo_fd_unregister(ofd);
- close(ofd->fd);
-
- return 0;
-}