Add device_hw_address func to get device's MAC address.

Signed-off-by: Vadim Kochan <vadi...@gmail.com>
---
 dev.c | 23 +++++++++++++++++++++++
 dev.h |  1 +
 2 files changed, 24 insertions(+)

diff --git a/dev.c b/dev.c
index cf8d643..ad7b917 100644
--- a/dev.c
+++ b/dev.c
@@ -124,6 +124,29 @@ int device_address(const char *ifname, int af, struct 
sockaddr_storage *ss)
        return ret;
 }
 
+int device_hw_address(const char *ifname, uint8_t *addr)
+{
+       int ret, sock;
+       struct ifreq ifr;
+
+       if (unlikely(!addr))
+               return -EINVAL;
+       if (!strncmp("any", ifname, strlen("any")))
+               return -EINVAL;
+
+       sock = af_socket(AF_INET);
+
+       memset(&ifr, 0, sizeof(ifr));
+       strlcpy(ifr.ifr_name, ifname, IFNAMSIZ);
+
+       ret = ioctl(sock, SIOCGIFHWADDR, &ifr);
+       if (likely(!ret))
+               memcpy(addr, &ifr.ifr_hwaddr.sa_data[0], IFHWADDRLEN);
+
+       close(sock);
+       return ret;
+}
+
 size_t device_mtu(const char *ifname)
 {
        size_t mtu = 0;
diff --git a/dev.h b/dev.h
index a9e4ccf..077e08f 100644
--- a/dev.h
+++ b/dev.h
@@ -7,6 +7,7 @@
 extern size_t device_mtu(const char *ifname);
 extern int device_address(const char *ifname, int af, struct sockaddr_storage 
*ss);
 extern int __device_ifindex(const char *ifname);
+extern int device_hw_address(const char *ifname, uint8_t *addr);
 extern int device_ifindex(const char *ifname);
 extern int device_type(const char *ifname);
 extern short device_get_flags(const char *ifname);
-- 
2.6.3

-- 
You received this message because you are subscribed to the Google Groups 
"netsniff-ng" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to netsniff-ng+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to