X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_meter%2Frte_meter.c;h=da01429a8b441e87c0f8ab5575053a40f7883495;hb=c8a1a172ae2b4535b57bcf194a731334246a5a35;hp=473f69aba3352c953f4a25037d858be4f878c842;hpb=3a787d5bf14645ead95f3b31b98e661b13dde04c;p=dpdk.git diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c index 473f69aba3..da01429a8b 100644 --- a/lib/librte_meter/rte_meter.c +++ b/lib/librte_meter/rte_meter.c @@ -19,7 +19,15 @@ 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); + double period; + + if (rate == 0) { + *tb_bytes_per_period = 0; + *tb_period = RTE_METER_TB_PERIOD_MIN; + return; + } + + period = ((double) hz) / ((double) rate); if (period >= RTE_METER_TB_PERIOD_MIN) { *tb_bytes_per_period = 1; @@ -110,3 +118,45 @@ rte_meter_trtcm_config(struct rte_meter_trtcm *m, return 0; } + +int +rte_meter_trtcm_rfc4115_profile_config( + struct rte_meter_trtcm_rfc4115_profile *p, + struct rte_meter_trtcm_rfc4115_params *params) +{ + uint64_t hz = rte_get_tsc_hz(); + + /* Check input parameters */ + if ((p == NULL) || + (params == NULL) || + (params->cir != 0 && params->cbs == 0) || + (params->eir != 0 && params->ebs == 0)) + return -EINVAL; + + /* Initialize trTCM run-time structure */ + p->cbs = params->cbs; + p->ebs = params->ebs; + rte_meter_get_tb_params(hz, params->cir, &p->cir_period, + &p->cir_bytes_per_period); + rte_meter_get_tb_params(hz, params->eir, &p->eir_period, + &p->eir_bytes_per_period); + + return 0; +} + +int +rte_meter_trtcm_rfc4115_config( + struct rte_meter_trtcm_rfc4115 *m, + struct rte_meter_trtcm_rfc4115_profile *p) +{ + /* Check input parameters */ + if ((m == NULL) || (p == NULL)) + return -EINVAL; + + /* Initialize trTCM run-time structure */ + m->time_tc = m->time_te = rte_get_tsc_cycles(); + m->tc = p->cbs; + m->te = p->ebs; + + return 0; +}