From patchwork Thu Apr 16 17:59:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Daniel M. Weeks" X-Patchwork-Id: 1271844 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4936dX5y2zz9sWY for ; Fri, 17 Apr 2020 04:07:44 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=rpi.edu Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 4936dX4CWQzDrhF for ; Fri, 17 Apr 2020 04:07:44 +1000 (AEST) X-Original-To: petitboot@lists.ozlabs.org Delivered-To: petitboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=rpi.edu (client-ip=128.113.2.229; helo=smtp9.server.rpi.edu; envelope-from=weeksd2@rpi.edu; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=rpi.edu Received: from smtp9.server.rpi.edu (smtp9.server.rpi.edu [128.113.2.229]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4936SH0cMZzDrgD for ; Fri, 17 Apr 2020 03:59:42 +1000 (AEST) Received: from smtp-auth1.server.rpi.edu (smtp-auth1.server.rpi.edu [128.113.2.231]) by smtp9.server.rpi.edu (8.14.4/8.14.4/Debian-8+deb8u2) with ESMTP id 03GHxc1F116640 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 16 Apr 2020 13:59:39 -0400 Received: from smtp-auth1.server.rpi.edu (localhost [127.0.0.1]) by smtp-auth1.server.rpi.edu (Postfix) with ESMTP id 50BD8580E2 for ; Thu, 16 Apr 2020 13:59:38 -0400 (EDT) Received: from dev.danweeks.net (cpe-74-70-107-6.nycap.res.rr.com [74.70.107.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: weeksd2) by smtp-auth1.server.rpi.edu (Postfix) with ESMTPSA id 314B05805A for ; Thu, 16 Apr 2020 13:59:38 -0400 (EDT) Date: Thu, 16 Apr 2020 13:59:36 -0400 From: "Daniel M. Weeks" To: petitboot@lists.ozlabs.org Subject: [PATCH 07/11] New function to preprocess hardware address strings Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Virus-Scanned: ClamAV using ClamSMTP X-Bayes-Prob: 0.0001 (Score 0, tokens from: outgoing, @@RPTN) X-Spam-Score: 0.00 () [Hold at 10.10] X-CanIt-Incident-Id: 022rtXCfX X-CanIt-Geo: ip=74.70.107.6; country=US; region=New York; city=Troy; latitude=42.7273; longitude=-73.6696; http://maps.google.com/maps?q=42.7273,-73.6696&z=6 X-CanItPRO-Stream: outgoing X-Canit-Stats-ID: Bayes signature not available X-Scanned-By: CanIt (www . roaringpenguin . com) on 128.113.2.229 X-BeenThere: petitboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Petitboot bootloader development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: petitboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Petitboot" This function will take a long hardware address, and identify the beginning of the local, usable hardware address and, optionally, its length. Since Infiniband IP over IB hardware addresses begin with 12 bytes of addressing data that can change and is not representative of the local hardware, it is removed. Signed-off-by: Daniel M. Weeks --- lib/util/util.c | 22 ++++++++++++++++++++++ lib/util/util.h | 2 ++ 2 files changed, 24 insertions(+) diff --git a/lib/util/util.c b/lib/util/util.c index e672d19..c965cc4 100644 --- a/lib/util/util.c +++ b/lib/util/util.c @@ -18,6 +18,7 @@ #include #include +#include #include static const char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', @@ -60,3 +61,24 @@ int hwaddr_cmp(uint8_t *hwaddr1, size_t hwaddr1_len, uint8_t *hwaddr2, size_t hw return memcmp(hwaddr1, hwaddr2, hwaddr1_len); } + +/* takes a pretty hardware address and returns the point to begin processing + * and a length or NULL if the length is unrecognized */ +const char *hwaddr_preprocess(const char *mac, size_t *length) +{ + if (!mac) + return NULL; + + if (strlen(mac) == 17) { /* a pretty MAC address */ + if (length) + *length = 6; + return mac; + } else if (strlen(mac) == 59) { /* a pretty IB address */ + if (length) + *length = 8; + return mac+36; + } else { + pb_debug("unsupported hwaddr format (length %ld)\n", strlen(mac)); + return NULL; + } +} diff --git a/lib/util/util.h b/lib/util/util.h index 416e1af..d9cc46b 100644 --- a/lib/util/util.h +++ b/lib/util/util.h @@ -54,5 +54,7 @@ void mac_str(uint8_t *mac, unsigned int maclen, char *buf, unsigned int buflen); int hwaddr_cmp(uint8_t *hwaddr1, size_t hwaddr1_len, uint8_t *hwaddr2, size_t hwaddr2_len); +const char *hwaddr_preprocess(const char *mac, size_t *length); + #endif /* UTIL_H */