#endif
-static int cmd_show_session(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_group(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_tunnels(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_users(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_radius(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_version(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_pool(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_run(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_banana(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_plugins(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_throttle(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_write_memory(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_drop_user(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_drop_tunnel(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_drop_session(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_snoop(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_no_snoop(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_throttle(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_no_throttle(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_debug(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_no_debug(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_set(struct cli_def *cli, char *command, char **argv, int argc);
-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 cmd_shutdown(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_reload(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_setforward(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_rmtlnsconf(struct cli_def *cli, char *command, char **argv, int argc);
+static int cmd_show_session(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_show_group(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_show_tunnels(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_show_users(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_show_radius(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_show_version(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_show_pool(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_show_run(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_show_banana(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_show_plugins(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_show_throttle(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_write_memory(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_drop_user(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_drop_tunnel(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_drop_session(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_snoop(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_no_snoop(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_throttle(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_no_throttle(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_debug(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_no_debug(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_set(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_load_plugin(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_remove_plugin(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_uptime(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_shutdown(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_reload(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_setforward(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_show_rmtlnsconf(struct cli_def *cli, const char *command, char **argv, int argc);
static int regular_stuff(struct cli_def *cli);
#ifdef STATISTICS
-static int cmd_show_counters(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_clear_counters(struct cli_def *cli, char *command, char **argv, int argc);
+static int cmd_show_counters(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_clear_counters(struct cli_def *cli, const char *command, char **argv, int argc);
#endif /* STATISTICS */
#ifdef BGP
#define MODE_CONFIG_BGP 8
-static int cmd_router_bgp(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_router_bgp_neighbour(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_router_bgp_no_neighbour(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_bgp(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_suspend_bgp(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_no_suspend_bgp(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_restart_bgp(struct cli_def *cli, char *command, char **argv, int argc);
+static int cmd_router_bgp(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_router_bgp_neighbour(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_router_bgp_no_neighbour(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_show_bgp(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_suspend_bgp(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_no_suspend_bgp(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_restart_bgp(struct cli_def *cli, const char *command, char **argv, int argc);
#endif /* BGP */
#define MODE_CONFIG_NACL 9
-static int cmd_ip_access_list(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_no_ip_access_list(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_ip_access_list_rule(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_filter(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_no_filter(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_access_list(struct cli_def *cli, char *command, char **argv, int argc);
+static int cmd_ip_access_list(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_no_ip_access_list(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_ip_access_list_rule(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_filter(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_no_filter(struct cli_def *cli, const char *command, char **argv, int argc);
+static int cmd_show_access_list(struct cli_def *cli, const char *command, char **argv, int argc);
/* match if b is a substr of a */
#define MATCH(a,b) (!strncmp((a), (b), strlen(b)))
exit(0);
}
-static void cli_print_log(struct cli_def *cli, char *string)
+static void cli_print_log(struct cli_def *cli, const char *string)
{
LOG(3, 0, 0, "%s\n", string);
}
return CLI_OK;
}
-static int cmd_show_session(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_session(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
return CLI_OK;
}
-static int cmd_show_tunnels(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_tunnels(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i, x, show_all = 0;
char *states[] = {
return CLI_OK;
}
-static int cmd_show_users(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_users(struct cli_def *cli, const char *command, char **argv, int argc)
{
char sid[32][8];
char *sargv[32];
}
#ifdef STATISTICS
-static int cmd_show_counters(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_counters(struct cli_def *cli, const char *command, char **argv, int argc)
{
if (CLI_HELP_REQUESTED)
return CLI_HELP_NO_ARGS;
GET_STAT(tun_tx_bytes),
GET_STAT(tun_tx_packets),
GET_STAT(tun_tx_errors));
- cli_print(cli, "");
+ cli_print(cli, " ");
cli_print(cli, "%-10s %10s %10s %10s %10s", "Tunnel", "Bytes", "Packets", "Errors", "Retries");
cli_print(cli, "%-10s %10u %10u %10u", "RX",
GET_STAT(tunnel_tx_packets),
GET_STAT(tunnel_tx_errors),
GET_STAT(tunnel_retries));
- cli_print(cli, "");
+ cli_print(cli, " ");
cli_print(cli, "%-30s%-10s", "Counter", "Value");
cli_print(cli, "-----------------------------------------");
char *p = strchr(t, '\n');
if (p) *p = 0;
- cli_print(cli, "");
+ cli_print(cli, " ");
cli_print(cli, "Last counter reset %s", t);
}
return CLI_OK;
}
-static int cmd_clear_counters(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_clear_counters(struct cli_def *cli, const char *command, char **argv, int argc)
{
if (CLI_HELP_REQUESTED)
return CLI_HELP_NO_ARGS;
}
#endif /* STATISTICS */
-static int cmd_show_version(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_version(struct cli_def *cli, const char *command, char **argv, int argc)
{
if (CLI_HELP_REQUESTED)
return CLI_HELP_NO_ARGS;
return CLI_OK;
}
-static int cmd_show_pool(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_pool(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
int used = 0, free = 0, show_all = 0;
}
static FILE *save_config_fh = 0;
-static void print_save_config(struct cli_def *cli, char *string)
+static void print_save_config(struct cli_def *cli, const char *string)
{
if (save_config_fh)
fprintf(save_config_fh, "%s\n", string);
}
-static int cmd_write_memory(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_write_memory(struct cli_def *cli, const char *command, char **argv, int argc)
{
if (CLI_HELP_REQUESTED)
return CLI_HELP_NO_ARGS;
static char const *show_access_list_rule(int extended, ip_filter_rulet *rule);
-static int cmd_show_run(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_run(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
char ipv6addr[INET6_ADDRSTRLEN];
return CLI_OK;
}
-static int cmd_show_radius(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_radius(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i, free = 0, used = 0, show_all = 0;
char *states[] = {
return CLI_OK;
}
-static int cmd_show_plugins(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_plugins(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
return CLI_OK;
}
-static int cmd_show_throttle(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_throttle(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
return CLI_OK;
}
-static int cmd_show_banana(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_banana(struct cli_def *cli, const char *command, char **argv, int argc)
{
if (CLI_HELP_REQUESTED)
return CLI_HELP_NO_ARGS;
return CLI_OK;
}
-static int cmd_drop_user(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_drop_user(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
sessionidt s;
return CLI_OK;
}
-static int cmd_drop_tunnel(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_drop_tunnel(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
tunnelidt t;
return CLI_OK;
}
-static int cmd_drop_session(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_drop_session(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
sessionidt s;
return CLI_OK;
}
-static int cmd_snoop(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_snoop(struct cli_def *cli, const char *command, char **argv, int argc)
{
in_addr_t ip;
uint16_t port;
return CLI_OK;
}
-static int cmd_no_snoop(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_no_snoop(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
sessionidt s;
return CLI_OK;
}
-static int cmd_throttle(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_throttle(struct cli_def *cli, const char *command, char **argv, int argc)
{
int rate_in = 0;
int rate_out = 0;
return CLI_OK;
}
-static int cmd_no_throttle(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_no_throttle(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
sessionidt s;
return CLI_OK;
}
-static int cmd_debug(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_debug(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
return CLI_OK;
}
-static int cmd_no_debug(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_no_debug(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
return CLI_OK;
}
-static int cmd_load_plugin(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_load_plugin(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i, firstfree = 0;
return CLI_OK;
}
-static int cmd_remove_plugin(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_remove_plugin(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
return buf;
}
-static int cmd_uptime(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_uptime(struct cli_def *cli, const char *command, char **argv, int argc)
{
FILE *fh;
char buf[100], *p = buf, *loads[3];
return CLI_HELP_NO_ARGS;
fh = fopen("/proc/loadavg", "r");
- fgets(buf, 100, fh);
+ p = fgets(buf, 100, fh);
fclose(fh);
for (i = 0; i < 3; i++)
return CLI_OK;
}
-static int cmd_set(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_set(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
}
#ifdef BGP
-static int cmd_router_bgp(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_router_bgp(struct cli_def *cli, const char *command, char **argv, int argc)
{
int as;
return new;
}
-static int cmd_router_bgp_neighbour(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_router_bgp_neighbour(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
int keepalive;
return CLI_OK;
}
-static int cmd_router_bgp_no_neighbour(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_router_bgp_no_neighbour(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
return CLI_OK;
}
-static int cmd_show_bgp(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_bgp(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
int hdr = 0;
if (!hdr++)
{
- cli_print(cli, "");
+ cli_print(cli, " ");
cli_print(cli, "Peer AS Address "
"State Retries Retry in Route Pend Timers");
cli_print(cli, "------------------ ----- --------------- "
return CLI_OK;
}
-static int cmd_suspend_bgp(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_suspend_bgp(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
char *addr;
return CLI_OK;
}
-static int cmd_no_suspend_bgp(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_no_suspend_bgp(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
char *addr;
return CLI_OK;
}
-static int cmd_restart_bgp(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_restart_bgp(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
char *addr;
return CLI_OK;
}
-static int cmd_ip_access_list(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_ip_access_list(struct cli_def *cli, const char *command, char **argv, int argc)
{
return access_list(cli, argv, argc, 1);
}
-static int cmd_no_ip_access_list(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_no_ip_access_list(struct cli_def *cli, const char *command, char **argv, int argc)
{
return access_list(cli, argv, argc, 0);
}
return buf;
}
-static ip_filter_rulet *access_list_rule_ext(struct cli_def *cli, char *command, char **argv, int argc)
+static ip_filter_rulet *access_list_rule_ext(struct cli_def *cli, const char *command, char **argv, int argc)
{
static ip_filter_rulet rule;
struct in_addr addr;
return &rule;
}
-static ip_filter_rulet *access_list_rule_std(struct cli_def *cli, char *command, char **argv, int argc)
+static ip_filter_rulet *access_list_rule_std(struct cli_def *cli, const char *command, char **argv, int argc)
{
static ip_filter_rulet rule;
struct in_addr addr;
return &rule;
}
-static int cmd_ip_access_list_rule(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_ip_access_list_rule(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
ip_filter_rulet *rule = ip_filters[filt].extended
return CLI_OK;
}
-static int cmd_filter(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_filter(struct cli_def *cli, const char *command, char **argv, int argc)
{
sessionidt s;
int i;
return CLI_OK;
}
-static int cmd_no_filter(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_no_filter(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
sessionidt s;
return CLI_OK;
}
-static int cmd_show_access_list(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_access_list(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
return CLI_OK;
}
-static int cmd_shutdown(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_shutdown(struct cli_def *cli, const char *command, char **argv, int argc)
{
if (CLI_HELP_REQUESTED)
return CLI_HELP_NO_ARGS;
return CLI_OK;
}
-static int cmd_reload(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_reload(struct cli_def *cli, const char *command, char **argv, int argc)
{
if (CLI_HELP_REQUESTED)
return CLI_HELP_NO_ARGS;
return CLI_OK;
}
-static int cmd_show_group(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_group(struct cli_def *cli, const char *command, char **argv, int argc)
{
int i;
groupidt g;
return CLI_OK;
}
-static int cmd_setforward(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_setforward(struct cli_def *cli, const char *command, char **argv, int argc)
{
int ret;
return CLI_OK;
}
-static int cmd_show_rmtlnsconf(struct cli_def *cli, char *command, char **argv, int argc)
+static int cmd_show_rmtlnsconf(struct cli_def *cli, const char *command, char **argv, int argc)
{
confrlnsidt idrlns;
char strdisp[1024];
#include <fcntl.h>
#include <linux/if_tun.h>
#define SYSLOG_NAMES
+#include <stdio.h>
#include <syslog.h>
#include <malloc.h>
#include <net/route.h>
#include <netinet/ip6.h>
#include <stdarg.h>
#include <stdlib.h>
-#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <sys/ioctl.h>
ip.s6_addr[1] == 0x80 &&
ip.s6_addr16[1] == 0 &&
ip.s6_addr16[2] == 0 &&
- ip.s6_addr16[3] == 0)) {
- s = lookup_ipmap(*(in_addr_t *) &ip.s6_addr[8]);
+ ip.s6_addr16[3] == 0))
+ {
+ in_addr_t *pipv4 = (in_addr_t *) &ip.s6_addr[8];
+ s = lookup_ipmap(*pipv4);
} else {
s = lookup_ipv6map(ip);
}
//
// CLI list to dump current ipcache.
//
-int cmd_show_ipcache(struct cli_def *cli, char *command, char **argv, int argc)
+int cmd_show_ipcache(struct cli_def *cli, const char *command, char **argv, int argc)
{
union iphash *d = ip_hash, *e, *f, *g;
int i, j, k, l;
{
sessiont *sp;
tunnelidt t;
+ uint8_t *p;
+ uint8_t *data = buf; // Keep a copy of the originals.
uint8_t b[MAXETHER + 20];
LOG(5, s, t, "Ethernet -> Tunnel (%d bytes)\n", len);
// Add on L2TP header
- {
- uint8_t *p = makeppp(b, sizeof(b), buf, len, s, t, PPPIP, 0, 0, 0);
- if (!p) return;
- tunnelsend(b, len + (p-b), t); // send it...
- }
+ if (*(uint16_t *) (data + 2) == htons(PKTIPV6))
+ p = makeppp(b, sizeof(b), buf, len, s, t, PPPIPV6, 0, 0, 0); // IPV6
+ else
+ p = makeppp(b, sizeof(b), buf, len, s, t, PPPIP, 0, 0, 0); // IPV4
+
+ if (!p) return;
+
+ tunnelsend(b, len + (p-b), t); // send it...
// Snooping this session.
if (sp->snoop_ip && sp->snoop_port)
static void control16(controlt * c, uint16_t avp, uint16_t val, uint8_t m)
{
uint16_t l = (m ? 0x8008 : 0x0008);
- *(uint16_t *) (c->buf + c->length + 0) = htons(l);
- *(uint16_t *) (c->buf + c->length + 2) = htons(0);
- *(uint16_t *) (c->buf + c->length + 4) = htons(avp);
- *(uint16_t *) (c->buf + c->length + 6) = htons(val);
+ uint16_t *pint16 = (uint16_t *) (c->buf + c->length + 0);
+ pint16[0] = htons(l);
+ pint16[1] = htons(0);
+ pint16[2] = htons(avp);
+ pint16[3] = htons(val);
c->length += 8;
}
static void control32(controlt * c, uint16_t avp, uint32_t val, uint8_t m)
{
uint16_t l = (m ? 0x800A : 0x000A);
- *(uint16_t *) (c->buf + c->length + 0) = htons(l);
- *(uint16_t *) (c->buf + c->length + 2) = htons(0);
- *(uint16_t *) (c->buf + c->length + 4) = htons(avp);
- *(uint32_t *) (c->buf + c->length + 6) = htonl(val);
+ uint16_t *pint16 = (uint16_t *) (c->buf + c->length + 0);
+ uint32_t *pint32 = (uint32_t *) (c->buf + c->length + 6);
+ pint16[0] = htons(l);
+ pint16[1] = htons(0);
+ pint16[2] = htons(avp);
+ pint32[0] = htonl(val);
c->length += 10;
}
static void controls(controlt * c, uint16_t avp, char *val, uint8_t m)
{
uint16_t l = ((m ? 0x8000 : 0) + strlen(val) + 6);
- *(uint16_t *) (c->buf + c->length + 0) = htons(l);
- *(uint16_t *) (c->buf + c->length + 2) = htons(0);
- *(uint16_t *) (c->buf + c->length + 4) = htons(avp);
+ uint16_t *pint16 = (uint16_t *) (c->buf + c->length + 0);
+ pint16[0] = htons(l);
+ pint16[1] = htons(0);
+ pint16[2] = htons(avp);
memcpy(c->buf + c->length + 6, val, strlen(val));
c->length += 6 + strlen(val);
}
static void controlb(controlt * c, uint16_t avp, uint8_t *val, unsigned int len, uint8_t m)
{
uint16_t l = ((m ? 0x8000 : 0) + len + 6);
- *(uint16_t *) (c->buf + c->length + 0) = htons(l);
- *(uint16_t *) (c->buf + c->length + 2) = htons(0);
- *(uint16_t *) (c->buf + c->length + 4) = htons(avp);
+ uint16_t *pint16 = (uint16_t *) (c->buf + c->length + 0);
+ pint16[0] = htons(l);
+ pint16[1] = htons(0);
+ pint16[2] = htons(avp);
memcpy(c->buf + c->length + 6, val, len);
c->length += 6 + len;
}
// add a control message to a tunnel, and send if within window
static void controladd(controlt *c, sessionidt far, tunnelidt t)
{
- *(uint16_t *) (c->buf + 2) = htons(c->length); // length
- *(uint16_t *) (c->buf + 4) = htons(tunnel[t].far); // tunnel
- *(uint16_t *) (c->buf + 6) = htons(far); // session
- *(uint16_t *) (c->buf + 8) = htons(tunnel[t].ns); // sequence
+ uint16_t *pint16 = (uint16_t *) (c->buf + 2);
+ pint16[0] = htons(c->length); // length
+ pint16[1] = htons(tunnel[t].far); // tunnel
+ pint16[2] = htons(far); // session
+ pint16[3] = htons(tunnel[t].ns); // sequence
tunnel[t].ns++; // advance sequence
// link in message in to queue
if (tunnel[t].controlc)
case 'd':
if (fork()) exit(0);
setsid();
- freopen("/dev/null", "r", stdin);
- freopen("/dev/null", "w", stdout);
- freopen("/dev/null", "w", stderr);
+ if(!freopen("/dev/null", "r", stdin)) LOG(0, 0, 0, "Error freopen stdin: %s\n", strerror(errno));
+ if(!freopen("/dev/null", "w", stdout)) LOG(0, 0, 0, "Error freopen stdout: %s\n", strerror(errno));
+ if(!freopen("/dev/null", "w", stderr)) LOG(0, 0, 0, "Error freopen stderr: %s\n", strerror(errno));
break;
case 'v':
optdebug++;
LOG(0, 0, 0, "Can't set ulimit: %s\n", strerror(errno));
// Make core dumps go to /tmp
- chdir("/tmp");
+ if(chdir("/tmp")) LOG(0, 0, 0, "Error chdir /tmp: %s\n", strerror(errno));
}
if (config->scheduler_fifo)
uncache_ipmap(session[s].ip);
}
+ // remove old IPV6 routes...
+ if (session[s].ipv6route.s6_addr[0] && session[s].ipv6prefixlen)
+ route6set(s, session[s].ipv6route, session[s].ipv6prefixlen, 0);
+
routed = 0;
// add new routes...
}
}
-int cmd_show_hist_idle(struct cli_def *cli, char *command, char **argv, int argc)
+int cmd_show_hist_idle(struct cli_def *cli, const char *command, char **argv, int argc)
{
int s, i;
int count = 0;
return CLI_OK;
}
-int cmd_show_hist_open(struct cli_def *cli, char *command, char **argv, int argc)
+int cmd_show_hist_open(struct cli_def *cli, const char *command, char **argv, int argc)
{
int s, i;
int count = 0;