Вот перевод текста на русский язык:
Вот ещё один скрипт для пользователей PPPoE. Этот скрипт снизит скорость загрузки пользователя на 1/4 от его назначенной скорости. Например, если пользователю назначена скорость 128000/256000, то 256000 делится на 64000, и это значение вычитается из скорости загрузки. Таким образом, 256000 - 64000 = 192000. Следовательно, новая скорость теперь 128000/192000.
Вот как это работает: у пользователя PPPoE изначально была назначена пропускная способность 128000/512000, но менее чем за 30 минут онлайн он уже скачал более 10 МБ. В этом случае скорость будет снижена до 128000/384000.
Тот же пользователь теперь находится в сети более 30 минут, но менее часа и скачал более 15 МБ. Скорость теперь будет снижена до 128000/288000.
Опять же, тот же пользователь находится в сети более часа, но менее 5 часов и скачал более 50 МБ. Скорость теперь будет снижена до 128000/216000.
Вы можете расширить код, чтобы снижать скорость ещё больше, в зависимости от вашей политики FAP. Надеюсь, вам понравится!
:foreach i in=[/ppp active find] \
do= { \
:set sName [/interface get $i name]
:set sTotalBytes [/queue simple get $sName total-bytes] ; \
:set sUptime [/ppp active get $i uptime]
:set mLimit [/queue simple get $sName max-limit]
:set slashpos [:pic [:find $mLimit "/"]]
:set mdSize [:pic $mLimit [:tonum(([:tonum($slashpos)] +1))] 30]
:set mPart ([:pic $mLimit [:tonum(([:tonum($slashpos)] +1))] 30] / 4)
:set muSize [:pic $mLimit 0 $slashpos]
:if ($sUptime < 30m && $sTotalBytes >10240000) \
do={ \
:set NewSpeed ($muSize . "/" . ($mdSize - $mPart))
:log info ("SPEED " . $sName . " exceeds 10 Mega Bytes and has been online for " . $sUptime . " reducing speed to " . $NewSpeed )
/queue simple set $sName limit-at=$NewSpeed max-limit=$NewSpeed
:log info ("SPEED " . $sName . " Total Download:" . [:tostr($sTotalBytes)] . " and has been online for " . $sUptime )
}
:if ( $sUptime >30m && $sUptime < 1h && $sTotalBytes >15360000) \
do={ \
:set NewSpeed ($muSize . "/" . ($mdSize - $mPart))
:log info ("SPEED " . $sName . " exceeds 15 Mega Bytes and has been online for " . $sUptime . " reducing speed to " . $NewSpeed )
/queue simple set $sName limit-at=$NewSpeed max-limit=$NewSpeed
:log info ("SPEED " . $sName . " Total Download:" . [:tostr($sTotalBytes)] . " and has been online for " . $sUptime )
}
:if ( $sUptime >1h && $sUptime < 5h && $sTotalBytes > 51200000) \
do={ \
:set NewSpeed ($muSize . "/" . ($mdSize - $mPart))
:log info ("SPEED " . $sName . " exceeds 50 Mega Bytes and has been online for " . $sUptime . " reducing speed to " . $NewSpeed )
/queue simple set $sName limit-at=$NewSpeed max-limit=$NewSpeed
:log info ("SPEED " . $sName . " Total Download:" . [:tostr($sTotalBytes)] . " and has been online for " . $sUptime )
}
} any comments are welcome.
Вот ещё один скрипт для пользователей PPPoE. Этот скрипт снизит скорость загрузки пользователя на 1/4 от его назначенной скорости. Например, если пользователю назначена скорость 128000/256000, то 256000 делится на 64000, и это значение вычитается из скорости загрузки. Таким образом, 256000 - 64000 = 192000. Следовательно, новая скорость теперь 128000/192000.
Вот как это работает: у пользователя PPPoE изначально была назначена пропускная способность 128000/512000, но менее чем за 30 минут онлайн он уже скачал более 10 МБ. В этом случае скорость будет снижена до 128000/384000.
Тот же пользователь теперь находится в сети более 30 минут, но менее часа и скачал более 15 МБ. Скорость теперь будет снижена до 128000/288000.
Опять же, тот же пользователь находится в сети более часа, но менее 5 часов и скачал более 50 МБ. Скорость теперь будет снижена до 128000/216000.
Вы можете расширить код, чтобы снижать скорость ещё больше, в зависимости от вашей политики FAP. Надеюсь, вам понравится!
:foreach i in=[/ppp active find] \
do= { \
:set sName [/interface get $i name]
:set sTotalBytes [/queue simple get $sName total-bytes] ; \
:set sUptime [/ppp active get $i uptime]
:set mLimit [/queue simple get $sName max-limit]
:set slashpos [:pic [:find $mLimit "/"]]
:set mdSize [:pic $mLimit [:tonum(([:tonum($slashpos)] +1))] 30]
:set mPart ([:pic $mLimit [:tonum(([:tonum($slashpos)] +1))] 30] / 4)
:set muSize [:pic $mLimit 0 $slashpos]
:if ($sUptime < 30m && $sTotalBytes >10240000) \
do={ \
:set NewSpeed ($muSize . "/" . ($mdSize - $mPart))
:log info ("SPEED " . $sName . " exceeds 10 Mega Bytes and has been online for " . $sUptime . " reducing speed to " . $NewSpeed )
/queue simple set $sName limit-at=$NewSpeed max-limit=$NewSpeed
:log info ("SPEED " . $sName . " Total Download:" . [:tostr($sTotalBytes)] . " and has been online for " . $sUptime )
}
:if ( $sUptime >30m && $sUptime < 1h && $sTotalBytes >15360000) \
do={ \
:set NewSpeed ($muSize . "/" . ($mdSize - $mPart))
:log info ("SPEED " . $sName . " exceeds 15 Mega Bytes and has been online for " . $sUptime . " reducing speed to " . $NewSpeed )
/queue simple set $sName limit-at=$NewSpeed max-limit=$NewSpeed
:log info ("SPEED " . $sName . " Total Download:" . [:tostr($sTotalBytes)] . " and has been online for " . $sUptime )
}
:if ( $sUptime >1h && $sUptime < 5h && $sTotalBytes > 51200000) \
do={ \
:set NewSpeed ($muSize . "/" . ($mdSize - $mPart))
:log info ("SPEED " . $sName . " exceeds 50 Mega Bytes and has been online for " . $sUptime . " reducing speed to " . $NewSpeed )
/queue simple set $sName limit-at=$NewSpeed max-limit=$NewSpeed
:log info ("SPEED " . $sName . " Total Download:" . [:tostr($sTotalBytes)] . " and has been online for " . $sUptime )
}
} any comments are welcome.
