From cb6fe86292fd85a67dfd930cdc351fec0ddf96bc Mon Sep 17 00:00:00 2001 From: Håkon Nessjøen Date: Thu, 24 Feb 2011 16:46:30 +0100 Subject: Code cleanup --- protocol.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'protocol.c') diff --git a/protocol.c b/protocol.c index a207494..2de5833 100644 --- a/protocol.c +++ b/protocol.c @@ -472,3 +472,56 @@ done: close(sock); return 0; } + +/* + * This function accepts either a full MAC address using : or - as seperators. + * Or a router hostname. The hostname will be searched for via MNDP broadcast packets. + */ +int query_mndp_verbose(char *address, unsigned char *dstmac) { + char *p = address; + int colons = 0; + int dashs = 0; + + while (*p++) { + if (*p == ':') { + colons++; + } + else if (*p == '-') { + dashs++; + } + } + + /* + * Windows users often enter macs with dash instead + * of colon. + */ + if (colons == 0 && dashs == 5) { + p = address; + while (*p++) { + if (*p == '-') { + *p = ':'; + } + } + colons = dashs; + } + + if (colons != 5) { + /* + * Not a valid mac-address. + * Search for Router by identity name, using MNDP + */ + fprintf(stderr, "Searching for '%s'...", address); + if (!query_mndp(address, dstmac)) { + fprintf(stderr, "not found\n"); + return 0; + } + + /* Router found, display mac and continue */ + fprintf(stderr, "found\n"); + } else { + /* Convert mac address string to ether_addr struct */ + ether_aton_r(address, (struct ether_addr *)dstmac); + } + + return 1; +} -- cgit v1.2.3