From patchwork Thu Apr 16 18:02:30 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: 1271853 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (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 4936gd1l0xz9sWb for ; Fri, 17 Apr 2020 04:09:33 +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 4936gc1qN1zDrCP for ; Fri, 17 Apr 2020 04:09:32 +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 4936Wf3wkCzDrgC for ; Fri, 17 Apr 2020 04:02:37 +1000 (AEST) Received: from smtp-auth3.server.rpi.edu (route.canit.rpi.edu [128.113.2.233]) by smtp9.server.rpi.edu (8.14.4/8.14.4/Debian-8+deb8u2) with ESMTP id 03GI2WE0117237 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 16 Apr 2020 14:02:33 -0400 Received: from smtp-auth3.server.rpi.edu (localhost [127.0.0.1]) by smtp-auth3.server.rpi.edu (Postfix) with ESMTP id 83F05580E4 for ; Thu, 16 Apr 2020 14:02:32 -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-auth3.server.rpi.edu (Postfix) with ESMTPSA id 65049580CF for ; Thu, 16 Apr 2020 14:02:32 -0400 (EDT) Date: Thu, 16 Apr 2020 14:02:30 -0400 From: "Daniel M. Weeks" To: petitboot@lists.ozlabs.org Subject: [PATCH 4/5] Do not require ID_NET_NAME_MAC from udev Message-ID: <68683873a4f78f0deb4a5601ce6390c2c954e04f.1587059223.git.weeksd2@rpi.edu> 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: 022ru2wkA 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" If ID_NET_NAME_MAC is not available for an interface, try to find the hardware address of the interface. If a compatible address is found, ready the interface. Signed-off-by: Daniel M. Weeks --- discover/udev.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/discover/udev.c b/discover/udev.c index 470bbc3..8a32815 100644 --- a/discover/udev.c +++ b/discover/udev.c @@ -242,9 +242,11 @@ static int udev_check_interface_ready(struct device_handler *handler, struct udev_device *dev) { const char *name, *name_path, *ifindex, *interface, *mac_name; - uint8_t *mac; + uint8_t *mac, *hwaddr; char byte[3]; unsigned int i, j; + int len; + int ret = -1; name = udev_device_get_sysname(dev); @@ -259,12 +261,36 @@ static int udev_check_interface_ready(struct device_handler *handler, mac_name = udev_device_get_property_value(dev, "ID_NET_NAME_MAC"); /* Physical interfaces should have all of these properties */ - if (!name_path || !ifindex || !interface || !mac_name) { + if (!ifindex || !interface) { pb_debug("%s: interface %s missing properties\n", __func__, name); return -1; } + if (!mac_name) { + pb_debug("%s: ready non-MAC interface %s\n", + __func__, name); + + /* only try to get up to 8 bytes (IB GUID length) */ + hwaddr = talloc_array(handler, uint8_t, MAX_HWADDR_SIZE); + if (!hwaddr) + return -1; + + len = network_get_hwaddr(name, hwaddr, MAX_HWADDR_SIZE); + if (len < 0) { + pb_log("Unable to get hwaddr for %s\n", name); + } else if (len > MAX_HWADDR_SIZE) { + pb_log("hwaddr for %s too long\n", name); + } else { + pb_debug("Got %d byte hwaddr for %s\n", len, name); + network_mark_interface_ready(handler, atoi(ifindex), + interface, hwaddr, len); + ret = 0; + } + talloc_free(hwaddr); + return ret; + } + /* ID_NET_NAME_MAC format is enxMACADDR */ if (strlen(mac_name) < 15) { pb_debug("%s: Unexpected MAC format: %s\n",