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.
00027 { 00028 RTNL_TC_PACKETS, /**< Packets seen */ 00029 RTNL_TC_BYTES, /**< Bytes seen */ 00030 RTNL_TC_RATE_BPS, /**< Current bits/s (rate estimator) */ 00031 RTNL_TC_RATE_PPS, /**< Current packet/s (rate estimator) */ 00032 RTNL_TC_QLEN, /**< Queue length */ 00033 RTNL_TC_BACKLOG, /**< Backlog length */ 00034 RTNL_TC_DROPS, /**< Packets dropped */ 00035 RTNL_TC_REQUEUES, /**< Number of requeues */ 00036 RTNL_TC_OVERLIMITS, /**< Number of overlimits */ 00037 __RTNL_TC_STATS_MAX, 00038 };
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().
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.
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 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.
00456 { 00457 int i, size, cell_log; 00458 00459 cell_log = rtnl_tc_calc_cell_log(cell); 00460 if (cell_log < 0) 00461 return cell_log; 00462 00463 for (i = 0; i < RTNL_TC_RTABLE_SIZE; i++) { 00464 size = (i << cell_log) + overhead; 00465 if (size < mpu) 00466 size = mpu; 00467 00468 dst[i] = rtnl_tc_calc_txtime(size, rate); 00469 } 00470 00471 return 0; 00472 }
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.
00494 { 00495 if (TC_H_ROOT == handle) 00496 snprintf(buf, len, "root"); 00497 else if (TC_H_UNSPEC == handle) 00498 snprintf(buf, len, "none"); 00499 else if (0 == TC_H_MAJ(handle)) 00500 snprintf(buf, len, ":%02x", TC_H_MIN(handle)); 00501 else if (0 == TC_H_MIN(handle)) 00502 snprintf(buf, len, "%02x:", TC_H_MAJ(handle) >> 16); 00503 else 00504 snprintf(buf, len, "%02x:%02x", 00505 TC_H_MAJ(handle) >> 16, TC_H_MIN(handle)); 00506 00507 return buf; 00508 }
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.
00529 { 00530 char *colon, *end; 00531 uint32_t h; 00532 00533 if (!strcasecmp(name, "root")) { 00534 *res = TC_H_ROOT; 00535 return 0; 00536 } 00537 00538 if (!strcasecmp(name, "none")) { 00539 *res = TC_H_UNSPEC; 00540 return 0; 00541 } 00542 00543 h = strtoul(name, &colon, 16); 00544 00545 if (colon == name) { 00546 /* :YYYY */ 00547 h = 0; 00548 if (':' != *colon) 00549 return -EINVAL; 00550 } 00551 00552 if (':' == *colon) { 00553 /* check if we would lose bits */ 00554 if (TC_H_MAJ(h)) 00555 return -ERANGE; 00556 h <<= 16; 00557 00558 if ('\0' == colon[1]) { 00559 /* XXXX: */ 00560 *res = h; 00561 } else { 00562 /* XXXX:YYYY */ 00563 uint32_t l = strtoul(colon+1, &end, 16); 00564 00565 /* check if we overlap with major part */ 00566 if (TC_H_MAJ(l)) 00567 return -ERANGE; 00568 00569 if ('\0' != *end) 00570 return -EINVAL; 00571 00572 *res = (h | l); 00573 } 00574 } else if ('\0' == *colon) { 00575 /* XXXXYYYY */ 00576 *res = h; 00577 } else 00578 return -EINVAL; 00579 00580 return 0; 00581 }