Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генератор шейпера 
:(
    Опции темы
taric
Дата 17.9.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 17.9.2009

Репутация: нет
Всего: нет



Возникла задача из старого шейпера генерировать новый но с хешами, для этого парсю старый с которого выбираю IP и скорость абонента:

Код

while ($line=<F>) {
    if ($line=~ /rate\s(\d+bit)\sceil\s(\d+bit)\sprio\s\d\squantum\s(\d+)/) {
    push (@array_r,"$1");
    push (@array_c,"$2");
    push (@array_q,"$3");
    }
    elsif ($line=~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s)/) {
    $ip=$1;
    chop($ip);
    push (@array_i, "$ip");
    }
}


трудность состоит в том что у нас 4 сети /16, правила нужно создавать для сетей /24. В цыкле для /16 это выглядит так:

Код

print OFIL <<EOF;
####################################################################################
# init hash filters 10.30.0.0/16$ret
$tc filter add dev $dev parent 12: prio 3 handle 3: protocol ip u32 divisor 256$ret
$tc filter add dev $dev parent 12: prio 3 handle 4: protocol ip u32 divisor 256$ret
$tc filter add dev $dev protocol ip parent 12: prio 3 u32 match ip $DIRECT 10.30.0.0/16 hashkey mask 0x0000ff00 at $p
$tc filter add dev $dev protocol ip parent 12: prio 3 u32 match ip $DIRECT 10.30.0.0/16 hashkey mask 0x000000ff at $p
EOF
for ($ind=0; $ind<=$#array_i; $ind++) {
    $array_i[$ind]=~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/;
        my $c1=$1;
        my $c2=$2;
        my $c3=$3;
        my $c4=$4;
        my $hex_c3 = sprintf "%x",$c3;
        my $hex_c4 = sprintf "%x",$c4;
        my $qh = $qhandle++;
        my $sqh = sprintf("%04x", $qh);
    if ($1==10) {
        if ($2==30) {
        printf OFIL "$tc class add dev $dev parent 12: classid 12:$sqh htb rate $array_c[$ind] ceil $array_c[$ind] qu
        printf OFIL "$tc qdisc add dev $dev parent 12:$sqh handle $sqh: sfq perturb 5$ret\n";
        printf OFIL "$tc filter add dev $dev protocol ip parent 12: prio 7 u32 ht 3:$hex_c3: ht 4:$hex_c4: match ip $
        printf OFIL "\n";
        }
    }
}
printf OFIL "$tc filter add dev $dev protocol ip parent 12:0  prio 4 u32 match ip $DIRECT 10.30.0.0/16 flowid 1:3$ret

 
Но нужно сделать также только для каждой сети /24 в этой сети /16.
С перлом знаком неделю.... Что подскажете?


Это сообщение отредактировал(а) taric - 17.9.2009, 10:14
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0397 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.