libnl 1.1
Token Bucket Filter (TBF)
Queueing Discipline Modules

Attribute Access

int rtnl_qdisc_tbf_set_limit (struct rtnl_qdisc *qdisc, int limit)
 Set limit of TBF qdisc.
int rtnl_qdisc_tbf_set_limit_by_latency (struct rtnl_qdisc *qdisc, int latency)
 Set limit of TBF qdisc by latency.
int rtnl_qdisc_tbf_get_limit (struct rtnl_qdisc *qdisc)
 Get limit of TBF qdisc.
int rtnl_qdisc_tbf_set_mpu (struct rtnl_qdisc *qdisc, int mpu)
 Set MPU of TBF qdisc.
int rtnl_qdisc_tbf_get_mpu (struct rtnl_qdisc *qdisc)
 Get MPU of TBF qdisc.
int rtnl_qdisc_tbf_set_rate (struct rtnl_qdisc *qdisc, int rate, int bucket, int cell)
 Set rate of TBF qdisc.
int rtnl_qdisc_tbf_get_rate (struct rtnl_qdisc *qdisc)
 Get rate of TBF qdisc.
int rtnl_qdisc_tbf_get_rate_bucket (struct rtnl_qdisc *qdisc)
 Get rate bucket size of TBF qdisc.
int rtnl_qdisc_tbf_get_rate_cell (struct rtnl_qdisc *qdisc)
 Get rate cell size of TBF qdisc.
int rtnl_qdisc_tbf_set_peakrate (struct rtnl_qdisc *qdisc, int rate, int bucket, int cell)
 Set peak rate of TBF qdisc.
int rtnl_qdisc_tbf_get_peakrate (struct rtnl_qdisc *qdisc)
 Get peak rate of TBF qdisc.
int rtnl_qdisc_tbf_get_peakrate_bucket (struct rtnl_qdisc *qdisc)
 Get peak rate bucket size of TBF qdisc.
int rtnl_qdisc_tbf_get_peakrate_cell (struct rtnl_qdisc *qdisc)
 Get peak rate cell size of TBF qdisc.

Function Documentation

int rtnl_qdisc_tbf_set_limit ( struct rtnl_qdisc *  qdisc,
int  limit 
)
Parameters:
qdiscTBF qdisc to be modified.
limitNew limit in bytes.
Returns:
0 on success or a negative error code.

Definition at line 223 of file tbf.c.

Referenced by rtnl_qdisc_tbf_set_limit_by_latency().

{
        struct rtnl_tbf *tbf;
        
        tbf = tbf_alloc(qdisc);
        if (!tbf)
                return nl_errno(ENOMEM);

        tbf->qt_limit = limit;
        tbf->qt_mask |= TBF_ATTR_LIMIT;

        return 0;
}
int rtnl_qdisc_tbf_set_limit_by_latency ( struct rtnl_qdisc *  qdisc,
int  latency 
)
Parameters:
qdiscTBF qdisc to be modified.
latencyLatency in micro seconds.

Calculates and sets the limit based on the desired latency and the configured rate and peak rate. In order for this operation to succeed, the rate and if required the peak rate must have been set in advance.

\[ limit_n = \frac{{rate_n} \times {latency}}{10^6}+{bucketsize}_n \]

\[ limit = min(limit_{rate},limit_{peak}) \]

Returns:
0 on success or a negative error code.

Definition at line 266 of file tbf.c.

References rtnl_qdisc_tbf_set_limit().

{
        struct rtnl_tbf *tbf;
        double limit, limit2;

        tbf = tbf_alloc(qdisc);
        if (!tbf)
                return nl_errno(ENOMEM);

        if (!(tbf->qt_mask & TBF_ATTR_RATE))
                return nl_error(EINVAL, "The rate must be specified before "
                                "limit can be calculated based on latency.");

        limit = calc_limit(&tbf->qt_rate, latency, tbf->qt_rate_bucket);

        if (tbf->qt_mask & TBF_ATTR_PEAKRATE) {
                limit2 = calc_limit(&tbf->qt_peakrate, latency,
                                    tbf->qt_peakrate_bucket);

                if (limit2 < limit)
                        limit = limit2;
        }

        return rtnl_qdisc_tbf_set_limit(qdisc, (int) limit);
}
int rtnl_qdisc_tbf_get_limit ( struct rtnl_qdisc *  qdisc)
Parameters:
qdiscTBF qdisc.
Returns:
Limit in bytes or a negative error code.

Definition at line 297 of file tbf.c.

{
        struct rtnl_tbf *tbf;
        
        tbf = tbf_qdisc(qdisc);
        if (tbf && (tbf->qt_mask & TBF_ATTR_LIMIT))
                return tbf->qt_limit;
        return
                nl_errno(ENOENT);
}
int rtnl_qdisc_tbf_set_mpu ( struct rtnl_qdisc *  qdisc,
int  mpu 
)
Parameters:
qdiscTBF qdisc to be modified.
mpuNew MPU in bytes.
Returns:
0 on success or a negative error code.

Definition at line 314 of file tbf.c.

{
        struct rtnl_tbf *tbf;
        
        tbf = tbf_alloc(qdisc);
        if (!tbf)
                return nl_errno(ENOMEM);

        tbf->qt_mpu = mpu;
        tbf->qt_mask |= TBF_ATTR_MPU;

        return 0;
}
int rtnl_qdisc_tbf_get_mpu ( struct rtnl_qdisc *  qdisc)
Parameters:
qdiscTBF qdisc.
Returns:
MPU in bytes or a negative error code.

Definition at line 333 of file tbf.c.

{
        struct rtnl_tbf *tbf;
        
        tbf = tbf_qdisc(qdisc);
        if (tbf && (tbf->qt_mask & TBF_ATTR_MPU))
                return tbf->qt_mpu;
        return
                nl_errno(ENOENT);
}
int rtnl_qdisc_tbf_set_rate ( struct rtnl_qdisc *  qdisc,
int  rate,
int  bucket,
int  cell 
)
Parameters:
qdiscTBF qdisc to be modified.
rateNew rate in bytes per second.
bucketSize of bucket in bytes.
cellSize of a rate cell or 0 to get default value.
Returns:
0 on success or a negative error code.

Definition at line 369 of file tbf.c.

References rtnl_tc_calc_txtime().

{
        struct rtnl_tbf *tbf;
        int cell_log;
        
        tbf = tbf_alloc(qdisc);
        if (!tbf)
                return nl_errno(ENOMEM);

        cell_log = calc_cell_log(cell, bucket);
        if (cell_log < 0)
                return cell_log;

        tbf->qt_rate.rs_rate = rate;
        tbf->qt_rate_bucket = bucket;
        tbf->qt_rate.rs_cell_log = cell_log;
        tbf->qt_rate_txtime = rtnl_tc_calc_txtime(bucket, rate);
        tbf->qt_mask |= TBF_ATTR_RATE;

        return 0;
}
int rtnl_qdisc_tbf_get_rate ( struct rtnl_qdisc *  qdisc)
Parameters:
qdiscTBF qdisc.
Returns:
Rate in bytes per seconds or a negative error code.

Definition at line 397 of file tbf.c.

{
        struct rtnl_tbf *tbf;

        tbf = tbf_qdisc(qdisc);
        if (tbf && (tbf->qt_mask & TBF_ATTR_RATE))
                return tbf->qt_rate.rs_rate;
        else
                return -1;
}
int rtnl_qdisc_tbf_get_rate_bucket ( struct rtnl_qdisc *  qdisc)
Parameters:
qdiscTBF qdisc.
Returns:
Size of rate bucket or a negative error code.

Definition at line 413 of file tbf.c.

{
        struct rtnl_tbf *tbf;

        tbf = tbf_qdisc(qdisc);
        if (tbf && (tbf->qt_mask & TBF_ATTR_RATE))
                return tbf->qt_rate_bucket;
        else
                return -1;
}
int rtnl_qdisc_tbf_get_rate_cell ( struct rtnl_qdisc *  qdisc)
Parameters:
qdiscTBF qdisc.
Returns:
Size of rate cell in bytes or a negative error code.

Definition at line 429 of file tbf.c.

{
        struct rtnl_tbf *tbf;

        tbf = tbf_qdisc(qdisc);
        if (tbf && (tbf->qt_mask & TBF_ATTR_RATE))
                return (1 << tbf->qt_rate.rs_cell_log);
        else
                return -1;
}
int rtnl_qdisc_tbf_set_peakrate ( struct rtnl_qdisc *  qdisc,
int  rate,
int  bucket,
int  cell 
)
Parameters:
qdiscTBF qdisc to be modified.
rateNew peak rate in bytes per second.
bucketSize of peakrate bucket.
cellSize of a peakrate cell or 0 to get default value.
Returns:
0 on success or a negative error code.

Definition at line 448 of file tbf.c.

References rtnl_tc_calc_txtime().

{
        struct rtnl_tbf *tbf;
        int cell_log;
        
        tbf = tbf_alloc(qdisc);
        if (!tbf)
                return nl_errno(ENOMEM);

        cell_log = calc_cell_log(cell, bucket);
        if (cell_log < 0)
                return cell_log;

        tbf->qt_peakrate.rs_rate = rate;
        tbf->qt_peakrate_bucket = bucket;
        tbf->qt_peakrate.rs_cell_log = cell_log;
        tbf->qt_peakrate_txtime = rtnl_tc_calc_txtime(bucket, rate);
        
        tbf->qt_mask |= TBF_ATTR_PEAKRATE;

        return 0;
}
int rtnl_qdisc_tbf_get_peakrate ( struct rtnl_qdisc *  qdisc)
Parameters:
qdiscTBF qdisc.
Returns:
Peak rate in bytes per seconds or a negative error code.

Definition at line 477 of file tbf.c.

{
        struct rtnl_tbf *tbf;

        tbf = tbf_qdisc(qdisc);
        if (tbf && (tbf->qt_mask & TBF_ATTR_PEAKRATE))
                return tbf->qt_peakrate.rs_rate;
        else
                return -1;
}
int rtnl_qdisc_tbf_get_peakrate_bucket ( struct rtnl_qdisc *  qdisc)
Parameters:
qdiscTBF qdisc.
Returns:
Size of peak rate bucket or a negative error code.

Definition at line 493 of file tbf.c.

{
        struct rtnl_tbf *tbf;

        tbf = tbf_qdisc(qdisc);
        if (tbf && (tbf->qt_mask & TBF_ATTR_PEAKRATE))
                return tbf->qt_peakrate_bucket;
        else
                return -1;
}
int rtnl_qdisc_tbf_get_peakrate_cell ( struct rtnl_qdisc *  qdisc)
Parameters:
qdiscTBF qdisc.
Returns:
Size of peak rate cell in bytes or a negative error code.

Definition at line 509 of file tbf.c.

{
        struct rtnl_tbf *tbf;

        tbf = tbf_qdisc(qdisc);
        if (tbf && (tbf->qt_mask & TBF_ATTR_PEAKRATE))
                return (1 << tbf->qt_peakrate.rs_cell_log);
        else
                return -1;
}