From 23aa4e11915ec36c935bd3181624c76b4782c809 Mon Sep 17 00:00:00 2001 From: Antonio Huete Jimenez Date: Fri, 28 Dec 2012 20:49:17 +0100 Subject: [PATCH] kern - Add kether_ntoa, kether_aton functions. - 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 | 39 +++++++++++++++++++++++++++++++++++++++ sys/net/if_var.h | 2 ++ 2 files changed, 41 insertions(+) diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c index 18e138513c..838fd55085 100644 --- a/sys/net/if_ethersubr.c +++ b/sys/net/if_ethersubr.c @@ -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); diff --git a/sys/net/if_var.h b/sys/net/if_var.h index 31a57de923..8613d65449 100644 --- a/sys/net/if_var.h +++ b/sys/net/if_var.h @@ -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); -- 2.41.0