From d8500c53789eafefe28d4ace088bf4b912280bf9 Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Tue, 2 Dec 2014 14:19:15 +0100 Subject: [PATCH] shared: add format helpers for printing MAC addresses Use these in networctl. --- Makefile.am | 1 + src/network/networkctl.c | 6 +++--- src/shared/ether-addr-util.h | 27 +++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/shared/ether-addr-util.h diff --git a/Makefile.am b/Makefile.am index 38d320f..46a838d 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 91eb635..6225330 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 0000000..7033138 --- /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 . +***/ + +#include + +#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] -- 2.7.4