linux/lib/net_utils.c
<<
>>
Prefs
   1#include <linux/string.h>
   2#include <linux/if_ether.h>
   3#include <linux/ctype.h>
   4#include <linux/kernel.h>
   5
   6bool mac_pton(const char *s, u8 *mac)
   7{
   8        int i;
   9
  10        /* XX:XX:XX:XX:XX:XX */
  11        if (strlen(s) < 3 * ETH_ALEN - 1)
  12                return false;
  13
  14        /* Don't dirty result unless string is valid MAC. */
  15        for (i = 0; i < ETH_ALEN; i++) {
  16                if (!isxdigit(s[i * 3]) || !isxdigit(s[i * 3 + 1]))
  17                        return false;
  18                if (i != ETH_ALEN - 1 && s[i * 3 + 2] != ':')
  19                        return false;
  20        }
  21        for (i = 0; i < ETH_ALEN; i++) {
  22                mac[i] = (hex_to_bin(s[i * 3]) << 4) | hex_to_bin(s[i * 3 + 1]);
  23        }
  24        return true;
  25}
  26EXPORT_SYMBOL(mac_pton);
  27