Iptable limiter mumble probleme avec trikle

hello :smt006
le titre est peut être pas assez explicite si quelqu’un une idée ?
désoler pour les acent je sais pas pourquoi sa me plante des ? a la places ??

Explication:
j’ai un problème trikle ne limite pas mumble comme il ce doit :frowning:
donc je voudrai passer par iptables et limiter la bande passante de muble en me basent sur le port.
le down est limiter automatiquement puisque c’est le upload qui prime .

le principe:
Le souci ici c’est que c’est configurer de manière a ce que les application puisse avoir aux moins leur bande passante. Et si le reste de la bande passante n’est pas utilisée par une autre application (donc 2 appli), L’application (donc 1 seul) peux donc utiliser toutes la bande passante.

donc ici je voudrai que mumble puisse avoir 15 kbit aux minimum et 20kbit aux maximum

function quos {
#bp max 50kbit en up
#eth = votre interface eth0 ?
RATEUP1="15kbit" #mumble
RATEUP2="500kbit" #taill des paquet
RATEUP3="100mbit" #http ftp 
RATEUP4="30kbit" #spring 
RATUOLAN="100mbit" #lan samba
	affectemark ()
	# affecte [nom] [sens] [port] [protocole] [categorie]
	# sens = s ou d, protocole = udp ou tcp categorie = 0->?
	{
		#echo [$1 : $5]
		if [ $1 == "spring" ] ;then
			iptables -t mangle -A MONLIMITEUR-OUT -p $4 --$2port $3 -j ULOG --ulog-prefix="SpringQos"
		fi
		iptables -t mangle -A MONLIMITEUR-OUT -p $4 --$2port $3 -j MARK --set-mark 2$5
		iptables -t mangle -A MONLIMITEUR-OUT -p $4 --$2port $3 -j RETURN
	}
	affecthandle () 
	{
		tc qdisc add dev $1 parent $2:$3 handle $4: sfq perturb $5
	}
	affectprio ()
	{
		tc filter add dev $1 parent 1:0 prio 0 protocol ip handle $2 fw flowid $3:$4
	}

ip link set dev $eth qlen 40

# ajout de la strategie HTB
# les noms des queues sont de 20 a 2?, je les conserve
#
tc qdisc add dev $eth root handle 1: htb default 28

# 4 classes meres differentes
tc class add dev $eth parent 1: classid 1:1 htb rate $RATEUP1
tc class add dev $eth parent 1: classid 1:2 htb rate $RATEUP2
tc class add dev $eth parent 1: classid 1:3 htb rate $RATUOLAN
tc class add dev $eth parent 1: classid 1:4 htb rate $RATEUP3
tc class add dev $eth parent 1: classid 1:5 htb rate $RATEUP4
# ajout des classes filles:
# chaque classe dispose AU MOINS de son quota de bande passante. Aucune
# classe n'est donc étouffée par les autres. Chaque classe peut également
# consommer toute la bande passante si aucune autre classe ne l'emploie.
# C'est l'intérêt des classes filles si j'ai bien compris, les classes mères
# ne partage pas leur part de bande passante donc on leur atribue 
# ce qu'il faut dans les variables globale en debut du script sans dépasser
# la bande passante total
#
#ceil * est le délai avant la reprise d'un transfère après avoir epuiser le seau de jeton
#la durée est l'équivalent aux nombre de jeton nombre de jeton  
# ratup donne le debit avec un seau plein si vide ceil defini le temp du drop puis le
#ratup est a nouveau plein
tc class add dev $eth parent 1:1 classid 1:20 htb rate $RATEUP1 ceil $RATEUP1 prio 0
# Les autres classes
tc class add dev $eth parent 1:2 classid 1:21 htb rate $RATEUP2 ceil $RATEUP2 prio 0
# telnet, ssh,X
tc class add dev $eth parent 1:2 classid 1:22 htb rate $RATEUP2 ceil $RATEUP2 prio 1
# ports bas, messagerie AOL, MSN
tc class add dev $eth parent 1:2 classid 1:23 htb rate $RATEUP2 ceil $RATEUP2 prio 2
# WWW
tc class add dev $eth parent 1:2 classid 1:24 htb rate $RATEUP2 ceil $RATEUP2 prio 3
# Edonkey (� l'origine)
tc class add dev $eth parent 1:2 classid 1:25 htb rate $RATEUP2 ceil $RATEUP2 prio 4
#lan
tc class add dev $eth parent 1:3 classid 1:26 htb rate $RATUOLAN ceil $RATUOLAN prio 5
#http 21
tc class add dev $eth parent 1:4 classid 1:27 htb rate $RATEUP3 ceil $RATEUP3 prio 5
#spring
tc class add dev $eth parent 1:5 classid 1:28 htb rate $RATEUP4 ceil $RATEUP4 prio 6
# ajout de la stratégie aux classes filles
# - SFQ offre un traitement sensiblement équitable de chaque classe.

#bouclage possible possible de 9 table
maxtable="8" # max 9 , pour en avoir plus il faut crée une 2 eme boucle(ou modifier celle-ci
boucle="true"
while $boucle
do
	I=$(($I+1))
	affecthandle "$eth" 1 2$I 2$I 2$I
# répartition du trafic en classe via fwmark
# - le trafic est reparti en classes de priorite suivant l'indicateur
#   fwmark des paquets (ceux-ci sont positionnes avec iptables un peu plus
#   loin). La classe de priorite par defaut a ete mise a 1:2? de telle sorte
#   que les paquets qui ne sont pas marques se retrouvent dans la classe de
#   priorit� la plus faible.

	affectprio "$eth" 2$I 1 2$I
	if [ $I == $maxtable ] ;then
		boucle="false"
	fi 
done

#
# ajout de MONLIMITEUR-OUT � la table de modification des paquets d'iptables
# ceci d�clare la table employ�e pour filtrer et classer les paquets
iptables -t mangle -N MONLIMITEUR-OUT
iptables -t mangle -I POSTROUTING -o $eth -j MONLIMITEUR-OUT
# ajout de fwmark pour classer les diff�rents types de trafic
# - fwmark est positionn� de 20 � 25 suivant la classe. 20 correspond � la
#   priorit� la plus forte.
#special ne passe pas dans la fonction (la ca son rare)
iptables -t mangle -A MONLIMITEUR-OUT -p icmp -j MARK --set-mark 24
#passage en paramettre a la fonction 
# function commentaire por de destination (s ou d ) protocole prioriter de 0 a 8 (28)
affectemark "mumble" d 64738 udp 5
affectemark "DNS" d 53 udp 0
affectemark "spring" d 8452:8460 tcp 8
affectemark "spring" d 8452:8460 udp 8
affectemark "spring" d 8469 tcp 8
affectemark "spring" d 8469 udp 8
affectemark "spring" d 9999 tcp 8
affectemark "spring" d 9999 udp 8
affectemark "Http" d 80:82 udp 7
affectemark "Http2" d 80:82 tcp 7
affectemark "ftp" d 21 udp 7
affectemark "ftp" d 21 tcp 7
#affecte "exemple plage port" d 6112:6119 tcp 1
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length 0:32 -j MARK --set-mark 20
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length 0:32 -j RETURN
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m length --length 0:32 -j MARK --set-mark 20
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m length --length 0:32 -j RETURN
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length 33:60 -j MARK --set-mark 21
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length 33:60 -j RETURN
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m length --length 33:50 -j MARK --set-mark 21
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m length --length 33:50 -j RETURN
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length 51:100 -j MARK --set-mark 25
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length 51:100 -j RETURN
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m length --length 51:100 -j MARK --set-mark 25
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m length --length 51:100 -j RETURN
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length 101:1200 -j MARK --set-mark 24
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length 101:1200 -j RETURN
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m length --length 101:1200 -j MARK --set-mark 24
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m length --length 101:1200 -j RETURN
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length 1200:1501 -j MARK --set-mark 22
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length 1200:1501 -j RETURN
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m length --length 1200:1501 -j MARK --set-mark 22
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m length --length 1200:1501 -j RETURN
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m iprange --src-range $pcip_reseaux --dst-range $pcip_me -j MARK --set-mark 26
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m iprange --src-range $pcip_reseaux --dst-range $pcip_me -j RETURN
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m iprange --dst-range $pcip_reseaux --src-range $pcip_me -j MARK --set-mark 26
iptables -t mangle -A MONLIMITEUR-OUT -p udp -m iprange --dst-range $pcip_reseaux --src-range $pcip_me -j RETURN
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m iprange --src-range $pcip_reseaux --dst-range $pcip_me -j MARK --set-mark 26
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m iprange --src-range $pcip_reseaux --dst-range $pcip_me -j RETURN
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m iprange --dst-range $pcip_reseaux --src-range $pcip_me -j MARK --set-mark 26
iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m iprange --dst-range $pcip_reseaux --src-range $pcip_me -j RETURN
# les paquets udp sont des paquets de jeu
#iptables -t mangle -A MONLIMITEUR-OUT -p udp -j MARK --set-mark 21
# Petits paquets (des ACK probablement)
#echo [petits paquets: 1]
#iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length :64 -j MARK --set-mark 21
#iptables -t mangle -A MONLIMITEUR-OUT -p tcp -m length --length 65:128 	-j MARK --set-mark 22

# on marque les paquets restants  29 (faible priorité)
iptables -t mangle -A MONLIMITEUR-OUT -m mark --mark 0 -j MARK --set-mark 29

}

quos
echo "fin pour quos"

:smt100 :smt100

Merci d’avance

(Tu es parti de mon script limiteur2tranches?)

Le principe d’avoir plusieurs tranches est que la bande passante est découpée en tranches non partageables. Si tu veux que plusieurs applications partagent la totalité de la bande passante, il te faut mettre toutes ces applications dans la même tranche, c’est à dire dans des classes appartenant à la même classe mère.

Merci pour ta réponse :slightly_smiling:
oui je me suis servis de ton script en partie et de google pour des explications :slightly_smiling:
Quelque chose t’a échapper il me semble (ou j’ai rien compris …)
Chaque classe mère dispose aux moins de leur bande passante.
Je gère la priorité des paquets en fonction de l’application via le port et de la taille de ceux-ci

Autre poins, j’attribuai pas les même quantité a chaque classe mère
petit chéma:

total de la bande passante: 50ko/s

classe mère A = 10
classe mère B = 20
Classe mère C = 20

donc sa nous donne:

A a aux moins 10 k
B a aux moins 20 k
C a aux moins 20 k

et non pas A= 25 B=25 C=25

ce que tu semble dire c’est que je devrai faire:

A contiens B et C et une nouvelle classe D ? seulement ça deviens des sous-classes et il me semble que elle peuve ce manger les une aux autres ?

[quote=“panthere”]Merci pour ta réponse :slightly_smiling:
oui je me suis servis de ton script en partie et de google pour des explications :slightly_smiling:
Quelque chose t’a échapper il me semble (ou j’ai rien compris …)
Chaque classe mère dispose aux moins de leur bande passante.[/quote]
Ben si tu te réfères aux explications dans le script, j’ai peut être été peu clair mais il est le AU MOINS concerne les classes filles, PAS les classes mères. La somme de l’upload des classes mères doit être égal à la bande passante total -10% en gros.

Les classes filles se partagent la bande passante de la classe mère en utilisant la totalité de celle ci.

Non, A a 10K et pas plus. B et C 20K et pas plus
Dans le script limiteur2tranches dont [boisson.homeip.net/limiteur2tranches original (à moins que tu ne sois parti de http://boisson.homeip.net/limiteur), la bande passante est divisée en 2 tranches étanches.
Tu dois faire une seule classe contenant la totalité de ta bande passante et des classes filles (à l’image de http://boisson.homeip.net/limiteur)

Merci pour ta réponse :smt006
Bon je me met aux boulot merci de l’information :slightly_smiling:
effectivement sa serai bien de dire qu’une seul classe mère est de mise,comme d’habitude j’avais 1 chance sure 2 et férocement c’est pas la bonne grr

bon sa confirme ce que je dit
sa mange toute la bande passante a savoir 50k et ce pour toute les application

je peux donc pas limiter la bande passante par application. meme celon tes script qui eux ce contente de limiter aux niveau global c’est adire la somme total de toute les application. du moins avec les teste que j’ai realiser avec le 2 eme script ici baser sur 1 classe mère.
hum, je vai essayer d’être plus précis.

1.-ton script tout comme le mien empeche qu’une appli en mange une autre, en fait c’est pas ce que j’ai constater, seul la prioriter marche.
2.- dasn les 2 exemple on limite aux niveau global
3.- contrairement a ce que l’on supose sa ne limite pas la bande passant pour 1 appli seul genre mumble
qui ne devrai pas dépasser 15ko/s , meme si toute la bande passante est prise cela ne marche pas.
4.- le log montre bien que le marqua ge de paquet ce fait bien
voir plus bas pour un resumer des sorties:

syntaxeshort="iptables -t mangle -A MONLIMITEUR-OUT -p "
function quosnew {
CALLCLASSEMERE="50kbit" #bp global sur eth*
CALLSOUSCLASSE1="50kbit" #bp taill des  paquet
CALLSOUSCLASSE2="35kbit" #bp spring min dispo 35 et max 36
CALLSOUSCLASSE3="10kbit" #bp mumble min 10 dispo max 15
CALLSOUSCLASSE4="100mbit" #bp lan samba


	affectemark ()
	# affecte nom sens port protocole categorie
	# sens = s ou d, protocole = udp ou tcp categorie = 0->?
	#
	{
		echo [$1 : $5]
		# shell s	curis
		if [ $1 == "spring" ] ;then
			$syntaxeshort $4 --$2port $3 -j ULOG --ulog-prefix="SpringQos"
		fi
		if [ $1 == "mumble" ] ;then
			$syntaxeshort $4 --$2port $3 -j ULOG --ulog-prefix="Mumble"
		fi
		$syntaxeshort $4 --$2port $3 -j MARK --set-mark 2$5
		$syntaxeshort $4 --$2port $3 -j RETURN
	}
	affecthandle () 
	{

		tc qdisc add dev $1 parent $2:$3 handle $4: sfq perturb $5
	}
	affectprio ()
	{
		tc filter add dev $1 parent 1:0 prio 0 protocol ip handle $2 fw flowid $3:$4
	}

ip link set dev $eth qlen 40

# ajout de la strat�gie HTB
# les noms des queues sont de 20 � 26, je les conserve
#
tc qdisc add dev $eth root handle 1: htb default 28 #racine

tc class add dev $eth parent 1: classid 1:1 htb rate $CALLCLASSEMERE

# ajout des classes filles:
# - chaque classe dispose AU MOINS de son quota de bande passante. Aucune
#   classe n'est donc étouffée par les autres. Chaque classe peut également
#   consommer toute la bande passante si aucune autre classe ne l'emploie.
# poids différents pour les classes
# C'est l'intéret des classes filles si j'ai bien compris, les classes méres
# ne partage pas leur part de bande passante

#ceil * est le délait avant la reprise d'un transfere après avoir epuiser le seau de jeton
#la durée est l'equivalen aux nombre de jeton nombre de jeton  
# ratup donne le debit avec un seau plein si vide ceil defini le temp du drop puis le
#ratup est a nouveau plein
tc class add dev $eth parent 1:1 classid 1:20 htb rate $CALLSOUSCLASSE1 ceil $CALLSOUSCLASSE1 prio 0
# Les autres classes
tc class add dev $eth parent 1:1 classid 1:21 htb rate $CALLSOUSCLASSE1 ceil $CALLSOUSCLASSE1 prio 0
# telnet, ssh,X
tc class add dev $eth parent 1:1 classid 1:22 htb rate $CALLSOUSCLASSE1 ceil $CALLSOUSCLASSE1 prio 1
# ports bas, messagerie AOL, MSN
tc class add dev $eth parent 1:1 classid 1:23 htb rate $CALLSOUSCLASSE1 ceil $CALLSOUSCLASSE1 prio 2
# WWW
tc class add dev $eth parent 1:1 classid 1:24 htb rate $CALLSOUSCLASSE1 ceil $CALLSOUSCLASSE1 prio 3
# mumble

tc class add dev $eth parent 1:1 classid 1:25 htb rate $CALLSOUSCLASSE3 ceil $CALLSOUSCLASSE3 prio 4
#lan

tc class add dev $eth parent 1:1 classid 1:26 htb rate $CALLSOUSCLASSE4 ceil $CALLSOUSCLASSE4 prio 5
#http 21
tc class add dev $eth parent 1:1 classid 1:27 htb rate $CALLSOUSCLASSE1 ceil $CALLSOUSCLASSE1 prio 6
#spring

tc class add dev $eth parent 1:1 classid 1:28 htb rate $CALLSOUSCLASSE2 ceil $CALLSOUSCLASSE2 prio 7
# ajout de la stratégie aux classes filles
# - SFQ offre un traitement sensiblement équitable de chaque classe.

#bouclage possible possible de 9 table
maxtable="8" # max 9 , pour en avoir plus il faut crée une 2 eme boucle(ou modifier celle-ci
boucle="true"
while $boucle
do
	I=$(($I+1))
	affecthandle "$eth" 1 2$I 2$I 2$I
# répartition du trafic en classe via fwmark
# - le trafic est r�parti en classes de priorit� suivant l'indicateur
#   fwmark des paquets (ceux-ci sont positionn�s avec iptables un peu plus
#   loin). La classe de priorit� par d�faut a �t� mise � 1:26 de telle sorte
#   que les paquets qui ne sont pas marqu�s se retrouvent dans la classe de
#   priorit� la plus faible.

	affectprio "$eth" 2$I 1 2$I
	if [ $I == $maxtable ] ;then
		boucle="false"
	fi 
done

#
# ajout de MONLIMITEUR-OUT � la table de modification des paquets d'iptables
# - ceci d�clare la table employ�e pour filtrer et classer les paquets
iptables -t mangle -N MONLIMITEUR-OUT
iptables -t mangle -I POSTROUTING -o $eth -j MONLIMITEUR-OUT
# ajout de fwmark pour classer les diff�rents types de trafic
# - fwmark est positionn� de 20 � 25 suivant la classe. 20 correspond � la
#   priorit� la plus forte.
#special ne passe pas dans la fonction (la ca son rare)
$syntaxeshort icmp -j MARK --set-mark 24
#passage en paramettre a la fonction 
# function commentaire por de destination (s ou d ) protocole prioriter de 0 a 8 (28)
affectemark "mumble" d 64738 udp 4
affectemark "DNS" d 53 udp 0
affectemark "spring" d 8452:8460 tcp 7
affectemark "spring" d 8452:8460 udp 7
affectemark "spring" d 8469 tcp 7
affectemark "spring" d 8469 udp 7
affectemark "spring" d 9999 tcp 7
affectemark "spring" d 9999 udp 7
affectemark "Http" d 80:82 udp 3
affectemark "Http2" d 80:82 tcp 3
affectemark "ftp" d 21 udp 6
affectemark "ftp" d 21 tcp 6
#affecte "exemple plage port" d 6112:6119 tcp 1


$syntaxeshort tcp -m length --length 0:32 -j MARK --set-mark 20
$syntaxeshort tcp -m length --length 0:32 -j RETURN
$syntaxeshort udp -m length --length 0:32 -j MARK --set-mark 20
$syntaxeshort udp -m length --length 0:32 -j RETURN
$syntaxeshort tcp -m length --length 33:60 -j MARK --set-mark 21
$syntaxeshort tcp -m length --length 33:60 -j RETURN
$syntaxeshort udp -m length --length 33:50 -j MARK --set-mark 21
$syntaxeshort udp -m length --length 33:50 -j RETURN
$syntaxeshort tcp -m length --length 51:100 -j MARK --set-mark 25
$syntaxeshort tcp -m length --length 51:100 -j RETURN
$syntaxeshort udp -m length --length 51:100 -j MARK --set-mark 25
$syntaxeshort udp -m length --length 51:100 -j RETURN
$syntaxeshort tcp -m length --length 101:1200 -j MARK --set-mark 24
$syntaxeshort tcp -m length --length 101:1200 -j RETURN
$syntaxeshort udp -m length --length 101:1200 -j MARK --set-mark 24
$syntaxeshort udp -m length --length 101:1200 -j RETURN
$syntaxeshort tcp -m length --length 1200:1501 -j MARK --set-mark 22
$syntaxeshort tcp -m length --length 1200:1501 -j RETURN
$syntaxeshort udp -m length --length 1200:1501 -j MARK --set-mark 22
$syntaxeshort udp -m length --length 1200:1501 -j RETURN
$syntaxeshort udp -m iprange --src-range $pcip_reseaux --dst-range $pcip_me -j MARK --set-mark 26
$syntaxeshort udp -m iprange --src-range $pcip_reseaux --dst-range $pcip_me -j RETURN
$syntaxeshort udp -m iprange --dst-range $pcip_reseaux --src-range $pcip_me -j MARK --set-mark 26
$syntaxeshort udp -m iprange --dst-range $pcip_reseaux --src-range $pcip_me -j RETURN
$syntaxeshort tcp -m iprange --src-range $pcip_reseaux --dst-range $pcip_me -j MARK --set-mark 26
$syntaxeshort tcp -m iprange --src-range $pcip_reseaux --dst-range $pcip_me -j RETURN
$syntaxeshort tcp -m iprange --dst-range $pcip_reseaux --src-range $pcip_me -j MARK --set-mark 26
$syntaxeshort tcp -m iprange --dst-range $pcip_reseaux --src-range $pcip_me -j RETURN
# les paquets udp sont des paquets de jeu
#syntaxeshort udp -j MARK --set-mark 21
# Petits paquets (des ACK probablement)
#echo [petits paquets: 1]
#syntaxeshort tcp -m length --length :64 -j MARK --set-mark 21
#syntaxeshort tcp -m length --length 65:128 	-j MARK --set-mark 22

# on marque les paquets restants  29 (faible priorité)
iptables -t mangle -A MONLIMITEUR-OUT -m mark --mark 0 -j MARK --set-mark 29

sortie:

# tc -s -d class ls dev eth1
class htb 1:22 parent 1:1 leaf 22: prio 1 quantum 1000 rate 50000bit ceil 50000bit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 249999 ctokens: 249999

class htb 1:23 parent 1:1 leaf 23: prio 2 quantum 1000 rate 50000bit ceil 50000bit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
 Sent 21470 bytes 122 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 119 borrowed: 0 giants: 0
 tokens: 238749 ctokens: 238749

class htb 1:1 root rate 50000bit ceil 50000bit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7
 Sent 2086768 bytes 20234 pkt (dropped 0, overlimits 0 requeues 0)
 rate 11672bit 16pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 238749 ctokens: 238749

class htb 1:20 parent 1:1 prio 0 quantum 1000 rate 50000bit ceil 50000bit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 249999 ctokens: 249999

class htb 1:21 parent 1:1 leaf 21: prio 0 quantum 1000 rate 50000bit ceil 50000bit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
 Sent 29436 bytes 446 pkt (dropped 0, overlimits 0 requeues 0)
 rate 264bit 1pps backlog 0b 0p requeues 0
 lended: 446 borrowed: 0 giants: 0
 tokens: 238749 ctokens: 238749

class htb 1:26 parent 1:1 leaf 26: prio 5 quantum 1000 rate 10000bit ceil 10000bit burst 1600b/8 mpu 0b overhead 0b cburst 1600b/8 mpu 0b overhead 0b level 0
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 1250000 ctokens: 1250000

class htb 1:27 parent 1:1 leaf 27: prio 6 quantum 1000 rate 50000bit ceil 50000bit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 249999 ctokens: 249999

class htb 1:24 parent 1:1 leaf 24: prio 3 quantum 1000 rate 50000bit ceil 50000bit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
 Sent 2030388 bytes 19586 pkt (dropped 0, overlimits 0 requeues 0)
 rate 11384bit 15pps backlog 0b 0p requeues 0
 lended: 19586 borrowed: 0 giants: 0
 tokens: 217718 ctokens: 217718

class htb 1:25 parent 1:1 leaf 25: prio 4 quantum 1000 rate 1000bit ceil 1000bit burst 1600b/8 mpu 0b overhead 0b cburst 1600b/8 mpu 0b overhead 0b level 0
 Sent 3730 bytes 42 pkt (dropped 0, overlimits 0 requeues 0)
 rate 8bit 0pps backlog 0b 0p requeues 0
 lended: 42 borrowed: 0 giants: 0
 tokens: 11105077 ctokens: 11105077

class htb 1:28 parent 1:1 leaf 28: prio 7 quantum 1000 rate 35000bit ceil 35000bit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
 Sent 1744 bytes 38 pkt (dropped 0, overlimits 0 requeues 0)
 rate 8bit 0pps backlog 0b 0p requeues 0
 lended: 38 borrowed: 0 giants: 0
 tokens: 346429 ctokens: 346429

une idée ?

J’ai lu en diagonale mais je me suis mal fait comprendre:

Tu as une BP de 50K, si tu veux distribuer ta BP en 3 classes 20+20+10, tu fais 3 classes mères. Mais dans ce cas, un tache dans sa classe ne pourra aller au delà de la BP allouée.
Or tu as dit:

Si c’est ça que tu veux, tu fais une classe mère à 50K avec 3 classes filles ayant chacune 20K, 20K et 10K allouée. Une tache dans la sous classe à 20K se verra garantie 20K et, si la BP est disponible, recevra 50K. Dans la pratique, ta BP est donc toujours totalement utilisée si ton serveur sert ce qui est idéal.

Je ne comprends pas ce que tu veux du coup.

[quote=“fran.b”]

Si c’est ça que tu veux, tu fais une classe mère à 50K avec 3 classes filles ayant chacune 20K, 20K et 10K allouée. Une tache dans la sous classe à 20K se verra garantie 20K et, si la BP est disponible, recevra 50K. Dans la pratique, ta BP est donc toujours totalement utilisée si ton serveur sert ce qui est idéal.
Je ne comprends pas ce que tu veux du coup.[/quote]

On est pas loin :slightly_smiling:
Pour la majorter des application oui (afin d’utiliser toute la bande passante),
Cependant:
Sauf une qui ne doit pas dépasser une valeur donnée (mumble qui peux taper a 17-50 ko/s) et comme c’est de l’audio c’est un flux ch*** car il varie en débit constamment du coup sa perturbe complètement la ligne voir la sature) la solution c est donc de la verrouiller a 20ko/s max. et ceci en permanence et c’est cela qui ne marche pas. même verrouiller par une classe-mere séparée,ou une classe-mere global avec la gestion dans les sous-classes

Hum, dans ce cas là, tu lui fais une classe fille à part en modifiant le paramètre ceil:

tc class add dev $DEV parent 1:2 classid 1:22 htb \ rate $DEBITASSUREkbit \ ceil $DEBITMAXkbit prio 1
le débit sera limité pour cette classe…

Je comprend pas j’ai beau fouiner je vois pas ou est le bug.

peut être que les paquet son couper et son tro rapide pour être droper ?

voici une sortie courte:
on voit bien que les paquet son bien marquer.

tc -s -d class ls dev eth1 |grep Sent
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 Sent 72359 bytes 669 pkt (dropped 0, overlimits 0 requeues 0)
 Sent 498919 bytes 3096 pkt (dropped 0, overlimits 0 requeues 0)
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 Sent 3102 bytes 47 pkt (dropped 0, overlimits 0 requeues 0)
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 Sent 420535 bytes 2338 pkt (dropped 0, overlimits 0 requeues 0)
 Sent 1172 bytes 14 pkt (dropped 0, overlimits 0 requeues 0)
 Sent 1751 bytes 28 pkt (dropped 0, overlimits 0 requeues 0)
#alègement de la syntaxe (c'est trop long)
syntaxeshort="iptables -t mangle -A MONLIMITEUR-OUT -p "
function quosnew {
CALLCLASSEMERE="50kbit" #bp global sur eth*
CALLSOUSCLASSE1="50kbit" #bp taill des  paquet
CALLSOUSCLASSE2="35kbit" #bp spring min dispo 35 et max 36
CALLSOUSCLASSE3="5kbit" #bp mumble min 10 dispo 
CALLSOUSCLASSE31="10kbit" #pb mumble max 15
CALLSOUSCLASSE4="100mbit" #bp lan samba


	affectemark ()
	# affecte nom sens port protocole categorie
	# sens = s ou d, protocole = udp ou tcp categorie = 0->?
	#
	{
		echo [$1 : $5]
		# shell s	curis
		if [ $1 == "springOFF" ] ;then
			$syntaxeshort $4 --$2port $3 -j ULOG --ulog-prefix="SpringQos"
		fi
		if [ $1 == "mumbleOFF" ] ;then
			$syntaxeshort $4 --$2port $3 -j ULOG --ulog-prefix="Mumble"
		fi
		$syntaxeshort $4 --$2port $3 -j MARK --set-mark 2$5
		$syntaxeshort $4 --$2port $3 -j RETURN
	}
	affecthandle () 
	{

		tc qdisc add dev $1 parent $2:$3 handle $4: sfq perturb $5
	}
	affectprio ()
	{
		tc filter add dev $1 parent 1:0 prio 0 protocol ip handle $2 fw flowid $3:$4
	}

ip link set dev $eth qlen 40

# ajout de la strat�gie HTB
# les noms des queues sont de 20 � 26, je les conserve
#
tc qdisc add dev $eth root handle 1: htb default 28 #racine

tc class add dev $eth parent 1: classid 1:1 htb rate $CALLCLASSEMERE

# ajout des classes filles:
# - chaque classe dispose AU MOINS de son quota de bande passante. Aucune
#   classe n'est donc étouffée par les autres. Chaque classe peut également
#   consommer toute la bande passante si aucune autre classe ne l'emploie.
# poids différents pour les classes
# C'est l'intéret des classes filles si j'ai bien compris, les classes méres
# ne partage pas leur part de bande passante

#ceil * est le délait avant la reprise d'un transfere après avoir epuiser le seau de jeton
#la durée est l'equivalen aux nombre de jeton nombre de jeton  
# ratup donne le debit avec un seau plein si vide ceil defini le temp du drop puis le
#ratup est a nouveau plein
tc class add dev $eth parent 1:1 classid 1:20 htb rate $CALLSOUSCLASSE1 ceil $CALLSOUSCLASSE1 prio 0
# Les autres classes
tc class add dev $eth parent 1:1 classid 1:21 htb rate $CALLSOUSCLASSE1 ceil $CALLSOUSCLASSE1 prio 0
# telnet, ssh,X
tc class add dev $eth parent 1:1 classid 1:22 htb rate $CALLSOUSCLASSE1 ceil $CALLSOUSCLASSE1 prio 1
# ports bas, messagerie AOL, MSN
tc class add dev $eth parent 1:1 classid 1:23 htb rate $CALLSOUSCLASSE1 ceil $CALLSOUSCLASSE1 prio 2
# WWW
tc class add dev $eth parent 1:1 classid 1:24 htb rate $CALLSOUSCLASSE1 ceil $CALLSOUSCLASSE1 prio 3
# mumble
tc class add dev $eth parent 1:1 classid 1:25 htb rate $CALLSOUSCLASSE3 ceil $CALLSOUSCLASSE31 prio 4
#lan
tc class add dev $eth parent 1:1 classid 1:26 htb rate $CALLSOUSCLASSE4 ceil $CALLSOUSCLASSE4 prio 5
#http 21
tc class add dev $eth parent 1:1 classid 1:27 htb rate $CALLSOUSCLASSE1 ceil $CALLSOUSCLASSE1 prio 6
#spring

tc class add dev $eth parent 1:1 classid 1:28 htb rate $CALLSOUSCLASSE2 ceil $CALLSOUSCLASSE2 prio 7
# ajout de la stratégie aux classes filles
# - SFQ offre un traitement sensiblement équitable de chaque classe.

#bouclage possible possible de 9 table
maxtable="8" # max 9 , pour en avoir plus il faut crée une 2 eme boucle(ou modifier celle-ci
boucle="true"
while $boucle
do
	I=$(($I+1))
	affecthandle "$eth" 1 2$I 2$I 2$I
# répartition du trafic en classe via fwmark
# - le trafic est r�parti en classes de priorit� suivant l'indicateur
#   fwmark des paquets (ceux-ci sont positionn�s avec iptables un peu plus
#   loin). La classe de priorit� par d�faut a �t� mise � 1:26 de telle sorte
#   que les paquets qui ne sont pas marqu�s se retrouvent dans la classe de
#   priorit� la plus faible.

	affectprio "$eth" 2$I 1 2$I
	if [ $I == $maxtable ] ;then
		boucle="false"
	fi 
done

#
# ajout de MONLIMITEUR-OUT � la table de modification des paquets d'iptables
# - ceci d�clare la table employ�e pour filtrer et classer les paquets
iptables -t mangle -N MONLIMITEUR-OUT
iptables -t mangle -I POSTROUTING -o $eth -j MONLIMITEUR-OUT
# ajout de fwmark pour classer les diff�rents types de trafic
# - fwmark est positionn� de 20 � 25 suivant la classe. 20 correspond � la
#   priorit� la plus forte.
#special ne passe pas dans la fonction (la ca son rare)
$syntaxeshort icmp -j MARK --set-mark 24
#passage en paramettre a la fonction 
# function commentaire por de destination (s ou d ) protocole prioriter de 0 a 8 (28)
affectemark "mumble" d 64738 udp 4
affectemark "mumble" d 64738 tcp 4
affectemark "DNS" d 53 udp 0
affectemark "spring" d 8452:8460 tcp 7
affectemark "spring" d 8452:8460 udp 7
affectemark "spring" d 8469 tcp 7
affectemark "spring" d 8469 udp 7
affectemark "spring" d 9999 tcp 7
affectemark "spring" d 9999 udp 7
affectemark "Http" d 80:82 udp 3
affectemark "Http2" d 80:82 tcp 3
affectemark "ftp" d 21 udp 6
affectemark "ftp" d 21 tcp 6
#affecte "exemple plage port" d 6112:6119 tcp 1


$syntaxeshort tcp -m length --length 0:32 -j MARK --set-mark 20
$syntaxeshort tcp -m length --length 0:32 -j RETURN
$syntaxeshort udp -m length --length 0:32 -j MARK --set-mark 20
$syntaxeshort udp -m length --length 0:32 -j RETURN
$syntaxeshort tcp -m length --length 33:60 -j MARK --set-mark 21
$syntaxeshort tcp -m length --length 33:60 -j RETURN
$syntaxeshort udp -m length --length 33:50 -j MARK --set-mark 21
$syntaxeshort udp -m length --length 33:50 -j RETURN
$syntaxeshort tcp -m length --length 51:100 -j MARK --set-mark 25
$syntaxeshort tcp -m length --length 51:100 -j RETURN
$syntaxeshort udp -m length --length 51:100 -j MARK --set-mark 25
$syntaxeshort udp -m length --length 51:100 -j RETURN
$syntaxeshort tcp -m length --length 101:1200 -j MARK --set-mark 24
$syntaxeshort tcp -m length --length 101:1200 -j RETURN
$syntaxeshort udp -m length --length 101:1200 -j MARK --set-mark 24
$syntaxeshort udp -m length --length 101:1200 -j RETURN
$syntaxeshort tcp -m length --length 1200:1501 -j MARK --set-mark 22
$syntaxeshort tcp -m length --length 1200:1501 -j RETURN
$syntaxeshort udp -m length --length 1200:1501 -j MARK --set-mark 22
$syntaxeshort udp -m length --length 1200:1501 -j RETURN
$syntaxeshort udp -m iprange --src-range $pcip_reseaux --dst-range $pcip_me -j MARK --set-mark 26
$syntaxeshort udp -m iprange --src-range $pcip_reseaux --dst-range $pcip_me -j RETURN
$syntaxeshort udp -m iprange --dst-range $pcip_reseaux --src-range $pcip_me -j MARK --set-mark 26
$syntaxeshort udp -m iprange --dst-range $pcip_reseaux --src-range $pcip_me -j RETURN
$syntaxeshort tcp -m iprange --src-range $pcip_reseaux --dst-range $pcip_me -j MARK --set-mark 26
$syntaxeshort tcp -m iprange --src-range $pcip_reseaux --dst-range $pcip_me -j RETURN
$syntaxeshort tcp -m iprange --dst-range $pcip_reseaux --src-range $pcip_me -j MARK --set-mark 26
$syntaxeshort tcp -m iprange --dst-range $pcip_reseaux --src-range $pcip_me -j RETURN
# les paquets udp sont des paquets de jeu
#syntaxeshort udp -j MARK --set-mark 21
# Petits paquets (des ACK probablement)
#echo [petits paquets: 1]
#syntaxeshort tcp -m length --length :64 -j MARK --set-mark 21
#syntaxeshort tcp -m length --length 65:128 	-j MARK --set-mark 22
# on marque les paquets restants  29 (faible priorité)
iptables -t mangle -A MONLIMITEUR-OUT -m mark --mark 0 -j MARK --set-mark 29
}