Add mac address config option handling

This commit is contained in:
fred_nerk 2004-09-21 05:09:09 +00:00
parent 9b161f4f17
commit 41de03f89f

25
cli.c
View file

@ -2,7 +2,7 @@
// vim: sw=8 ts=8
char const *cvs_name = "$Name: $";
char const *cvs_id_cli = "$Id: cli.c,v 1.16 2004/09/19 23:26:46 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>
@ -102,6 +102,7 @@ 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()
{
@ -882,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");
@ -1664,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;
@ -1733,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);
}