FreeCalypso > hg > freecalypso-tools
diff rvinterf/asyncshell/rxctl.c @ 0:e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 11 Jun 2016 00:13:35 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/asyncshell/rxctl.c Sat Jun 11 00:13:35 2016 +0000 @@ -0,0 +1,103 @@ +/* + * This module contains the code for enabling and disabling the receiving + * of various packet types via rvinterf. + */ + +#include <sys/types.h> +#include <stdio.h> +#include <ctype.h> +#include <string.h> +#include <strings.h> +#include <stdlib.h> +#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 +tch_rx_control(newstate) +{ + static int state = 0; + + if (state == newstate) + return; + send_rxctl_cmd(RVT_TCH_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 if (!strcmp(np, "tch")) + tch_rx_control(enable); + else { + printf("error: unknown channel \"%s\"\n", np); + return; + } + gotsome++; + } +} + +void +cmd_enable(args) + char *args; +{ + rxctl_user_cmd(args, 1); +} + +void +cmd_disable(args) + char *args; +{ + rxctl_user_cmd(args, 0); +}