diff options
author | Tom Gundersen <teg@jklm.no> | 2014-12-02 14:19:15 +0100 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2014-12-02 14:31:16 +0100 |
commit | d8500c53789eafefe28d4ace088bf4b912280bf9 (patch) | |
tree | d5612a025c58fdcb8a06217858e17e3380395257 | |
parent | e3286870fdf20c3c93e944b24fd9af53620f7dba (diff) |
shared: add format helpers for printing MAC addresses
Use these in networctl.
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | src/network/networkctl.c | 6 | ||||
-rw-r--r-- | src/shared/ether-addr-util.h | 27 |
3 files changed, 31 insertions, 3 deletions
diff --git a/Makefile.am b/Makefile.am index 38d320fc3b..46a838d4a7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -811,6 +811,7 @@ libsystemd_shared_la_SOURCES = \ src/shared/socket-util.h \ src/shared/in-addr-util.c \ src/shared/in-addr-util.h \ + src/shared/ether-addr-util.h \ src/shared/conf-files.c \ src/shared/conf-files.h \ src/shared/cgroup-util.c \ diff --git a/src/network/networkctl.c b/src/network/networkctl.c index 91eb6357d4..622533053c 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -34,6 +34,7 @@ #include "arphrd-list.h" #include "local-addresses.h" #include "socket-util.h" +#include "ether-addr-util.h" static bool arg_no_pager = false; static bool arg_legend = true; @@ -251,14 +252,13 @@ static int list_links(char **args, unsigned n) { static int ieee_oui(struct udev_hwdb *hwdb, struct ether_addr *mac, char **ret) { struct udev_list_entry *entry; char *description; - char str[32]; + char str[strlen("OUI:XXYYXXYYXXYY") + 1]; /* skip commonly misused 00:00:00 (Xerox) prefix */ if (memcmp(mac, "\0\0\0", 3) == 0) return -EINVAL; - snprintf(str, sizeof(str), "OUI:%02X%02X%02X%02X%02X%02X", mac->ether_addr_octet[0], mac->ether_addr_octet[1], mac->ether_addr_octet[2], - mac->ether_addr_octet[3], mac->ether_addr_octet[4], mac->ether_addr_octet[5]); + snprintf(str, sizeof(str), "OUI:" ETHER_ADDR_FORMAT_STR, ETHER_ADDR_FORMAT_VAL(*mac)); udev_list_entry_foreach(entry, udev_hwdb_get_properties_list_entry(hwdb, str, 0)) if (strcmp(udev_list_entry_get_name(entry), "ID_OUI_FROM_DATABASE") == 0) { diff --git a/src/shared/ether-addr-util.h b/src/shared/ether-addr-util.h new file mode 100644 index 0000000000..7033138788 --- /dev/null +++ b/src/shared/ether-addr-util.h @@ -0,0 +1,27 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ + +#pragma once + +/*** + This file is part of systemd. + + Copyright 2014 Tom Gundersen + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + systemd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <net/ethernet.h> + +#define ETHER_ADDR_FORMAT_STR "%02X%02X%02X%02X%02X%02X" +#define ETHER_ADDR_FORMAT_VAL(x) (x).ether_addr_octet[0], (x).ether_addr_octet[1], (x).ether_addr_octet[2], (x).ether_addr_octet[3], (x).ether_addr_octet[4], (x).ether_addr_octet[5] |