From patchwork Mon Oct 5 15:26:08 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chas Williams <3chas3@gmail.com> X-Patchwork-Id: 7424 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 575FE91C8; Mon, 5 Oct 2015 17:26:18 +0200 (CEST) Received: from mail-qk0-f180.google.com (mail-qk0-f180.google.com [209.85.220.180]) by dpdk.org (Postfix) with ESMTP id 95FC791B7 for ; Mon, 5 Oct 2015 17:26:16 +0200 (CEST) Received: by qkas79 with SMTP id s79so70055942qka.0 for ; Mon, 05 Oct 2015 08:26:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ssBHsXAgeVTF6In3QjIOjEhIDvAGuaBmVFIdNs9GtQA=; b=H13Wh3ihJAq1dGdx71s01T8obhdy4kTWYfmHJixgd3gxKRfNdbxQl8bxo8vorxqRq2 oJxRj5vSaTMqBMSTIU9WC2Xu4xsM8AAVzKjKcoM2o6bGR3yWKeRu4ELoVjVIOApNw6h4 Mmw8LoOg8p4MjHwBE+IVJzT8GnrlFLPT/Tjz19qB5T8tx6gKu5jw61IDBclTVDh2lbxF J2vXdCCALqIvfW0z7XUG+O46GcqYzmy5cA1e3a5Ocyybe78bUPPoHOvcMtDOpE/yHavc NrFaOT8uySe2vw88gR2Fls2wiGNrtxAELEkw4WdLAIjOhfvJduN3T/ct3ybMAo1WQ5Wh khuQ== X-Received: by 10.55.214.80 with SMTP id t77mr11054268qki.101.1444058775657; Mon, 05 Oct 2015 08:26:15 -0700 (PDT) Received: from foobar.home (pool-71-163-182-126.washdc.fios.verizon.net. [71.163.182.126]) by smtp.gmail.com with ESMTPSA id z2sm11584409qkz.20.2015.10.05.08.26.14 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 05 Oct 2015 08:26:15 -0700 (PDT) From: Chas Williams <3chas3@gmail.com> To: dev@dpdk.org Date: Mon, 5 Oct 2015 11:26:08 -0400 Message-Id: <1444058768-9208-1-git-send-email-3chas3@gmail.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1443798007-20122-1-git-send-email-3chas3@gmail.com> References: <1443798007-20122-1-git-send-email-3chas3@gmail.com> Subject: [dpdk-dev] [PATCH v2] devargs: add blacklisting by linux interface name X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" If a system is using deterministic interface names, it may be easier in some cases to use the interface name to blacklist an interface. Signed-off-by: Chas Williams <3chas3@gmail.com> --- app/test/test_devargs.c | 2 ++ lib/librte_eal/common/eal_common_devargs.c | 9 +++++++-- lib/librte_eal/common/eal_common_options.c | 2 +- lib/librte_eal/common/eal_common_pci.c | 10 ++++++++-- lib/librte_eal/common/include/rte_devargs.h | 2 ++ lib/librte_eal/common/include/rte_pci.h | 1 + lib/librte_eal/linuxapp/eal/eal_pci.c | 15 +++++++++++++++ 7 files changed, 36 insertions(+), 5 deletions(-) diff --git a/app/test/test_devargs.c b/app/test/test_devargs.c index f7fc59c..27855ff 100644 --- a/app/test/test_devargs.c +++ b/app/test/test_devargs.c @@ -73,6 +73,8 @@ test_devargs(void) goto fail; if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_PCI, "0000:01:00.1") < 0) goto fail; + if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_PCI, "eth0") < 0) + goto fail; if (rte_eal_devargs_type_count(RTE_DEVTYPE_WHITELISTED_PCI) != 2) goto fail; if (rte_eal_devargs_type_count(RTE_DEVTYPE_BLACKLISTED_PCI) != 2) diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c index ec56165..1fb8bad 100644 --- a/lib/librte_eal/common/eal_common_devargs.c +++ b/lib/librte_eal/common/eal_common_devargs.c @@ -101,8 +101,13 @@ rte_eal_devargs_add(enum rte_devtype devtype, const char *devargs_str) case RTE_DEVTYPE_BLACKLISTED_PCI: /* try to parse pci identifier */ if (eal_parse_pci_BDF(buf, &devargs->pci.addr) != 0 && - eal_parse_pci_DomBDF(buf, &devargs->pci.addr) != 0) - goto fail; + eal_parse_pci_DomBDF(buf, &devargs->pci.addr) != 0) { + /* save as interface name instead */ + ret = snprintf(devargs->pci.name, + sizeof(devargs->pci.name), "%s", buf); + if (ret < 0 || ret >= (int)sizeof(devargs->pci.name)) + goto fail; + } break; case RTE_DEVTYPE_VIRTUAL: diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 1f459ac..6920088 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -889,7 +889,7 @@ eal_common_usage(void) " -r RANKS Force number of memory ranks (don't detect)\n" " -b, --"OPT_PCI_BLACKLIST" Add a PCI device in black list.\n" " Prevent EAL from using this PCI device. The argument\n" - " format is .\n" + " format is or .\n" " -w, --"OPT_PCI_WHITELIST" Add a PCI device in white list.\n" " Only use the specified PCI devices. The argument format\n" " is <[domain:]bus:devid.func>. This option can be present\n" diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c index dcfe947..288c8bd 100644 --- a/lib/librte_eal/common/eal_common_pci.c +++ b/lib/librte_eal/common/eal_common_pci.c @@ -93,8 +93,14 @@ static struct rte_devargs *pci_devargs_lookup(struct rte_pci_device *dev) if (devargs->type != RTE_DEVTYPE_BLACKLISTED_PCI && devargs->type != RTE_DEVTYPE_WHITELISTED_PCI) continue; - if (!rte_eal_compare_pci_addr(&dev->addr, &devargs->pci.addr)) - return devargs; + + if (devargs->pci.name[0] == '\0') { + if (!rte_eal_compare_pci_addr(&dev->addr, &devargs->pci.addr)) + return devargs; + } else { + if (strcmp(dev->name, devargs->pci.name) == 0) + return devargs; + } } return NULL; } diff --git a/lib/librte_eal/common/include/rte_devargs.h b/lib/librte_eal/common/include/rte_devargs.h index 7084ae2..bc436ec 100644 --- a/lib/librte_eal/common/include/rte_devargs.h +++ b/lib/librte_eal/common/include/rte_devargs.h @@ -81,6 +81,8 @@ struct rte_devargs { struct { /** PCI location. */ struct rte_pci_addr addr; + /** Interface name. */ + char name[32]; } pci; /** Used if type is RTE_DEVTYPE_VIRTUAL. */ struct { diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h index 83e3c28..852c149 100644 --- a/lib/librte_eal/common/include/rte_pci.h +++ b/lib/librte_eal/common/include/rte_pci.h @@ -161,6 +161,7 @@ struct rte_pci_device { struct rte_pci_resource mem_resource[PCI_MAX_RESOURCE]; /**< PCI Memory Resource */ struct rte_intr_handle intr_handle; /**< Interrupt handle */ struct rte_pci_driver *driver; /**< Associated driver */ + char name[32]; /**< Interface name (if any) */ uint16_t max_vfs; /**< sriov enable if not zero */ int numa_node; /**< NUMA node connection */ struct rte_devargs *devargs; /**< Device user arguments */ diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c index bc5b5be..befb71f 100644 --- a/lib/librte_eal/linuxapp/eal/eal_pci.c +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c @@ -260,6 +260,8 @@ pci_scan_one(const char *dirname, uint16_t domain, uint8_t bus, unsigned long tmp; struct rte_pci_device *dev; char driver[PATH_MAX]; + struct dirent *e; + DIR *dir; int ret; dev = malloc(sizeof(*dev)); @@ -352,6 +354,19 @@ pci_scan_one(const char *dirname, uint16_t domain, uint8_t bus, return -1; } + /* get network interface name */ + snprintf(filename, sizeof(filename), "%s/net", dirname); + dir = opendir(filename); + if (dir) { + while ((e = readdir(dir)) != NULL) { + if (e->d_name[0] == '.') + continue; + + strncpy(dev->name, e->d_name, sizeof(dev->name)); + } + closedir(dir); + } + if (!ret) { if (!strcmp(driver, "vfio-pci")) dev->kdrv = RTE_KDRV_VFIO;