From: "Dmytro O. Redchuk" <dor@ldc.net>
To: Anton Gorlov <stalker@altlinux.ru>
Cc: ALT Linux sysadmin discuss <sysadmins@lists.altlinux.org>
Subject: Re: [Sysadmins] tc
Date: Thu, 23 Aug 2007 11:46:22 +0300
Message-ID: <20070823084622.GD10346@ldc.net> (raw)
In-Reply-To: <20070823065559.GC10346@ldc.net>
On Thu, Aug 23, 2007 at 10:58:09AM +0400, Anton Gorlov wrote:
> Dmytro O. Redchuk пишет:
>
> >Я бы "забил скриптом" хэш и в каждую
> >ячейку tc filter на класс... Это
> >тоже, конечно, ручная работа, но такое
> >скриптуется приятнее и работает
> >быстрее. Особенно "если клиентов от 1К и
> >более".
> >Но это не то, о чём вы
> >говорите/спрашиваете.
> то есть скриптмо в цикле генерить
> ипишники клиентов и с каждым ипишником
> увеличивать на шаг
> сlassid 1:x и соответственно flowid 1:х?
Ну примерно, только...
Я имел в виду хеши самого tc (пример тут:
http://lartc.org/howto/lartc.adv-filter.hashing.html)
Я выгрызу кой-чего из своих скриптов, постараюсь покоцать и прокомментировать
"более-менее". Но сначала прочитайте (если ещё не...) по той ссылке, чтобы
было понятнее.
Идея такая -- создаём на интерфейсе таблицу (хэш) фильтров на нужное
количество сетей /24, каждая ячейка таблицы будет содержать "линк"
(перебрасывающий фильтр) на другую таблицу. Эта другая таблица будет
размером 256 ячеек, то есть на всю определённую сеть /24, каждая ячейка
будет содержать фильтр, перебрасывающий на нужный класс (для этого
айпишника/клиента).
##########################################################################
### Сначала создаём корневую дисциплину:
#
#
# root HTB:
echo -e "\n\n#\n# Root qdisc and class:\n#\n"
$tc qdisc add dev $DEV root handle 1: htb default 90
# root class:
$tc class add dev $DEV parent 1:0 classid 1:1 htb rate 100Mbit
### создаём хеш на две сети /24 (скажем, 192.168.1.0 и 192.168.2.0):
# root filter:
$tc filter add dev $DEV parent 1:1 prio 10 protocol ip u32
### divisor 2 -- хеш на две ячейки:
$tc filter add dev $DEV parent 1:1 protocol ip prio 10 handle 8: u32 divisor 2
### создаём два хеша -- для каждой сети /24:
## для 192.168.1.0:
$tc filter add dev $DEV parent 1:1 prio 10 handle 1: protocol ip u32 divisor 256
## для 192.168.2.0:
$tc filter add dev $DEV parent 1:1 prio 10 handle 2: protocol ip u32 divisor 256
/***
Для каждого клиента (не обязательно это делать для каждого айпишника,
можно для групп айпишников) нужно создать класс. В каждую ячейку этих двух
хешей нужно вписать фильтр, перебрасывающий в этот класс.
***/
### В конце-концов, нужно в "верхний" хеш на две ячейки записать фильтры,
### перебрасывающие пакет сразу в нужную ячейку нужной сети:
$tc filter add dev $DEV parent 1:1 protocol ip prio 10 \
u32 ht 8:0: \
match ip dst 192.168.1.0/24 \
hashkey mask 0x000000ff at 16 \
link 1:
$tc filter add dev $DEV parent 1:1 protocol ip prio 10 \
u32 ht 8:1: \
match ip dst 192.168.2.0/24 \
hashkey mask 0x000000ff at 16 \
link 2:
##########################################################################
:-) Где-то так.
Всё это кажется сложным, возможно.
У меня всё это работает уже для 13-ти сетей /24 -- кучка скриптов, "базка" с
соответствием классов айпишникам, параметры этих классов... Фактически,
нужно где-то указать, в какой класс кидать данный айпишник -- а если
каждому айпишнику давать свой класс, то задача упрощается. Возможно :-)
Да, сложновато, это ж только "направление" -- но масштабируется
замечательно (в плане быстродействия).
PS. Интересно, кто как иначе крутится с такими вещами...
--
_,-=._ /|_/|
`-.} `=._,.-=-._., @ @._,
`._ _,-. ) _,.-'
` G.m-"^m`m' Dmytro O. Redchuk
prev parent reply other threads:[~2007-08-23 8:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-21 20:28 Anton Gorlov
2007-08-22 5:00 ` Denis Klimov
2007-08-22 5:41 ` Anton Gorlov
2007-08-23 6:11 ` Anton Gorlov
2007-08-23 6:55 ` Dmytro O. Redchuk
2007-08-23 8:46 ` Dmytro O. Redchuk [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070823084622.GD10346@ldc.net \
--to=dor@ldc.net \
--cc=stalker@altlinux.ru \
--cc=sysadmins@lists.altlinux.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
ALT Linux sysadmins discussion
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/sysadmins/0 sysadmins/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 sysadmins sysadmins/ http://lore.altlinux.org/sysadmins \
sysadmins@lists.altlinux.org sysadmins@lists.altlinux.ru sysadmins@lists.altlinux.com
public-inbox-index sysadmins
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.sysadmins
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git