From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00069.outbound.protection.outlook.com [40.107.0.69]) by dpdk.org (Postfix) with ESMTP id 6FAB51BA0E; Tue, 10 Apr 2018 15:32:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=3qRAEaUc8ca557hbEBHSm8ZPSTWvJnUmAQR774ir91o=; b=wPCA8LPugtiIShIPa7fby5OkPBNNoIouc9EELbpTqGBsk81AgUceD57yK5QBJASuk+s6ruLT1/NPQMdcJyiFC58gTrCvp7PNBaVHlPnriz2RhjzjnpgVAktNTB9UgNp+CQPbs9ZcJ7zHzGfA0cbImCK7ksEZrV0SmqmEekA1+yQ= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=matan@mellanox.com; Received: from mellanox.com (37.142.13.130) by HE1PR0501MB2668.eurprd05.prod.outlook.com (2603:10a6:3:cb::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.653.12; Tue, 10 Apr 2018 13:32:30 +0000 From: Matan Azrad To: dev@dpdk.org Cc: Ferruh Yigit , stable@dpdk.org Date: Tue, 10 Apr 2018 13:32:08 +0000 Message-Id: <1523367128-32317-4-git-send-email-matan@mellanox.com> X-Mailer: git-send-email 1.9.5 In-Reply-To: <1523367128-32317-1-git-send-email-matan@mellanox.com> References: <1523367128-32317-1-git-send-email-matan@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: VI1PR02CA0072.eurprd02.prod.outlook.com (2603:10a6:802:14::43) To HE1PR0501MB2668.eurprd05.prod.outlook.com (2603:10a6:3:cb::22) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 57ba3f9b-55f2-41e5-352d-08d59ee7828a X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:HE1PR0501MB2668; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2668; 3:0UnfNml3oOX+ZHEbNTSGAYSw/M0J+TjK7iifAMn90P+PP6W1iS1CxwH4qJSsNH2CBkD4GADHqnQD2kBR9Sh/gbXeOAW1M8o1fntuFSkNcn5r4dY/1YinyWPpYgzM4vBHP6cyWJVPvgee8rIg4leIzeTI+wX071lP7F3whk3861HxV0GUpwxBGc7+Xs79ZPiUX8u5CFp6pDbDkuWjfI2ganbWLzaTNRbC6C/BISSi/9udGnixyT2sLDy2RTWIzn7d; 25:/kiKmkeYLOipJfNpmjfwlV3z5Lk/hf9nTKf6C+TQcDig+qt6V3YACoKEZ07wfMmEjFTe79mpc7Pvw2ngombAHOpPEi4rn/JdfKUSe3leiFR5/E7BjPS04Jp3lgzML1A88LlQbXGYNwFM1zWkltsZBEdnLeIS5yHDMLxrtrKBpXRQYAfADrKPLpI2iD7xwz0GM5F2Aj1fZYgEvqvfg/BWQSye/n1a1HpiCLatDUscn/JqTELWlRuaTyfElJdczRhj9MqkV6f60Qt7HYLws1dzioR0JonP6dBkH8u6CzSwZIgI2ZRNI+D6nzHfZqdGNRc0kEA+dOTL7RsAeAh67CIDbA==; 31:QMkc/dPFNEwCNq7j6IWFFtqQLAUf0arhXghnjV8SwseETYvdzolHA1f+qtFT5Pd7sHkfkdIvzhvMu/9seyy3nBgBfq2a5QAM86UhT0cTtWuPYTHtDAhc6nO2xcI4ZDmyZjn3jNyVofG/JVXPCDSYEzSCWGwyYsO+lpTWSwFEXwp2sK1QlYRmIc9qm2PRblDQpm/0CGK5JNY11ferQjP0mQa7vMGjNT7+RVD4l6Dmt54= X-MS-TrafficTypeDiagnostic: HE1PR0501MB2668: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2668; 20:L2d4lu5VyONhH6yQCdptsAkisRt9cvfnXI1oe/SEFCRgskstc2VHVn4TVvU+opXExz9HKXW2Y/VTy5QpzSj5nyaxxttZC9CPTHwsAn2l4K2lbr6t9atbF/9Wemkq46e8AxdzWEFuoQFkZOlx3t/NMpiQkPvlkljqJtr4+LGfRhYp24cg/ilduFQpvZDj7p42qex/p3GV8rvq+nAbfaOXffGpSUJqnw6yCfYTX5FE4kwJgPb1ZiIUuELrP4DxjSkajVihmDQA/b1t/zgm92c7tGc81Pksh6JBTX3bHD4HtejdMhqxmrTpqrMCu+AuzmUOBvUjCMteWob9g2m+GwlEyi7BkbVyyzmZr9dElU/cH0xDnlsBKL/CqisfHSAyfpDxbib4xI6gtICg3VObOgyy684MFt5yeYAcNhp4lvyGyUK8UVAzCOccqTDk1AT3fzZjBwPSPciwVaQS4qmDs92MO+0YcRqVLgErXBfkd3zztG5pEwxLd6dbMFeBg/Y4Sdn+; 4:8aQnxSI047E/G8gUT37nHbRXyw7A7Pgz/RJTzBYXhtEPO+hFR1wuaERjZQpvef+mjjBDOV2km/2ij0S2Tw/AARFHo2qWGE38pGu4VQPxi9ua5cRmH91UaX3B0emzWh5+y+sytSpWF5otlTNdRJcV5fl32lD2YcOOfw3uUX5Lw2jbcTm5DmUqVy1wq57PvcduK8vAMfWMRP3d/DNdUJpBGcTbsmgXqBeK/e6seaIITK0Pf/1OAb7dG5AAu69gUJLdoWIE2hZSx8hjsYXHt9X4dQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3231221)(944501327)(52105095)(3002001)(10201501046)(6055026)(6041310)(20161123560045)(20161123564045)(20161123558120)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:HE1PR0501MB2668; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0501MB2668; X-Forefront-PRVS: 0638FD5066 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(376002)(346002)(396003)(39860400002)(39380400002)(189003)(199004)(33026002)(316002)(47776003)(3846002)(5660300001)(6116002)(4326008)(48376002)(16586007)(21086003)(50466002)(105586002)(2351001)(86362001)(486006)(476003)(25786009)(2361001)(106356001)(55016002)(7696005)(68736007)(11346002)(52116002)(6916009)(2616005)(446003)(956004)(50226002)(16526019)(186003)(7736002)(2906002)(76176011)(51416003)(97736004)(6666003)(36756003)(26005)(478600001)(53936002)(59450400001)(81166006)(305945005)(8676002)(81156014)(386003)(66066001)(8936002)(69596002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0501MB2668; H:mellanox.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0501MB2668; 23:0/jHauRtTsdD6mL1mLcfm3LDZBVq4afJ/hHOWtG?= =?us-ascii?Q?VfhrmlQSqBcKiXuxX21idhfAtbcHXjFxrV6LHC4mjUr4kI2y3YA4RPanx3h7?= =?us-ascii?Q?RdVzWm3l1/9J4QB1hXwbY7H6FcUL+gJjTrbnHHrRnDOj9e1L4G3ICWoZQgd1?= =?us-ascii?Q?37uK1rN9fvVM76wMyZNgr6+9WlR6SwYlWBgxGRRqDr3Va0A/xj6tPNyg6oWX?= =?us-ascii?Q?09mulUzQNDrjd6xqaSZZ1lZHob/RUCLUWusJKTuwIjl5zUcIu4m0WOwZfwbp?= =?us-ascii?Q?x0Hl/iFeE9Oz6MXEUdDcKW1/kz8Te4Rm4633fQ55kWBGeOeqGzLMIEK7sYsF?= =?us-ascii?Q?xNS4ZvssUWQS9fnMb9US8zkuWNar8W7hwAA4gqNpzKrmq/qDFlOuWZsxn5cI?= =?us-ascii?Q?knIQdRrWVihFInFnqnYiFZuArQoZcoNy8XnmLJLGomDhwwO+A9pFMoayeP/0?= =?us-ascii?Q?4v4q2PD+sP40xymkaATceEThmovdYPmPzjqA12lSmJ3R4SI8f+jN1iV7uA2e?= =?us-ascii?Q?ksTwFRt6cHLrTe8DeOeuIUH9CGHIlGOKHGYIoqeBHm3/3JJYEhnr05y2DcGJ?= =?us-ascii?Q?Hppa4N5fTFEh1lFoo0c4XKRzsmANGZwWfUjnQwn7nqRfjxeUJCLoHbNk3ZnT?= =?us-ascii?Q?3XUng0U9pIglU/PRsDdqnhSmoX1R2yYWdUgGxWwJaER1cvJWWSTbF3G4EDxI?= =?us-ascii?Q?RIWimByLXEG19tkH897Z8ELAmXmeYANZ5wnKNhUIYxWzYdrA1QvLJCFNdtBx?= =?us-ascii?Q?DfPugWd0cPfpnkaRsqx925UIsBSxhZp27g8l4naJBCdyGCse0Mj71HrpGGJ5?= =?us-ascii?Q?a+FXLRMRcWkdXMRtdO3DmY7LhGcieUb4SP5O5CqIsJ36e/f7u59FNMBxP5Sd?= =?us-ascii?Q?w2AWRbEUPXrTAuuTg0PuTTD9qXFUiacJdI4a23h42z5P7un89Gm6uVFBWMjC?= =?us-ascii?Q?OP1JlKIcXK6EZAE6uauzJ/F/ftkk6/qiRS4/IwN5VA339MFLlAiHUEZA/YNA?= =?us-ascii?Q?q/C98I+KwpFIK/P5rdoq6KLXWIlPt5xJZmR3P5R9A3RbUzVXoV8+Vi6EOD3B?= =?us-ascii?Q?J0vTzNw8kvDowdk/UtBVALR5aewPdG88N/paLa4GczunC5zDCbbc7FhvgUxR?= =?us-ascii?Q?IlYpAel23Pv70lgphN5pujqVLlGFqeRgfO8tb1RRIlZcl7suqefCDZ9BCAFp?= =?us-ascii?Q?SYDPJXxFxuPhRC8d+TyOzq2aQzhLMI7JejlHbVszOpoplI5o8jnFbl9nmPuw?= =?us-ascii?Q?gFMVsSuv7iL0v+HUVWJbWqjA3P0jMswc+nUDIQ/75mh4XSSqY7t8f6cOPnKO?= =?us-ascii?Q?HXg=3D=3D?= X-Microsoft-Antispam-Message-Info: YnXZAfs89DMEKAsAjGFfBJ/tpt91poFZHVXZY9CQgUo5lCC5jedhpDaZJhfMrZlLhHxDCXxQtV5JVEAU+eROTq470Bb7gdKK0WwrVmf83tTpwNKC2R4wmrrQxVjQP8XwXmwW0rG+ZEIbAjXbnTFXo1DFsDXPrb3XwhvzqjCvb4gdXMM6elrjOdVLOrug1LLD X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2668; 6:seij6OwirkQyaQQyqTiUHx6PZT+vejkhyewbmyDwn/LlOg0ANnVtQ7fGkoYgFycFV4a/8TE+QfpL1eWRMYA5mbDQvjCNgklu2nydxp4CH0FB5YqfJIZ+jiO4dAbxY48EIcdFWITDMlnex4vOSRSnroxsORgnmPBVq2WrtvaYCmHBvWZCNsrlo8d4A93TYwxUIQMVen9S4nmaLN8RZ8v3Qcrd32GfAJY1mhxXgWcjEzMZvoKauZL53ZymHNT7JRL8CeFsQVQ1rMJ7PK1V5aTSrTHPhsonOVM83brGwnwo0MaJ9jJMd6OUevNGGtnTvyyLTdoSVbfvYEQ0DjSUbu/38WiSyKXEENK0VysfC7lt9htjN4ONsZINUhwqBsMOswrhIL7aFbBm2o2frLH1UByqfbgbJxdhfibt5gzSODhxVNxyX/qhN958xYz1QQYjZGaX8zsCoMA2SlHqxdESq2quHA==; 5:010G6e7Vuo3Ma9+dwipLI78wGAJtvnQ4q2Yqds+XaVKlDjHyzLDfuucSDiH4UThonyHrh4TNoNA/vhCjw8WljmJlet3wL4HgTx4e8f+LgjUCl4eOOOQ9hkWiZFvB4JLq44Obp+n/hqq+btN7rtYfyIYqmGqNRLpg/oXKNCYruls=; 24:CDlcQR+AMNHnC3JIPV2u5hkcfvXX8CpxUQPbctiOGpnAaeOvK9bFcvoZRZYOBousrAGcUxOIfEgUq0mf445yWLaHpwcULWedifp5VsmTR9g= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2668; 7:T7tiY9dssZtx9I0ZKys4ohcZqPdLIQQ4+sEkQ7Wmjzl2nqOots29/CgY3r/KRWhmoyB1+8LdxkBU9QiEU63OVdKTl+iFpQtWNido/5Ju3DwOqRdrBCp2/tV90nFCj8FXZ4XxAmz3VPoN4DBRh6ZGXSr5bX8dDIhUBZPUDkW8TtZInRR+awyDSaQiMtY3WcM1ZXOrYO68ac8aDVpqnlgQdSQCurW0WcEYLPrLN7S4LxnWHz7xJeBTepbNri5pkcwi X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Apr 2018 13:32:30.0179 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 57ba3f9b-55f2-41e5-352d-08d59ee7828a X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0501MB2668 Subject: [dpdk-stable] [PATCH 3/3] net/vdev_netvsc: prefer netvsc devices in scan X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Apr 2018 13:32:32 -0000 There is an option to run a non-netvsc device as a netvsc device only when the "force" parameter is set to 1 in the EAL command line. Consequently, more than one device may be found to be matching the "mac" parameter specifying the device. Prefer netvsc devices to be scanned before any non-netvsc device, even when the "force" parameter is set. Cc: stable@dpdk.org Signed-off-by: Matan Azrad --- drivers/net/vdev_netvsc/vdev_netvsc.c | 122 ++++++++++++++++++---------------- 1 file changed, 65 insertions(+), 57 deletions(-) diff --git a/drivers/net/vdev_netvsc/vdev_netvsc.c b/drivers/net/vdev_netvsc/vdev_netvsc.c index 018ffae..75aec89 100644 --- a/drivers/net/vdev_netvsc/vdev_netvsc.c +++ b/drivers/net/vdev_netvsc/vdev_netvsc.c @@ -98,6 +98,43 @@ static LIST_HEAD(, vdev_netvsc_ctx) vdev_netvsc_ctx_list = } /** + * Determine if a network interface is NetVSC. + * + * @param[in] iface + * Pointer to netdevice description structure (name and index). + * + * @return + * A nonzero value when interface is detected as NetVSC. In case of error, + * rte_errno is updated and 0 returned. + */ +static int +vdev_netvsc_iface_is_netvsc(const struct if_nameindex *iface) +{ + static const char temp[] = "/sys/class/net/%s/device/class_id"; + char path[sizeof(temp) + IF_NAMESIZE]; + FILE *f; + int ret; + int len = 0; + + ret = snprintf(path, sizeof(path), temp, iface->if_name); + if (ret == -1 || (size_t)ret >= sizeof(path)) { + rte_errno = ENOBUFS; + return 0; + } + f = fopen(path, "r"); + if (!f) { + rte_errno = errno; + return 0; + } + ret = fscanf(f, NETVSC_CLASS_ID "%n", &len); + if (ret == EOF) + rte_errno = errno; + ret = len == (int)strlen(NETVSC_CLASS_ID); + fclose(f); + return ret; +} + +/** * Iterate over system network interfaces. * * This function runs a given callback function for each netdevice found on @@ -106,6 +143,8 @@ static LIST_HEAD(, vdev_netvsc_ctx) vdev_netvsc_ctx_list = * @param func * Callback function pointer. List traversal is aborted when this function * returns a nonzero value. + * @param is_netvsc + * Indicates the device type to iterate - netvsc or non-netvsc. * @param ... * Variable parameter list passed as @p va_list to @p func. * @@ -117,7 +156,7 @@ static LIST_HEAD(, vdev_netvsc_ctx) vdev_netvsc_ctx_list = static int vdev_netvsc_foreach_iface(int (*func)(const struct if_nameindex *iface, const struct ether_addr *eth_addr, - va_list ap), ...) + va_list ap), int is_netvsc, ...) { struct if_nameindex *iface = if_nameindex(); int s = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); @@ -135,10 +174,14 @@ static LIST_HEAD(, vdev_netvsc_ctx) vdev_netvsc_ctx_list = goto error; } for (i = 0; iface[i].if_name; ++i) { + int is_netvsc_ret; struct ifreq req; struct ether_addr eth_addr; va_list ap; + is_netvsc_ret = vdev_netvsc_iface_is_netvsc(&iface[i]) ? 1 : 0; + if (is_netvsc ^ is_netvsc_ret) + continue; strncpy(req.ifr_name, iface[i].if_name, sizeof(req.ifr_name)); if (ioctl(s, SIOCGIFHWADDR, &req) == -1) { DRV_LOG(WARNING, "cannot retrieve information about" @@ -153,7 +196,7 @@ static LIST_HEAD(, vdev_netvsc_ctx) vdev_netvsc_ctx_list = } memcpy(eth_addr.addr_bytes, req.ifr_hwaddr.sa_data, RTE_DIM(eth_addr.addr_bytes)); - va_start(ap, func); + va_start(ap, is_netvsc); ret = func(&iface[i], ð_addr, ap); va_end(ap); if (ret) @@ -168,43 +211,6 @@ static LIST_HEAD(, vdev_netvsc_ctx) vdev_netvsc_ctx_list = } /** - * Determine if a network interface is NetVSC. - * - * @param[in] iface - * Pointer to netdevice description structure (name and index). - * - * @return - * A nonzero value when interface is detected as NetVSC. In case of error, - * rte_errno is updated and 0 returned. - */ -static int -vdev_netvsc_iface_is_netvsc(const struct if_nameindex *iface) -{ - static const char temp[] = "/sys/class/net/%s/device/class_id"; - char path[sizeof(temp) + IF_NAMESIZE]; - FILE *f; - int ret; - int len = 0; - - ret = snprintf(path, sizeof(path), temp, iface->if_name); - if (ret == -1 || (size_t)ret >= sizeof(path)) { - rte_errno = ENOBUFS; - return 0; - } - f = fopen(path, "r"); - if (!f) { - rte_errno = errno; - return 0; - } - ret = fscanf(f, NETVSC_CLASS_ID "%n", &len); - if (ret == EOF) - rte_errno = errno; - ret = len == (int)strlen(NETVSC_CLASS_ID); - fclose(f); - return ret; -} - -/** * Determine if a network interface has a route. * * @param[in] name @@ -379,8 +385,6 @@ static LIST_HEAD(, vdev_netvsc_ctx) vdev_netvsc_ctx_list = strncpy(ctx->if_name, iface->if_name, sizeof(ctx->if_name)); return 0; } - if (vdev_netvsc_iface_is_netvsc(iface)) - return 0; if (!is_same_ether_addr(eth_addr, &ctx->if_addr)) return 0; /* Look for associated PCI device. */ @@ -449,7 +453,8 @@ static LIST_HEAD(, vdev_netvsc_ctx) vdev_netvsc_ctx_list = int ret; LIST_FOREACH(ctx, &vdev_netvsc_ctx_list, entry) { - ret = vdev_netvsc_foreach_iface(vdev_netvsc_device_probe, ctx); + ret = vdev_netvsc_foreach_iface(vdev_netvsc_device_probe, 0, + ctx); if (ret < 0) break; } @@ -505,7 +510,6 @@ static LIST_HEAD(, vdev_netvsc_ctx) vdev_netvsc_ctx_list = { const char *name = va_arg(ap, const char *); struct rte_kvargs *kvargs = va_arg(ap, struct rte_kvargs *); - int force = va_arg(ap, int); unsigned int specified = va_arg(ap, unsigned int); unsigned int *matched = va_arg(ap, unsigned int *); unsigned int i; @@ -559,13 +563,6 @@ static LIST_HEAD(, vdev_netvsc_ctx) vdev_netvsc_ctx_list = iface->if_name, iface->if_index); return 0; } - if (!vdev_netvsc_iface_is_netvsc(iface)) { - if (!specified || !force) - return 0; - DRV_LOG(WARNING, - "using non-NetVSC interface \"%s\" (index %u)", - iface->if_name, iface->if_index); - } /* Routed NetVSC should not be probed. */ if (vdev_netvsc_has_route(iface, AF_INET) || vdev_netvsc_has_route(iface, AF_INET6)) { @@ -632,7 +629,7 @@ static LIST_HEAD(, vdev_netvsc_ctx) vdev_netvsc_ctx_list = /* Request virtual device generation. */ DRV_LOG(DEBUG, "generating virtual device \"%s\" with arguments \"%s\"", ctx->devname, ctx->devargs); - vdev_netvsc_foreach_iface(vdev_netvsc_device_probe, ctx); + vdev_netvsc_foreach_iface(vdev_netvsc_device_probe, 0, ctx); ret = rte_eal_hotplug_add("vdev", ctx->devname, ctx->devargs); if (ret) goto error; @@ -709,14 +706,25 @@ static LIST_HEAD(, vdev_netvsc_ctx) vdev_netvsc_ctx_list = } rte_eal_alarm_cancel(vdev_netvsc_alarm, NULL); /* Gather interfaces. */ - ret = vdev_netvsc_foreach_iface(vdev_netvsc_netvsc_probe, name, kvargs, - force, specified, &matched); + ret = vdev_netvsc_foreach_iface(vdev_netvsc_netvsc_probe, 1, name, + kvargs, specified, &matched); if (ret < 0) goto error; - if (matched < specified) - DRV_LOG(WARNING, - "some of the specified parameters did not match" - " recognized network interfaces"); + if (specified && matched < specified) { + if (!force) { + DRV_LOG(ERR, "Cannot find the specified netvsc device"); + goto error; + } + /* Try to force probing on non-netvsc specified device. */ + if (vdev_netvsc_foreach_iface(vdev_netvsc_netvsc_probe, 0, name, + kvargs, specified, &matched) < 0) + goto error; + if (matched < specified) { + DRV_LOG(ERR, "Cannot find the specified device"); + goto error; + } + DRV_LOG(WARNING, "non-netvsc device was probed as netvsc"); + } ret = rte_eal_alarm_set(VDEV_NETVSC_PROBE_MS * 1000, vdev_netvsc_alarm, NULL); if (ret < 0) { -- 1.9.5