gh->hdr_len = sizeof(*gh)/4;
gh->type = GSMTAP_TYPE_UM;
gh->timeslot = ts;
- gh->arfcn = arfcn;
+ gh->arfcn = htons(arfcn);
gh->noise_db = 0;
gh->signal_db = 0;
- gh->frame_number = fn;
- gh->burst_type = 0;
+ gh->frame_number = htonl(fn);
+ gh->burst_type = GSMTAP_BURST_NORMAL;
gh->antenna_nr = 0;
dst = msgb_put(msg, len);
return 0;
}
-int gsmtap_init(struct sockaddr_in *sin)
+int gsmtap_init(void)
{
+ int rc;
+ struct sockaddr_in sin;
+
+ sin.sin_family = AF_INET;
+ sin.sin_port = htons(GSMTAP_UDP_PORT);
+ inet_aton("127.0.0.1", &sin.sin_addr);
+
/* FIXME: create socket */
- //gsmtap_bfd.fd =
+ rc = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ if (rc < 0) {
+ perror("creating UDP socket");
+ return rc;
+ }
+ gsmtap_bfd.fd = rc;
+ rc = connect(rc, (struct sockaddr *)&sin, sizeof(sin));
+ if (rc < 0) {
+ perror("connecting UDP socket");
+ close(gsmtap_bfd.fd);
+ gsmtap_bfd.fd = 0;
+ return rc;
+ }
gsmtap_bfd.when = BSC_FD_WRITE;
gsmtap_bfd.cb = gsmtap_fd_cb;
#include <stdint.h>
#include <netinet/in.h>
-int gsmtap_init(struct sockaddr_in *sin);
+int gsmtap_init(void);
/* receive a message from L1/L2 and put it in GSMTAP */
int gsmtap_sendmsg(uint8_t ts, uint16_t arfcn, uint32_t fn,
#include <errno.h>
#include <fcntl.h>
+#include "gsmtap_util.h"
+
#define GSM_L2_LENGTH 256
static void *l2_ctx = NULL;
{
int rc;
struct sockaddr_un local;
+ struct sockaddr_in gsmtap;
l2_ctx = talloc_named_const(NULL, 1, "layer2 context");
exit(1);
}
+ rc = gsmtap_init();
+ if (rc < 0) {
+ fprintf(stderr, "Failed during gsmtap_init()\n");
+ exit(1);
+ }
+
while (1) {
bsc_select_main(0);
}
#include <stdint.h>
#include <l1a_l23_interface.h>
+#include "gsmtap_util.h"
static struct msgb *osmo_l1_alloc(uint8_t msg_type)
{
hexdump(ccch->data, sizeof(ccch->data)), ccch->data[2]);
dump_bcch(dl->time.tc, ccch->data);
+ /* send CCCH data via GSMTAP */
+ gsmtap_sendmsg(0, dl->band_arfcn, dl->time.fn, ccch->data,
+ sizeof(ccch->data));
return 0;
}