summaryrefslogtreecommitdiffstats
path: root/src/dpdk_lib18/librte_meter/rte_meter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/dpdk_lib18/librte_meter/rte_meter.h')
-rwxr-xr-xsrc/dpdk_lib18/librte_meter/rte_meter.h387
1 files changed, 0 insertions, 387 deletions
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__ */