summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2014-08-15 13:18:50 +0200
committerLennart Poettering <lennart@poettering.net>2014-08-15 13:19:03 +0200
commitdb73295accbec0c6513817f0a64a92018592bb26 (patch)
tree3199040de4a794dc8020c56cab5d8bb8e1155801 /src/shared
parentc22bf27beea56516d8f83784759fb30495e058d7 (diff)
util: never use ether_ntoa(), since it formats with %x, not %02x, which makes ethernet addresses look funny
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/socket-util.c19
-rw-r--r--src/shared/socket-util.h5
2 files changed, 24 insertions, 0 deletions
diff --git a/src/shared/socket-util.c b/src/shared/socket-util.c
index 38729a25b8..e3e54e8e08 100644
--- a/src/shared/socket-util.c
+++ b/src/shared/socket-util.c
@@ -727,3 +727,22 @@ bool sockaddr_equal(const union sockaddr_union *a, const union sockaddr_union *b
return false;
}
+
+char* ether_addr_to_string(const struct ether_addr *addr, char buffer[ETHER_ADDR_TO_STRING_MAX]) {
+ assert(addr);
+ assert(buffer);
+
+ /* Like ether_ntoa() but uses %02x instead of %x to print
+ * ethernet addresses, which makes them look less funny. Also,
+ * doesn't use a static buffer. */
+
+ sprintf(buffer, "%02x:%02x:%02x:%02x:%02x:%02x",
+ addr->ether_addr_octet[0],
+ addr->ether_addr_octet[1],
+ addr->ether_addr_octet[2],
+ addr->ether_addr_octet[3],
+ addr->ether_addr_octet[4],
+ addr->ether_addr_octet[5]);
+
+ return buffer;
+}
diff --git a/src/shared/socket-util.h b/src/shared/socket-util.h
index 0b4998d044..07d0aff72b 100644
--- a/src/shared/socket-util.h
+++ b/src/shared/socket-util.h
@@ -23,6 +23,7 @@
#include <sys/socket.h>
#include <netinet/in.h>
+#include <netinet/ether.h>
#include <sys/un.h>
#include <asm/types.h>
#include <linux/netlink.h>
@@ -111,3 +112,7 @@ int netlink_family_to_string_alloc(int b, char **s);
int netlink_family_from_string(const char *s) _pure_;
bool sockaddr_equal(const union sockaddr_union *a, const union sockaddr_union *b);
+
+#define ETHER_ADDR_TO_STRING_MAX (3*6)
+
+char* ether_addr_to_string(const struct ether_addr *addr, char buffer[ETHER_ADDR_TO_STRING_MAX]);