# HG changeset patch # User Space Falcon # Date 1432970450 0 # Node ID 72d64c172d85ab651d5251e2bd0c40b719b27069 # Parent 3be5a1b4c91afe0bda663aae79af22fe6f59ed1a fc-shell: Rx control implemented diff -r 3be5a1b4c91a -r 72d64c172d85 rvinterf/asyncshell/Makefile --- a/rvinterf/asyncshell/Makefile Sat May 30 06:45:21 2015 +0000 +++ b/rvinterf/asyncshell/Makefile Sat May 30 07:20:50 2015 +0000 @@ -1,7 +1,7 @@ CC= gcc CFLAGS= -O2 -I../include PROG= fc-shell -OBJS= init.o main.o pktsort.o usercmd.o +OBJS= init.o main.o pktsort.o rxctl.o usercmd.o LIBS= ../libasync/libasync.a ../libg23/libg23.a INSTBIN=/usr/local/bin diff -r 3be5a1b4c91a -r 72d64c172d85 rvinterf/asyncshell/init.c --- a/rvinterf/asyncshell/init.c Sat May 30 06:45:21 2015 +0000 +++ b/rvinterf/asyncshell/init.c Sat May 30 07:20:50 2015 +0000 @@ -10,8 +10,6 @@ #include "pktmux.h" #include "localsock.h" -extern int sock; - init() { static u_char want_rvt_lost[9] = {CLI2RVI_WANT_RVTRACE, diff -r 3be5a1b4c91a -r 72d64c172d85 rvinterf/asyncshell/rxctl.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/asyncshell/rxctl.c Sat May 30 07:20:50 2015 +0000 @@ -0,0 +1,89 @@ +/* + * This module contains the code for enabling and disabling the receiving + * of various packet types via rvinterf. + */ + +#include +#include +#include +#include +#include +#include +#include "pktmux.h" +#include "localsock.h" + +void +send_rxctl_cmd(channel, enable) +{ + u_char cmdbuf[2]; + + cmdbuf[0] = enable ? CLI2RVI_WANT_MUXPROTO : CLI2RVI_DROP_MUXPROTO; + cmdbuf[1] = channel; + send_init_command(cmdbuf, 2); +} + +void +ati_rx_control(newstate) +{ + static int state = 0; + + if (state == newstate) + return; + send_rxctl_cmd(RVT_AT_HEADER, newstate); + state = newstate; +} + +void +gpf_rx_control(newstate) +{ + static int state = 0; + + if (state == newstate) + return; + send_rxctl_cmd(RVT_L23_HEADER, newstate); + state = newstate; +} + +void +rxctl_user_cmd(args, enable) + char *args; +{ + char *cp, *np; + int gotsome = 0; + + for (cp = args; ; ) { + while (isspace(*cp)) + cp++; + if (!*cp) { + if (!gotsome) + printf("error: argument required\n"); + return; + } + for (np = cp; *cp && !isspace(*cp); cp++) + ; + if (*cp) + *cp++ = '\0'; + if (!strcmp(np, "ati")) + ati_rx_control(enable); + else if (!strcmp(np, "gpf")) + gpf_rx_control(enable); + else { + printf("error: unknown channel \"%s\"\n", np); + return; + } + } +} + +void +cmd_enable(args) + char *args; +{ + rxctl_user_cmd(args, 1); +} + +void +cmd_disable(args) + char *args; +{ + rxctl_user_cmd(args, 0); +} diff -r 3be5a1b4c91a -r 72d64c172d85 rvinterf/asyncshell/usercmd.c --- a/rvinterf/asyncshell/usercmd.c Sat May 30 06:45:21 2015 +0000 +++ b/rvinterf/asyncshell/usercmd.c Sat May 30 07:20:50 2015 +0000 @@ -11,6 +11,9 @@ extern char usercmd[]; +extern void cmd_disable(); +extern void cmd_enable(); + void cmd_exit() { @@ -22,6 +25,8 @@ char *cmd; void (*func)(); } cmdtab[] = { + {"disable", cmd_disable}, + {"enable", cmd_enable}, {"exit", cmd_exit}, {"quit", cmd_exit}, {0, 0}