diff options
Diffstat (limited to 'src/dpdk_lib18/librte_port')
-rwxr-xr-x | src/dpdk_lib18/librte_port/Makefile | 77 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_port/rte_port.h | 213 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_port/rte_port_ethdev.c | 305 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_port/rte_port_ethdev.h | 86 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_port/rte_port_frag.c | 241 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_port/rte_port_frag.h | 94 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_port/rte_port_ras.c | 252 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_port/rte_port_ras.h | 83 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_port/rte_port_ring.c | 237 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_port/rte_port_ring.h | 82 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_port/rte_port_sched.c | 239 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_port/rte_port_sched.h | 82 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_port/rte_port_source_sink.c | 158 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_port/rte_port_source_sink.h | 70 |
14 files changed, 0 insertions, 2219 deletions
diff --git a/src/dpdk_lib18/librte_port/Makefile b/src/dpdk_lib18/librte_port/Makefile deleted file mode 100755 index 82b51929..00000000 --- a/src/dpdk_lib18/librte_port/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -# BSD LICENSE -# -# Copyright(c) 2010-2014 Intel Corporation. All rights reserved. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * 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. -# * Neither the name of Intel Corporation nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# 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 -# OWNER 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 $(RTE_SDK)/mk/rte.vars.mk - -# -# library name -# -LIB = librte_port.a - -CFLAGS += -O3 -CFLAGS += $(WERROR_FLAGS) - -# -# all source are stored in SRCS-y -# -SRCS-$(CONFIG_RTE_LIBRTE_PORT) += rte_port_ethdev.c -SRCS-$(CONFIG_RTE_LIBRTE_PORT) += rte_port_ring.c -ifeq ($(CONFIG_RTE_LIBRTE_IP_FRAG),y) -ifeq ($(CONFIG_RTE_MBUF_REFCNT),y) -SRCS-$(CONFIG_RTE_LIBRTE_PORT) += rte_port_frag.c -endif -SRCS-$(CONFIG_RTE_LIBRTE_PORT) += rte_port_ras.c -endif -SRCS-$(CONFIG_RTE_LIBRTE_PORT) += rte_port_sched.c -SRCS-$(CONFIG_RTE_LIBRTE_PORT) += rte_port_source_sink.c - -# install includes -SYMLINK-$(CONFIG_RTE_LIBRTE_PORT)-include += rte_port.h -SYMLINK-$(CONFIG_RTE_LIBRTE_PORT)-include += rte_port_ethdev.h -SYMLINK-$(CONFIG_RTE_LIBRTE_PORT)-include += rte_port_ring.h -ifeq ($(CONFIG_RTE_LIBRTE_IP_FRAG),y) -ifeq ($(CONFIG_RTE_MBUF_REFCNT),y) -SYMLINK-$(CONFIG_RTE_LIBRTE_PORT)-include += rte_port_frag.h -endif -SYMLINK-$(CONFIG_RTE_LIBRTE_PORT)-include += rte_port_ras.h -endif -SYMLINK-$(CONFIG_RTE_LIBRTE_PORT)-include += rte_port_sched.h -SYMLINK-$(CONFIG_RTE_LIBRTE_PORT)-include += rte_port_source_sink.h - -# this lib depends upon: -DEPDIRS-$(CONFIG_RTE_LIBRTE_PORT) := lib/librte_eal -DEPDIRS-$(CONFIG_RTE_LIBRTE_PORT) += lib/librte_mbuf -DEPDIRS-$(CONFIG_RTE_LIBRTE_PORT) += lib/librte_mempool -DEPDIRS-$(CONFIG_RTE_LIBRTE_PORT) += lib/librte_malloc -DEPDIRS-$(CONFIG_RTE_LIBRTE_PORT) += lib/librte_ether -DEPDIRS-$(CONFIG_RTE_LIBRTE_PORT) += lib/librte_ip_frag - -include $(RTE_SDK)/mk/rte.lib.mk diff --git a/src/dpdk_lib18/librte_port/rte_port.h b/src/dpdk_lib18/librte_port/rte_port.h deleted file mode 100755 index d84e5a12..00000000 --- a/src/dpdk_lib18/librte_port/rte_port.h +++ /dev/null @@ -1,213 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 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 - * OWNER 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. - */ - -#ifndef __INCLUDE_RTE_PORT_H__ -#define __INCLUDE_RTE_PORT_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file - * RTE Port - * - * This tool is part of the Intel DPDK Packet Framework tool suite and provides - * a standard interface to implement different types of packet ports. - * - ***/ - -#include <stdint.h> -#include <rte_mbuf.h> - -/**@{ - * Macros to allow accessing metadata stored in the mbuf headroom - * just beyond the end of the mbuf data structure returned by a port - */ -#define RTE_MBUF_METADATA_UINT8(mbuf, offset) \ - (((uint8_t *)&(mbuf)[1])[offset]) -#define RTE_MBUF_METADATA_UINT16(mbuf, offset) \ - (((uint16_t *)&(mbuf)[1])[offset/sizeof(uint16_t)]) -#define RTE_MBUF_METADATA_UINT32(mbuf, offset) \ - (((uint32_t *)&(mbuf)[1])[offset/sizeof(uint32_t)]) -#define RTE_MBUF_METADATA_UINT64(mbuf, offset) \ - (((uint64_t *)&(mbuf)[1])[offset/sizeof(uint64_t)]) - -#define RTE_MBUF_METADATA_UINT8_PTR(mbuf, offset) \ - (&RTE_MBUF_METADATA_UINT8(mbuf, offset)) -#define RTE_MBUF_METADATA_UINT16_PTR(mbuf, offset) \ - (&RTE_MBUF_METADATA_UINT16(mbuf, offset)) -#define RTE_MBUF_METADATA_UINT32_PTR(mbuf, offset) \ - (&RTE_MBUF_METADATA_UINT32(mbuf, offset)) -#define RTE_MBUF_METADATA_UINT64_PTR(mbuf, offset) \ - (&RTE_MBUF_METADATA_UINT64(mbuf, offset)) -/**@}*/ - -/* - * Port IN - * - */ -/** Maximum number of packets read from any input port in a single burst. -Cannot be changed. */ -#define RTE_PORT_IN_BURST_SIZE_MAX 64 - -/** - * Input port create - * - * @param params - * Parameters for input port creation - * @param socket_id - * CPU socket ID (e.g. for memory allocation purpose) - * @return - * Handle to input port instance - */ -typedef void* (*rte_port_in_op_create)(void *params, int socket_id); - -/** - * Input port free - * - * @param port - * Handle to input port instance - * @return - * 0 on success, error code otherwise - */ -typedef int (*rte_port_in_op_free)(void *port); - -/** - * Input port packet burst RX - * - * @param port - * Handle to input port instance - * @param pkts - * Burst of input packets - * @param n_pkts - * Number of packets in the input burst - * @return - * 0 on success, error code otherwise - */ -typedef int (*rte_port_in_op_rx)( - void *port, - struct rte_mbuf **pkts, - uint32_t n_pkts); - -/** Input port interface defining the input port operation */ -struct rte_port_in_ops { - rte_port_in_op_create f_create; /**< Create */ - rte_port_in_op_free f_free; /**< Free */ - rte_port_in_op_rx f_rx; /**< Packet RX (packet burst) */ -}; - -/* - * Port OUT - * - */ -/** - * Output port create - * - * @param params - * Parameters for output port creation - * @param socket_id - * CPU socket ID (e.g. for memory allocation purpose) - * @return - * Handle to output port instance - */ -typedef void* (*rte_port_out_op_create)(void *params, int socket_id); - -/** - * Output port free - * - * @param port - * Handle to output port instance - * @return - * 0 on success, error code otherwise - */ -typedef int (*rte_port_out_op_free)(void *port); - -/** - * Output port single packet TX - * - * @param port - * Handle to output port instance - * @param pkt - * Input packet - * @return - * 0 on success, error code otherwise - */ -typedef int (*rte_port_out_op_tx)( - void *port, - struct rte_mbuf *pkt); - -/** - * Output port packet burst TX - * - * @param port - * Handle to output port instance - * @param pkts - * Burst of input packets specified as array of up to 64 pointers to struct - * rte_mbuf - * @param pkts_mask - * 64-bit bitmask specifying which packets in the input burst are valid. When - * pkts_mask bit n is set, then element n of pkts array is pointing to a - * valid packet. Otherwise, element n of pkts array will not be accessed. - * @return - * 0 on success, error code otherwise - */ -typedef int (*rte_port_out_op_tx_bulk)( - void *port, - struct rte_mbuf **pkt, - uint64_t pkts_mask); - -/** - * Output port flush - * - * @param port - * Handle to output port instance - * @return - * 0 on success, error code otherwise - */ -typedef int (*rte_port_out_op_flush)(void *port); - -/** Output port interface defining the output port operation */ -struct rte_port_out_ops { - rte_port_out_op_create f_create; /**< Create */ - rte_port_out_op_free f_free; /**< Free */ - rte_port_out_op_tx f_tx; /**< Packet TX (single packet) */ - rte_port_out_op_tx_bulk f_tx_bulk; /**< Packet TX (packet burst) */ - rte_port_out_op_flush f_flush; /**< Flush */ -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/dpdk_lib18/librte_port/rte_port_ethdev.c b/src/dpdk_lib18/librte_port/rte_port_ethdev.c deleted file mode 100755 index d0149133..00000000 --- a/src/dpdk_lib18/librte_port/rte_port_ethdev.c +++ /dev/null @@ -1,305 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 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 - * OWNER 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 <string.h> - -#include <rte_mbuf.h> -#include <rte_ethdev.h> -#include <rte_malloc.h> - -#include "rte_port_ethdev.h" - -/* - * Port ETHDEV Reader - */ -struct rte_port_ethdev_reader { - uint16_t queue_id; - uint8_t port_id; -}; - -static void * -rte_port_ethdev_reader_create(void *params, int socket_id) -{ - struct rte_port_ethdev_reader_params *conf = - (struct rte_port_ethdev_reader_params *) params; - struct rte_port_ethdev_reader *port; - - /* Check input parameters */ - if (conf == NULL) { - RTE_LOG(ERR, PORT, "%s: params is NULL\n", __func__); - return NULL; - } - - /* Memory allocation */ - port = rte_zmalloc_socket("PORT", sizeof(*port), - RTE_CACHE_LINE_SIZE, socket_id); - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: Failed to allocate port\n", __func__); - return NULL; - } - - /* Initialization */ - port->port_id = conf->port_id; - port->queue_id = conf->queue_id; - - return port; -} - -static int -rte_port_ethdev_reader_rx(void *port, struct rte_mbuf **pkts, uint32_t n_pkts) -{ - struct rte_port_ethdev_reader *p = - (struct rte_port_ethdev_reader *) port; - - return rte_eth_rx_burst(p->port_id, p->queue_id, pkts, n_pkts); -} - -static int -rte_port_ethdev_reader_free(void *port) -{ - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: port is NULL\n", __func__); - return -EINVAL; - } - - rte_free(port); - - return 0; -} - -/* - * Port ETHDEV Writer - */ -#define RTE_PORT_ETHDEV_WRITER_APPROACH 1 - -struct rte_port_ethdev_writer { - struct rte_mbuf *tx_buf[2 * RTE_PORT_IN_BURST_SIZE_MAX]; - uint32_t tx_burst_sz; - uint16_t tx_buf_count; - uint64_t bsz_mask; - uint16_t queue_id; - uint8_t port_id; -}; - -static void * -rte_port_ethdev_writer_create(void *params, int socket_id) -{ - struct rte_port_ethdev_writer_params *conf = - (struct rte_port_ethdev_writer_params *) params; - struct rte_port_ethdev_writer *port; - - /* Check input parameters */ - if ((conf == NULL) || - (conf->tx_burst_sz == 0) || - (conf->tx_burst_sz > RTE_PORT_IN_BURST_SIZE_MAX) || - (!rte_is_power_of_2(conf->tx_burst_sz))) { - RTE_LOG(ERR, PORT, "%s: Invalid input parameters\n", __func__); - return NULL; - } - - /* Memory allocation */ - port = rte_zmalloc_socket("PORT", sizeof(*port), - RTE_CACHE_LINE_SIZE, socket_id); - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: Failed to allocate port\n", __func__); - return NULL; - } - - /* Initialization */ - port->port_id = conf->port_id; - port->queue_id = conf->queue_id; - port->tx_burst_sz = conf->tx_burst_sz; - port->tx_buf_count = 0; - port->bsz_mask = 1LLU << (conf->tx_burst_sz - 1); - - return port; -} - -static inline void -send_burst(struct rte_port_ethdev_writer *p) -{ - uint32_t nb_tx; - - nb_tx = rte_eth_tx_burst(p->port_id, p->queue_id, - p->tx_buf, p->tx_buf_count); - - for ( ; nb_tx < p->tx_buf_count; nb_tx++) - rte_pktmbuf_free(p->tx_buf[nb_tx]); - - p->tx_buf_count = 0; -} - -static int -rte_port_ethdev_writer_tx(void *port, struct rte_mbuf *pkt) -{ - struct rte_port_ethdev_writer *p = - (struct rte_port_ethdev_writer *) port; - - p->tx_buf[p->tx_buf_count++] = pkt; - if (p->tx_buf_count >= p->tx_burst_sz) - send_burst(p); - - return 0; -} - -#if RTE_PORT_ETHDEV_WRITER_APPROACH == 0 - -static int -rte_port_ethdev_writer_tx_bulk(void *port, - struct rte_mbuf **pkts, - uint64_t pkts_mask) -{ - struct rte_port_ethdev_writer *p = - (struct rte_port_ethdev_writer *) port; - - if ((pkts_mask & (pkts_mask + 1)) == 0) { - uint64_t n_pkts = __builtin_popcountll(pkts_mask); - uint32_t i; - - for (i = 0; i < n_pkts; i++) { - struct rte_mbuf *pkt = pkts[i]; - - p->tx_buf[p->tx_buf_count++] = pkt; - if (p->tx_buf_count >= p->tx_burst_sz) - send_burst(p); - } - } else { - for ( ; pkts_mask; ) { - uint32_t pkt_index = __builtin_ctzll(pkts_mask); - uint64_t pkt_mask = 1LLU << pkt_index; - struct rte_mbuf *pkt = pkts[pkt_index]; - - p->tx_buf[p->tx_buf_count++] = pkt; - if (p->tx_buf_count >= p->tx_burst_sz) - send_burst(p); - pkts_mask &= ~pkt_mask; - } - } - - return 0; -} - -#elif RTE_PORT_ETHDEV_WRITER_APPROACH == 1 - -static int -rte_port_ethdev_writer_tx_bulk(void *port, - struct rte_mbuf **pkts, - uint64_t pkts_mask) -{ - struct rte_port_ethdev_writer *p = - (struct rte_port_ethdev_writer *) port; - uint32_t bsz_mask = p->bsz_mask; - uint32_t tx_buf_count = p->tx_buf_count; - uint64_t expr = (pkts_mask & (pkts_mask + 1)) | - ((pkts_mask & bsz_mask) ^ bsz_mask); - - if (expr == 0) { - uint64_t n_pkts = __builtin_popcountll(pkts_mask); - uint32_t n_pkts_ok; - - if (tx_buf_count) - send_burst(p); - - n_pkts_ok = rte_eth_tx_burst(p->port_id, p->queue_id, pkts, - n_pkts); - - for ( ; n_pkts_ok < n_pkts; n_pkts_ok++) { - struct rte_mbuf *pkt = pkts[n_pkts_ok]; - - rte_pktmbuf_free(pkt); - } - } else { - for ( ; pkts_mask; ) { - uint32_t pkt_index = __builtin_ctzll(pkts_mask); - uint64_t pkt_mask = 1LLU << pkt_index; - struct rte_mbuf *pkt = pkts[pkt_index]; - - p->tx_buf[tx_buf_count++] = pkt; - pkts_mask &= ~pkt_mask; - } - - p->tx_buf_count = tx_buf_count; - if (tx_buf_count >= p->tx_burst_sz) - send_burst(p); - } - - return 0; -} - -#else - -#error Invalid value for RTE_PORT_ETHDEV_WRITER_APPROACH - -#endif - -static int -rte_port_ethdev_writer_flush(void *port) -{ - struct rte_port_ethdev_writer *p = - (struct rte_port_ethdev_writer *) port; - - if (p->tx_buf_count > 0) - send_burst(p); - - return 0; -} - -static int -rte_port_ethdev_writer_free(void *port) -{ - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: Port is NULL\n", __func__); - return -EINVAL; - } - - rte_port_ethdev_writer_flush(port); - rte_free(port); - - return 0; -} - -/* - * Summary of port operations - */ -struct rte_port_in_ops rte_port_ethdev_reader_ops = { - .f_create = rte_port_ethdev_reader_create, - .f_free = rte_port_ethdev_reader_free, - .f_rx = rte_port_ethdev_reader_rx, -}; - -struct rte_port_out_ops rte_port_ethdev_writer_ops = { - .f_create = rte_port_ethdev_writer_create, - .f_free = rte_port_ethdev_writer_free, - .f_tx = rte_port_ethdev_writer_tx, - .f_tx_bulk = rte_port_ethdev_writer_tx_bulk, - .f_flush = rte_port_ethdev_writer_flush, -}; diff --git a/src/dpdk_lib18/librte_port/rte_port_ethdev.h b/src/dpdk_lib18/librte_port/rte_port_ethdev.h deleted file mode 100755 index af67a12b..00000000 --- a/src/dpdk_lib18/librte_port/rte_port_ethdev.h +++ /dev/null @@ -1,86 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 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 - * OWNER 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. - */ - -#ifndef __INCLUDE_RTE_PORT_ETHDEV_H__ -#define __INCLUDE_RTE_PORT_ETHDEV_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file - * RTE Port Ethernet Device - * - * ethdev_reader: input port built on top of pre-initialized NIC RX queue - * ethdev_writer: output port built on top of pre-initialized NIC TX queue - * - ***/ - -#include <stdint.h> - -#include "rte_port.h" - -/** ethdev_reader port parameters */ -struct rte_port_ethdev_reader_params { - /** NIC RX port ID */ - uint8_t port_id; - - /** NIC RX queue ID */ - uint16_t queue_id; -}; - -/** ethdev_reader port operations */ -extern struct rte_port_in_ops rte_port_ethdev_reader_ops; - -/** ethdev_writer port parameters */ -struct rte_port_ethdev_writer_params { - /** NIC RX port ID */ - uint8_t port_id; - - /** NIC RX queue ID */ - uint16_t queue_id; - - /** Recommended burst size to NIC TX queue. The actual burst size can be - bigger or smaller than this value. */ - uint32_t tx_burst_sz; -}; - -/** ethdev_writer port operations */ -extern struct rte_port_out_ops rte_port_ethdev_writer_ops; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/dpdk_lib18/librte_port/rte_port_frag.c b/src/dpdk_lib18/librte_port/rte_port_frag.c deleted file mode 100755 index ff0ab9b8..00000000 --- a/src/dpdk_lib18/librte_port/rte_port_frag.c +++ /dev/null @@ -1,241 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 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 - * OWNER 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 <string.h> - -#include <rte_ether.h> -#include <rte_ip_frag.h> -#include <rte_memory.h> - -#include "rte_port_frag.h" - -/* Default byte size for the IPv4 Maximum Transfer Unit (MTU). - * This value includes the size of IPv4 header. */ -#define IPV4_MTU_DEFAULT ETHER_MTU - -/* Max number of fragments per packet allowed */ -#define IPV4_MAX_FRAGS_PER_PACKET 0x80 - -struct rte_port_ring_reader_ipv4_frag { - /* Input parameters */ - struct rte_ring *ring; - uint32_t mtu; - uint32_t metadata_size; - struct rte_mempool *pool_direct; - struct rte_mempool *pool_indirect; - - /* Internal buffers */ - struct rte_mbuf *pkts[RTE_PORT_IN_BURST_SIZE_MAX]; - struct rte_mbuf *frags[IPV4_MAX_FRAGS_PER_PACKET]; - uint32_t n_pkts; - uint32_t pos_pkts; - uint32_t n_frags; - uint32_t pos_frags; -} __rte_cache_aligned; - -static void * -rte_port_ring_reader_ipv4_frag_create(void *params, int socket_id) -{ - struct rte_port_ring_reader_ipv4_frag_params *conf = - (struct rte_port_ring_reader_ipv4_frag_params *) params; - struct rte_port_ring_reader_ipv4_frag *port; - - /* Check input parameters */ - if (conf == NULL) { - RTE_LOG(ERR, PORT, "%s: Parameter conf is NULL\n", __func__); - return NULL; - } - if (conf->ring == NULL) { - RTE_LOG(ERR, PORT, "%s: Parameter ring is NULL\n", __func__); - return NULL; - } - if (conf->mtu == 0) { - RTE_LOG(ERR, PORT, "%s: Parameter mtu is invalid\n", __func__); - return NULL; - } - if (conf->pool_direct == NULL) { - RTE_LOG(ERR, PORT, "%s: Parameter pool_direct is NULL\n", - __func__); - return NULL; - } - if (conf->pool_indirect == NULL) { - RTE_LOG(ERR, PORT, "%s: Parameter pool_indirect is NULL\n", - __func__); - return NULL; - } - - /* Memory allocation */ - port = rte_zmalloc_socket("PORT", sizeof(*port), RTE_CACHE_LINE_SIZE, - socket_id); - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: port is NULL\n", __func__); - return NULL; - } - - /* Initialization */ - port->ring = conf->ring; - port->mtu = conf->mtu; - port->metadata_size = conf->metadata_size; - port->pool_direct = conf->pool_direct; - port->pool_indirect = conf->pool_indirect; - - port->n_pkts = 0; - port->pos_pkts = 0; - port->n_frags = 0; - port->pos_frags = 0; - - return port; -} - -static int -rte_port_ring_reader_ipv4_frag_rx(void *port, - struct rte_mbuf **pkts, - uint32_t n_pkts) -{ - struct rte_port_ring_reader_ipv4_frag *p = - (struct rte_port_ring_reader_ipv4_frag *) port; - uint32_t n_pkts_out; - - n_pkts_out = 0; - - /* Get packets from the "frag" buffer */ - if (p->n_frags >= n_pkts) { - memcpy(pkts, &p->frags[p->pos_frags], n_pkts * sizeof(void *)); - p->pos_frags += n_pkts; - p->n_frags -= n_pkts; - - return n_pkts; - } - - memcpy(pkts, &p->frags[p->pos_frags], p->n_frags * sizeof(void *)); - n_pkts_out = p->n_frags; - p->n_frags = 0; - - /* Look to "pkts" buffer to get more packets */ - for ( ; ; ) { - struct rte_mbuf *pkt; - uint32_t n_pkts_to_provide, i; - int status; - - /* If "pkts" buffer is empty, read packet burst from ring */ - if (p->n_pkts == 0) { - p->n_pkts = rte_ring_sc_dequeue_burst(p->ring, - (void **) p->pkts, RTE_PORT_IN_BURST_SIZE_MAX); - if (p->n_pkts == 0) - return n_pkts_out; - p->pos_pkts = 0; - } - - /* Read next packet from "pkts" buffer */ - pkt = p->pkts[p->pos_pkts++]; - p->n_pkts--; - - /* If not jumbo, pass current packet to output */ - if (pkt->pkt_len <= IPV4_MTU_DEFAULT) { - pkts[n_pkts_out++] = pkt; - - n_pkts_to_provide = n_pkts - n_pkts_out; - if (n_pkts_to_provide == 0) - return n_pkts; - - continue; - } - - /* Fragment current packet into the "frags" buffer */ - status = rte_ipv4_fragment_packet( - pkt, - p->frags, - IPV4_MAX_FRAGS_PER_PACKET, - p->mtu, - p->pool_direct, - p->pool_indirect - ); - - if (status < 0) { - rte_pktmbuf_free(pkt); - continue; - } - - p->n_frags = (uint32_t) status; - p->pos_frags = 0; - - /* Copy meta-data from input jumbo packet to its fragments */ - for (i = 0; i < p->n_frags; i++) { - uint8_t *src = RTE_MBUF_METADATA_UINT8_PTR(pkt, 0); - uint8_t *dst = - RTE_MBUF_METADATA_UINT8_PTR(p->frags[i], 0); - - memcpy(dst, src, p->metadata_size); - } - - /* Free input jumbo packet */ - rte_pktmbuf_free(pkt); - - /* Get packets from "frag" buffer */ - n_pkts_to_provide = n_pkts - n_pkts_out; - if (p->n_frags >= n_pkts_to_provide) { - memcpy(&pkts[n_pkts_out], p->frags, - n_pkts_to_provide * sizeof(void *)); - p->n_frags -= n_pkts_to_provide; - p->pos_frags += n_pkts_to_provide; - - return n_pkts; - } - - memcpy(&pkts[n_pkts_out], p->frags, - p->n_frags * sizeof(void *)); - n_pkts_out += p->n_frags; - p->n_frags = 0; - } -} - -static int -rte_port_ring_reader_ipv4_frag_free(void *port) -{ - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: Parameter port is NULL\n", __func__); - return -1; - } - - rte_free(port); - - return 0; -} - -/* - * Summary of port operations - */ -struct rte_port_in_ops rte_port_ring_reader_ipv4_frag_ops = { - .f_create = rte_port_ring_reader_ipv4_frag_create, - .f_free = rte_port_ring_reader_ipv4_frag_free, - .f_rx = rte_port_ring_reader_ipv4_frag_rx, -}; diff --git a/src/dpdk_lib18/librte_port/rte_port_frag.h b/src/dpdk_lib18/librte_port/rte_port_frag.h deleted file mode 100755 index dfd70c01..00000000 --- a/src/dpdk_lib18/librte_port/rte_port_frag.h +++ /dev/null @@ -1,94 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 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 - * OWNER 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. - */ - -#ifndef __INCLUDE_RTE_PORT_IP_FRAG_H__ -#define __INCLUDE_RTE_PORT_IP_FRAG_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file - * RTE Port for IPv4 Fragmentation - * - * This port is built on top of pre-initialized single consumer rte_ring. In - * order to minimize the amount of packets stored in the ring at any given - * time, the IP fragmentation functionality is executed on ring read operation, - * hence this port is implemented as an input port. A regular ring_writer port - * can be created to write to the same ring. - * - * The packets written to the ring are either complete IP datagrams or jumbo - * frames (i.e. IP packets with length bigger than provided MTU value). The - * packets read from the ring are all non-jumbo frames. The complete IP - * datagrams written to the ring are not changed. The jumbo frames are - * fragmented into several IP packets with length less or equal to MTU. - * - ***/ - -#include <stdint.h> - -#include <rte_ring.h> - -#include "rte_port.h" - -/** ring_reader_ipv4_frag port parameters */ -struct rte_port_ring_reader_ipv4_frag_params { - /** Underlying single consumer ring that has to be pre-initialized. */ - struct rte_ring *ring; - - /** Maximum Transfer Unit (MTU). Maximum IP packet size (in bytes). */ - uint32_t mtu; - - /** Size of application dependent meta-data stored per each input packet - that has to be copied to each of the fragments originating from the - same input IP datagram. */ - uint32_t metadata_size; - - /** Pre-initialized buffer pool used for allocating direct buffers for - the output fragments. */ - struct rte_mempool *pool_direct; - - /** Pre-initialized buffer pool used for allocating indirect buffers for - the output fragments. */ - struct rte_mempool *pool_indirect; -}; - -/** ring_reader_ipv4_frag port operations */ -extern struct rte_port_in_ops rte_port_ring_reader_ipv4_frag_ops; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/dpdk_lib18/librte_port/rte_port_ras.c b/src/dpdk_lib18/librte_port/rte_port_ras.c deleted file mode 100755 index b6ab67ab..00000000 --- a/src/dpdk_lib18/librte_port/rte_port_ras.c +++ /dev/null @@ -1,252 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 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 - * OWNER 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 <string.h> - -#include <rte_ether.h> -#include <rte_ip_frag.h> -#include <rte_cycles.h> -#include <rte_log.h> - -#include "rte_port_ras.h" - -#ifndef IPV4_RAS_N_BUCKETS -#define IPV4_RAS_N_BUCKETS 4094 -#endif - -#ifndef IPV4_RAS_N_ENTRIES_PER_BUCKET -#define IPV4_RAS_N_ENTRIES_PER_BUCKET 8 -#endif - -#ifndef IPV4_RAS_N_ENTRIES -#define IPV4_RAS_N_ENTRIES (IPV4_RAS_N_BUCKETS * IPV4_RAS_N_ENTRIES_PER_BUCKET) -#endif - -struct rte_port_ring_writer_ipv4_ras { - struct rte_mbuf *tx_buf[RTE_PORT_IN_BURST_SIZE_MAX]; - struct rte_ring *ring; - uint32_t tx_burst_sz; - uint32_t tx_buf_count; - struct rte_ip_frag_tbl *frag_tbl; - struct rte_ip_frag_death_row death_row; -}; - -static void * -rte_port_ring_writer_ipv4_ras_create(void *params, int socket_id) -{ - struct rte_port_ring_writer_ipv4_ras_params *conf = - (struct rte_port_ring_writer_ipv4_ras_params *) params; - struct rte_port_ring_writer_ipv4_ras *port; - uint64_t frag_cycles; - - /* Check input parameters */ - if (conf == NULL) { - RTE_LOG(ERR, PORT, "%s: Parameter conf is NULL\n", __func__); - return NULL; - } - if (conf->ring == NULL) { - RTE_LOG(ERR, PORT, "%s: Parameter ring is NULL\n", __func__); - return NULL; - } - if ((conf->tx_burst_sz == 0) || - (conf->tx_burst_sz > RTE_PORT_IN_BURST_SIZE_MAX)) { - RTE_LOG(ERR, PORT, "%s: Parameter tx_burst_sz is invalid\n", - __func__); - return NULL; - } - - /* Memory allocation */ - port = rte_zmalloc_socket("PORT", sizeof(*port), - RTE_CACHE_LINE_SIZE, socket_id); - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: Failed to allocate socket\n", __func__); - return NULL; - } - - /* Create fragmentation table */ - frag_cycles = (rte_get_tsc_hz() + MS_PER_S - 1) / MS_PER_S * MS_PER_S; - frag_cycles *= 100; - - port->frag_tbl = rte_ip_frag_table_create( - IPV4_RAS_N_BUCKETS, - IPV4_RAS_N_ENTRIES_PER_BUCKET, - IPV4_RAS_N_ENTRIES, - frag_cycles, - socket_id); - - if (port->frag_tbl == NULL) { - RTE_LOG(ERR, PORT, "%s: rte_ip_frag_table_create failed\n", - __func__); - rte_free(port); - return NULL; - } - - /* Initialization */ - port->ring = conf->ring; - port->tx_burst_sz = conf->tx_burst_sz; - port->tx_buf_count = 0; - - return port; -} - -static inline void -send_burst(struct rte_port_ring_writer_ipv4_ras *p) -{ - uint32_t nb_tx; - - nb_tx = rte_ring_sp_enqueue_burst(p->ring, (void **)p->tx_buf, - p->tx_buf_count); - - for ( ; nb_tx < p->tx_buf_count; nb_tx++) - rte_pktmbuf_free(p->tx_buf[nb_tx]); - - p->tx_buf_count = 0; -} - -static inline void -process_one(struct rte_port_ring_writer_ipv4_ras *p, struct rte_mbuf *pkt) -{ - /* Assume there is no ethernet header */ - struct ipv4_hdr *pkt_hdr = (struct ipv4_hdr *) - (rte_pktmbuf_mtod(pkt, unsigned char *)); - - /* Get "Do not fragment" flag and fragment offset */ - uint16_t frag_field = rte_be_to_cpu_16(pkt_hdr->fragment_offset); - uint16_t frag_offset = (uint16_t)(frag_field & IPV4_HDR_OFFSET_MASK); - uint16_t frag_flag = (uint16_t)(frag_field & IPV4_HDR_MF_FLAG); - - /* If it is a fragmented packet, then try to reassemble */ - if ((frag_flag == 0) && (frag_offset == 0)) - p->tx_buf[p->tx_buf_count++] = pkt; - else { - struct rte_mbuf *mo; - struct rte_ip_frag_tbl *tbl = p->frag_tbl; - struct rte_ip_frag_death_row *dr = &p->death_row; - - /* Process this fragment */ - mo = rte_ipv4_frag_reassemble_packet(tbl, dr, pkt, rte_rdtsc(), pkt_hdr); - if (mo != NULL) - p->tx_buf[p->tx_buf_count++] = mo; - - rte_ip_frag_free_death_row(&p->death_row, 3); - } -} - -static int -rte_port_ring_writer_ipv4_ras_tx(void *port, struct rte_mbuf *pkt) -{ - struct rte_port_ring_writer_ipv4_ras *p = - (struct rte_port_ring_writer_ipv4_ras *) port; - - process_one(p, pkt); - if (p->tx_buf_count >= p->tx_burst_sz) - send_burst(p); - - return 0; -} - -static int -rte_port_ring_writer_ipv4_ras_tx_bulk(void *port, - struct rte_mbuf **pkts, - uint64_t pkts_mask) -{ - struct rte_port_ring_writer_ipv4_ras *p = - (struct rte_port_ring_writer_ipv4_ras *) port; - - if ((pkts_mask & (pkts_mask + 1)) == 0) { - uint64_t n_pkts = __builtin_popcountll(pkts_mask); - uint32_t i; - - for (i = 0; i < n_pkts; i++) { - struct rte_mbuf *pkt = pkts[i]; - - process_one(p, pkt); - if (p->tx_buf_count >= p->tx_burst_sz) - send_burst(p); - } - } else { - for ( ; pkts_mask; ) { - uint32_t pkt_index = __builtin_ctzll(pkts_mask); - uint64_t pkt_mask = 1LLU << pkt_index; - struct rte_mbuf *pkt = pkts[pkt_index]; - - process_one(p, pkt); - if (p->tx_buf_count >= p->tx_burst_sz) - send_burst(p); - - pkts_mask &= ~pkt_mask; - } - } - - return 0; -} - -static int -rte_port_ring_writer_ipv4_ras_flush(void *port) -{ - struct rte_port_ring_writer_ipv4_ras *p = - (struct rte_port_ring_writer_ipv4_ras *) port; - - if (p->tx_buf_count > 0) - send_burst(p); - - return 0; -} - -static int -rte_port_ring_writer_ipv4_ras_free(void *port) -{ - struct rte_port_ring_writer_ipv4_ras *p = - (struct rte_port_ring_writer_ipv4_ras *) port; - - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: Parameter port is NULL\n", __func__); - return -1; - } - - rte_port_ring_writer_ipv4_ras_flush(port); - rte_ip_frag_table_destroy(p->frag_tbl); - rte_free(port); - - return 0; -} - -/* - * Summary of port operations - */ -struct rte_port_out_ops rte_port_ring_writer_ipv4_ras_ops = { - .f_create = rte_port_ring_writer_ipv4_ras_create, - .f_free = rte_port_ring_writer_ipv4_ras_free, - .f_tx = rte_port_ring_writer_ipv4_ras_tx, - .f_tx_bulk = rte_port_ring_writer_ipv4_ras_tx_bulk, - .f_flush = rte_port_ring_writer_ipv4_ras_flush, -}; diff --git a/src/dpdk_lib18/librte_port/rte_port_ras.h b/src/dpdk_lib18/librte_port/rte_port_ras.h deleted file mode 100755 index c6ed688c..00000000 --- a/src/dpdk_lib18/librte_port/rte_port_ras.h +++ /dev/null @@ -1,83 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 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 - * OWNER 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. - */ - -#ifndef __INCLUDE_RTE_PORT_RAS_H__ -#define __INCLUDE_RTE_PORT_RAS_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file - * RTE Port for IPv4 Reassembly - * - * This port is built on top of pre-initialized single producer rte_ring. In - * order to minimize the amount of packets stored in the ring at any given - * time, the IP reassembly functionality is executed on ring write operation, - * hence this port is implemented as an output port. A regular ring_reader port - * can be created to read from the same ring. - * - * The packets written to the ring are either complete IP datagrams or IP - * fragments. The packets read from the ring are all complete IP datagrams, - * either jumbo frames (i.e. IP packets with length bigger than MTU) or not. - * The complete IP datagrams written to the ring are not changed. The IP - * fragments written to the ring are first reassembled and into complete IP - * datagrams or dropped on error or IP reassembly time-out. - * - ***/ - -#include <stdint.h> - -#include <rte_ring.h> - -#include "rte_port.h" - -/** ring_writer_ipv4_ras port parameters */ -struct rte_port_ring_writer_ipv4_ras_params { - /** Underlying single consumer ring that has to be pre-initialized. */ - struct rte_ring *ring; - - /** Recommended burst size to ring. The actual burst size can be bigger - or smaller than this value. */ - uint32_t tx_burst_sz; -}; - -/** ring_writer_ipv4_ras port operations */ -extern struct rte_port_out_ops rte_port_ring_writer_ipv4_ras_ops; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/dpdk_lib18/librte_port/rte_port_ring.c b/src/dpdk_lib18/librte_port/rte_port_ring.c deleted file mode 100755 index fa3d77b4..00000000 --- a/src/dpdk_lib18/librte_port/rte_port_ring.c +++ /dev/null @@ -1,237 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 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 - * OWNER 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 <string.h> - -#include <rte_mbuf.h> -#include <rte_ring.h> -#include <rte_malloc.h> - -#include "rte_port_ring.h" - -/* - * Port RING Reader - */ -struct rte_port_ring_reader { - struct rte_ring *ring; -}; - -static void * -rte_port_ring_reader_create(void *params, int socket_id) -{ - struct rte_port_ring_reader_params *conf = - (struct rte_port_ring_reader_params *) params; - struct rte_port_ring_reader *port; - - /* Check input parameters */ - if (conf == NULL) { - RTE_LOG(ERR, PORT, "%s: params is NULL\n", __func__); - return NULL; - } - - /* Memory allocation */ - port = rte_zmalloc_socket("PORT", sizeof(*port), - RTE_CACHE_LINE_SIZE, socket_id); - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: Failed to allocate port\n", __func__); - return NULL; - } - - /* Initialization */ - port->ring = conf->ring; - - return port; -} - -static int -rte_port_ring_reader_rx(void *port, struct rte_mbuf **pkts, uint32_t n_pkts) -{ - struct rte_port_ring_reader *p = (struct rte_port_ring_reader *) port; - - return rte_ring_sc_dequeue_burst(p->ring, (void **) pkts, n_pkts); -} - -static int -rte_port_ring_reader_free(void *port) -{ - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: port is NULL\n", __func__); - return -EINVAL; - } - - rte_free(port); - - return 0; -} - -/* - * Port RING Writer - */ -struct rte_port_ring_writer { - struct rte_mbuf *tx_buf[RTE_PORT_IN_BURST_SIZE_MAX]; - struct rte_ring *ring; - uint32_t tx_burst_sz; - uint32_t tx_buf_count; -}; - -static void * -rte_port_ring_writer_create(void *params, int socket_id) -{ - struct rte_port_ring_writer_params *conf = - (struct rte_port_ring_writer_params *) params; - struct rte_port_ring_writer *port; - - /* Check input parameters */ - if ((conf == NULL) || - (conf->ring == NULL) || - (conf->tx_burst_sz > RTE_PORT_IN_BURST_SIZE_MAX)) { - RTE_LOG(ERR, PORT, "%s: Invalid Parameters\n", __func__); - return NULL; - } - - /* Memory allocation */ - port = rte_zmalloc_socket("PORT", sizeof(*port), - RTE_CACHE_LINE_SIZE, socket_id); - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: Failed to allocate port\n", __func__); - return NULL; - } - - /* Initialization */ - port->ring = conf->ring; - port->tx_burst_sz = conf->tx_burst_sz; - port->tx_buf_count = 0; - - return port; -} - -static inline void -send_burst(struct rte_port_ring_writer *p) -{ - uint32_t nb_tx; - - nb_tx = rte_ring_sp_enqueue_burst(p->ring, (void **)p->tx_buf, - p->tx_buf_count); - - for ( ; nb_tx < p->tx_buf_count; nb_tx++) - rte_pktmbuf_free(p->tx_buf[nb_tx]); - - p->tx_buf_count = 0; -} - -static int -rte_port_ring_writer_tx(void *port, struct rte_mbuf *pkt) -{ - struct rte_port_ring_writer *p = (struct rte_port_ring_writer *) port; - - p->tx_buf[p->tx_buf_count++] = pkt; - if (p->tx_buf_count >= p->tx_burst_sz) - send_burst(p); - - return 0; -} - -static int -rte_port_ring_writer_tx_bulk(void *port, - struct rte_mbuf **pkts, - uint64_t pkts_mask) -{ - struct rte_port_ring_writer *p = (struct rte_port_ring_writer *) port; - - if ((pkts_mask & (pkts_mask + 1)) == 0) { - uint64_t n_pkts = __builtin_popcountll(pkts_mask); - uint32_t i; - - for (i = 0; i < n_pkts; i++) { - struct rte_mbuf *pkt = pkts[i]; - - p->tx_buf[p->tx_buf_count++] = pkt; - if (p->tx_buf_count >= p->tx_burst_sz) - send_burst(p); - } - } else { - for ( ; pkts_mask; ) { - uint32_t pkt_index = __builtin_ctzll(pkts_mask); - uint64_t pkt_mask = 1LLU << pkt_index; - struct rte_mbuf *pkt = pkts[pkt_index]; - - p->tx_buf[p->tx_buf_count++] = pkt; - if (p->tx_buf_count >= p->tx_burst_sz) - send_burst(p); - pkts_mask &= ~pkt_mask; - } - } - - return 0; -} - -static int -rte_port_ring_writer_flush(void *port) -{ - struct rte_port_ring_writer *p = (struct rte_port_ring_writer *) port; - - if (p->tx_buf_count > 0) - send_burst(p); - - return 0; -} - -static int -rte_port_ring_writer_free(void *port) -{ - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: Port is NULL\n", __func__); - return -EINVAL; - } - - rte_port_ring_writer_flush(port); - rte_free(port); - - return 0; -} - -/* - * Summary of port operations - */ -struct rte_port_in_ops rte_port_ring_reader_ops = { - .f_create = rte_port_ring_reader_create, - .f_free = rte_port_ring_reader_free, - .f_rx = rte_port_ring_reader_rx, -}; - -struct rte_port_out_ops rte_port_ring_writer_ops = { - .f_create = rte_port_ring_writer_create, - .f_free = rte_port_ring_writer_free, - .f_tx = rte_port_ring_writer_tx, - .f_tx_bulk = rte_port_ring_writer_tx_bulk, - .f_flush = rte_port_ring_writer_flush, -}; diff --git a/src/dpdk_lib18/librte_port/rte_port_ring.h b/src/dpdk_lib18/librte_port/rte_port_ring.h deleted file mode 100755 index 009dcf85..00000000 --- a/src/dpdk_lib18/librte_port/rte_port_ring.h +++ /dev/null @@ -1,82 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 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 - * OWNER 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. - */ - -#ifndef __INCLUDE_RTE_PORT_RING_H__ -#define __INCLUDE_RTE_PORT_RING_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file - * RTE Port Ring - * - * ring_reader: input port built on top of pre-initialized single consumer ring - * ring_writer: output port built on top of pre-initialized single producer ring - * - ***/ - -#include <stdint.h> - -#include <rte_ring.h> - -#include "rte_port.h" - -/** ring_reader port parameters */ -struct rte_port_ring_reader_params { - /** Underlying single consumer ring that has to be pre-initialized */ - struct rte_ring *ring; -}; - -/** ring_reader port operations */ -extern struct rte_port_in_ops rte_port_ring_reader_ops; - -/** ring_writer port parameters */ -struct rte_port_ring_writer_params { - /** Underlying single producer ring that has to be pre-initialized */ - struct rte_ring *ring; - - /** Recommended burst size to ring. The actual burst size can be - bigger or smaller than this value. */ - uint32_t tx_burst_sz; -}; - -/** ring_writer port operations */ -extern struct rte_port_out_ops rte_port_ring_writer_ops; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/dpdk_lib18/librte_port/rte_port_sched.c b/src/dpdk_lib18/librte_port/rte_port_sched.c deleted file mode 100755 index 2107f4c8..00000000 --- a/src/dpdk_lib18/librte_port/rte_port_sched.c +++ /dev/null @@ -1,239 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 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 - * OWNER 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 <string.h> - -#include <rte_mbuf.h> -#include <rte_malloc.h> - -#include "rte_port_sched.h" - -/* - * Reader - */ -struct rte_port_sched_reader { - struct rte_sched_port *sched; -}; - -static void * -rte_port_sched_reader_create(void *params, int socket_id) -{ - struct rte_port_sched_reader_params *conf = - (struct rte_port_sched_reader_params *) params; - struct rte_port_sched_reader *port; - - /* Check input parameters */ - if ((conf == NULL) || - (conf->sched == NULL)) { - RTE_LOG(ERR, PORT, "%s: Invalid params\n", __func__); - return NULL; - } - - /* Memory allocation */ - port = rte_zmalloc_socket("PORT", sizeof(*port), - RTE_CACHE_LINE_SIZE, socket_id); - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: Failed to allocate port\n", __func__); - return NULL; - } - - /* Initialization */ - port->sched = conf->sched; - - return port; -} - -static int -rte_port_sched_reader_rx(void *port, struct rte_mbuf **pkts, uint32_t n_pkts) -{ - struct rte_port_sched_reader *p = (struct rte_port_sched_reader *) port; - - return rte_sched_port_dequeue(p->sched, pkts, n_pkts); -} - -static int -rte_port_sched_reader_free(void *port) -{ - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: port is NULL\n", __func__); - return -EINVAL; - } - - rte_free(port); - - return 0; -} - -/* - * Writer - */ -struct rte_port_sched_writer { - struct rte_mbuf *tx_buf[2 * RTE_PORT_IN_BURST_SIZE_MAX]; - struct rte_sched_port *sched; - uint32_t tx_burst_sz; - uint32_t tx_buf_count; - uint64_t bsz_mask; -}; - -static void * -rte_port_sched_writer_create(void *params, int socket_id) -{ - struct rte_port_sched_writer_params *conf = - (struct rte_port_sched_writer_params *) params; - struct rte_port_sched_writer *port; - - /* Check input parameters */ - if ((conf == NULL) || - (conf->sched == NULL) || - (conf->tx_burst_sz == 0) || - (conf->tx_burst_sz > RTE_PORT_IN_BURST_SIZE_MAX) || - (!rte_is_power_of_2(conf->tx_burst_sz))) { - RTE_LOG(ERR, PORT, "%s: Invalid params\n", __func__); - return NULL; - } - - /* Memory allocation */ - port = rte_zmalloc_socket("PORT", sizeof(*port), - RTE_CACHE_LINE_SIZE, socket_id); - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: Failed to allocate port\n", __func__); - return NULL; - } - - /* Initialization */ - port->sched = conf->sched; - port->tx_burst_sz = conf->tx_burst_sz; - port->tx_buf_count = 0; - port->bsz_mask = 1LLU << (conf->tx_burst_sz - 1); - - return port; -} - -static int -rte_port_sched_writer_tx(void *port, struct rte_mbuf *pkt) -{ - struct rte_port_sched_writer *p = (struct rte_port_sched_writer *) port; - - p->tx_buf[p->tx_buf_count++] = pkt; - if (p->tx_buf_count >= p->tx_burst_sz) { - rte_sched_port_enqueue(p->sched, p->tx_buf, p->tx_buf_count); - p->tx_buf_count = 0; - } - - return 0; -} - -static int -rte_port_sched_writer_tx_bulk(void *port, - struct rte_mbuf **pkts, - uint64_t pkts_mask) -{ - struct rte_port_sched_writer *p = (struct rte_port_sched_writer *) port; - uint32_t bsz_mask = p->bsz_mask; - uint32_t tx_buf_count = p->tx_buf_count; - uint64_t expr = (pkts_mask & (pkts_mask + 1)) | - ((pkts_mask & bsz_mask) ^ bsz_mask); - - if (expr == 0) { - uint64_t n_pkts = __builtin_popcountll(pkts_mask); - - if (tx_buf_count) { - rte_sched_port_enqueue(p->sched, p->tx_buf, - tx_buf_count); - p->tx_buf_count = 0; - } - - rte_sched_port_enqueue(p->sched, pkts, n_pkts); - } else { - for ( ; pkts_mask; ) { - uint32_t pkt_index = __builtin_ctzll(pkts_mask); - uint64_t pkt_mask = 1LLU << pkt_index; - struct rte_mbuf *pkt = pkts[pkt_index]; - - p->tx_buf[tx_buf_count++] = pkt; - pkts_mask &= ~pkt_mask; - } - p->tx_buf_count = tx_buf_count; - - if (tx_buf_count >= p->tx_burst_sz) { - rte_sched_port_enqueue(p->sched, p->tx_buf, - tx_buf_count); - p->tx_buf_count = 0; - } - } - - return 0; -} - -static int -rte_port_sched_writer_flush(void *port) -{ - struct rte_port_sched_writer *p = (struct rte_port_sched_writer *) port; - - if (p->tx_buf_count) { - rte_sched_port_enqueue(p->sched, p->tx_buf, p->tx_buf_count); - p->tx_buf_count = 0; - } - - return 0; -} - -static int -rte_port_sched_writer_free(void *port) -{ - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: port is NULL\n", __func__); - return -EINVAL; - } - - rte_port_sched_writer_flush(port); - rte_free(port); - - return 0; -} - -/* - * Summary of port operations - */ -struct rte_port_in_ops rte_port_sched_reader_ops = { - .f_create = rte_port_sched_reader_create, - .f_free = rte_port_sched_reader_free, - .f_rx = rte_port_sched_reader_rx, -}; - -struct rte_port_out_ops rte_port_sched_writer_ops = { - .f_create = rte_port_sched_writer_create, - .f_free = rte_port_sched_writer_free, - .f_tx = rte_port_sched_writer_tx, - .f_tx_bulk = rte_port_sched_writer_tx_bulk, - .f_flush = rte_port_sched_writer_flush, -}; diff --git a/src/dpdk_lib18/librte_port/rte_port_sched.h b/src/dpdk_lib18/librte_port/rte_port_sched.h deleted file mode 100755 index 555415ab..00000000 --- a/src/dpdk_lib18/librte_port/rte_port_sched.h +++ /dev/null @@ -1,82 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 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 - * OWNER 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. - */ - -#ifndef __INCLUDE_RTE_PORT_SCHED_H__ -#define __INCLUDE_RTE_PORT_SCHED_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file - * RTE Port Hierarchical Scheduler - * - * sched_reader: input port built on top of pre-initialized rte_sched_port - * sched_writer: output port built on top of pre-initialized rte_sched_port - * - ***/ - -#include <stdint.h> - -#include <rte_sched.h> - -#include "rte_port.h" - -/** sched_reader port parameters */ -struct rte_port_sched_reader_params { - /** Underlying pre-initialized rte_sched_port */ - struct rte_sched_port *sched; -}; - -/** sched_reader port operations */ -extern struct rte_port_in_ops rte_port_sched_reader_ops; - -/** sched_writer port parameters */ -struct rte_port_sched_writer_params { - /** Underlying pre-initialized rte_sched_port */ - struct rte_sched_port *sched; - - /** Recommended burst size. The actual burst size can be bigger or - smaller than this value. */ - uint32_t tx_burst_sz; -}; - -/** sched_writer port operations */ -extern struct rte_port_out_ops rte_port_sched_writer_ops; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/dpdk_lib18/librte_port/rte_port_source_sink.c b/src/dpdk_lib18/librte_port/rte_port_source_sink.c deleted file mode 100755 index b9a25bb0..00000000 --- a/src/dpdk_lib18/librte_port/rte_port_source_sink.c +++ /dev/null @@ -1,158 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 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 - * OWNER 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 <stdint.h> -#include <string.h> - -#include <rte_mbuf.h> -#include <rte_mempool.h> -#include <rte_malloc.h> - -#include "rte_port_source_sink.h" - -/* - * Port SOURCE - */ -struct rte_port_source { - struct rte_mempool *mempool; -}; - -static void * -rte_port_source_create(void *params, int socket_id) -{ - struct rte_port_source_params *p = - (struct rte_port_source_params *) params; - struct rte_port_source *port; - - /* Check input arguments*/ - if ((p == NULL) || (p->mempool == NULL)) { - RTE_LOG(ERR, PORT, "%s: Invalid params\n", __func__); - return NULL; - } - - /* Memory allocation */ - port = rte_zmalloc_socket("PORT", sizeof(*port), - RTE_CACHE_LINE_SIZE, socket_id); - if (port == NULL) { - RTE_LOG(ERR, PORT, "%s: Failed to allocate port\n", __func__); - return NULL; - } - - /* Initialization */ - port->mempool = (struct rte_mempool *) p->mempool; - - return port; -} - -static int -rte_port_source_free(void *port) -{ - /* Check input parameters */ - if (port == NULL) - return 0; - - rte_free(port); - - return 0; -} - -static int -rte_port_source_rx(void *port, struct rte_mbuf **pkts, uint32_t n_pkts) -{ - struct rte_port_source *p = (struct rte_port_source *) port; - - if (rte_mempool_get_bulk(p->mempool, (void **) pkts, n_pkts) != 0) - return 0; - - return n_pkts; -} - -/* - * Port SINK - */ -static void * -rte_port_sink_create(__rte_unused void *params, __rte_unused int socket_id) -{ - return (void *) 1; -} - -static int -rte_port_sink_tx(__rte_unused void *port, struct rte_mbuf *pkt) -{ - rte_pktmbuf_free(pkt); - - return 0; -} - -static int -rte_port_sink_tx_bulk(__rte_unused void *port, struct rte_mbuf **pkts, - uint64_t pkts_mask) -{ - if ((pkts_mask & (pkts_mask + 1)) == 0) { - uint64_t n_pkts = __builtin_popcountll(pkts_mask); - uint32_t i; - - for (i = 0; i < n_pkts; i++) { - struct rte_mbuf *pkt = pkts[i]; - - rte_pktmbuf_free(pkt); - } - } else { - for ( ; pkts_mask; ) { - uint32_t pkt_index = __builtin_ctzll(pkts_mask); - uint64_t pkt_mask = 1LLU << pkt_index; - struct rte_mbuf *pkt = pkts[pkt_index]; - - rte_pktmbuf_free(pkt); - pkts_mask &= ~pkt_mask; - } - } - - return 0; -} - -/* - * Summary of port operations - */ -struct rte_port_in_ops rte_port_source_ops = { - .f_create = rte_port_source_create, - .f_free = rte_port_source_free, - .f_rx = rte_port_source_rx, -}; - -struct rte_port_out_ops rte_port_sink_ops = { - .f_create = rte_port_sink_create, - .f_free = NULL, - .f_tx = rte_port_sink_tx, - .f_tx_bulk = rte_port_sink_tx_bulk, - .f_flush = NULL, -}; diff --git a/src/dpdk_lib18/librte_port/rte_port_source_sink.h b/src/dpdk_lib18/librte_port/rte_port_source_sink.h deleted file mode 100755 index 0f9be799..00000000 --- a/src/dpdk_lib18/librte_port/rte_port_source_sink.h +++ /dev/null @@ -1,70 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 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 - * OWNER 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. - */ - -#ifndef __INCLUDE_RTE_PORT_SOURCE_SINK_H__ -#define __INCLUDE_RTE_PORT_SOURCE_SINK_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file - * RTE Port Source/Sink - * - * source: input port that can be used to generate packets - * sink: output port that drops all packets written to it - * - ***/ - -#include "rte_port.h" - -/** source port parameters */ -struct rte_port_source_params { - /** Pre-initialized buffer pool */ - struct rte_mempool *mempool; -}; - -/** source port operations */ -extern struct rte_port_in_ops rte_port_source_ops; - -/** sink port parameters: NONE */ - -/** sink port operations */ -extern struct rte_port_out_ops rte_port_sink_ops; - -#ifdef __cplusplus -} -#endif - -#endif |