HTB: программа для более удобного просмотра состояния классов и u32 фильтров

Приветствую!

Еще в 2007г. для себя написал программу, с помощью которой делал вывод 'tc -s class show ...' и 'tc -s filter show ...' более понятным для прочтения, ибо было крайне неудобно копаться в выводе tc, пытаясь найти и разобрать в куче крайне неудобоваримого текста нужное. Например:

Вывод tc -s class show dev eth3:

class htb 1:2 root rate 100000Kbit ceil 100000Kbit burst 14087b cburst 14087b
 Sent 60076018 bytes 50148 pkt (dropped 0, overlimits 0 requeues 0)
 rate 72bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 1097 ctokens: 1097

class htb 1:3 parent 1:2 rate 50000Kbit ceil 50000Kbit burst 7843b cburst 7843b
 Sent 60076018 bytes 50148 pkt (dropped 0, overlimits 0 requeues 0)
 rate 72bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 1216 ctokens: 1216

class htb 1:4 parent 1:3 leaf 4: prio 0 rate 256000bit ceil 256000bit burst 1631b cburst 1631b
 Sent 154909221 bytes 137570 pkt (dropped 1188, overlimits 0 requeues 0)
 rate 232288bit 22pps backlog 0b 3p requeues 0
 lended: 50148 borrowed: 0 giants: 0
 tokens: 45621 ctokens: 45621

class htb 1:5 parent 1:3 leaf 5: prio 0 rate 96000bit ceil 96000bit burst 1611b cburst 1611b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 131184 ctokens: 131184

class htb 1:6 parent 1:3 leaf 6: prio 0 rate 5000Kbit ceil 5000Kbit burst 2224b cburst 2224b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 3476 ctokens: 3476

Вывод tc -s filter show dev eth3:

filter parent 1: protocol ip pref 100 u32
filter parent 1: protocol ip pref 100 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 100 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:4  (rule hit 292164192 success 50454)
  match c200ce03/ffffffff at 12 (success 698861 )
  match 00000019/0000ffff at 20 (success 50454 )
filter parent 1: protocol ip pref 100 u32 fh 800::801 order 2049 key ht 800 bkt 0 flowid 1:6  (rule hit 292113593 success 0)
  match c200ce2c/ffffffff at 12 (success 0 )

Что из всего этого делает моя программа:

Class 1:2 RATE: 100000Kbit ; CEIL: 100000Kbit
Current rate: 72bit ; 0pps
Shaper status: Inactive
Dropped: 0

Class 1:2=>1:3 RATE: 50000Kbit ; CEIL: 50000Kbit
Current rate: 72bit ; 0pps
Shaper status: Inactive
Dropped: 0

Class 1:2=>1:3=>1:4 RATE: 256000bit ; CEIL: 256000bit
Current rate: 232288bit ; 22pps
Shaper status: Active, backlog: 0b ; 3p
Dropped: 1188
Associated filters:
From: 194.0.206.3/32 dst port: 25

Class 1:2=>1:3=>1:5 RATE: 96000bit ; CEIL: 96000bit
Current rate: 0bit ; 0pps
Shaper status: Inactive
Dropped: 0

Class 1:2=>1:3=>1:6 RATE: 5000Kbit ; CEIL: 5000Kbit
Current rate: 0bit ; 0pps
Shaper status: Inactive
Dropped: 0
Associated filters:
From: 194.0.206.44/32

Classes total: 5
Total active: 1
Total used: 3

Данные выводятся согласно построенного дерева, а не как попало у tc. Можно посмотреть отдельно только полосы, задерживающие траффик, или через которые проходит траффик.
Если это хоть кому-нибудь может показаться полезным, могу выдать исходник (ebuild тоже могу сделать)...

ЗЫ
Не сочтите за рекламу (да и какая нафиг реклама: не заработка ради все это пишу). Ветку "Системное администрирование" я выбрал исходя из того, что такая вещь может понадобиться только админу.
Да, и еще - я умышленно подправил в class htb 1:4 данные, чтобы получить более наглядный пример полосы, задерживающей траффик. В реальности никаких подтасовок нет. :)

а программа выдает в реальном

а программа выдает в реальном времени статистику(или хотябы с заданным интервалом)?
Выкладывай, комунить да понадобится

:)

Это не статистика, а более понятная (как мне кажется) замена htb class show dev и htb filter show dev .
Т.е. - после вызова получаем картину, которая есть здесь и сейчас.

Уважаемый, а цена вопроса?

Уважаемый, а цена вопроса?

Какая может быть цена? Все

Какая может быть цена? Все совершенно бесплатно. Вот сейчас сижу, исходники причесываю. Надеюсь, через час-полтора выложу ссылку.
Или это в другом смысле вопрос?

Исходники + ebuild

Выложил ebuild и исходники. Хотя, если пользоваться ebuild-ом, он все равно сам их оттуда потянет.
Для успешной сборки никаких особых условий не требуется. Главное, чтобы была базовая система.

Снимаю шляпу, даже немного

Снимаю шляпу, даже немного завидую, что учился на автослесаря)

To slepnoga: Я еще на прошлой

To slepnoga:
Я еще на прошлой неделе получил EMail от форума с текстом вашего личного сообщения по теме топика. В ответ написал личным сообщением в этом форуме. Вы его получали? Мне пришел только EMail, а личное сообщение почему-то нет... Именно поэтому решил на всякий случай переспросить.

Да, и даже посмотрел на

Да, и даже посмотрел на сборку - (с точки зрения пейсателя ебилдов) оно не доделано.

Основные претензии к билд-системе: "-j1". цель инсталл, LDFLAGS

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Понятно. И что надо сделать?

Понятно. И что надо сделать? Вроде бы там все просто как сапог, а насчет -j1 - нужно ли там больше? Оно и так за 5 секунд собирается

а насчет -j1 - нужно ли там

а насчет -j1 - нужно ли там больше? 

Oно должно собиратся при любых значениях MAKEOPTS, а не только -j1 , по крайней мере не вылетать с ошибками.

и можно сделать инсталл в дестдир, а не в /usr/local ?

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

???

Цитата:
по крайней мере не вылетать с ошибками.

Были вылеты с ошибками? Я крайне удивлен... А можно посмотреть на сообщения?

Цитата:
и можно сделать инсталл в дестдир, а не в /usr/local ?

Не совсем понял... Я сейчас попробовал ebuild собрать - ставится в /usr/sbin... :

[23:06:43]root@xlin64:htbstat/# ebuild htbstat-0.9.ebuild install
 * htbstat-0.9.tar.bz2 RMD160 SHA1 SHA256 size ;-) ...                                          [ ok ]
 * checking ebuild checksums ;-) ...                                                            [ ok ]
 * checking auxfile checksums ;-) ...                                                           [ ok ]
 * checking miscfile checksums ;-) ...                                                          [ ok ]
 * checking htbstat-0.9.tar.bz2 ;-) ...                                                         [ ok ]
>>> Unpacking source...
>>> Unpacking htbstat-0.9.tar.bz2 to /var/tmp/portage/app-misc/htbstat-0.9/work
>>> Source unpacked in /var/tmp/portage/app-misc/htbstat-0.9/work
>>> Compiling source in /var/tmp/portage/app-misc/htbstat-0.9/work/htbstat-0.9 ...
make -j3 -j1
g++ -s -O2 -Wno-write-strings -c collect.cpp
g++ -s -O2 -Wno-write-strings -c a_tcp.cpp
g++ -s -O2 -Wno-write-strings -o htbstat htbstat.cpp collect.o a_tcp.o
>>> Source compiled.
>>> Test phase [not enabled]: app-misc/htbstat-0.9

>>> Install htbstat-0.9 into /var/tmp/portage/app-misc/htbstat-0.9/image/ category app-misc
make -j3 -j1 install
cp -v htbstat /var/tmp/portage/app-misc/htbstat-0.9/image//usr/sbin
`htbstat' -> `/var/tmp/portage/app-misc/htbstat-0.9/image//usr/sbin/htbstat'
>>> Completed installing htbstat-0.9 into /var/tmp/portage/app-misc/htbstat-0.9/image/
Цитата:
Oно должно собиратся при любых значениях MAKEOPTS, а не только -j1

Оно и собирается при любых... См. подсветку жирным шрифтом... /dev-lang/perl тоже так собирается.

Я не претендую на абсолютное знание вопроса, опыта в ebuildо-строении немного, точнее - совсем нет. Этот - первый сделанный. Прошу тапками не кидаться. Отлаживал его не на одной системе, специально пробовал на чужих системах, ошибок не обнаружил, иначе бы не стал выкладывать.
Так что - если все-таки есть ошибки или еще что-то, чего я не учел, пожалуйста, скажите, буду исправлять.

slep@mini

slep@mini ~/slepnoga/portage/app-misc/htbstat $ ebuild htbstat-0.9.ebuild install
 * htbstat-0.9.tar.bz2 RMD160 SHA1 SHA256 size ;-) ...                                                                          [ ok ]
 * checking ebuild checksums ;-) ...                                                                                            [ ok ]
 * checking auxfile checksums ;-) ...                                                                                           [ ok ]
 * checking miscfile checksums ;-) ...                                                                                          [ ok ]
 * checking htbstat-0.9.tar.bz2 ;-) ...                                                                                         [ ok ]
 * CPV:  app-misc/htbstat-0.9                                                                                                         
 * REPO: my-dev                                                                                                                       
 * USE:  amd64 elibc_glibc kernel_linux multilib userland_GNU                                                                         
>>> Unpacking source...                                                                                                               
>>> Unpacking htbstat-0.9.tar.bz2 to /var/tmp/portage/app-misc/htbstat-0.9/work                                                       
>>> Source unpacked in /var/tmp/portage/app-misc/htbstat-0.9/work                                                                     
>>> Preparing source in /var/tmp/portage/app-misc/htbstat-0.9/work/htbstat-0.9 ...                                                    
>>> Source prepared.                                                                                                                  
>>> Configuring source in /var/tmp/portage/app-misc/htbstat-0.9/work/htbstat-0.9 ...                                                  
>>> Source configured.                                                                                                                
>>> Compiling source in /var/tmp/portage/app-misc/htbstat-0.9/work/htbstat-0.9 ...                                                    
make -j4                                                                                                                              
g++ -s -O2 -Wno-write-strings -c collect.cpp                                                                                          
g++ -s -O2 -Wno-write-strings -c a_tcp.cpp                                                                                            
g++ -s -O2 -Wno-write-strings -o htbstat htbstat.cpp collect.o a_tcp.o                                                                
g++: collect.o: Нет такого файла или каталога                                                                                         
g++: a_tcp.o: Нет такого файла или каталога
htbstat.cpp: In function ‘int main(int, char**)’:
htbstat.cpp:51: предупреждение: результат ‘int system(const char*)’, декларированной с атрибутом warn_unused_result, игнорируется
htbstat.cpp:53: предупреждение: результат ‘int system(const char*)’, декларированной с атрибутом warn_unused_result, игнорируется
make: *** [htbstat] Ошибка 1
make: *** Ожидание завершения заданий...
 * ERROR: app-misc/htbstat-0.9 failed:
 *   emake failed

# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header:  $

EAPI="2"

inherit eutils

DESCRIPTION="HTB class tree viewer of alexpro (Alexey Prokopchuk)"
HOMEPAGE="http://gentoo.homelan.lg.ua/distrib"
SRC_URI="http://gentoo.homelan.lg.ua/distrib/htbstat-0.9.tar.bz2"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
RDEPEND="sys-apps/iproute2"


src_install() {
        emake DESTDIR=${D} install || die
}
~
"htbstat-0.9.ebuild" 21L, 565C                                                                          
CC=g++
CFLAGS=-s -O2 -Wno-write-strings
OBJS=collect.o a_tcp.o

all: $(OBJS) htbstat

%.o: %.cpp
        $(CC) $(CFLAGS) -c $<

%: %.cpp
        $(CC) $(CFLAGS) -o $@ $< $(OBJS)

$(OBJS): include/collect.h include/a_tcp.h include/int64.h htbstat.h

install: all
        cp -v htbstat $(DESTDIR)/usr/sbin

clean:
        rm -fv htbstat
        rm -fv *.o


Оно и собирается при любых... См. подсветку жирным шрифтом... /dev-lang/perl тоже так собирается.

repoman -v full в в папочке с ебилдом обязателен

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Про repoman понял, завтра

Про repoman понял, завтра утром будем исправлять...
Вот это:

g++ -s -O2 -Wno-write-strings -c collect.cpp                                                                                          
g++ -s -O2 -Wno-write-strings -c a_tcp.cpp                                                                                            
g++ -s -O2 -Wno-write-strings -o htbstat htbstat.cpp collect.o a_tcp.o                                                                
g++: collect.o: Нет такого файла или каталога                                                                                         
g++: a_tcp.o: Нет такого файла или каталога

меня крайне удивило. Судя по логу - файлы *.o должны быть собраны. Хотя, если '-j4', то может быть, надо попробовать... Я '-j1' воткнул только потому, что не был уверен, что он соберется многопоточно.
Кстати, а можно узнать, какой версии portage? У себя поставлю, проверю. И на чужих системах проверю по возможности.

Кстати, а можно узнать, какой

Кстати, а можно узнать, какой версии portage

могу тестить на любой , этот вывод с rc56

2 . меик не подхватывает мои флаги , что сделать понятно ( типа CFLAGS="$CFLAGS ваши флаги"), но это не Ъ

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

fixed

Исправлен Makefile, теперь все собирается хоть -j1, хоть -j100, и с CFLAGS все ОК.
Исправлен ebuild в соответствии с рекомендациями и требованиями repoman-a. Результат repoman лежит в каталоге ebuild-a (repoman-result.txt).
Попробуйте сейчас, все ли в порядке. Я проверял на нескольких системах - все нормально.
Вот ebuild и исходники.

.

Тут

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".