1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 24cd5773aSAndy Shevchenko #include <linux/string.h> 34cd5773aSAndy Shevchenko #include <linux/if_ether.h> 44cd5773aSAndy Shevchenko #include <linux/ctype.h> 58d2b2281SAndy Shevchenko #include <linux/export.h> 68d2b2281SAndy Shevchenko #include <linux/hex.h> 74cd5773aSAndy Shevchenko mac_pton(const char * s,u8 * mac)8a69f5edbSJoe Perchesbool mac_pton(const char *s, u8 *mac) 94cd5773aSAndy Shevchenko { 104cd5773aSAndy Shevchenko int i; 114cd5773aSAndy Shevchenko 12*6d6c1ba7SUday Shankar if (strnlen(s, MAC_ADDR_STR_LEN) < MAC_ADDR_STR_LEN) 13a69f5edbSJoe Perches return false; 144cd5773aSAndy Shevchenko 154cd5773aSAndy Shevchenko /* Don't dirty result unless string is valid MAC. */ 164cd5773aSAndy Shevchenko for (i = 0; i < ETH_ALEN; i++) { 174cd5773aSAndy Shevchenko if (!isxdigit(s[i * 3]) || !isxdigit(s[i * 3 + 1])) 18a69f5edbSJoe Perches return false; 194cd5773aSAndy Shevchenko if (i != ETH_ALEN - 1 && s[i * 3 + 2] != ':') 20a69f5edbSJoe Perches return false; 214cd5773aSAndy Shevchenko } 224cd5773aSAndy Shevchenko for (i = 0; i < ETH_ALEN; i++) { 234cd5773aSAndy Shevchenko mac[i] = (hex_to_bin(s[i * 3]) << 4) | hex_to_bin(s[i * 3 + 1]); 244cd5773aSAndy Shevchenko } 25a69f5edbSJoe Perches return true; 264cd5773aSAndy Shevchenko } 274cd5773aSAndy Shevchenko EXPORT_SYMBOL(mac_pton); 28