annotate ater/main.c @ 37:26c9535df39e

rm abis subdir: moved to e1-fake-trau repository The present code repository is meant to contain code for talking to a TRAU DUT, hence the name ice1-trau-tester. The different and separate function of talking to an E1 BTS (Abis instead of Ater, and in the opposite role) was never in scope for this project, but that code got added here in a haste when the InSite BTS arrived while the TRAU bring-up was still blocked. Now that we have our Nokia TCSM2 system working and are doing TRAU experiments, let's keep the code clean.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 29 Aug 2024 19:02:02 +0000
parents 1e375472d5a5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
15
98ae717734d6 ater: starting skeleton
Mychaela Falconia <falcon@freecalypso.org>
parents: 5
diff changeset
2 * This C module is the main for itt-ater-16, a program in the icE1 TRAU tester
98ae717734d6 ater: starting skeleton
Mychaela Falconia <falcon@freecalypso.org>
parents: 5
diff changeset
3 * suite that operates on a single E1 timeslot on the Ater interface.
2
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 *
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * This code is based on osmo-e1d-pipe,
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * (C) 2020-2022 by Harald Welte <laforge@osmocom.org>,
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 * SPDX-License-Identifier: GPL-2.0+
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 */
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <stdint.h>
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <stdbool.h>
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <stdio.h>
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #include <stdlib.h>
16
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
14 #include <string.h>
2
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #include <unistd.h>
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 #include <osmocom/core/talloc.h>
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 #include <osmocom/core/select.h>
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 #include <osmocom/core/application.h>
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 #include <osmocom/e1d/proto_clnt.h>
16
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
21 #include <osmocom/isdn/i460_mux.h>
2
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 #include "../libutil/open_ts.h"
5
7233c10af3ad pcm: hook in stdin select mechanism
Mychaela Falconia <falcon@freecalypso.org>
parents: 2
diff changeset
24 #include "../libutil/stdin_handler.h"
2
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 #include "globals.h"
16
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
26 #include "submux.h"
2
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27
19
1e375472d5a5 ater: implement TRAU frame output
Mychaela Falconia <falcon@freecalypso.org>
parents: 16
diff changeset
28 void *g_ctx;
2
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 struct osmo_e1dp_client *g_client;
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 int ts_fd;
16
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
31 struct osmo_i460_timeslot i460_ts;
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
32 struct ater_subslot subslots[ATER_SUBSLOTS];
2
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 static const char *e1d_socket_path = E1DP_DEFAULT_SOCKET;
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 static const char *timeslot_spec;
5
7233c10af3ad pcm: hook in stdin select mechanism
Mychaela Falconia <falcon@freecalypso.org>
parents: 2
diff changeset
36 static struct osmo_fd ts_ofd, stdin_ofd;
2
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 static void process_cmdline(int argc, char **argv)
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 {
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 extern int optind;
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 extern char *optarg;
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 int c;
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 while ((c = getopt(argc, argv, "p:")) != EOF) {
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 switch (c) {
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 case 'p':
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 e1d_socket_path = optarg;
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 continue;
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 default:
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 usage:
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 fprintf(stderr, "usage: %s [-p socket] intf:line:ts\n",
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 argv[0]);
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 exit(1);
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 }
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 }
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 if (argc != optind + 1)
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 goto usage;
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 timeslot_spec = argv[optind];
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 }
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60
16
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
61 static void register_subslots(void)
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
62 {
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
63 int nr;
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
64 struct osmo_i460_schan_desc chd;
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
65
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
66 memset(&chd, 0, sizeof chd);
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
67 chd.rate = OSMO_I460_RATE_16k;
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
68 chd.demux.num_bits = 320;
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
69 chd.demux.out_cb_bits = i460_rx_func;
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
70
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
71 for (nr = 0; nr < ATER_SUBSLOTS; nr++) {
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
72 subslots[nr].nr = nr;
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
73 chd.demux.user_data = subslots + nr;
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
74 chd.mux.user_data = subslots + nr;
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
75 subslots[nr].schan =
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
76 osmo_i460_subchan_add(g_ctx, &i460_ts, &chd);
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
77 OSMO_ASSERT(subslots[nr].schan);
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
78 chd.bit_offset += 2;
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
79 }
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
80 }
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
81
2
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 int main(int argc, char **argv)
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 {
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 process_cmdline(argc, argv);
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 g_ctx = talloc_named_const(NULL, 0, "g_ctx");
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 OSMO_ASSERT(g_ctx);
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 osmo_init_logging2(g_ctx, NULL);
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 g_client = osmo_e1dp_client_create(g_ctx, e1d_socket_path);
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 if (!g_client) {
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 fprintf(stderr, "error: cannot connect to osmo-e1d at %s\n",
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 e1d_socket_path);
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 exit(1);
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 }
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 ts_fd = open_e1d_ts(g_client, timeslot_spec);
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96
16
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
97 osmo_i460_ts_init(&i460_ts);
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
98 register_subslots();
4ffe22f5b4b5 ater: initial osmo_i460 framework
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
99
2
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 osmo_fd_setup(&ts_ofd, ts_fd, OSMO_FD_READ, ts_fd_cb, NULL, 0);
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 OSMO_ASSERT(osmo_fd_register(&ts_ofd) == 0);
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102
5
7233c10af3ad pcm: hook in stdin select mechanism
Mychaela Falconia <falcon@freecalypso.org>
parents: 2
diff changeset
103 osmo_fd_setup(&stdin_ofd, 0, OSMO_FD_READ, stdin_select_cb,
7233c10af3ad pcm: hook in stdin select mechanism
Mychaela Falconia <falcon@freecalypso.org>
parents: 2
diff changeset
104 handle_user_cmd, 0);
7233c10af3ad pcm: hook in stdin select mechanism
Mychaela Falconia <falcon@freecalypso.org>
parents: 2
diff changeset
105 OSMO_ASSERT(osmo_fd_register(&stdin_ofd) == 0);
7233c10af3ad pcm: hook in stdin select mechanism
Mychaela Falconia <falcon@freecalypso.org>
parents: 2
diff changeset
106
2
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 while (1) {
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 osmo_select_main(0);
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 }
c03ec046471f pcm: initial version compiles and links
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 }