FreeCalypso > hg > ice1-trau-tester
view libutil/open_ts.c @ 1:570252e22630
libutil: timeslot opening function
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 23 Jun 2024 07:28:51 +0000 |
parents | |
children |
line wrap: on
line source
/* * The function in this common module is responsible for parsing the * user-supplied E1 timeslot specification and then opening that ts * in osmo-e1d. * * This code is based on osmo-e1d-pipe, * (C) 2020-2022 by Harald Welte <laforge@osmocom.org>, * SPDX-License-Identifier: GPL-2.0+ */ #include <ctype.h> #include <stdint.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <osmocom/e1d/proto_clnt.h> #include "open_ts.h" static int parse_component(const char *str, const char **outp, uint8_t *var) { if (!isdigit(*str)) return -1; *var = atoi(str); while (isdigit(*str)) str++; *outp = str; return 0; } int open_e1d_ts(struct osmo_e1dp_client *e1_client, const char *ts_spec) { uint8_t intf_nr, line_nr, ts_nr; const char *cp; int fd; if (parse_component(ts_spec, &cp, &intf_nr) < 0) { inv_syntax: fprintf(stderr, "error: invalid timeslot spec \"%s\"\n", ts_spec); exit(1); } if (*cp++ != ':') goto inv_syntax; if (parse_component(cp, &cp, &line_nr) < 0) goto inv_syntax; if (*cp++ != ':') goto inv_syntax; if (parse_component(cp, &cp, &ts_nr) < 0) goto inv_syntax; if (*cp) goto inv_syntax; fd = osmo_e1dp_client_ts_open(e1_client, intf_nr, line_nr, ts_nr, E1DP_TSMODE_RAW, 160); if (fd < 0) { fprintf(stderr, "error: failed to open E1 ts %s\n", ts_spec); exit(1); } return fd; }