Traffic shaping HTB, TC, tcng - Regeln greifen nicht

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
moodsx
Beiträge: 188
Registriert: 15.03.2007 09:17:25

Traffic shaping HTB, TC, tcng - Regeln greifen nicht

Beitrag von moodsx » 05.09.2007 20:34:57

Hallo Community,

ich beschäftige mich gerade etwas mit HTB, TC, tcng.

Da mir tc ansich etwas zu schwierig erscheint habe ich versucht das ganze mittels tcng zu realisieren.

Soweit klappt auch alles gut, bis auf die Tatsache das die Regeln die ich damit erstellt habe nicht greifen.

Meine Frage an Euch: Warum arbeiten die Reglen nicht?

Für ppp0 (DSL-1000):

Code: Alles auswählen

#!/bin/bash

# ================================ Device ppp0 ================================

tc qdisc add dev ppp0 handle 1:0 root dsmark indices 4 default_index 0
tc qdisc add dev ppp0 handle 2:0 parent 1:0 htb
tc class add dev ppp0 parent 2:0 classid 2:1 htb rate 16000bps ceil 16000bps
tc class add dev ppp0 parent 2:1 classid 2:2 htb rate 10000bps ceil 16000bps
tc qdisc add dev ppp0 handle 3:0 parent 2:2 sfq
tc class add dev ppp0 parent 2:1 classid 2:3 htb rate 3000bps ceil 3000bps
tc qdisc add dev ppp0 handle 4:0 parent 2:3 sfq
tc class add dev ppp0 parent 2:1 classid 2:4 htb rate 3000bps ceil 3000bps
tc qdisc add dev ppp0 handle 5:0 parent 2:4 sfq
tc filter add dev ppp0 parent 2:0 protocol all prio 1 tcindex mask 0x3 shift 0
tc filter add dev ppp0 parent 2:0 protocol all prio 1 handle 3 tcindex classid 2:4
tc filter add dev ppp0 parent 2:0 protocol all prio 1 handle 2 tcindex classid 2:3
tc filter add dev ppp0 parent 2:0 protocol all prio 1 handle 1 tcindex classid 2:2
tc filter add dev ppp0 parent 1:0 protocol all prio 1 u32 match u32 0xc0a80001 0xffffffff at 12 classid 1:1
tc filter add dev ppp0 parent 1:0 protocol all prio 1 u32 match u32 0xc0a80004 0xffffffff at 12 classid 1:2
tc filter add dev ppp0 parent 1:0 protocol all prio 1 u32 match u32 0xc0a80005 0xffffffff at 12 classid 1:3
Das tcng Sript dazu:

Code: Alles auswählen

#include "fields.tc"
#include "ports.tc"

$INTERFACE="ppp0";
$MAX=128kbps;
$TEILMAXUSER2=24kbps;
$TEILMAXUSER3=24kbps;
$RATE_USER1=80kbps;
$RATE_USER2=24kbps;
$RATE_USER3=24kbps;

dev $INTERFACE {
        egress {
                class (<$user1>) if ip_src == 192.168.0.1;
                class (<$user2>) if ip_src == 192.168.0.4;
                class (<$user3>) if ip_src == 192.168.0.5;

                htb () {
                        class (rate $MAX, ceil $MAX) {
                                $user1 = class (rate $RATE_USER1, ceil $MAX) {sfq;};
                                $user2 = class (rate $RATE_USER2, ceil $TEILMAXUSER2) {sfq;};
                                $user3 = class (rate $RATE_USER3, ceil $TEILMAXUSER3) {sfq;};
                        }

                        }
                }
                }
Für eth1 (DSL-Interface)

Code: Alles auswählen

#!/bin/bash


# ================================ Device eth1 ================================

tc qdisc add dev eth1 handle 1:0 root dsmark indices 4 default_index 0
tc qdisc add dev eth1 handle 2:0 parent 1:0 htb
tc class add dev eth1 parent 2:0 classid 2:1 htb rate 125000bps ceil 125000bps
tc class add dev eth1 parent 2:1 classid 2:2 htb rate 30000bps ceil 125000bps
tc qdisc add dev eth1 handle 3:0 parent 2:2 sfq
tc class add dev eth1 parent 2:1 classid 2:3 htb rate 47500bps ceil 47500bps
tc qdisc add dev eth1 handle 4:0 parent 2:3 sfq
tc class add dev eth1 parent 2:1 classid 2:4 htb rate 47500bps ceil 47500bps
tc qdisc add dev eth1 handle 5:0 parent 2:4 sfq
tc filter add dev eth1 parent 2:0 protocol all prio 1 tcindex mask 0x3 shift 0
tc filter add dev eth1 parent 2:0 protocol all prio 1 handle 3 tcindex classid 2:4
tc filter add dev eth1 parent 2:0 protocol all prio 1 handle 2 tcindex classid 2:3
tc filter add dev eth1 parent 2:0 protocol all prio 1 handle 1 tcindex classid 2:2
tc filter add dev eth1 parent 1:0 protocol all prio 1 u32 match u32 0xc0a80001 0xffffffff at 12 classid 1:1
tc filter add dev eth1 parent 1:0 protocol all prio 1 u32 match u32 0xc0a80004 0xffffffff at 12 classid 1:2
tc filter add dev eth1 parent 1:0 protocol all prio 1 u32 match u32 0xc0a80005 0xffffffff at 12 classid 1:3
Das tcng Script dazu:

Code: Alles auswählen

#include "fields.tc"
#include "ports.tc"

$INTERFACE="eth1";
$MAX=1000kbps;
$TEILMAXUSER2=380kbps;
$TEILMAXUSER3=380kbps;
$RATE_USER1=240kbps;
$RATE_USER2=380kbps;
$RATE_USER3=380kbps;

dev $INTERFACE {
        egress {
                class (<$user1>) if ip_src == 192.168.0.1;
                class (<$user2>) if ip_src == 192.168.0.4;
                class (<$user3>) if ip_src == 192.168.0.5;

                htb () {
                        class (rate $MAX, ceil $MAX) {
                                $user1 = class (rate $RATE_USER1, ceil $MAX) {sfq;};
                                $user2 = class (rate $RATE_USER2, ceil $TEILMAXUSER2) {sfq;};
                                $user3 = class (rate $RATE_USER3, ceil $TEILMAXUSER3) {sfq;};
                        }

                        }
                }
                }

Code: Alles auswählen


tc -s qdisc show
qdisc pfifo_fast 0: dev eth2 root bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
 Sent 2871291119 bytes 3124128 pkt (dropped 0, overlimits 0 requeues 4677)
 rate 0bit 0pps backlog 0b 0p requeues 4677
qdisc dsmark 1: dev eth1 indices 0x0004 default_index 0x0000
 Sent 1373188 bytes 9134 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc htb 2: dev eth1 parent 1: r2q 10 default 0 direct_packets_stat 9134
 Sent 1373188 bytes 9134 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 3: dev eth1 parent 2:2 limit 128p quantum 1514b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 4: dev eth1 parent 2:3 limit 128p quantum 1514b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 5: dev eth1 parent 2:4 limit 128p quantum 1514b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc pfifo_fast 0: dev eth0 root bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
 Sent 78005 bytes 1745 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc dsmark 1: dev ppp0 indices 0x0004 default_index 0x0000
 Sent 1172590 bytes 9070 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc htb 2: dev ppp0 parent 1: r2q 10 default 0 direct_packets_stat 9070
 Sent 1172590 bytes 9070 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 3: dev ppp0 parent 2:2 limit 128p quantum 1492b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 4: dev ppp0 parent 2:3 limit 128p quantum 1492b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 5: dev ppp0 parent 2:4 limit 128p quantum 1492b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0

Wenn ich die Shellscripte ausführe werden die Dateien dazu erstellt. Leider ist die Bandbreite für die Clients aber trotzdem nicht begrenzt. Kann mir jemand dazu einen Tipp geben? Danke!


MfG

Antworten