FreeCalypso > hg > e1-fake-trau
annotate libutil/open_ts.c @ 1:e5527fc2050b
libutil: copy from ice1-trau-tester
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 29 Aug 2024 12:58:56 +0000 |
parents | |
children |
rev | line source |
---|---|
1
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * The function in this common module is responsible for parsing the |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * user-supplied E1 timeslot specification and then opening that ts |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * in osmo-e1d. |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * This code is based on osmo-e1d-pipe, |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * (C) 2020-2022 by Harald Welte <laforge@osmocom.org>, |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 * SPDX-License-Identifier: GPL-2.0+ |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 */ |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <ctype.h> |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <stdint.h> |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <stdbool.h> |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include <stdio.h> |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #include <stdlib.h> |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 #include <osmocom/e1d/proto_clnt.h> |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 #include "open_ts.h" |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 static int parse_component(const char *str, const char **outp, uint8_t *var) |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 { |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 if (!isdigit(*str)) |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 return -1; |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 *var = atoi(str); |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 while (isdigit(*str)) |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 str++; |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 *outp = str; |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 return 0; |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 } |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 int open_e1d_ts(struct osmo_e1dp_client *e1_client, const char *ts_spec) |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 { |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 uint8_t intf_nr, line_nr, ts_nr; |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 const char *cp; |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 int fd; |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 if (parse_component(ts_spec, &cp, &intf_nr) < 0) { |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 inv_syntax: fprintf(stderr, "error: invalid timeslot spec \"%s\"\n", |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 ts_spec); |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 exit(1); |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 } |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 if (*cp++ != ':') |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 goto inv_syntax; |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 if (parse_component(cp, &cp, &line_nr) < 0) |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 goto inv_syntax; |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 if (*cp++ != ':') |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 goto inv_syntax; |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 if (parse_component(cp, &cp, &ts_nr) < 0) |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 goto inv_syntax; |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 if (*cp) |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 goto inv_syntax; |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 fd = osmo_e1dp_client_ts_open(e1_client, intf_nr, line_nr, ts_nr, |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 E1DP_TSMODE_RAW, 160); |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 if (fd < 0) { |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 fprintf(stderr, "error: failed to open E1 ts %s\n", ts_spec); |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 exit(1); |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 } |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 return fd; |
e5527fc2050b
libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 } |