osmocore: Add function osmo_macaddr_parse() to parse ETH MAC address

This commit is contained in:
Harald Welte 2014-08-18 19:03:40 +02:00
parent cc27fa6479
commit 40d56f96b9
4 changed files with 34 additions and 1 deletions

View File

@ -21,6 +21,7 @@ nobase_include_HEADERS = \
osmocom/core/linuxrbtree.h \
osmocom/core/logging.h \
osmocom/core/loggingrb.h \
osmocom/core/macaddr.h \
osmocom/core/msgb.h \
osmocom/core/panic.h \
osmocom/core/prim.h \

View File

@ -0,0 +1,6 @@
#ifndef _OSMO_MACADDR_H
#define _OSMO_MACADDR_H
int osmo_macaddr_parse(uint8_t *out, const char *in);
#endif

View File

@ -13,7 +13,8 @@ libosmocore_la_SOURCES = timer.c select.c signal.c msgb.c bits.c \
logging.c logging_syslog.c rate_ctr.c \
gsmtap_util.c crc16.c panic.c backtrace.c \
conv.c application.c rbtree.c strrb.c \
loggingrb.c crc8gen.c crc16gen.c crc32gen.c crc64gen.c
loggingrb.c crc8gen.c crc16gen.c crc32gen.c crc64gen.c \
macaddr.c
BUILT_SOURCES = crc8gen.c crc16gen.c crc32gen.c crc64gen.c

25
src/macaddr.c Normal file
View File

@ -0,0 +1,25 @@
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
int osmo_macaddr_parse(uint8_t *out, const char *in)
{
/* 00:00:00:00:00:00 */
char tmp[18];
char *tok;
unsigned int i = 0;
if (strlen(in) < 17)
return -1;
strncpy(tmp, in, sizeof(tmp)-1);
tmp[sizeof(tmp)-1] = '\0';
for (tok = strtok(tmp, ":"); tok && (i < 6); tok = strtok(NULL, ":")) {
unsigned long ul = strtoul(tok, NULL, 16);
out[i++] = ul & 0xff;
}
return 0;
}