From: John Daley Date: Wed, 17 May 2017 22:38:05 +0000 (-0700) Subject: net/enic: flow API skeleton X-Git-Tag: spdx-start~3157 X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=0f76668039a819628cc851b630a4e0bc339a5a9d net/enic: flow API skeleton Stub callbacks for the generic flow API and a new FLOW debug define. Signed-off-by: John Daley Reviewed-by: Nelson Escobar --- diff --git a/config/common_base b/config/common_base index c85876955a..b9435ba27f 100644 --- a/config/common_base +++ b/config/common_base @@ -254,6 +254,7 @@ CONFIG_RTE_LIBRTE_CXGBE_DEBUG_RX=n # CONFIG_RTE_LIBRTE_ENIC_PMD=y CONFIG_RTE_LIBRTE_ENIC_DEBUG=n +CONFIG_RTE_LIBRTE_ENIC_DEBUG_FLOW=n # # Compile burst-oriented Netronome NFP PMD driver diff --git a/drivers/net/enic/Makefile b/drivers/net/enic/Makefile index 2c7496dc52..db48ff2da8 100644 --- a/drivers/net/enic/Makefile +++ b/drivers/net/enic/Makefile @@ -56,6 +56,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_ENIC_PMD) += enic_main.c SRCS-$(CONFIG_RTE_LIBRTE_ENIC_PMD) += enic_rxtx.c SRCS-$(CONFIG_RTE_LIBRTE_ENIC_PMD) += enic_clsf.c SRCS-$(CONFIG_RTE_LIBRTE_ENIC_PMD) += enic_res.c +SRCS-$(CONFIG_RTE_LIBRTE_ENIC_PMD) += enic_flow.c SRCS-$(CONFIG_RTE_LIBRTE_ENIC_PMD) += base/vnic_cq.c SRCS-$(CONFIG_RTE_LIBRTE_ENIC_PMD) += base/vnic_wq.c SRCS-$(CONFIG_RTE_LIBRTE_ENIC_PMD) += base/vnic_dev.c diff --git a/drivers/net/enic/enic.h b/drivers/net/enic/enic.h index 2358a7f6fc..9647ca21f1 100644 --- a/drivers/net/enic/enic.h +++ b/drivers/net/enic/enic.h @@ -306,4 +306,5 @@ void copy_fltr_v1(struct filter_v2 *fltr, struct rte_eth_fdir_input *input, struct rte_eth_fdir_masks *masks); void copy_fltr_v2(struct filter_v2 *fltr, struct rte_eth_fdir_input *input, struct rte_eth_fdir_masks *masks); +extern const struct rte_flow_ops enic_flow_ops; #endif /* _ENIC_H_ */ diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c index 7d86a867c9..da8fec2d00 100644 --- a/drivers/net/enic/enic_ethdev.c +++ b/drivers/net/enic/enic_ethdev.c @@ -116,13 +116,25 @@ enicpmd_dev_filter_ctrl(struct rte_eth_dev *dev, enum rte_filter_op filter_op, void *arg) { - int ret = -EINVAL; + int ret = 0; + + ENICPMD_FUNC_TRACE(); - if (RTE_ETH_FILTER_FDIR == filter_type) + switch (filter_type) { + case RTE_ETH_FILTER_GENERIC: + if (filter_op != RTE_ETH_FILTER_GET) + return -EINVAL; + *(const void **)arg = &enic_flow_ops; + break; + case RTE_ETH_FILTER_FDIR: ret = enicpmd_fdir_ctrl_func(dev, filter_op, arg); - else + break; + default: dev_warning(enic, "Filter type (%d) not supported", filter_type); + ret = -EINVAL; + break; + } return ret; } diff --git a/drivers/net/enic/enic_flow.c b/drivers/net/enic/enic_flow.c new file mode 100644 index 0000000000..a5c6ebd0a8 --- /dev/null +++ b/drivers/net/enic/enic_flow.c @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2017, Cisco Systems, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "enic_compat.h" +#include "enic.h" +#include "vnic_dev.h" +#include "vnic_nic.h" + +#ifdef RTE_LIBRTE_ENIC_DEBUG_FLOW +#define FLOW_TRACE() \ + RTE_LOG(DEBUG, PMD, "%s()\n", __func__) +#define FLOW_LOG(level, fmt, args...) \ + RTE_LOG(level, PMD, fmt, ## args) +#else +#define FLOW_TRACE() do { } while (0) +#define FLOW_LOG(level, fmt, args...) do { } while (0) +#endif + +/* + * The following functions are callbacks for Generic flow API. + */ + +/** + * Validate a flow supported by the NIC. + * + * @see rte_flow_validate() + * @see rte_flow_ops + */ +static int +enic_flow_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attrs, + const struct rte_flow_item pattern[], + const struct rte_flow_action actions[], + struct rte_flow_error *error) +{ + (void)dev; + (void)attrs; + (void)pattern; + (void)actions; + (void)error; + + FLOW_TRACE(); + + return 0; +} + +/** + * Create a flow supported by the NIC. + * + * @see rte_flow_create() + * @see rte_flow_ops + */ +static struct rte_flow * +enic_flow_create(struct rte_eth_dev *dev, + const struct rte_flow_attr *attrs, + const struct rte_flow_item pattern[], + const struct rte_flow_action actions[], + struct rte_flow_error *error) +{ + (void)dev; + (void)attrs; + (void)pattern; + (void)actions; + (void)error; + + FLOW_TRACE(); + + return NULL; +} + +/** + * Destroy a flow supported by the NIC. + * + * @see rte_flow_destroy() + * @see rte_flow_ops + */ +static int +enic_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow, + __rte_unused struct rte_flow_error *error) +{ + (void)dev; + (void)flow; + + FLOW_TRACE(); + + return 0; +} + +/** + * Flush all flows on the device. + * + * @see rte_flow_flush() + * @see rte_flow_ops + */ +static int +enic_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *error) +{ + (void)dev; + (void)error; + + FLOW_TRACE(); + + return 0; +} + +/** + * Flow callback registration. + * + * @see rte_flow_ops + */ +const struct rte_flow_ops enic_flow_ops = { + .validate = enic_flow_validate, + .create = enic_flow_create, + .destroy = enic_flow_destroy, + .flush = enic_flow_flush, +};