динамические очереди

classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

динамические очереди

irix
Hello Openbsd,

Кто-то  может  дописать  для pf и altq diff, для создания динамических
очередей (динамичсеких правил по шаблону)

----------------------
the creation of a large number of dynamic \
patterns. For example creates template for the queue with an indication of the \
speed such as 512Kbit / s, and then creates template for the filter of which you \
can specify a subnet like 192.168.1.0/24 and this pattern break this subnet to the \
desired number of rules in this case, to 254, and under each This rule will create \
a dynamic part of the dynamic pattern of 512Kbit / s for each rule.
------------------------------------

Хенинг добавит этот diff в основное дерево.

Кто-то может взяться за написание этого дифа ?

--
Best regards,
 irix                          mailto:[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: динамические очереди

Dinar Talypov
On Wed, 27 May 2009 22:08:42 +0300
irix <[hidden email]> wrote:

> Hello Openbsd,
>
> Кто-то  может  дописать  для pf и altq diff, для создания динамических
> очередей (динамичсеких правил по шаблону)
>
> ----------------------
> the creation of a large number of dynamic \
> patterns. For example creates template for the queue with an indication of the \
> speed such as 512Kbit / s, and then creates template for the filter of which you \
> can specify a subnet like 192.168.1.0/24 and this pattern break this subnet to the \
> desired number of rules in this case, to 254, and under each This rule will create \
> a dynamic part of the dynamic pattern of 512Kbit / s for each rule.
> ------------------------------------
>
> Хенинг добавит этот diff в основное дерево.
>
> Кто-то может взяться за написание этого дифа ?
>
нечто подобное я писал:
http://dinar.yantel.ru/patches/openbsd/altq/patch_pf_if.c -- удаляет altq с интерфейса при его destroy
http://dinar.yantel.ru/patches/openbsd/merge/ - патчи нацеленные на добавление правил altq на интерфейс при помощи pfctl

--
Динар Талыпов


Reply | Threaded
Open this post in threaded view
|

Re: динамические очереди

Anton Maksimenkov-2
In reply to this post by irix
28 мая 2009 г. 1:08 пользователь irix <[hidden email]> написал:

Пачетал трэд.
> "I want to understand why you _uperlis_ and do not want to see nothing else"
гы-ы-ы, это чудо машинного перевода, я поржал, представляя как буржуи
это читали :-))

> Хенинг добавит этот diff в основное дерево.
> Кто-то может взяться за написание этого дифа ?
Вообще-то Хеннинг там выразился в стиле "отстаньте". Думаю, что
слонячий diff не закоммитят нифига (а он будет слонячий - одно только
расщепление правил, помимо некоторой потери производительности, даст
выплёвывание всего этого списка в pfctl -sr, которую также придётся
переучивать..., наверное ещё что-то).
--
antonvm
Reply | Threaded
Open this post in threaded view
|

Re[2]: динамические очереди

irix
In reply to this post by Dinar Talypov
Hello Dinar,

Патчи  на добовления altq через pfctl добовляют только queue или ещё в
довесок filter правила можно загонять сразу ?
Пример  покажите  пожалуйста,  я  помню что он пробегал в рассылке, но
поиск не пашет (500 ошибка вываливаеться) уже год поэтому найти проблематично.

Собственно  патчи отличные, но вопрос остаёться открытым вы можете ещё
к  своим  патчам  дописать  возхможность  создавать шаблоны для правил
(динамические очереди) ?

Thursday, May 28, 2009, 6:58:09 AM, you wrote:

DT> On Wed, 27 May 2009 22:08:42 +0300
DT> irix <[hidden email]> wrote:

>> Hello Openbsd,
>>
>> Кто-то  может  дописать  для pf и altq diff, для создания динамических
>> очередей (динамичсеких правил по шаблону)
>>
>> ----------------------
>> the creation of a large number of dynamic \
>> patterns. For example creates template for the queue with an indication of the \
>> speed such as 512Kbit / s, and then creates template for the filter of which you \
>> can specify a subnet like 192.168.1.0/24 and this pattern break this subnet to the \
>> desired number of rules in this case, to 254, and under each This rule will create \
>> a dynamic part of the dynamic pattern of 512Kbit / s for each rule.
>> ------------------------------------
>>
>> Хенинг добавит этот diff в основное дерево.
>>
>> Кто-то может взяться за написание этого дифа ?
>>
DT> нечто подобное я писал:
DT> http://dinar.yantel.ru/patches/openbsd/altq/patch_pf_if.c --
DT> удаляет altq с интерфейса при его destroy
DT> http://dinar.yantel.ru/patches/openbsd/merge/ - патчи нацеленные
DT> на добавление правил altq на интерфейс при помощи pfctl




--
Best regards,
 irix                            mailto:[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: Re[2]: динамические очереди

Dinar Talypov
On Thu, 28 May 2009 12:27:07 +0300
irix <[hidden email]> wrote:

> Hello Dinar,
>
> Патчи  на добовления altq через pfctl добовляют только queue или ещё в
> довесок filter правила можно загонять сразу ?
добавляют только queue

> Пример  покажите  пожалуйста,  я  помню что он пробегал в рассылке, но
> поиск не пашет (500 ошибка вываливаеться) уже год поэтому найти проблематично.
pass out on yyy from any to any queue xxx
где xxx - имя очереди
yyy - имя группы интерфейсов

>
> Собственно  патчи отличные, но вопрос остаёться открытым вы можете ещё
> к  своим  патчам  дописать  возхможность  создавать шаблоны для правил
> (динамические очереди) ?
>
а это надо думать :)

--
Динар Талыпов


Reply | Threaded
Open this post in threaded view
|

Re: Re[2]: динамические очереди

Anton Maksimenkov-2
28 мая 2009 г. 15:40 пользователь Dinar Talypov <[hidden email]> написал:
>> к  своим  патчам  дописать  возхможность  создавать шаблоны для правил
>> (динамические очереди) ?
> а это надо думать :)

Кстати, вот интересно. Я ещё ALTQ так и не перепахал, но может кто разобрался...

Если было бы можно на одно pf правило прицеплять несколько ALTQ, так
сказать "подочередей". Может лучше было бы не "расщеплять" правило на
кучу отдельных для каждого IP, а при "попадании" в правило выбирать
свою подочередь для конкретного IP.
--
antonvm (aka engineer)
Reply | Threaded
Open this post in threaded view
|

Re: Re[2]: динамические очереди

Dinar Talypov
On Thu, 28 May 2009 16:11:45 +0600
Anton Maksimenkov <[hidden email]> wrote:

> 28 мая 2009 г. 15:40 пользователь Dinar Talypov <[hidden email]> написал:
> >> к  своим  патчам  дописать  возхможность  создавать шаблоны для правил
> >> (динамические очереди) ?
> > а это надо думать :)
>
> Кстати, вот интересно. Я ещё ALTQ так и не перепахал, но может кто разобрался...
>
> Если было бы можно на одно pf правило прицеплять несколько ALTQ, так
> сказать "подочередей". Может лучше было бы не "расщеплять" правило на
> кучу отдельных для каждого IP, а при "попадании" в правило выбирать
> свою подочередь для конкретного IP.

Очереди создаются на интерфейс
IP используется только для классификации трафика, т.е. правилом задается какую очередь брать

--
Динар Талыпов


Reply | Threaded
Open this post in threaded view
|

Re: Re[2]: динамические очереди

Anton Maksimenkov-2
28 мая 2009 г. 16:17 пользователь Dinar Talypov <[hidden email]> написал:
> Очереди создаются на интерфейс
> IP используется только для классификации трафика, т.е. правилом задается какую очередь брать

Хорошо. При "попадании" в правило проделывать доп. операцию - выборка
"подочереди" по ключу-IPшнику.

Как-то так. У правила указывается родительская очередь, например,
myparq. У неё должны быть подочереди, например myparq_1, myparq_2,
myparq_3, и т.д., по количеству IPшников в сабнэте. Они делаются
руками, или сплитятся на основании имеющегося pf правила, неважно
пока.
К pf правилу может быть например keyword какой-нибудь, указывающий что
при "попадании" надо брать не указанную к нему родительскую myparq, а
проделывать поиск нужной "подочереди" по ключу-IPшнику (ну, брать,
например, от числового представления IP отнять числовое представление
сети, получим "номер"; и далее имя очереди - myparq_номер).
И пакет сувать в эту "подочередь".
А?

P.S.  Я так определял попадание IPшника в IP-диапазон:
static int
check_ip_in_range(char *in_ip, struct ... *node_range)
{
        static struct in_addr inaddr;
        static u_int32_t i_inaddr;
...
...inet_aton(in_ip, &inaddr)...
...
i_inaddr = ntohl(inaddr.s_addr);
...
        if (node_range->from_i_inaddr <= i_inaddr && i_inaddr <=
node_range->to_i_inaddr) {
                dbg_printf(3, "\t\t\t\tMATCH in check_ip_in_range()\n");
                return 1;
        }
        return 0;
}

--
antonvm (aka engineer)
Reply | Threaded
Open this post in threaded view
|

Re: Re[2]: динамические очереди

Dinar Talypov
On Thu, 28 May 2009 16:45:47 +0600
Anton Maksimenkov <[hidden email]> wrote:

> 28 мая 2009 г. 16:17 пользователь Dinar Talypov <[hidden email]> написал:
> > Очереди создаются на интерфейс
> > IP используется только для классификации трафика, т.е. правилом задается какую очередь брать
>
> Хорошо. При "попадании" в правило проделывать доп. операцию - выборка
> "подочереди" по ключу-IPшнику.
>
не так :) все проще
в кернеле есть очереди которые создаются при помощи директивы queue
в элементе очереди есть поинтер на имя интерфейса этой очереди.
pf классифицирет IP адреса и задает действие над пакетом, т.е. пакету назначает очередь,
которая уже дальше по ip_output уходит на ether_output далее следует if_output с if_start,
где собственно и происходит обслуживание по очереди.

> Как-то так. У правила указывается родительская очередь, например,
> myparq. У неё должны быть подочереди, например myparq_1, myparq_2,
> myparq_3, и т.д., по количеству IPшников в сабнэте. Они делаются
> руками, или сплитятся на основании имеющегося pf правила, неважно
> пока.
> К pf правилу может быть например keyword какой-нибудь, указывающий что
> при "попадании" надо брать не указанную к нему родительскую myparq, а
> проделывать поиск нужной "подочереди" по ключу-IPшнику (ну, брать,
> например, от числового представления IP отнять числовое представление
> сети, получим "номер"; и далее имя очереди - myparq_номер).
> И пакет сувать в эту "подочередь".
> А?

приоритезацию же можно делать не только по IP,
но и по портам, что делать тогда?

--
Динар Талыпов


Reply | Threaded
Open this post in threaded view
|

Re: Re[2]: динамические очереди

Anton Maksimenkov-2
28 мая 2009 г. 17:05 пользователь Dinar Talypov <[hidden email]> написал:
>> Хорошо. При "попадании" в правило проделывать доп. операцию - выборка
>> "подочереди" по ключу-IPшнику.
>>
> не так :) все проще
> в кернеле есть очереди которые создаются при помощи директивы queue
> в элементе очереди есть поинтер на имя интерфейса этой очереди.
> pf классифицирет IP адреса и задает действие над пакетом, т.е. пакету назначает очередь,
покажи пожлста место в коде

>> К pf правилу может быть например keyword какой-нибудь, указывающий что
>> при "попадании" надо брать не указанную к нему родительскую myparq, а
>> проделывать поиск нужной "подочереди" по ключу-IPшнику (ну, брать,
>> например, от числового представления IP отнять числовое представление
>> сети, получим "номер"; и далее имя очереди - myparq_номер).
>> И пакет сувать в эту "подочередь".
> приоритезацию же можно делать не только по IP,
> но и по портам, что делать тогда?

Да всё так же.
Сейчас же как? Какое правило "выиграло" в ту очередь пакет и пойдёт.
Если кто-то хочет разные очереди по портам, он пишет разные правила
для портов и назначает этим правилам разные очереди.

Мечтаемый хак делает что? Распихивает пакеты, попадающие в правило, по
отдельным подочередям родительской очереди, выбирая их СОГЛАСНО
IPшнику. Чтобы выбирать подочереди по портам речи не было. Да и как ты
это представляешь?
Поэтому, всё подобно тому как есть сейчас - кто-то может написать
разные правила для разных портов и назначить им разные _родительские_
очереди. Пакет "попадая" под правило будет закинут в подочередь
_родительской очереди данного правила_ СОГЛАСНО IPшнику.
Я чую тут есть какой-то ньюанс, но живой пример придумаю попозже.
--
antonvm
Reply | Threaded
Open this post in threaded view
|

Re: Re[2]: динамические очереди

Dinar Talypov
On Thu, 28 May 2009 18:23:30 +0600
Anton Maksimenkov <[hidden email]> wrote:

> 28 мая 2009 г. 17:05 пользователь Dinar Talypov <[hidden email]> написал:
> >> Хорошо. При "попадании" в правило проделывать доп. операцию - выборка
> >> "подочереди" по ключу-IPшнику.
> >>
> > не так :) все проще
> > в кернеле есть очереди которые создаются при помощи директивы queue
> > в элементе очереди есть поинтер на имя интерфейса этой очереди.
> > pf классифицирет IP адреса и задает действие над пакетом, т.е. пакету назначает очередь,
> покажи пожлста место в коде

например в pf.c такие строчки функция pf_test:
5587:        if (s) {
5588:                pf_scrub_ip(&m, s->state_flags, s->min_ttl, s->set_tos);
5589:                pf_tag_packet(m, s->tag, s->rtableid);
5590:                if (pqid || (pd.tos & IPTOS_LOWDELAY))
5591:                        qid = s->pqid;
5592:                else
5593:                        qid = s->qid;
5594:        } else {
5595:                pf_scrub_ip(&m, r->scrub_flags, r->min_ttl, r->set_tos);
5596:                pf_tag_packet(m, r->tag, r->rtableid);
5597:                if (pqid || (pd.tos & IPTOS_LOWDELAY))
5598:                        qid = r->pqid;
5599:                else
5600:                        qid = r->qid;
5601:        }
5602:
5603:        if (dir == PF_IN && s && s->key[PF_SK_STACK])
5604:                m->m_pkthdr.pf.statekey = s->key[PF_SK_STACK];
5605:
5606: #ifdef ALTQ
5607:        if (action == PF_PASS && qid) {
5608:                m->m_pkthdr.pf.qid = qid;
5609:                m->m_pkthdr.pf.hdr = h; /* hints for ecn */
5610:        }
5611: #endif /* ALTQ */

где в свою очередь в pf_create_state
3135:        s->qid = act->qid;
3136:        s->pqid = act->pqid;

и r->qid это и есть id очереди в pf_ioctl.c функция pfioctl():

1122:
1123: #ifdef ALTQ
1124:                /* set queue IDs */
1125:                if (rule->qname[0] != 0) {
1126:                        if ((rule->qid = pf_qname2qid(rule->qname)) == 0)
1127:                                error = EBUSY;
1128:                        else if (rule->pqname[0] != 0) {
1129:                                if ((rule->pqid =
1130:                                    pf_qname2qid(rule->pqname)) == 0)
1131:                                        error = EBUSY;
1132:                        } else
1133:                                rule->pqid = rule->qid;
1134:                }
1135: #endif

--
Динар Талыпов