X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_meter%2Frte_meter.h;h=92728a5b5677ad971b32337277f756c62f34936d;hb=6cfe8969c969a3e09b4b95146a5f111b171d9c12;hp=eb4a825277334fbbe9426f6d54b1e6a020d719a1;hpb=e6541fdec8b2407e46569147be6887ca3ad4a704;p=dpdk.git diff --git a/lib/librte_meter/rte_meter.h b/lib/librte_meter/rte_meter.h index eb4a825277..92728a5b56 100644 --- a/lib/librte_meter/rte_meter.h +++ b/lib/librte_meter/rte_meter.h @@ -1,35 +1,34 @@ /*- * BSD LICENSE - * - * Copyright(c) 2010-2013 Intel Corporation. All rights reserved. + * + * 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 + * + * 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 + * + * * 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 + * * 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 + * * 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 + * + * 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__ @@ -151,7 +150,7 @@ rte_meter_srtcm_color_blind_check(struct rte_meter_srtcm *m, static inline enum rte_meter_color rte_meter_srtcm_color_aware_check(struct rte_meter_srtcm *m, uint64_t time, - uint32_t pkt_len, + uint32_t pkt_len, enum rte_meter_color pkt_color); /** @@ -195,7 +194,7 @@ rte_meter_trtcm_color_aware_check(struct rte_meter_trtcm *m, * 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 */ @@ -222,38 +221,38 @@ struct rte_meter_trtcm { }; static inline enum rte_meter_color -rte_meter_srtcm_color_blind_check(struct rte_meter_srtcm *m, +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; @@ -262,37 +261,37 @@ rte_meter_srtcm_color_blind_check(struct rte_meter_srtcm *m, static inline enum rte_meter_color rte_meter_srtcm_color_aware_check(struct rte_meter_srtcm *m, uint64_t time, - uint32_t pkt_len, + 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; @@ -304,7 +303,7 @@ rte_meter_trtcm_color_blind_check(struct rte_meter_trtcm *m, 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; @@ -312,28 +311,28 @@ rte_meter_trtcm_color_blind_check(struct rte_meter_trtcm *m, 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; @@ -342,11 +341,11 @@ rte_meter_trtcm_color_blind_check(struct rte_meter_trtcm *m, static inline enum rte_meter_color rte_meter_trtcm_color_aware_check(struct rte_meter_trtcm *m, uint64_t time, - uint32_t pkt_len, + 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; @@ -354,28 +353,28 @@ rte_meter_trtcm_color_aware_check(struct rte_meter_trtcm *m, 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;