// vim: sw=8 ts=8
char const *cvs_name = "$Name: $";
-char const *cvs_id_cli = "$Id: cli.c,v 1.44 2004/12/18 01:20:05 bodea Exp $";
+char const *cvs_id_cli = "$Id: cli.c,v 1.43.2.6 2005/05/30 02:55:40 bodea Exp $";
#include <stdio.h>
#include <stdarg.h>
static int cmd_load_plugin(struct cli_def *cli, char *command, char **argv, int argc);
static int cmd_remove_plugin(struct cli_def *cli, char *command, char **argv, int argc);
static int cmd_uptime(struct cli_def *cli, char *command, char **argv, int argc);
-
static int regular_stuff(struct cli_def *cli);
static void parsemac(char *string, char mac[6]);
if (fork_and_close()) return;
if (getpeername(sockfd, (struct sockaddr *)&addr, &l) == 0)
{
- LOG(3, 0, 0, "Accepted connection to CLI from %s\n", fmtaddr(addr.sin_addr.s_addr, 0));
require_auth = addr.sin_addr.s_addr != inet_addr("127.0.0.1");
+ LOG(require_auth ? 3 : 4, 0, 0, "Accepted connection to CLI from %s\n",
+ fmtaddr(addr.sin_addr.s_addr, 0));
}
else
LOG(0, 0, 0, "getpeername() failed on cli socket. Requiring authentication: %s\n", strerror(errno));
cli_loop(cli, sockfd);
close(sockfd);
- LOG(3, 0, 0, "Closed CLI connection from %s\n", fmtaddr(addr.sin_addr.s_addr, 0));
+ LOG(require_auth ? 3 : 4, 0, 0, "Closed CLI connection from %s\n",
+ fmtaddr(addr.sin_addr.s_addr, 0));
+
exit(0);
}
cli_print(cli, "\tTunnel ID:\t%d", session[s].tunnel);
cli_print(cli, "\tIP address:\t%s", fmtaddr(htonl(session[s].ip), 0));
cli_print(cli, "\tUnique SID:\t%lu", session[s].unique_id);
+ cli_print(cli, "\tOpened:\t\t%u seconds", abs(time_now - session[s].opened));
cli_print(cli, "\tIdle time:\t%u seconds", abs(time_now - session[s].last_packet));
cli_print(cli, "\tNext Recv:\t%u", session[s].nr);
cli_print(cli, "\tNext Send:\t%u", session[s].ns);
if (CLI_HELP_REQUESTED)
return CLI_HELP_NO_ARGS;
- cli_print(cli, "%-10s %-8s %-10s %-8s", "Ethernet", "Bytes", "Packets", "Errors");
- cli_print(cli, "%-10s %8u %8u %8u", "RX",
+ cli_print(cli, "%-10s %10s %10s %10s %10s", "Ethernet", "Bytes", "Packets", "Errors", "Dropped");
+ cli_print(cli, "%-10s %10u %10u %10u %10u", "RX",
GET_STAT(tun_rx_bytes),
GET_STAT(tun_rx_packets),
- GET_STAT(tun_rx_errors));
- cli_print(cli, "%-10s %8u %8u %8u", "TX",
+ GET_STAT(tun_rx_errors),
+ GET_STAT(tun_rx_dropped));
+ cli_print(cli, "%-10s %10u %10u %10u", "TX",
GET_STAT(tun_tx_bytes),
GET_STAT(tun_tx_packets),
GET_STAT(tun_tx_errors));
cli_print(cli, "");
- cli_print(cli, "%-10s %-8s %-10s %-8s %-8s", "Tunnel", "Bytes", "Packets", "Errors", "Retries");
- cli_print(cli, "%-10s %8u %8u %8u", "RX",
+ cli_print(cli, "%-10s %10s %10s %10s %10s", "Tunnel", "Bytes", "Packets", "Errors", "Retries");
+ cli_print(cli, "%-10s %10u %10u %10u", "RX",
GET_STAT(tunnel_rx_bytes),
GET_STAT(tunnel_rx_packets),
GET_STAT(tunnel_rx_errors));
- cli_print(cli, "%-10s %8u %8u %8u %8u", "TX",
+ cli_print(cli, "%-10s %10u %10u %10u %10u", "TX",
GET_STAT(tunnel_tx_bytes),
GET_STAT(tunnel_tx_packets),
GET_STAT(tunnel_tx_errors),
cli_print(cli, "%-30s%u", "call_radiussend", GET_STAT(call_radiussend));
cli_print(cli, "%-30s%u", "call_radiusretry", GET_STAT(call_radiusretry));
#endif
+
+ {
+ time_t l = GET_STAT(last_reset);
+ char *t = ctime(&l);
+ char *p = strchr(t, '\n');
+ if (p) *p = 0;
+
+ cli_print(cli, "");
+ cli_print(cli, "Last counter reset %s", t);
+ }
+
return CLI_OK;
}
static int cmd_show_run(struct cli_def *cli, char *command, char **argv, int argc)
{
int i;
- char ipv6addr[INET6_ADDRSTRLEN];
if (CLI_HELP_REQUESTED)
return CLI_HELP_NO_ARGS;
{
void *value = ((void *)config) + config_values[i].offset;
if (config_values[i].type == STRING)
- cli_print(cli, "set %s \"%.*s\"", config_values[i].key, config_values[i].size, (char *) value);
- else if (config_values[i].type == IPv4)
- cli_print(cli, "set %s %s", config_values[i].key, fmtaddr(*(in_addr_t *) value, 0));
- else if (config_values[i].type == IPv6)
- cli_print(cli, "set %s %s", config_values[i].key, inet_ntop(AF_INET6, value, ipv6addr, INET6_ADDRSTRLEN));
+ cli_print(cli, "set %s \"%.*s\"", config_values[i].key, config_values[i].size, (char *)value);
+ else if (config_values[i].type == IP)
+ cli_print(cli, "set %s %s", config_values[i].key, fmtaddr(*(unsigned *)value, 0));
else if (config_values[i].type == SHORT)
- cli_print(cli, "set %s %hu", config_values[i].key, *(short *) value);
+ cli_print(cli, "set %s %hu", config_values[i].key, *(short *)value);
else if (config_values[i].type == BOOL)
- cli_print(cli, "set %s %s", config_values[i].key, (*(int *) value) ? "yes" : "no");
+ cli_print(cli, "set %s %s", config_values[i].key, (*(int *)value) ? "yes" : "no");
else if (config_values[i].type == INT)
- cli_print(cli, "set %s %d", config_values[i].key, *(int *) value);
+ cli_print(cli, "set %s %d", config_values[i].key, *(int *)value);
else if (config_values[i].type == UNSIGNED_LONG)
- cli_print(cli, "set %s %lu", config_values[i].key, *(unsigned long *) value);
+ cli_print(cli, "set %s %lu", config_values[i].key, *(unsigned long *)value);
else if (config_values[i].type == MAC)
cli_print(cli, "set %s %02x%02x.%02x%02x.%02x%02x", config_values[i].key,
- *(unsigned short *) (value + 0),
- *(unsigned short *) (value + 1),
- *(unsigned short *) (value + 2),
- *(unsigned short *) (value + 3),
- *(unsigned short *) (value + 4),
- *(unsigned short *) (value + 5));
+ *(unsigned short *)(value + 0),
+ *(unsigned short *)(value + 1),
+ *(unsigned short *)(value + 2),
+ *(unsigned short *)(value + 3),
+ *(unsigned short *)(value + 4),
+ *(unsigned short *)(value + 5));
}
cli_print(cli, "# Plugins");
if (CLI_HELP_REQUESTED)
return CLI_HELP_NO_ARGS;
- cli_print(cli, "Counters cleared");
+ memset(_statistics, 0, sizeof(struct Tstats));
SET_STAT(last_reset, time(NULL));
+
+ cli_print(cli, "Counters cleared");
return CLI_OK;
}
switch (config_values[i].type)
{
case STRING:
- strncpy((char *) value, argv[1], config_values[i].size - 1);
+ strncpy((char *)value, argv[1], config_values[i].size - 1);
break;
case INT:
- *(int *) value = atoi(argv[1]);
+ *(int *)value = atoi(argv[1]);
break;
case UNSIGNED_LONG:
- *(unsigned long *) value = atol(argv[1]);
+ *(unsigned long *)value = atol(argv[1]);
break;
case SHORT:
- *(short *) value = atoi(argv[1]);
- break;
- case IPv4:
- *(in_addr_t *) value = inet_addr(argv[1]);
+ *(short *)value = atoi(argv[1]);
break;
- case IPv6:
- inet_pton(AF_INET6, argv[1], value);
+ case IP:
+ *(unsigned *)value = inet_addr(argv[1]);
break;
case MAC:
parsemac(argv[1], (char *)value);
break;
case BOOL:
if (strcasecmp(argv[1], "yes") == 0 || strcasecmp(argv[1], "true") == 0 || strcasecmp(argv[1], "1") == 0)
- *(int *) value = 1;
+ *(int *)value = 1;
else
- *(int *) value = 0;
+ *(int *)value = 0;
break;
default:
cli_print(cli, "Unknown variable type");