Я сделал скриптик для показа текущих скоростей по классам. может кому пригодится. Задача, показать статистику по скоростям классов без всякой лишней инфы.
rates.awk
Code:
#!/usr/bin/awk -f
BEGIN {
fmt = "%-6s %-6s %8s %8s %8s\n";
if (header "" != "0") printf fmt , "0Class" , "parent" , "minrate" , "ceil" , "currate";
}
func rate2bps(rate)
{
if (match(rate,"[0-9]bps")>0) return substr(rate, 1, length(rate)-3); \
else if (match(rate,"[0-9]Kbps")>0) return substr(rate, 1, length(rate)-4)*1024; \
else if (match(rate,"[0-9]Kbit")>0) return substr(rate, 1, length(rate)-4)*1024/8; \
else if (match(rate,"[0-9]Mbps")>0) return substr(rate, 1, length(rate)-4)*1024*1024; \
else if (match(rate,"[0-9]Mbit")>0) return substr(rate, 1, length(rate)-4)*1024*1024/8; \
}
{ \
if ((substr($0, 1, 1)!=" ")) { \
if (match($0, "^class htb ")>0) { \
bBlock=1; \
sClass=$3; \
currate=0;
for (i=1;i<NF;i++) {
if ($i=="root") {
root = 1;
parent = "root";
} else if ($i=="parent") {
root = 0;
parent = $(i+1);
} else if ($i=="rate") minrate = rate2bps($(i+1));
else if ($i=="ceil") ceil = rate2bps($(i+1));
}
} else {
if (($0=="")&&(bBlock==1)) {
printf fmt , sClass , parent , minrate , ceil , currate;
}
bBlock=0;
}
} else if (($1=="rate")&&(bBlock==1)) { \
currate=rate2bps($2);
}
}
килобиты исправил
Вывод подходит для дальнейшего анализа. Можно например подправить параметры классов, если htb недостаточно гибок:
Code:
[admin@router 3]$ tc -s class ls dev vlan1 | awk -f rates.awk | sort
0Class parent minrate ceil currate
1:20 root 67584 67584 56986
1:21 1:20 40448 67584 315
1:22 1:20 20224 67584 22582
1:23 1:20 6656 67584 34007
1:2c 1:2f 337 3379 112
1:2d 1:2f 1013 3379 126
1:2e 1:2f 3379 3379 41
1:2f 1:20 3379 3379 240
1:30 root 96896 96896 8
1:31 1:30 58112 96896 0
1:32 1:30 29056 96896 0
1:33 1:30 9600 96896 0
1:3c 1:3f 327 3276 0
1:3d 1:3f 983 3276 9
1:3e 1:3f 3276 3276 0
1:3f 1:30 3276 3276 7