48 lines
897 B
C
48 lines
897 B
C
|
/*
|
||
|
* Copyright (c) 2017 Linus Lüssing <linus.luessing@c0d3.blue>
|
||
|
*
|
||
|
* SPDX-License-Identifier: GPL-2.0+
|
||
|
* License-Filename: LICENSE
|
||
|
*/
|
||
|
|
||
|
#include <linux/if_ether.h>
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
#include "mac.h"
|
||
|
|
||
|
#define ETH_STRLEN (sizeof("aa:bb:cc:dd:ee:ff") - 1)
|
||
|
|
||
|
char mntoa_buf[ETH_STRLEN+1];
|
||
|
|
||
|
int mac_aton(const char *cp, struct mac_addr *mac)
|
||
|
{
|
||
|
struct mac_addr m;
|
||
|
int ret;
|
||
|
|
||
|
if (strlen(cp) != ETH_STRLEN)
|
||
|
return 0;
|
||
|
|
||
|
memset(&m, 0, sizeof(m));
|
||
|
|
||
|
ret = sscanf(cp, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
|
||
|
&m.storage[0], &m.storage[1], &m.storage[2],
|
||
|
&m.storage[3], &m.storage[4], &m.storage[5]);
|
||
|
|
||
|
if (ret != ETH_ALEN)
|
||
|
return 0;
|
||
|
|
||
|
*mac = m;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
char *mac_ntoa(struct mac_addr *mac)
|
||
|
{
|
||
|
unsigned char *m = mac->storage;
|
||
|
|
||
|
snprintf(mntoa_buf, sizeof(mntoa_buf),
|
||
|
"%02x:%02x:%02x:%02x:%02x:%02x",
|
||
|
m[0], m[1], m[2], m[3], m[4], m[5]);
|
||
|
|
||
|
return mntoa_buf;
|
||
|
}
|