From b5100e276763a03c255dd1e7a4147c55c901419c Mon Sep 17 00:00:00 2001 From: Vadim Kochan Date: Tue, 26 Jan 2016 22:25:00 +0200 Subject: dev: Add function to get device hardware address Add device_hw_address() function to get device MAC address. Signed-off-by: Vadim Kochan [tk: Add len parameter and error out on too short buffers] Signed-off-by: Tobias Klauser --- dev.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'dev.c') diff --git a/dev.c b/dev.c index cf8d643..5a43643 100644 --- a/dev.c +++ b/dev.c @@ -124,6 +124,31 @@ int device_address(const char *ifname, int af, struct sockaddr_storage *ss) return ret; } +int device_hw_address(const char *ifname, uint8_t *addr, size_t len) +{ + int ret, sock; + struct ifreq ifr; + + if (!addr) + return -EINVAL; + if (len < IFHWADDRLEN) + return -ENOSPC; + 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 (!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; -- cgit v1.2.3-54-g00ecf