X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/d52f68e6d38a06c63344eea5d7132949b0f42777..39f5a61eb8fe16979cfa07e2f5c52a36b24e7ebb:/cli.c?ds=sidebyside diff --git a/cli.c b/cli.c index 088ec48..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.15 2004-09-02 04:18:07 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); @@ -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); +} +