// 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 <stdio.h>
#include <stdarg.h>
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];
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");
}
}
+ if (config->hostname && *config->hostname)
+ cli_set_hostname(cli, config->hostname);
+
signal(SIGPIPE, SIG_DFL);
signal(SIGCHLD, SIG_DFL);
signal(SIGHUP, SIG_DFL);
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");
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;
#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);
+}
+