libnl 1.1
|
Modules | |
Queueing Classes | |
Classifiers | |
Queueing Disciplines | |
Defines | |
#define | RTNL_TC_RTABLE_SIZE 256 |
Number of entries in a transmission time lookup table. | |
Enumerations | |
enum | rtnl_tc_stats_id { RTNL_TC_PACKETS, RTNL_TC_BYTES, RTNL_TC_RATE_BPS, RTNL_TC_RATE_PPS, RTNL_TC_QLEN, RTNL_TC_BACKLOG, RTNL_TC_DROPS, RTNL_TC_REQUEUES, RTNL_TC_OVERLIMITS, __RTNL_TC_STATS_MAX } |
TC statistics identifiers. More... | |
Utilities | |
int | rtnl_tc_calc_txtime (int bufsize, int rate) |
Calculate time required to transmit buffer at a specific rate. | |
int | rtnl_tc_calc_bufsize (int txtime, int rate) |
Calculate buffer size able to transmit in a specific time and rate. | |
int | rtnl_tc_calc_cell_log (int cell_size) |
Calculate the binary logarithm for a specific cell size. | |
Rate Tables | |
int | rtnl_tc_build_rate_table (uint32_t *dst, uint8_t mpu, uint8_t overhead, int cell, int rate) |
Compute a transmission time lookup table. | |
Traffic Control Handle Translations | |
char * | rtnl_tc_handle2str (uint32_t handle, char *buf, size_t len) |
Convert a traffic control handle to a character string (Reentrant). | |
int | rtnl_tc_str2handle (const char *name, uint32_t *res) |
Convert a charactering strint to a traffic control handle. |
enum rtnl_tc_stats_id |
Definition at line 27 of file tc.h.
{ RTNL_TC_PACKETS, /**< Packets seen */ RTNL_TC_BYTES, /**< Bytes seen */ RTNL_TC_RATE_BPS, /**< Current bits/s (rate estimator) */ RTNL_TC_RATE_PPS, /**< Current packet/s (rate estimator) */ RTNL_TC_QLEN, /**< Queue length */ RTNL_TC_BACKLOG, /**< Backlog length */ RTNL_TC_DROPS, /**< Packets dropped */ RTNL_TC_REQUEUES, /**< Number of requeues */ RTNL_TC_OVERLIMITS, /**< Number of overlimits */ __RTNL_TC_STATS_MAX, };
int rtnl_tc_calc_txtime | ( | int | bufsize, |
int | rate | ||
) |
bufsize | Size of buffer to be transmited in bytes. |
rate | Transmit rate in bytes per second. |
Calculates the number of micro seconds required to transmit a specific buffer at a specific transmit rate.
Definition at line 383 of file tc.c.
Referenced by rtnl_qdisc_tbf_set_peakrate(), rtnl_qdisc_tbf_set_rate(), and rtnl_tc_build_rate_table().
{ double tx_time_secs; tx_time_secs = (double) bufsize / (double) rate; return tx_time_secs * 1000000.; }
int rtnl_tc_calc_bufsize | ( | int | txtime, |
int | rate | ||
) |
txtime | Available transmit time in micro seconds. |
rate | Transmit rate in bytes per second. |
Calculates the size of the buffer that can be transmitted in a specific time period at a specific transmit rate.
Definition at line 406 of file tc.c.
{ double bufsize; bufsize = (double) txtime * (double) rate; return bufsize / 1000000.; }
int rtnl_tc_calc_cell_log | ( | int | cell_size | ) |
cell_size | Size of cell, must be a power of two. |
Definition at line 420 of file tc.c.
Referenced by rtnl_tc_build_rate_table().
{ int i; for (i = 0; i < 32; i++) if ((1 << i) == cell_size) return i; return nl_errno(EINVAL); }
int rtnl_tc_build_rate_table | ( | uint32_t * | dst, |
uint8_t | mpu, | ||
uint8_t | overhead, | ||
int | cell, | ||
int | rate | ||
) |
dst | Destination buffer of RTNL_TC_RTABLE_SIZE uint32_t[]. |
mpu | Minimal size of a packet at all times. |
overhead | Overhead to be added to each packet. |
cell | Size of cell, i.e. size of step between entries in bytes. |
rate | Rate in bytes per second. |
Computes a table of RTNL_TC_RTABLE_SIZE entries specyfing the transmission times for various packet sizes, e.g. the transmission time for a packet of size pktsize
could be looked up:
txtime = table[pktsize >> log2(cell)];
Definition at line 454 of file tc.c.
References rtnl_tc_calc_cell_log(), rtnl_tc_calc_txtime(), and RTNL_TC_RTABLE_SIZE.
{ int i, size, cell_log; cell_log = rtnl_tc_calc_cell_log(cell); if (cell_log < 0) return cell_log; for (i = 0; i < RTNL_TC_RTABLE_SIZE; i++) { size = (i << cell_log) + overhead; if (size < mpu) size = mpu; dst[i] = rtnl_tc_calc_txtime(size, rate); } return 0; }
char* rtnl_tc_handle2str | ( | uint32_t | handle, |
char * | buf, | ||
size_t | len | ||
) |
handle | traffic control handle |
buf | destination buffer |
len | buffer length |
Converts a tarffic control handle to a character string in the form of MAJ:MIN
and stores it in the specified destination buffer.
Definition at line 493 of file tc.c.
{ if (TC_H_ROOT == handle) snprintf(buf, len, "root"); else if (TC_H_UNSPEC == handle) snprintf(buf, len, "none"); else if (0 == TC_H_MAJ(handle)) snprintf(buf, len, ":%02x", TC_H_MIN(handle)); else if (0 == TC_H_MIN(handle)) snprintf(buf, len, "%02x:", TC_H_MAJ(handle) >> 16); else snprintf(buf, len, "%02x:%02x", TC_H_MAJ(handle) >> 16, TC_H_MIN(handle)); return buf; }
int rtnl_tc_str2handle | ( | const char * | name, |
uint32_t * | res | ||
) |
name | traffic control handle as character string |
res | destination buffer |
Converts the provided character string specifying a traffic control handle to the corresponding numeric value.
The handle must be provided in one of the following formats:
Definition at line 528 of file tc.c.
{ char *colon, *end; uint32_t h; if (!strcasecmp(name, "root")) { *res = TC_H_ROOT; return 0; } if (!strcasecmp(name, "none")) { *res = TC_H_UNSPEC; return 0; } h = strtoul(name, &colon, 16); if (colon == name) { /* :YYYY */ h = 0; if (':' != *colon) return -EINVAL; } if (':' == *colon) { /* check if we would lose bits */ if (TC_H_MAJ(h)) return -ERANGE; h <<= 16; if ('\0' == colon[1]) { /* XXXX: */ *res = h; } else { /* XXXX:YYYY */ uint32_t l = strtoul(colon+1, &end, 16); /* check if we overlap with major part */ if (TC_H_MAJ(l)) return -ERANGE; if ('\0' != *end) return -EINVAL; *res = (h | l); } } else if ('\0' == *colon) { /* XXXXYYYY */ *res = h; } else return -EINVAL; return 0; }