14cd5773aSAndy Shevchenko #include <linux/string.h> 24cd5773aSAndy Shevchenko #include <linux/if_ether.h> 34cd5773aSAndy Shevchenko #include <linux/ctype.h> 44cd5773aSAndy Shevchenko #include <linux/kernel.h> 54cd5773aSAndy Shevchenko 6*a69f5edbSJoe Perches bool mac_pton(const char *s, u8 *mac) 74cd5773aSAndy Shevchenko { 84cd5773aSAndy Shevchenko int i; 94cd5773aSAndy Shevchenko 104cd5773aSAndy Shevchenko /* XX:XX:XX:XX:XX:XX */ 114cd5773aSAndy Shevchenko if (strlen(s) < 3 * ETH_ALEN - 1) 12*a69f5edbSJoe Perches return false; 134cd5773aSAndy Shevchenko 144cd5773aSAndy Shevchenko /* Don't dirty result unless string is valid MAC. */ 154cd5773aSAndy Shevchenko for (i = 0; i < ETH_ALEN; i++) { 164cd5773aSAndy Shevchenko if (!isxdigit(s[i * 3]) || !isxdigit(s[i * 3 + 1])) 17*a69f5edbSJoe Perches return false; 184cd5773aSAndy Shevchenko if (i != ETH_ALEN - 1 && s[i * 3 + 2] != ':') 19*a69f5edbSJoe Perches return false; 204cd5773aSAndy Shevchenko } 214cd5773aSAndy Shevchenko for (i = 0; i < ETH_ALEN; i++) { 224cd5773aSAndy Shevchenko mac[i] = (hex_to_bin(s[i * 3]) << 4) | hex_to_bin(s[i * 3 + 1]); 234cd5773aSAndy Shevchenko } 24*a69f5edbSJoe Perches return true; 254cd5773aSAndy Shevchenko } 264cd5773aSAndy Shevchenko EXPORT_SYMBOL(mac_pton); 27