diff options
Diffstat (limited to 'src/dpdk_lib18/librte_meter')
-rwxr-xr-x | src/dpdk_lib18/librte_meter/Makefile | 53 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_meter/rte_meter.c | 120 | ||||
-rwxr-xr-x | src/dpdk_lib18/librte_meter/rte_meter.h | 387 |
3 files changed, 0 insertions, 560 deletions
diff --git a/src/dpdk_lib18/librte_meter/Makefile b/src/dpdk_lib18/librte_meter/Makefile deleted file mode 100755 index b25c0cc4..00000000 --- a/src/dpdk_lib18/librte_meter/Makefile +++ /dev/null @@ -1,53 +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_meter.a - -CFLAGS += -O3 -CFLAGS += $(WERROR_FLAGS) - -# -# all source are stored in SRCS-y -# -SRCS-$(CONFIG_RTE_LIBRTE_METER) := rte_meter.c - -# install includes -SYMLINK-$(CONFIG_RTE_LIBRTE_METER)-include := rte_meter.h - -# this lib depends upon: -DEPDIRS-$(CONFIG_RTE_LIBRTE_METER) += lib/librte_eal - -include $(RTE_SDK)/mk/rte.lib.mk diff --git a/src/dpdk_lib18/librte_meter/rte_meter.c b/src/dpdk_lib18/librte_meter/rte_meter.c deleted file mode 100755 index 5e2dadb8..00000000 --- a/src/dpdk_lib18/librte_meter/rte_meter.c +++ /dev/null @@ -1,120 +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 <inttypes.h> -#include <stdio.h> -#include <math.h> - -#include <rte_common.h> -#include <rte_log.h> -#include <rte_cycles.h> - -#include "rte_meter.h" - -#ifndef RTE_METER_TB_PERIOD_MIN -#define RTE_METER_TB_PERIOD_MIN 100 -#endif - -static void -rte_meter_get_tb_params(uint64_t hz, uint64_t rate, uint64_t *tb_period, uint64_t *tb_bytes_per_period) -{ - double period = ((double) hz) / ((double) rate); - - if (period >= RTE_METER_TB_PERIOD_MIN) { - *tb_bytes_per_period = 1; - *tb_period = (uint64_t) period; - } else { - *tb_bytes_per_period = (uint64_t) ceil(RTE_METER_TB_PERIOD_MIN / period); - *tb_period = (hz * (*tb_bytes_per_period)) / rate; - } -} - -int -rte_meter_srtcm_config(struct rte_meter_srtcm *m, struct rte_meter_srtcm_params *params) -{ - uint64_t hz; - - /* Check input parameters */ - if ((m == NULL) || (params == NULL)) { - return -1; - } - - if ((params->cir == 0) || ((params->cbs == 0) && (params->ebs == 0))) { - return -2; - } - - /* Initialize srTCM run-time structure */ - hz = rte_get_tsc_hz(); - m->time = rte_get_tsc_cycles(); - m->tc = m->cbs = params->cbs; - m->te = m->ebs = params->ebs; - rte_meter_get_tb_params(hz, params->cir, &m->cir_period, &m->cir_bytes_per_period); - - RTE_LOG(INFO, METER, "Low level srTCM config: \n" - "\tCIR period = %" PRIu64 ", CIR bytes per period = %" PRIu64 "\n", - m->cir_period, m->cir_bytes_per_period); - - return 0; -} - -int -rte_meter_trtcm_config(struct rte_meter_trtcm *m, struct rte_meter_trtcm_params *params) -{ - uint64_t hz; - - /* Check input parameters */ - if ((m == NULL) || (params == NULL)) { - return -1; - } - - if ((params->cir == 0) || (params->pir == 0) || (params->pir < params->cir) || - (params->cbs == 0) || (params->pbs == 0)) { - return -2; - } - - /* Initialize trTCM run-time structure */ - hz = rte_get_tsc_hz(); - m->time_tc = m->time_tp = rte_get_tsc_cycles(); - m->tc = m->cbs = params->cbs; - m->tp = m->pbs = params->pbs; - rte_meter_get_tb_params(hz, params->cir, &m->cir_period, &m->cir_bytes_per_period); - rte_meter_get_tb_params(hz, params->pir, &m->pir_period, &m->pir_bytes_per_period); - - RTE_LOG(INFO, METER, "Low level trTCM config: \n" - "\tCIR period = %" PRIu64 ", CIR bytes per period = %" PRIu64 "\n" - "\tPIR period = %" PRIu64 ", PIR bytes per period = %" PRIu64 "\n", - m->cir_period, m->cir_bytes_per_period, - m->pir_period, m->pir_bytes_per_period); - - return 0; -} diff --git a/src/dpdk_lib18/librte_meter/rte_meter.h b/src/dpdk_lib18/librte_meter/rte_meter.h deleted file mode 100755 index 92728a5b..00000000 --- a/src/dpdk_lib18/librte_meter/rte_meter.h +++ /dev/null @@ -1,387 +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_METER_H__ -#define __INCLUDE_RTE_METER_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file - * RTE Traffic Metering - * - * Traffic metering algorithms: - * 1. Single Rate Three Color Marker (srTCM): defined by IETF RFC 2697 - * 2. Two Rate Three Color Marker (trTCM): defined by IETF RFC 2698 - * - ***/ - -#include <stdint.h> - -/* - * Application Programmer's Interface (API) - * - ***/ - -/** Packet Color Set */ -enum rte_meter_color { - e_RTE_METER_GREEN = 0, /**< Green */ - e_RTE_METER_YELLOW, /**< Yellow */ - e_RTE_METER_RED, /**< Red */ - e_RTE_METER_COLORS /**< Number of available colors */ -}; - -/** srTCM parameters per metered traffic flow. The CIR, CBS and EBS parameters only -count bytes of IP packets and do not include link specific headers. At least one of -the CBS or EBS parameters has to be greater than zero. */ -struct rte_meter_srtcm_params { - uint64_t cir; /**< Committed Information Rate (CIR). Measured in bytes per second. */ - uint64_t cbs; /**< Committed Burst Size (CBS). Measured in bytes. */ - uint64_t ebs; /**< Excess Burst Size (EBS). Measured in bytes. */ -}; - -/** trTCM parameters per metered traffic flow. The CIR, PIR, CBS and PBS parameters -only count bytes of IP packets and do not include link specific headers. PIR has to -be greater than or equal to CIR. Both CBS or EBS have to be greater than zero. */ -struct rte_meter_trtcm_params { - uint64_t cir; /**< Committed Information Rate (CIR). Measured in bytes per second. */ - uint64_t pir; /**< Peak Information Rate (PIR). Measured in bytes per second. */ - uint64_t cbs; /**< Committed Burst Size (CBS). Measured in byes. */ - uint64_t pbs; /**< Peak Burst Size (PBS). Measured in bytes. */ -}; - -/** Internal data structure storing the srTCM run-time context per metered traffic flow. */ -struct rte_meter_srtcm; - -/** Internal data structure storing the trTCM run-time context per metered traffic flow. */ -struct rte_meter_trtcm; - -/** - * srTCM configuration per metered traffic flow - * - * @param m - * Pointer to pre-allocated srTCM data structure - * @param params - * User parameters per srTCM metered traffic flow - * @return - * 0 upon success, error code otherwise - */ -int -rte_meter_srtcm_config(struct rte_meter_srtcm *m, - struct rte_meter_srtcm_params *params); - -/** - * trTCM configuration per metered traffic flow - * - * @param m - * Pointer to pre-allocated trTCM data structure - * @param params - * User parameters per trTCM metered traffic flow - * @return - * 0 upon success, error code otherwise - */ -int -rte_meter_trtcm_config(struct rte_meter_trtcm *m, - struct rte_meter_trtcm_params *params); - -/** - * srTCM color blind traffic metering - * - * @param m - * Handle to srTCM instance - * @param time - * Current CPU time stamp (measured in CPU cycles) - * @param pkt_length - * Length of the current IP packet (measured in bytes) - * @return - * Color assigned to the current IP packet - */ -static inline enum rte_meter_color -rte_meter_srtcm_color_blind_check(struct rte_meter_srtcm *m, - uint64_t time, - uint32_t pkt_len); - -/** - * srTCM color aware traffic metering - * - * @param m - * Handle to srTCM instance - * @param time - * Current CPU time stamp (measured in CPU cycles) - * @param pkt_length - * Length of the current IP packet (measured in bytes) - * @param pkt_color - * Input color of the current IP packet - * @return - * Color assigned to the current IP packet - */ -static inline enum rte_meter_color -rte_meter_srtcm_color_aware_check(struct rte_meter_srtcm *m, - uint64_t time, - uint32_t pkt_len, - enum rte_meter_color pkt_color); - -/** - * trTCM color blind traffic metering - * - * @param m - * Handle to trTCM instance - * @param time - * Current CPU time stamp (measured in CPU cycles) - * @param pkt_length - * Length of the current IP packet (measured in bytes) - * @return - * Color assigned to the current IP packet - */ -static inline enum rte_meter_color -rte_meter_trtcm_color_blind_check(struct rte_meter_trtcm *m, - uint64_t time, - uint32_t pkt_len); - -/** - * trTCM color aware traffic metering - * - * @param m - * Handle to trTCM instance - * @param time - * Current CPU time stamp (measured in CPU cycles) - * @param pkt_length - * Length of the current IP packet (measured in bytes) - * @param pkt_color - * Input color of the current IP packet - * @return - * Color assigned to the current IP packet - */ -static inline enum rte_meter_color -rte_meter_trtcm_color_aware_check(struct rte_meter_trtcm *m, - uint64_t time, - uint32_t pkt_len, - enum rte_meter_color pkt_color); - -/* - * Inline implementation of run-time methods - * - ***/ - -/* Internal data structure storing the srTCM run-time context per metered traffic flow. */ -struct rte_meter_srtcm { - uint64_t time; /* Time of latest update of C and E token buckets */ - uint64_t tc; /* Number of bytes currently available in the committed (C) token bucket */ - uint64_t te; /* Number of bytes currently available in the excess (E) token bucket */ - uint64_t cbs; /* Upper limit for C token bucket */ - uint64_t ebs; /* Upper limit for E token bucket */ - uint64_t cir_period; /* Number of CPU cycles for one update of C and E token buckets */ - uint64_t cir_bytes_per_period; /* Number of bytes to add to C and E token buckets on each update */ -}; - -/* Internal data structure storing the trTCM run-time context per metered traffic flow. */ -struct rte_meter_trtcm { - uint64_t time_tc; /* Time of latest update of C token bucket */ - uint64_t time_tp; /* Time of latest update of E token bucket */ - uint64_t tc; /* Number of bytes currently available in the committed (C) token bucket */ - uint64_t tp; /* Number of bytes currently available in the peak (P) token bucket */ - uint64_t cbs; /* Upper limit for C token bucket */ - uint64_t pbs; /* Upper limit for P token bucket */ - uint64_t cir_period; /* Number of CPU cycles for one update of C token bucket */ - uint64_t cir_bytes_per_period; /* Number of bytes to add to C token bucket on each update */ - uint64_t pir_period; /* Number of CPU cycles for one update of P token bucket */ - uint64_t pir_bytes_per_period; /* Number of bytes to add to P token bucket on each update */ -}; - -static inline enum rte_meter_color -rte_meter_srtcm_color_blind_check(struct rte_meter_srtcm *m, - uint64_t time, - uint32_t pkt_len) -{ - uint64_t time_diff, n_periods, tc, te; - - /* Bucket update */ - time_diff = time - m->time; - n_periods = time_diff / m->cir_period; - m->time += n_periods * m->cir_period; - - tc = m->tc + n_periods * m->cir_bytes_per_period; - if (tc > m->cbs) - tc = m->cbs; - - te = m->te + n_periods * m->cir_bytes_per_period; - if (te > m->ebs) - te = m->ebs; - - /* Color logic */ - if (tc >= pkt_len) { - m->tc = tc - pkt_len; - m->te = te; - return e_RTE_METER_GREEN; - } - - if (te >= pkt_len) { - m->tc = tc; - m->te = te - pkt_len; - return e_RTE_METER_YELLOW; - } - - m->tc = tc; - m->te = te; - return e_RTE_METER_RED; -} - -static inline enum rte_meter_color -rte_meter_srtcm_color_aware_check(struct rte_meter_srtcm *m, - uint64_t time, - uint32_t pkt_len, - enum rte_meter_color pkt_color) -{ - uint64_t time_diff, n_periods, tc, te; - - /* Bucket update */ - time_diff = time - m->time; - n_periods = time_diff / m->cir_period; - m->time += n_periods * m->cir_period; - - tc = m->tc + n_periods * m->cir_bytes_per_period; - if (tc > m->cbs) - tc = m->cbs; - - te = m->te + n_periods * m->cir_bytes_per_period; - if (te > m->ebs) - te = m->ebs; - - /* Color logic */ - if ((pkt_color == e_RTE_METER_GREEN) && (tc >= pkt_len)) { - m->tc = tc - pkt_len; - m->te = te; - return e_RTE_METER_GREEN; - } - - if ((pkt_color != e_RTE_METER_RED) && (te >= pkt_len)) { - m->tc = tc; - m->te = te - pkt_len; - return e_RTE_METER_YELLOW; - } - - m->tc = tc; - m->te = te; - return e_RTE_METER_RED; -} - -static inline enum rte_meter_color -rte_meter_trtcm_color_blind_check(struct rte_meter_trtcm *m, - uint64_t time, - uint32_t pkt_len) -{ - uint64_t time_diff_tc, time_diff_tp, n_periods_tc, n_periods_tp, tc, tp; - - /* Bucket update */ - time_diff_tc = time - m->time_tc; - time_diff_tp = time - m->time_tp; - n_periods_tc = time_diff_tc / m->cir_period; - n_periods_tp = time_diff_tp / m->pir_period; - m->time_tc += n_periods_tc * m->cir_period; - m->time_tp += n_periods_tp * m->pir_period; - - tc = m->tc + n_periods_tc * m->cir_bytes_per_period; - if (tc > m->cbs) - tc = m->cbs; - - tp = m->tp + n_periods_tp * m->pir_bytes_per_period; - if (tp > m->pbs) - tp = m->pbs; - - /* Color logic */ - if (tp < pkt_len) { - m->tc = tc; - m->tp = tp; - return e_RTE_METER_RED; - } - - if (tc < pkt_len) { - m->tc = tc; - m->tp = tp - pkt_len; - return e_RTE_METER_YELLOW; - } - - m->tc = tc - pkt_len; - m->tp = tp - pkt_len; - return e_RTE_METER_GREEN; -} - -static inline enum rte_meter_color -rte_meter_trtcm_color_aware_check(struct rte_meter_trtcm *m, - uint64_t time, - uint32_t pkt_len, - enum rte_meter_color pkt_color) -{ - uint64_t time_diff_tc, time_diff_tp, n_periods_tc, n_periods_tp, tc, tp; - - /* Bucket update */ - time_diff_tc = time - m->time_tc; - time_diff_tp = time - m->time_tp; - n_periods_tc = time_diff_tc / m->cir_period; - n_periods_tp = time_diff_tp / m->pir_period; - m->time_tc += n_periods_tc * m->cir_period; - m->time_tp += n_periods_tp * m->pir_period; - - tc = m->tc + n_periods_tc * m->cir_bytes_per_period; - if (tc > m->cbs) - tc = m->cbs; - - tp = m->tp + n_periods_tp * m->pir_bytes_per_period; - if (tp > m->pbs) - tp = m->pbs; - - /* Color logic */ - if ((pkt_color == e_RTE_METER_RED) || (tp < pkt_len)) { - m->tc = tc; - m->tp = tp; - return e_RTE_METER_RED; - } - - if ((pkt_color == e_RTE_METER_YELLOW) || (tc < pkt_len)) { - m->tc = tc; - m->tp = tp - pkt_len; - return e_RTE_METER_YELLOW; - } - - m->tc = tc - pkt_len; - m->tp = tp - pkt_len; - return e_RTE_METER_GREEN; -} - -#ifdef __cplusplus -} -#endif - -#endif /* __INCLUDE_RTE_METER_H__ */ |