osmo-e1d-pipe: Add command line option for --force open of timeslot

This exposes the existing capability of force-opening a timeslot via a
command-line argument.

Related: OS#5735
Change-Id: Ieefc89f2e48e9124ae744a587739ff3948110944
This commit is contained in:
Harald Welte 2022-11-01 18:09:17 +01:00
parent 5077657f57
commit cfe7ab300e
1 changed files with 14 additions and 3 deletions

View File

@ -1,6 +1,6 @@
/* E1 timeslot "pipe" utility: Open a 64k timeslot of osmo-e1d and connect to stdin/stdout
*
* (C) 2020 by Harald Welte <laforge@osmocom.org>
* (C) 2020-2022 by Harald Welte <laforge@osmocom.org>
*
* All Rights Reserved
*
@ -22,6 +22,7 @@
*/
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
@ -40,6 +41,7 @@ static void *g_ctx;
static struct osmo_e1dp_client *g_client;
static struct osmo_fd ts_ofd;
static enum osmo_e1dp_ts_mode g_mode = E1DP_TSMODE_RAW;
static bool g_force = false;
static int outfd = 1;
static int infd = 0;
@ -47,7 +49,11 @@ static int infd = 0;
static int ts_open(uint8_t intf_nr, uint8_t line_nr, uint8_t ts_nr,
enum osmo_e1dp_ts_mode mode, uint16_t bufsize)
{
int rc = osmo_e1dp_client_ts_open(g_client, intf_nr, line_nr, ts_nr, mode, bufsize);
int rc;
if (g_force)
rc = osmo_e1dp_client_ts_open_force(g_client, intf_nr, line_nr, ts_nr, mode, bufsize);
else
rc = osmo_e1dp_client_ts_open(g_client, intf_nr, line_nr, ts_nr, mode, bufsize);
if (rc < 0)
fprintf(stderr, "Cannot open e1d timeslot %u:%u:%u\n", intf_nr, line_nr, ts_nr);
return rc;
@ -118,6 +124,7 @@ static void print_help(void)
" -l --line <0-255> E1 Line Number\n"
" -t --timeslot <0-31> E1 Timeslot Number\n"
" -m --mode (RAW|HDLC-FCS) E1 Timeslot Mode\n"
" -f --force Force open of the timeslot (may disconnect other client)\n"
" -r --read FILE Read from FILE instead of STDIN\n"
);
}
@ -145,12 +152,13 @@ int main(int argc, char **argv)
{ "line", 1, 0, 'l' },
{ "timeslot", 1, 0, 't' },
{ "mode", 1, 0, 'm' },
{ "force", 0, 0, 'f' },
{ "read", 1, 0, 'r' },
{ "read-bufsize", 1, 0, 'b' },
{ 0,0,0,0 }
};
c = getopt_long(argc, argv, "hp:i:l:t:m:r:b:", long_options, &option_index);
c = getopt_long(argc, argv, "hp:i:l:t:m:fr:b:", long_options, &option_index);
if (c == -1)
break;
@ -178,6 +186,9 @@ int main(int argc, char **argv)
}
g_mode = rc;
break;
case 'f':
g_force = true;
break;
case 'r':
rc = open(optarg, 0, O_RDONLY);
if (rc < 0) {