X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/133cc062ad0a02f2de24d70d4ed579786bd69a4d..340d76dae5734fd64a69f6cee60e4e508d2323c2:/cli.c diff --git a/cli.c b/cli.c index 968d04c..83b5c8d 100644 --- a/cli.c +++ b/cli.c @@ -2,7 +2,7 @@ // vim: sw=8 ts=8 char const *cvs_name = "$Name: $"; -char const *cvs_id_cli = "$Id: cli.c,v 1.14 2004-08-26 06:24:12 fred_nerk Exp $"; +char const *cvs_id_cli = "$Id: cli.c,v 1.17 2004-09-21 05:09:09 fred_nerk Exp $"; #include #include @@ -102,8 +102,9 @@ int cmd_load_plugin(struct cli_def *cli, char *command, char **argv, int argc); int cmd_remove_plugin(struct cli_def *cli, char *command, char **argv, int argc); int cmd_uptime(struct cli_def *cli, char *command, char **argv, int argc); int regular_stuff(struct cli_def *cli); +void parsemac(char *string, char mac[6]); -void init_cli(char *hostname) +void init_cli() { FILE *f; char buf[4096]; @@ -113,10 +114,10 @@ void init_cli(char *hostname) struct sockaddr_in addr; cli = cli_init(); - if (hostname && *hostname) - cli_set_hostname(cli, hostname); + if (config->hostname && *config->hostname) + cli_set_hostname(cli, config->hostname); else - cli_set_hostname(cli, "l2tpns"); + cli_set_hostname(cli, "l2tpns"); c = cli_register_command(cli, NULL, "show", NULL, PRIVILEGE_UNPRIVILEGED, MODE_EXEC, NULL); cli_register_command(cli, c, "banana", cmd_show_banana, PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "Show a banana"); @@ -258,6 +259,9 @@ void cli_do(int sockfd) } } + if (config->hostname && *config->hostname) + cli_set_hostname(cli, config->hostname); + signal(SIGPIPE, SIG_DFL); signal(SIGCHLD, SIG_DFL); signal(SIGHUP, SIG_DFL); @@ -397,7 +401,7 @@ int cmd_show_session(struct cli_def *cli, char *command, char **argv, int argc) cli_print(cli, " Called Num: %s", session[s].called); cli_print(cli, " Tunnel ID: %d", session[s].tunnel); cli_print(cli, " IP address: %s", inet_toa(htonl(session[s].ip))); - cli_print(cli, " HSD sid: %lu", session[s].sid); + cli_print(cli, " Unique SID: %lu", session[s].unique_id); cli_print(cli, " Idle time: %u seconds", abs(time_now - session[s].last_packet)); cli_print(cli, " Next Recv: %u", session[s].nr); cli_print(cli, " Next Send: %u", session[s].ns); @@ -879,6 +883,14 @@ int cmd_show_run(struct cli_def *cli, char *command, char **argv, int argc) 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); + 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)); } cli_print(cli, "# Plugins"); @@ -1661,6 +1673,9 @@ int cmd_set(struct cli_def *cli, char *command, char **argv, int argc) 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; @@ -1730,3 +1745,14 @@ int regular_stuff(struct cli_def *cli) #endif return CLI_OK; } + +// Convert a string in the form of abcd.ef12.3456 into char[6] +void parsemac(char *string, char mac[6]) +{ + if (sscanf(string, "%02x%02x.%02x%02x.%02x%02x", (unsigned int *)&mac[0], (unsigned int *)&mac[1], (unsigned int *)&mac[2], (unsigned int *)&mac[3], (unsigned int *)&mac[4], (unsigned int *)&mac[5]) == 6) + return; + if (sscanf(string, "%02x%02x:%02x%02x:%02x%02x", (unsigned int *)&mac[0], (unsigned int *)&mac[1], (unsigned int *)&mac[2], (unsigned int *)&mac[3], (unsigned int *)&mac[4], (unsigned int *)&mac[5]) == 6) + return; + memset(mac, 0, 6); +} +