zevgen Опубликовано 2 ноября, 2010 (изменено) · Жалоба ждем поддержку prio и ceil. Хотел прикрутить сам, но perl мне чужд. Изменено 2 ноября, 2010 пользователем zevgen Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 2 ноября, 2010 (изменено) · Жалоба ждем поддержку prio и ceil. Хотел прикрутить сам, но perl мне чужд. prio нужно не для шейпинга, а для разных типов трафика (в зависимости от значения DSCP и номера порта). Я уже где-то выше говорил, что это надо делать на отдельной машине. Поддержку ceil достаточно легко сделать с помощью некоторого глобального коэффициента, на который домножаются rate, но не в виде еще одной записи в базе данных. Кстати, я думаю, что базу лучше делать так: таблица должна иметь вид IP*, id тарифа (* -- первичный ключ). Само описание тарифов задано либо в виде отдельной SQL-таблицы (id*, download rate, upload rate, ceil), либо в текстовой форме в sc.conf. Иначе в базе будет храниться много избыточной информации. Изменено 2 ноября, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
zevgen Опубликовано 2 ноября, 2010 (изменено) · Жалоба prio при шейпинге не нужно Поясните пожалуйста. Многие используют приоритеты проектируя тарифы, когда цена за мегабит магистрали больше, чем цена за мегабит для клиента. Вот и приходится извращаться. Идея с отдельной таблицей с описанием тарифов - правильная, мне кажется. Изменено 2 ноября, 2010 пользователем zevgen Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 2 ноября, 2010 (изменено) · Жалоба prio при шейпинге не нужноПоясните пожалуйста. Многие используют прио проектируя тарифы, когда цена за мегабит магистрали больше, чем цена за мегабит для клиента. Вот и приходится извращаться. Идея с отдельной таблицей с описанием тарифов - правильная, мне кажется. А, ну если так, то prio тоже нужно. Но тогда prio тоже должно быть одним из полей таблицы с описанием тарифа. Если и делать prio и ceil, то сразу с таблицей для тарифов. Это довольно глобальное изменение, смогу этим заняться месяца через два. Изменено 2 ноября, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
wtyd Опубликовано 16 ноября, 2010 · Жалоба Пытаюсь разобраться в синтаксисе правил, которые генерит sc. "... mask 0x000000ff at 12 link 204:" - это кусок фильтра при инициализации. 204 это как бы номер подсети класса С ? В моём случае, я в конфиге указал две подсети /20 и /19. Что означает "at 12" ? На другом интерфейсе этот параметр равен 16. Ещё нашёл вот такую программу на С: http://vcalinus.gemenii.ro/?p=9 Там почему-то независимо от интерфейса at 12 генерится. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 16 ноября, 2010 (изменено) · Жалоба Пытаюсь разобраться в синтаксисе правил, которые генерит sc. "... mask 0x000000ff at 12 link 204:" - это кусок фильтра при инициализации. 204 это как бы номер подсети класса С ? В моём случае, я в конфиге указал две подсети /20 и /19. Нет, это номер хэш-фильтра следующего уровня вложенности для хэширования по последнему байту. Что означает "at 12" ? На другом интерфейсе этот параметр равен 16.Означает чтение двойного слова по смещению 12 и 16. Это source и destination IP. Если интерфейс шейпит исходящий от юзера трафик, то классификация делается по IP источника, если входящий к юзеру, то по IP назначения. Ещё нашёл вот такую программу на С: http://vcalinus.gemenii.ro/?p=9 Там почему-то независимо от интерфейса at 12 генерится. Видимо, потому что она не рассчитана на решение реальных задач. Изменено 16 ноября, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
wtyd Опубликовано 16 ноября, 2010 · Жалоба Пытаюсь разобраться в синтаксисе правил, которые генерит sc. "... mask 0x000000ff at 12 link 204:" - это кусок фильтра при инициализации. 204 это как бы номер подсети класса С ? В моём случае, я в конфиге указал две подсети /20 и /19. Нет, это номер хэш-фильтра следующего уровня вложенности для хэширования по последнему байту. Что означает "at 12" ? На другом интерфейсе этот параметр равен 16.Означает чтение двойного слова по смещению 12 и 16. Это source и destination IP. Если интерфейс шейпит исходящий от юзера трафик, то классификация делается по IP источника, если входящий к юзеру, то по IP назначения. Ещё нашёл вот такую программу на С: http://vcalinus.gemenii.ro/?p=9 Там почему-то независимо от интерфейса at 12 генерится. Видимо, потому что она не рассчитана на решение реальных задач. Это я при запуске ошибся. 12 или 16 там будет в зависимости от указания параметра src/dst. С месяц назад знакомый использовал эту прогу для генерации фильтров, говорит, что всё клёво стало :-). Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 16 ноября, 2010 (изменено) · Жалоба Думаю, что в будущем стоит выделить код для генерации хэш-фильтров по списку подсетей в отдельный модуль и выложить на СPAN. Изменено 16 ноября, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
wtyd Опубликовано 18 ноября, 2010 · Жалоба Ещё столкнулся с такой проблемой: filter replace dev eth1 parent 1: pref 20 handle 200:9 u32 ht 200:9: match ip src 192.168.0.9 flowid 1:1000 - такое правило работает, в тоже время filter replace dev eth1 parent 1: pref 20 handle 200:0 u32 ht 200:0: match ip src 192.168.0.0 flowid 1:1000 - не работает из-за "handle 200:0". Можно не указывать handle - правило добавляется, но работаетили нет пока не могу проверить. В prefixtree.c параметр handle вообще не используется, т.е. где посмотреть, зачем нужен handle и почему он именно такой вид имеет, я не знаю. Скажите, зачем нужен handle ? Почему он имеет такой же вид как ht (номер hash table видимо) ? Как лучше поступить с адресами *.0 ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
wtyd Опубликовано 18 ноября, 2010 · Жалоба Из мана: add Add a qdisc, class or filter to a node. For all entities, a parent must be passed, either by passing its ID or by attaching directly to the root of a device. When creating a qdisc or a filter, it can be named with the handle parameter. A class is named with the classid parameter. remove A qdisc can be removed by specifying its handle, which may also be 'root'. All subclasses and their leaf qdiscs are automatically deleted, as well as any filters attached to them. Т.е. handle это такая "ручка", за которую можно взять и удалить именно этот фильтр ? Т.е. просто как название или идентификатор используется и других функций этот параметр не выполняет ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 19 ноября, 2010 (изменено) · Жалоба Да, это некий идентификатор, по которому осуществляется изменение/удаление фильтра. handle в моих правилах равен ht:key. Я уже не помню, будет ли работать, если выбирать handle по-другому. Изменено 19 ноября, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
wtyd Опубликовано 19 ноября, 2010 · Жалоба Да, это некий идентификатор, по которому осуществляется изменение/удаление фильтра. handle в моих правилах равен ht:key для упрощения вычислений. У меня не получается делать handle по схеме ht:key для адресов , которые заканчиваются на ноль, т.е. tc не даёт добавить фильтр с ht:0, с другими цифрами в конце даёт, но в огранчиенном диапазоне - ht:ff добавить ещё можно, а ht:101 уже нельзя. Т.е. проблема как бы не в том, что мне нужен handle - добавить можно и без указания handle, проблема в удалении именно этого правила - не удаляется без явного указания handle, даже если удалять в точности так же как добавлял (re[lace -> del). Допустимый синтаксис handle я никгде пока не нашёл. Правила с другими handle добавляются и удаляются по handle номрально. Не подскажете, что делать с адресами, которые заканчиваются на ноль ? Пока я просто не добавляю такие адреса в фильтры. Не знаю, хорошо это или нет :-). Вдруг кто-то догадается заюзать такой адрес, придётся говорить ему, что "нельзя использовать адрес подсети" :-). Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 20 ноября, 2010 (изменено) · Жалоба Пока я просто не добавляю такие адреса в фильтры. Не знаю, хорошо это или нет :-). Вдруг кто-то догадается заюзать такой адрес, придётся говорить ему, что "нельзя использовать адрес подсети" :-). handle тоже не может иметь младший байт больше ff, поэтому придется в скрипте ввести запрет на добавление IP с нулевым последним октетом. Изменено 20 ноября, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 20 ноября, 2010 (изменено) · Жалоба Давно юзаю нулевые адреса, нужно указывать handle как ht:key:800, где 800 ID таблицы для входа в хэш, которая указывается как ht 800:: при создании. Вот мой рабочий пример: filter replace dev eth0 protocol ip parent 1:0 prio 5 handle 21:00:800 u32 ht 21:00: match ip dst x.x.x.0 classid 1:328 filter replace dev eth1 protocol ip parent 1:0 prio 5 handle 21:00:800 u32 ht 21:00: match ip src x.x.x.0 classid 1:328 Изменено 20 ноября, 2010 пользователем SokolovS Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 20 ноября, 2010 (изменено) · Жалоба Спасибо, учту. Вот ведь бред с этими фильтрами u32: не документировано ничего, приходится наобум делать. Изменено 20 ноября, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 20 ноября, 2010 · Жалоба Да, тоже методом тыка нашел. Пробовал и потом смотрел как оно потом отображает этот handle. Документация реально очень отстает :( Подсистема очень важная а доков кот наплакал. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 21 ноября, 2010 · Жалоба Сделал багфикс-релиз 1.3.2 по этому поводу. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
minderm Опубликовано 3 декабря, 2010 · Жалоба А есть возможность разделить скрипт на два файла, в первом чтоб были все функции, а во втором непосредственно исполнительный код. Интересуюсь, так как часть функций использую в своей программе, и с каждой новой версией вырезать парит уже. А в целом, очень удачный проект получился. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 3 декабря, 2010 (изменено) · Жалоба Я планирую сделать отдельные модули для генераторов правил (flow.pm и u32.pm), т.к. скрипт уже содержит более 2000 строк кода. Наверное, было бы неплохо еще и поддержку ipfw/dummynet добавить, для полноты картины. Изменено 3 декабря, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
minderm Опубликовано 20 декабря, 2010 · Жалоба Подскажите, как грамотно внести изменения в программу, чтоб можно было вешать на каждого юзера htb, для приоритезации трафика. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 21 декабря, 2010 · Жалоба Подскажите, как грамотно внести изменения в программу, чтоб можно было вешать на каждого юзера htb, для приоритезации трафика. Это вы зря :) Читайте тут уже были похожие вопросы. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
chixpyx Опубликовано 27 января, 2011 · Жалоба Я полагаю, что шейпер по возможности лучше делать в виде простого моста, на чистом tc, чтобы не связываться с iptables и его проблемами с блокировками. А всевозможные Netflow и NAT делать на других машинах. В принципе, потом можно будет придумать какую-то опцию для совместного использования u32 и ipset, но сейчас главное получить правильно работающую функцию, которая отображает IP-адреса из указанных сетей на пространства классов и фильтров. Если честно не очень понял в результате прочтения всего треда, так есть возможность запуска на мосту или нет, а если есть то что настраивается в качестве внутреннего и внешнего интерфейса. Заранне спасибо, ЧихПых. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 27 января, 2011 (изменено) · Жалоба Если честно не очень понял в результате прочтения всего треда, так есть возможность запуска на мосту или нет, а если есть то что настраивается в качестве внутреннего и внешнего интерфейса. Заранне спасибо, ЧихПых. Конечно можно, я его так и использую. QoS-подсистема оперирует очередями, которые привязаны к сетевому устройству и не имеют отношения к IP-адресам. Внутренним называется интерфейс, который смотрит в вашу сеть, где находятся те, кого надо шейпить. Изменено 27 января, 2011 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
chixpyx Опубликовано 29 января, 2011 (изменено) · Жалоба Если честно не очень понял в результате прочтения всего треда, так есть возможность запуска на мосту или нет, а если есть то что настраивается в качестве внутреннего и внешнего интерфейса. Заранне спасибо, ЧихПых. Конечно можно, я его так и использую. QoS-подсистема оперирует очередями, которые привязаны к сетевому устройству и не имеют отношения к IP-адресам. Внутренним называется интерфейс, который смотрит в вашу сеть, где находятся те, кого надо шейпить. Ну с этим разобрался, в случае симметричного шейпера собсно совершенно фиолетово какой интерфейс ин какой аут.Теперь ещё несколько вопросиков на предмет HOWTO. 1. В теме упоминалась возможность деления группой IP адресов одной полосы (когда у абонента несколько независимых адресов, включая разные подсети, например несколько офисов). 2. Есть ли возможность добавлять не отдельными адресами а сетками, так как некоторые юрики, бывает, пользуют небольшие сеточки на 8-16 адресов. Просто в мане на сей счёт ничего не сказано. 3. Можно ли выполнять параллельно вызовы нескольких экземпляров sc ? Изменено 29 января, 2011 пользователем chixpyx Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 29 января, 2011 (изменено) · Жалоба Ну с этим разобрался, в случае симметричного шейпера собсно совершенно фиолетово какой интерфейс ин какой аут.Теперь ещё несколько вопросиков на предмет HOWTO. 1. В теме упоминалась возможность деления группой IP адресов одной полосы (когда у абонента несколько независимых адресов, включая разные подсети, например несколько офисов). Лучше этого не делать, т.к. придется хранить в базе двусвязный список вместо простого. А с ним работать намного сложнее. 2. Есть ли возможность добавлять не отдельными адресами а сетками, так как некоторые юрики, бывает, пользуют небольшие сеточки на 8-16 адресов.Просто в мане на сей счёт ничего не сказано. Это можно сделать самому, сейчас прямой поддержки подсетей нет. Кроме того, у юриков должен быть свой маршрутизатор, как они там дальше будут делить одну полосу между своими IP -- уже не наше дело. 3. Можно ли выполнять параллельно вызовы нескольких экземпляров sc ?Зависит от нескольких факторов: от хранилища и реализации доступа к нему в Perl DBI, от того, можно ли запускать одновременно несколько экземпляров tc. Например, в случае PostgreSQL это возможно, а в случае SQLite тупо блокируется файл, и вся база становится недоступна для записи. Насчет нескольких tc, которые будут одновременно создавать правила, я сомневаюсь. Да и смысла в этом немного, и так правила достаточно быстро создаются. Изменено 29 января, 2011 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...