kern - Add kether_ntoa, kether_aton functions.
authorAntonio Huete Jimenez <tuxillo@quantumachine.net>
Fri, 28 Dec 2012 19:49:17 +0000 (20:49 +0100)
committerAntonio Huete Jimenez <tuxillo@quantumachine.net>
Tue, 15 Jan 2013 22:51:30 +0000 (23:51 +0100)
- kether_aton() converts a human readable MAC string to an
  ethernet address.
- kether_ntoa() converts ethernet addresses into human readable
  MAC string.

Human readable notation is specified in IEEE 802.

sys/net/if_ethersubr.c
sys/net/if_var.h

index 18e1385..838fd55 100644 (file)
@@ -1675,4 +1675,43 @@ failed:
        return FALSE;
 }
 
+u_char *
+kether_aton(const char *macstr, u_char *addr)
+{
+        unsigned int o0, o1, o2, o3, o4, o5;
+        int n;
+
+        if (macstr == NULL || addr == NULL)
+                return NULL;
+
+        n = ksscanf(macstr, "%x:%x:%x:%x:%x:%x", &o0, &o1, &o2,
+            &o3, &o4, &o5);
+        if (n != 6)
+                return NULL;
+
+        addr[0] = o0;
+        addr[1] = o1;
+        addr[2] = o2;
+        addr[3] = o3;
+        addr[4] = o4;
+        addr[5] = o5;
+
+        return addr;
+}
+
+char *
+kether_ntoa(const u_char *addr, char *buf)
+{
+        int len = 3 * ETHER_ADDR_LEN;
+        int n;
+
+        n = ksnprintf(buf, len, "%02x:%02x:%02x:%02x:%02x:%02x", addr[0],
+            addr[1], addr[2], addr[3], addr[4], addr[5]);
+
+        if (n < 17)
+                return NULL;
+
+        return buf;
+}
+
 MODULE_VERSION(ether, 1);
index 31a57de..8613d65 100644 (file)
@@ -759,6 +759,8 @@ void        ether_reinput_oncpu(struct ifnet *, struct mbuf *, int);
 void   ether_input_pkt(struct ifnet *, struct mbuf *, const struct pktinfo *);
 int    ether_output_frame(struct ifnet *, struct mbuf *);
 int    ether_ioctl(struct ifnet *, u_long, caddr_t);
+u_char *kether_aton(const char *, u_char *);
+char   *kether_ntoa(const u_char *, char *);
 boolean_t ether_tso_pullup(struct mbuf **, int *, struct ip **, int *,
            struct tcphdr **, int *);
 struct ifnet *ether_bridge_interface(struct ifnet *ifp);