From: fred_nerk Date: Tue, 21 Sep 2004 05:09:09 +0000 (+0000) Subject: Add mac address config option handling X-Git-Tag: release_2_0_3~31 X-Git-Url: http://git.sameswireless.fr/l2tpns.git/commitdiff_plain/41de03f89f24afe1163012419f7e83beeed44a0a Add mac address config option handling --- diff --git a/cli.c b/cli.c index 8c43590..70f6b37 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.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 #include @@ -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); +} +