summaryrefslogtreecommitdiffstats
path: root/src/dpdk_lib18/librte_meter
diff options
context:
space:
mode:
Diffstat (limited to 'src/dpdk_lib18/librte_meter')
-rwxr-xr-xsrc/dpdk_lib18/librte_meter/Makefile53
-rwxr-xr-xsrc/dpdk_lib18/librte_meter/rte_meter.c120
-rwxr-xr-xsrc/dpdk_lib18/librte_meter/rte_meter.h387
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__ */