[dpdk-dev] [PATCH] net/tap: remove Linux version check
Pascal Mazon
pascal.mazon at 6wind.com
Mon Jul 10 15:33:22 CEST 2017
Hi Raslan,
Your patch looks ok at first glance. However, I couldn't test it as it
does not apply on a
fresh next-net branch. Can you send a v2 after rebase?
Thank you.
Pascal
On 07/10/2017 10:13 AM, Raslan Darawsheh wrote:
> Remove checks of Linux kernel version
> in order to support kernel with backported features.
>
> The expected behavior with a kernel that doesn't
> support flower and other bits is the following:
> -flow validate can return successfully.
> -flow create using the same rule fails.
>
> Using the "remote" feature without kernel flower doesn not fail silently.
> The TAP instance is not initialized if the requested parameters cannot be satisfied.
>
> it has been tested on an old kernel without required support:
>
> PMD: Kernel refused TC filter rule creation (2): No such file or directory
> PMD: tap0 failed to create implicit rules.
> PMD: Can't set up remote feature: No such file of directory(2)
> PMD: TAP Unable to initialize net_tap0
>
> Signed-off-by: Raslan Darawsheh <rasland at mellanox.com>
> ---
> drivers/net/tap/rte_eth_tap.c | 38 +-------------------------------------
> drivers/net/tap/rte_eth_tap.h | 2 --
> drivers/net/tap/tap_flow.c | 13 +------------
> 3 files changed, 2 insertions(+), 51 deletions(-)
>
> diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
> index e54758e..b9e3ee9 100644
> --- a/drivers/net/tap/rte_eth_tap.c
> +++ b/drivers/net/tap/rte_eth_tap.c
> @@ -77,9 +77,6 @@
> #define ETH_TAP_MAC_ARG "mac"
> #define ETH_TAP_MAC_FIXED "fixed"
>
> -#define FLOWER_KERNEL_VERSION KERNEL_VERSION(4, 2, 0)
> -#define FLOWER_VLAN_KERNEL_VERSION KERNEL_VERSION(4, 9, 0)
> -
> static struct rte_vdev_driver pmd_tap_drv;
>
> static const char *valid_arguments[] = {
> @@ -1162,24 +1159,6 @@ static const struct eth_dev_ops ops = {
> };
>
> static int
> -tap_kernel_support(struct pmd_internals *pmd)
> -{
> - struct utsname utsname;
> - int ver[3];
> -
> - if (uname(&utsname) == -1 ||
> - sscanf(utsname.release, "%d.%d.%d",
> - &ver[0], &ver[1], &ver[2]) != 3)
> - return 0;
> - if (KERNEL_VERSION(ver[0], ver[1], ver[2]) >= FLOWER_KERNEL_VERSION)
> - pmd->flower_support = 1;
> - if (KERNEL_VERSION(ver[0], ver[1], ver[2]) >=
> - FLOWER_VLAN_KERNEL_VERSION)
> - pmd->flower_vlan_support = 1;
> - return 1;
> -}
> -
> -static int
> eth_dev_tap_create(const char *name, char *tap_name, char *remote_iface,
> int fixed_mac_type)
> {
> @@ -1278,20 +1257,6 @@ eth_dev_tap_create(const char *name, char *tap_name, char *remote_iface,
> if (tap_ioctl(pmd, SIOCSIFHWADDR, &ifr, 0, LOCAL_ONLY) < 0)
> goto error_exit;
>
> - tap_kernel_support(pmd);
> - if (!pmd->flower_support) {
> - if (remote_iface[0]) {
> - RTE_LOG(ERR, PMD,
> - "%s: kernel does not support TC rules, required for remote feature.",
> - pmd->name);
> - goto error_exit;
> - } else {
> - RTE_LOG(INFO, PMD,
> - "%s: kernel too old for Flow API support.\n",
> - pmd->name);
> - return 0;
> - }
> - }
>
> LIST_INIT(&pmd->flows);
> LIST_INIT(&pmd->implicit_flows);
> @@ -1382,7 +1347,6 @@ eth_dev_tap_create(const char *name, char *tap_name, char *remote_iface,
> RTE_LOG(ERR, PMD, "Remote feature requires flow support.\n");
> goto error_exit;
> }
> - pmd->flower_support = 0;
> return 0;
>
> error_remote:
> @@ -1546,7 +1510,7 @@ rte_pmd_tap_remove(const char *name)
> return 0;
>
> internals = eth_dev->data->dev_private;
> - if (internals->flower_support && internals->nlsk_fd) {
> + if (internals->nlsk_fd) {
> tap_flow_flush(eth_dev, NULL);
> tap_flow_implicit_flush(internals, NULL);
> nl_final(internals->nlsk_fd);
> diff --git a/drivers/net/tap/rte_eth_tap.h b/drivers/net/tap/rte_eth_tap.h
> index 2f22b2d..55c0b3f 100644
> --- a/drivers/net/tap/rte_eth_tap.h
> +++ b/drivers/net/tap/rte_eth_tap.h
> @@ -88,8 +88,6 @@ struct pmd_internals {
> int ioctl_sock; /* socket for ioctl calls */
> int nlsk_fd; /* Netlink socket fd */
> int flow_isolate; /* 1 if flow isolation is enabled */
> - int flower_support; /* 1 if kernel supports, else 0 */
> - int flower_vlan_support; /* 1 if kernel supports, else 0 */
> LIST_HEAD(tap_flows, rte_flow) flows; /* rte_flow rules */
> /* implicit rte_flow rules set when a remote device is active */
> LIST_HEAD(tap_implicit_flows, rte_flow) implicit_flows;
> diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c
> index ebf4564..6ade186 100644
> --- a/drivers/net/tap/tap_flow.c
> +++ b/drivers/net/tap/tap_flow.c
> @@ -1042,16 +1042,13 @@ priv_flow_process(struct pmd_internals *pmd,
> if (err)
> goto exit_item_not_supported;
> if (flow && cur_item->convert) {
> - if (!pmd->flower_vlan_support &&
> - cur_item->convert == tap_flow_create_vlan)
> - goto exit_item_not_supported;
> err = cur_item->convert(items, &data);
> if (err)
> goto exit_item_not_supported;
> }
> }
> if (flow) {
> - if (pmd->flower_vlan_support && data.vlan) {
> + if (data.vlan) {
> nlattr_add16(&flow->msg.nh, TCA_FLOWER_KEY_ETH_TYPE,
> htons(ETH_P_8021Q));
> nlattr_add16(&flow->msg.nh,
> @@ -1401,10 +1398,6 @@ tap_flow_isolate(struct rte_eth_dev *dev,
> {
> struct pmd_internals *pmd = dev->data->dev_private;
>
> - if (!pmd->flower_support)
> - return -rte_flow_error_set(
> - error, ENOSYS, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
> - "rte_flow isolate requires TC flower kernel support");
> if (set)
> pmd->flow_isolate = 1;
> else
> @@ -1650,10 +1643,6 @@ tap_dev_filter_ctrl(struct rte_eth_dev *dev,
> enum rte_filter_op filter_op,
> void *arg)
> {
> - struct pmd_internals *pmd = dev->data->dev_private;
> -
> - if (!pmd->flower_support)
> - return -ENOTSUP;
> switch (filter_type) {
> case RTE_ETH_FILTER_GENERIC:
> if (filter_op != RTE_ETH_FILTER_GET)
More information about the dev
mailing list