From: Chas Williams <3chas3@gmail.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH] devargs: add blacklisting by linux interface name
Date: Fri, 2 Oct 2015 11:00:07 -0400 [thread overview]
Message-ID: <1443798007-20122-1-git-send-email-3chas3@gmail.com> (raw)
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 | 8 ++++++++
lib/librte_eal/common/eal_common_options.c | 10 ++++++++++
lib/librte_eal/common/eal_common_pci.c | 17 +++++++++++------
lib/librte_eal/common/eal_options.h | 2 ++
lib/librte_eal/common/include/rte_devargs.h | 5 +++++
lib/librte_eal/common/include/rte_pci.h | 1 +
lib/librte_eal/linuxapp/eal/eal_pci.c | 15 +++++++++++++++
8 files changed, 54 insertions(+), 6 deletions(-)
diff --git a/app/test/test_devargs.c b/app/test/test_devargs.c
index f7fc59c..c204c49 100644
--- a/app/test/test_devargs.c
+++ b/app/test/test_devargs.c
@@ -85,6 +85,8 @@ test_devargs(void)
goto fail;
if (rte_eal_devargs_type_count(RTE_DEVTYPE_VIRTUAL) != 2)
goto fail;
+ if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_NAME, "eth0") < 0)
+ goto fail;
free_devargs_list();
/* check virtual device with argument parsing */
diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c
index ec56165..cac651b 100644
--- a/lib/librte_eal/common/eal_common_devargs.c
+++ b/lib/librte_eal/common/eal_common_devargs.c
@@ -113,6 +113,14 @@ rte_eal_devargs_add(enum rte_devtype devtype, const char *devargs_str)
goto fail;
break;
+ case RTE_DEVTYPE_BLACKLISTED_NAME:
+ /* save interface name */
+ ret = snprintf(devargs->name.name,
+ sizeof(devargs->name.name), "%s", buf);
+ if (ret < 0 || ret >= (int)sizeof(devargs->name.name))
+ goto fail;
+
+ break;
}
free(buf);
diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c
index 1f459ac..c08126d 100644
--- a/lib/librte_eal/common/eal_common_options.c
+++ b/lib/librte_eal/common/eal_common_options.c
@@ -90,6 +90,7 @@ eal_long_options[] = {
{OPT_VFIO_INTR, 1, NULL, OPT_VFIO_INTR_NUM },
{OPT_VMWARE_TSC_MAP, 0, NULL, OPT_VMWARE_TSC_MAP_NUM },
{OPT_XEN_DOM0, 0, NULL, OPT_XEN_DOM0_NUM },
+ {OPT_BLACKLISTED_NAME, 1, NULL, OPT_BLACKLISTED_NAME_NUM },
{0, 0, NULL, 0 }
};
@@ -785,6 +786,13 @@ eal_parse_common_option(int opt, const char *optarg,
}
break;
+ case OPT_BLACKLISTED_NAME_NUM:
+ if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_NAME,
+ optarg) < 0) {
+ return -1;
+ }
+ break;
+
/* don't know what to do, leave this to caller */
default:
return 1;
@@ -898,6 +906,8 @@ eal_common_usage(void)
" --"OPT_VDEV" Add a virtual device.\n"
" The argument format is <driver><id>[,key=val,...]\n"
" (ex: --vdev=eth_pcap0,iface=eth2).\n"
+ " --"OPT_BLACKLISTED_NAME" Add a device name to the black list.\n"
+ " Prevent EAL from using this named interface.\n"
" --"OPT_VMWARE_TSC_MAP" Use VMware TSC map instead of native RDTSC\n"
" --"OPT_PROC_TYPE" Type of this process (primary|secondary|auto)\n"
" --"OPT_SYSLOG" Set syslog facility\n"
diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c
index dcfe947..41a7690 100644
--- a/lib/librte_eal/common/eal_common_pci.c
+++ b/lib/librte_eal/common/eal_common_pci.c
@@ -90,11 +90,15 @@ static struct rte_devargs *pci_devargs_lookup(struct rte_pci_device *dev)
struct rte_devargs *devargs;
TAILQ_FOREACH(devargs, &devargs_list, next) {
- 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->type == RTE_DEVTYPE_BLACKLISTED_PCI ||
+ devargs->type == RTE_DEVTYPE_WHITELISTED_PCI) {
+ if (!rte_eal_compare_pci_addr(&dev->addr, &devargs->pci.addr))
+ return devargs;
+ }
+ if (devargs->type == RTE_DEVTYPE_BLACKLISTED_NAME) {
+ if (strcmp(dev->name, devargs->name.name) == 0)
+ return devargs;
+ }
}
return NULL;
}
@@ -174,7 +178,8 @@ rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *d
/* no initialization when blacklisted, return without error */
if (dev->devargs != NULL &&
- dev->devargs->type == RTE_DEVTYPE_BLACKLISTED_PCI) {
+ (dev->devargs->type == RTE_DEVTYPE_BLACKLISTED_PCI ||
+ dev->devargs->type == RTE_DEVTYPE_BLACKLISTED_NAME)) {
RTE_LOG(DEBUG, EAL, " Device is blacklisted, not initializing\n");
return 1;
}
diff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h
index f6714d9..2aea553 100644
--- a/lib/librte_eal/common/eal_options.h
+++ b/lib/librte_eal/common/eal_options.h
@@ -45,6 +45,8 @@ enum {
/* first long only option value must be >= 256, so that we won't
* conflict with short options */
OPT_LONG_MIN_NUM = 256,
+#define OPT_BLACKLISTED_NAME "blacklisted-name"
+ OPT_BLACKLISTED_NAME_NUM,
#define OPT_BASE_VIRTADDR "base-virtaddr"
OPT_BASE_VIRTADDR_NUM,
#define OPT_CREATE_UIO_DEV "create-uio-dev"
diff --git a/lib/librte_eal/common/include/rte_devargs.h b/lib/librte_eal/common/include/rte_devargs.h
index 7084ae2..8531405 100644
--- a/lib/librte_eal/common/include/rte_devargs.h
+++ b/lib/librte_eal/common/include/rte_devargs.h
@@ -59,6 +59,7 @@ enum rte_devtype {
RTE_DEVTYPE_WHITELISTED_PCI,
RTE_DEVTYPE_BLACKLISTED_PCI,
RTE_DEVTYPE_VIRTUAL,
+ RTE_DEVTYPE_BLACKLISTED_NAME,
};
/**
@@ -87,6 +88,10 @@ struct rte_devargs {
/** Driver name. */
char drv_name[32];
} virtual;
+ struct {
+ /** Interface name. */
+ char name[32];
+ } name;
};
/** Arguments string as given by user or "" for no argument. */
char *args;
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..c417d01 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;
+
+ strcpy(dev->name, e->d_name);
+ }
+ closedir(dir);
+ }
+
if (!ret) {
if (!strcmp(driver, "vfio-pci"))
dev->kdrv = RTE_KDRV_VFIO;
--
2.1.0
next reply other threads:[~2015-10-02 15:00 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-02 15:00 Chas Williams [this message]
2015-10-02 15:18 ` Bruce Richardson
2015-10-02 16:38 ` Charles (Chas) Williams
2015-10-02 16:44 ` Richardson, Bruce
2015-10-02 18:29 ` Charles (Chas) Williams
2015-10-05 15:59 ` Charles (Chas) Williams
2015-10-05 15:26 ` [dpdk-dev] [PATCH v2] " Chas Williams
2015-10-06 7:35 ` Stephen Hemminger
2015-10-06 14:41 ` Charles (Chas) Williams
2015-10-13 12:49 ` Olivier MATZ
2015-10-14 13:41 ` Charles (Chas) Williams
2015-11-04 22:40 ` Thomas Monjalon
2015-11-05 16:39 ` Charles (Chas) Williams
2015-11-05 19:23 ` Stephen Hemminger
2015-11-10 18:51 ` Charles (Chas) Williams
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1443798007-20122-1-git-send-email-3chas3@gmail.com \
--to=3chas3@gmail.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).