"Domaći" Bandwidth Limiter ;)

Hehe evo uradio sam nešto pa da podijelim sa kolegama :slight_smile:

Zatrebao mi je neki bandwidth limiter pošto dijelim konekciju sa drugom, pa da ne bih ja sve vukao ili on, dogovorili smo se da ograničimo protok na pola. On ima neki Winblowz Limiter, a ja nisam imao ništa… So I made my own :slight_smile:

Našao sam jednu zgodnu bash skriptu koja ograničava protok na eth0, sredio je da može da uzima parametre sa konzole i onda napravio jednostavan GUI sa PyGTK koji će da je poziva. Sve ukupno trajalo je oko jedan sat rada i isplatilo se jer sad i ja imam limiter i to home-made :wink:

http://toroman.objectis.net/dirlinux/limiter.tar.gz/view

Imam i još par blesavih PyGTK programčića koje bih takođe mogao da objavim, samo da ih malo doradim. Ne želim da se pre-eksponiram već samo da objavim programe da ne gubite vrijeme ako već imate iste probleme.

I ja sam se nedavno zezao sa nečim sličnim. Pošto sam povezan na net preko bežične mreže, htio sam mi vanjski saobraćaj ima veći prioritet u odnosu na lokalni. Ako npr. skidam nešto sa lokalnog DC huba i sa Interneta onda mi je vanjski saobraćaj 4× brži od unutrašnjeg. Evo skripti, ako nekog zanima:

/etc/ppp/ip-up:

[code]#!/bin/sh

DEV="$1"

TC="/sbin/tc"
IP="/sbin/ip"
IPTABLES="/sbin/iptables"

LOCALNET=“10.51.0.0/16”

propusni opseg u kbit/s

mnogo je preciznije kad se umjesto nominalne vrijednosti (512)

stavi nešto manja vrijednost (512-10%=~460, npr.)

BANDWIDTH_IN=480
BANDWIDTH_OUT=480

dio za prioritetni saobraćaj u procentima, npr. PRIO_OUT=80 (80%)

PRIO_IN=80
PRIO_OUT=80

BANDWIDTH_IN_HIGH=expr $BANDWIDTH_IN \* $PRIO_IN \/ 100
BANDWIDTH_IN_LOW=expr $BANDWIDTH_IN \- $BANDWIDTH_IN_HIGH
BANDWIDTH_OUT_HIGH=expr $BANDWIDTH_OUT \* $PRIO_OUT \/ 100
BANDWIDTH_OUT_LOW=expr $BANDWIDTH_OUT \- $BANDWIDTH_OUT_HIGH

$TC qdisc add dev $DEV root handle 1: hfsc default 10
$TC class add dev $DEV parent 1: classid 1:1 hfsc sc rate ${BANDWIDTH_OUT}kbit ul rate ${BANDWIDTH_OUT}kbit
$TC class add dev $DEV parent 1:1 classid 1:10 hfsc sc rate ${BANDWIDTH_OUT_HIGH}kbit ul rate ${BANDWIDTH_OUT}kbit
$TC class add dev $DEV parent 1:1 classid 1:11 hfsc sc rate ${BANDWIDTH_OUT_LOW}kbit ul rate ${BANDWIDTH_OUT}kbit
$TC qdisc add dev $DEV parent 1:11 handle 11: sfq perturb 10
$TC filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip dst $LOCALNET flowid 1:11

$IP link set imq0 up
$TC qdisc add dev imq0 root handle 1: hfsc default 10
$TC class add dev imq0 parent 1: classid 1:1 hfsc sc rate ${BANDWIDTH_IN}kbit ul rate ${BANDWIDTH_IN}kbit
$TC class add dev imq0 parent 1:1 classid 1:10 hfsc sc rate ${BANDWIDTH_IN_HIGH}kbit ul rate ${BANDWIDTH_IN}kbit
$TC class add dev imq0 parent 1:1 classid 1:11 hfsc sc rate ${BANDWIDTH_IN_LOW}kbit ul rate ${BANDWIDTH_IN}kbit
$TC qdisc add dev imq0 parent 1:11 handle 11: sfq perturb 10
$TC filter add dev imq0 protocol ip parent 1:0 prio 1 u32 match ip src $LOCALNET flowid 1:11
$IPTABLES -t mangle -A PREROUTING -i ppp0 -j IMQ --todev 0[/code]
/etc/ppp/ip-down:

[code]#!/bin/sh

DEV="$1"

TC="/sbin/tc"
IP="/sbin/ip"
IPTABLES="/sbin/iptables"

$IPTABLES -t mangle -F
$TC qdisc del dev $DEV root &> /dev/null
$TC qdisc del dev imq0 root &> /dev/null
$IP link set imq0 down[/code]

Pa nije valjda da direktno kucate tc komande :slight_smile: To mu ga dođe ko programiranje u assembleru.
Probajte HTB tools: http://htb-tools.arny.ro/news.php

(HTB je inače ime najpopularnijeg algoritma za traffic shaping na Linuxu)

Not now, John!, jel radi taj IMQ kako treba? Ja sam se par puta opržio u kombinaciji Samba+IMQ

Mora se ručno, ako hoćeš da ti radi kako treba. :smiley:

Inače, ono što sam ja stavio su skripte koje se nalaze u /etc/ppp folderu i svaki put kad se uspostavi PPPoE veza poziva se ip-up skripta, a kad pukne veza, poziva se ip-down.

Što se tiče IMQ kod mene radi dobro, bar u vremenima kad nema zagušenja, pošto deklarisana brzina u skriptu mora da bude manja od stvarne da bi to radilo. Npr. skidam nešto u lokalnoj mreži brzinom 60 kB/s, ali kad sam na YouTube ili skidam nešto s Neta, padne na 15 kB/s.

Vidio link što si dao za probleme sa IMQ i nisam primijetio nikakve probleme, a kamoli kernel panic, mada je kod mene konfiguracija prilično jednostavna, bez nekakvog tuneliranja i ko zna čega.