]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/core/utils.c
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[mv-sheeva.git] / net / core / utils.c
index 5fea0ab2190274faf53705ee6bb87338072a26cc..386e263f60669a3a25be7e6d8a4361d7ce93161e 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/ratelimit.h>
 
 #include <net/sock.h>
+#include <net/net_ratelimit.h>
 
 #include <asm/byteorder.h>
 #include <asm/system.h>
@@ -296,3 +297,27 @@ void inet_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
                                csum_unfold(*sum)));
 }
 EXPORT_SYMBOL(inet_proto_csum_replace4);
+
+int mac_pton(const char *s, u8 *mac)
+{
+       int i;
+
+       /* XX:XX:XX:XX:XX:XX */
+       if (strlen(s) < 3 * ETH_ALEN - 1)
+               return 0;
+
+       /* Don't dirty result unless string is valid MAC. */
+       for (i = 0; i < ETH_ALEN; i++) {
+               if (!strchr("0123456789abcdefABCDEF", s[i * 3]))
+                       return 0;
+               if (!strchr("0123456789abcdefABCDEF", s[i * 3 + 1]))
+                       return 0;
+               if (i != ETH_ALEN - 1 && s[i * 3 + 2] != ':')
+                       return 0;
+       }
+       for (i = 0; i < ETH_ALEN; i++) {
+               mac[i] = (hex_to_bin(s[i * 3]) << 4) | hex_to_bin(s[i * 3 + 1]);
+       }
+       return 1;
+}
+EXPORT_SYMBOL(mac_pton);