pmc: Allow commands on command line.
Add a batch mode, where the commands are taken from the command line instead of the standard input. Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>master
parent
ecbbf4cdb1
commit
7f760ceac8
8
pmc.8
8
pmc.8
|
@ -22,14 +22,14 @@ pmc \- PTP management client
|
|||
.BI \-t " transport-specific-field"
|
||||
] [
|
||||
.B \-v
|
||||
]
|
||||
] [ command ] ...
|
||||
|
||||
.SH DESCRIPTION
|
||||
.B pmc
|
||||
is a program which implements a PTP management client according to IEEE
|
||||
standard 1588. The program reads from the standard input actions specified by
|
||||
name and management ID, sends them over the selected transport and prints any
|
||||
received replies. There are three actions supported:
|
||||
standard 1588. The program reads from the standard input or from the command
|
||||
line actions specified by name and management ID, sends them over the selected
|
||||
transport and prints any received replies. There are three actions supported:
|
||||
.B GET
|
||||
retrieves the specified information,
|
||||
.B SET
|
||||
|
|
39
pmc.c
39
pmc.c
|
@ -381,7 +381,7 @@ static int do_command(char *str)
|
|||
static void usage(char *progname)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"\nusage: %s [options]\n\n"
|
||||
"\nusage: %s [options] [commands]\n\n"
|
||||
" Network Transport\n\n"
|
||||
" -2 IEEE 802.3\n"
|
||||
" -4 UDP IPV4 (default)\n"
|
||||
|
@ -402,8 +402,8 @@ static void usage(char *progname)
|
|||
int main(int argc, char *argv[])
|
||||
{
|
||||
char *iface_name = NULL, *progname;
|
||||
int c, cnt, length, tmo = -1;
|
||||
char line[1024];
|
||||
int c, cnt, length, tmo = -1, batch_mode = 0;
|
||||
char line[1024], *command = NULL;
|
||||
enum transport_type transport_type = TRANS_UDP_IPV4;
|
||||
UInteger8 boundary_hops = 1, domain_number = 0, transport_specific = 0;
|
||||
struct ptp_message *msg;
|
||||
|
@ -458,6 +458,9 @@ int main(int argc, char *argv[])
|
|||
if (!iface_name) {
|
||||
iface_name = transport_type == TRANS_UDS ? "/var/run/pmc" : "eth0";
|
||||
}
|
||||
if (optind < argc) {
|
||||
batch_mode = 1;
|
||||
}
|
||||
|
||||
print_set_progname(progname);
|
||||
print_set_syslog(1);
|
||||
|
@ -469,12 +472,28 @@ int main(int argc, char *argv[])
|
|||
return -1;
|
||||
}
|
||||
|
||||
pollfd[0].fd = STDIN_FILENO;
|
||||
pollfd[0].events = POLLIN|POLLPRI;
|
||||
pollfd[0].fd = batch_mode ? -1 : STDIN_FILENO;
|
||||
pollfd[1].fd = pmc_get_transport_fd(pmc);
|
||||
pollfd[1].events = POLLIN|POLLPRI;
|
||||
|
||||
while (1) {
|
||||
if (batch_mode && !command) {
|
||||
if (optind < argc) {
|
||||
command = argv[optind++];
|
||||
} else {
|
||||
/* No more commands, wait a bit for
|
||||
any outstanding replies and exit. */
|
||||
tmo = 100;
|
||||
}
|
||||
}
|
||||
|
||||
pollfd[0].events = 0;
|
||||
pollfd[1].events = POLLIN | POLLPRI;
|
||||
|
||||
if (!batch_mode && !command)
|
||||
pollfd[0].events |= POLLIN | POLLPRI;
|
||||
if (command)
|
||||
pollfd[1].events |= POLLOUT;
|
||||
|
||||
cnt = poll(pollfd, N_FD, tmo);
|
||||
if (cnt < 0) {
|
||||
if (EINTR == errno) {
|
||||
|
@ -505,9 +524,13 @@ int main(int argc, char *argv[])
|
|||
continue;
|
||||
}
|
||||
line[length - 1] = 0;
|
||||
if (do_command(line)) {
|
||||
fprintf(stderr, "bad command: %s\n", line);
|
||||
command = line;
|
||||
}
|
||||
if (pollfd[1].revents & POLLOUT) {
|
||||
if (do_command(command)) {
|
||||
fprintf(stderr, "bad command: %s\n", command);
|
||||
}
|
||||
command = NULL;
|
||||
}
|
||||
if (pollfd[1].revents & (POLLIN|POLLPRI)) {
|
||||
msg = pmc_recv(pmc);
|
||||
|
|
Loading…
Reference in New Issue