From nobody Mon Feb 9 04:14:10 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=nvidia.com ARC-Seal: i=1; a=rsa-sha256; t=1611231746; cv=none; d=zohomail.com; s=zohoarc; b=P5UBRVLCZHDMOhRtTuMqOHasnb3doLDQtbT0WQ13JG1CsgSaepWmf7ggG/GKLg22VFMD+m4RU+miApj/wn0X7uHx2GC99OFMVzeek17dL6GZPdAeQjy3BYgm6wsXzNCIYd3+oWSUMljm1fGod+7BXr2o7JdSz0UbDTUykNuapd0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611231746; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=b2/P3yjGAohq9SBM6CnR2VLx3+/2Bp21JShTFtQaR5U=; b=loP5oPy0Vf6C5Y+aW748CVqlPOtKd9ps+MZvRMsZ5gjr8TJK2Ciy5rsiLn9M9P0IKUQl84IjyUmw7ZzJa/EC5f2cNG8mltB3FVMQAYBHX4epaG7go7x1d5NXlEwVlXcJGxX9eLbk+h4sUFF9LgH0kXlDTs1rXAsK1ieCLr0Hxlk= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1611231746579164.46440248180886; Thu, 21 Jan 2021 04:22:26 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-333-6w3cIaxaOlm8vDY3B0TVfg-1; Thu, 21 Jan 2021 07:22:23 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 778648144E0; Thu, 21 Jan 2021 12:22:17 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0A9879CA0; Thu, 21 Jan 2021 12:22:16 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 3C9F1180954D; Thu, 21 Jan 2021 12:22:11 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 10LCM99H029605 for ; Thu, 21 Jan 2021 07:22:09 -0500 Received: by smtp.corp.redhat.com (Postfix) id 260402166B31; Thu, 21 Jan 2021 12:22:09 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast02.extmail.prod.ext.rdu2.redhat.com [10.11.55.18]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1EF222166B2F for ; Thu, 21 Jan 2021 12:22:06 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id E04E4801207 for ; Thu, 21 Jan 2021 12:22:06 +0000 (UTC) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by relay.mimecast.com with ESMTP id us-mta-539-Mzg3nrSAM6G_S6Hhr5n9pA-1; Thu, 21 Jan 2021 07:22:04 -0500 Received: from Internal Mail-Server by MTLPINE1 (envelope-from moshele@nvidia.com) with SMTP; 21 Jan 2021 14:15:22 +0200 Received: from mtr-vdi-113.wap.labs.mlnx. (mtr-vdi-113.wap.labs.mlnx [10.209.100.75]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 10LCFMB6002812; Thu, 21 Jan 2021 14:15:22 +0200 X-MC-Unique: 6w3cIaxaOlm8vDY3B0TVfg-1 X-MC-Unique: Mzg3nrSAM6G_S6Hhr5n9pA-1 From: Moshe Levi To: libvir-list@redhat.com, adrianc@nvidia.com Subject: [PATCH v2 1/2] util: add virNetDevGetPhysPortName Date: Thu, 21 Jan 2021 14:15:21 +0200 Message-Id: <20210121121522.71550-2-moshele@nvidia.com> In-Reply-To: <20210121121522.71550-1-moshele@nvidia.com> References: <20210121121522.71550-1-moshele@nvidia.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This commit add virNetDevGetPhysPortName to read netdevice phys_port_name from sysfs. It also refactor the code so virNetDevGetPhysPortName and virNetDevGetPhysPortID will use same method to read the netdevice sysfs. Reviewed-by: Laine Stump --- src/util/virnetdev.c | 74 +++++++++++++++++++++++++++++++++++--------- src/util/virnetdev.h | 4 +++ 2 files changed, 63 insertions(+), 15 deletions(-) diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c index a73e5f72f1..d41b967d6a 100644 --- a/src/util/virnetdev.c +++ b/src/util/virnetdev.c @@ -1147,6 +1147,29 @@ virNetDevGetPCIDevice(const char *devName) # endif =20 =20 +/* A wrapper to get content of file from ifname SYSFS_NET_DIR + */ +static int +virNetDevGetSysfsFileValue(const char *ifname, + const char *fileName, + char **sysfsFileData) +{ + g_autofree char *sysfsFile =3D NULL; + + *sysfsFileData =3D NULL; + + if (virNetDevSysfsFile(&sysfsFile, ifname, fileName) < 0) + return -1; + + /* a failure to read just means the driver doesn't support + * , so set success now and ignore the return from + * virFileReadAllQuiet(). + */ + + ignore_value(virFileReadAllQuiet(sysfsFile, 1024, sysfsFileData)); + return 0; +} + /** * virNetDevGetPhysPortID: * @@ -1165,20 +1188,29 @@ int virNetDevGetPhysPortID(const char *ifname, char **physPortID) { - g_autofree char *physPortIDFile =3D NULL; - - *physPortID =3D NULL; - - if (virNetDevSysfsFile(&physPortIDFile, ifname, "phys_port_id") < 0) - return -1; + return virNetDevGetSysfsFileValue(ifname, "phys_port_id", physPortID); +} =20 - /* a failure to read just means the driver doesn't support - * phys_port_id, so set success now and ignore the return from - * virFileReadAllQuiet(). - */ =20 - ignore_value(virFileReadAllQuiet(physPortIDFile, 1024, physPortID)); - return 0; +/** + * virNetDevGetPhysPortName: + * + * @ifname: name of a netdev + * + * @physPortName: pointer to char* that will receive @ifname's + * phys_port_name from sysfs (null terminated + * string). Could be NULL if @ifname's net driver doesn't + * support phys_port_name (most netdev drivers + * don't). Caller is responsible for freeing the string + * when finished. + * + * Returns 0 on success or -1 on failure. + */ +int +virNetDevGetPhysPortName(const char *ifname, + char **physPortName) +{ + return virNetDevGetSysfsFileValue(ifname, "phys_port_name", physPortNa= me); } =20 =20 @@ -1231,7 +1263,7 @@ virNetDevGetVirtualFunctions(const char *pfname, } =20 if (virPCIGetNetName(pci_sysfs_device_link, 0, - pfPhysPortID, &((*vfname)[i])) < 0) { + pfPhysPortID, NULL, &((*vfname)[i])) < 0) { goto cleanup; } =20 @@ -1326,7 +1358,8 @@ virNetDevGetPhysicalFunction(const char *ifname, char= **pfname) return -1; =20 if (virPCIGetNetName(physfn_sysfs_path, 0, - vfPhysPortID, pfname) < 0) { + vfPhysPortID, + VIR_PF_PHYS_PORT_NAME_REGEX, pfname) < 0) { return -1; } =20 @@ -1389,7 +1422,7 @@ virNetDevPFGetVF(const char *pfname, int vf, char **v= fname) * isn't bound to a netdev driver, it won't have a netdev name, * and vfname will be NULL). */ - return virPCIGetNetName(virtfnSysfsPath, 0, pfPhysPortID, vfname); + return virPCIGetNetName(virtfnSysfsPath, 0, pfPhysPortID, NULL, vfname= ); } =20 =20 @@ -1433,6 +1466,17 @@ virNetDevGetPhysPortID(const char *ifname G_GNUC_UNU= SED, return 0; } =20 +int +virNetDevGetPhysPortName(const char *ifname G_GNUC_UNUSED, + char **physPortName) +{ + /* this actually should never be called, and is just here to + * satisfy the linker. + */ + *physPortName =3D NULL; + return 0; +} + int virNetDevGetVirtualFunctions(const char *pfname G_GNUC_UNUSED, char ***vfname G_GNUC_UNUSED, diff --git a/src/util/virnetdev.h b/src/util/virnetdev.h index f016012718..e9349e7f59 100644 --- a/src/util/virnetdev.h +++ b/src/util/virnetdev.h @@ -250,6 +250,10 @@ int virNetDevGetPhysPortID(const char *ifname, char **physPortID) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; +int virNetDevGetPhysPortName(const char *ifname, + char **physPortName) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) + G_GNUC_WARN_UNUSED_RESULT; =20 int virNetDevGetVirtualFunctions(const char *pfname, char ***vfname, --=20 2.30.0