net: fix mac_from_string

The MAC tokens are given in hex so treat them as such.

Fixes #2107.
This commit is contained in:
Josef Söntgen 2016-09-16 14:16:45 +02:00 committed by Christian Helmuth
parent 0cbfef7bf1
commit 3c8d31f8fb
2 changed files with 8 additions and 8 deletions

View File

@ -1,3 +1,3 @@
SRC_CC = ethernet.cc ipv4.cc
SRC_CC = ethernet.cc ipv4.cc mac_address.cc
vpath %.cc $(REP_DIR)/src/lib/net
vpath %.cc $(REP_DIR)/src/lib/net

View File

@ -22,29 +22,29 @@ using namespace Genode;
struct Scanner_policy_number
{
static bool identifier_char(char c, unsigned i ) {
return is_digit(c) && c !=':'; }
return is_digit(c, true) && c !=':'; }
};
typedef Token<Scanner_policy_number> Token;
typedef Token<Scanner_policy_number> Mac_token;
Mac_address Net::mac_from_string(const char * mac)
{
Mac_address mac_addr;
Token t(mac);
Mac_token t(mac);
char tmpstr[3];
int cnt = 0;
unsigned char ipb[6] = {0};
while(t) {
if (t.type() == Token::WHITESPACE || t[0] == ':') {
while (t) {
if (t.type() == Mac_token::WHITESPACE || t[0] == ':') {
t = t.next();
continue;
}
t.string(tmpstr, sizeof(tmpstr));
unsigned long tmpc = 0;
ascii_to(tmpstr, tmpc);
ascii_to_unsigned(tmpstr, tmpc, 16);
ipb[cnt] = tmpc & 0xFF;
t = t.next();