[Asterisk-Users] Can you comment on this Qos script? How does one shape RTP?

cmisip cmisip at mchsi.com
Sun Apr 10 07:27:16 MST 2005


I initially used that script without modification.  However, I noticed
that all traffic was going through class 1:102 regardless. Seems as if
all the children of 1:20 are set with a prio of 0 by default even if
1:20 is specifically set to prio of 2.  I used 

/sbin/tc -s -d class show dev eth0

to verify where the packets are going through.  So I decided to set 1:10
manually to prio 0 and 1:100 and 1:101 to prio 1.  I set 1:102 to prio
4(since all the rest of the traffic should be low priority).

If I run asterisk alone and make a voip iax2 call, I could see 1:1
packets incrementing as well as 1:10 which I think should be expected. 
If I kill asterisk (asterisk seems to send small packets here and there
when there are no active calls) , and start a download, I see 1:1
packets incrementing, 1:20 packets incrementing and then 1:102 packets
incrementing. So I think the packets are finding their right classes.  

However, there is no traffic on 1:100 and 1:101.

Like I said, I am not sure what the expected behaviour should be but I
thought all asterisk communicatios should go through 1:10.

Have you tested to see if the packets in your server are going where
they should be with the original script?

Thanks




On Sun, 2005-04-10 at 07:29, Doug Lytle wrote:
> cmisip wrote:
> 
> >far asterisk seems to use 1:10 while all other traffic uses 1:102.  How
> >does one packet shape RTP?  
> >
> >Thanks for any help.
> >
> >
> >
> >
> >#          +---------+
> >#          | root 1: |
> >#          +---------+
> >#               |
> ># +----------------------------+
> ># |         class 1:1          |
> ># +----------------------------+
> >#   |           |           |
> ># +----+      +----+      +----+
> ># |1:10|      |1:20|      |1:30|
> ># +----+      +----+      +----+
> >#               |
> >#      +--------+--------+
> >#      |        |        |
> >#   +-----+  +-----+  +-----+
> >#   |1:100|  |1:101|  |1:102|
> >#   +-----+  +-----+  +-----+
> >
> >  
> >
> 
> I'm using the same script, but I found it searching Google.  Yours seems 
> to be incomplete.  My script follows:
> 
> #!/bin/sh
> 
> TCOP="add"
> IPTOP="-A"
> 
> if [ "$1" == "stop" ]; then
>        echo "Stopping..."
>        TCOP="del"
>        IPTOP="-D"
> fi
> 
> #          +---------+
> #          | root 1: |
> #          +---------+
> #               |
> # +----------------------------+
> # |         class 1:1          |
> # +----------------------------+
> #   |           |           |
> # +----+      +----+      +----+
> # |1:10|      |1:20|      |1:30|
> # +----+      +----+      +----+
> #               |
> #      +--------+--------+
> #      |        |        |
> #   +-----+  +-----+  +-----+
> #   |1:100|  |1:101|  |1:102|
> #   +-----+  +-----+  +-----+
> 
> # 1:10 is the class for VOIP traffic, pfifo qdisc
> # 1:20 is for bulk traffic (htb, leaves use sfq)
> # 1:30 is the class that interactive and TCP SYN/ACK traffic (sfq qdisc)
> 
> # 1:20 is further split up into different kinds of bulk traffic: web, 
> mail and
> # everything else.  1:100-102 fight amongst themselves for their slice 
> of excess
> # bandwidth, and in turn 1:10,20 and 30 then fight for any excess above 
> their
> # minimum rates.
> 
> # which interface to throw all this on (DSL)
> IF=eth2
> 
> # ceil is 75% of max rate (768kbps)
> # rate is 65% of max rate
> # we don't let it go to 100% because we don't want the DSL modem 
> (Pairgain MegaBit Modem 300S)
> # to have a ton of packets in their buffers.  *we* want to do the buffering.
> RATE=576
> CEIL=640
> #RATE=450
> #CEIL=500
> 
> tc qdisc ${TCOP} dev ${IF} root handle 1: htb default 102
> tc class ${TCOP} dev ${IF} parent 1:   classid 1:1 htb rate ${RATE}kbit 
> ceil ${CEIL}kbit
> 
> tc class ${TCOP} dev ${IF} parent 1:1  classid 1:10 htb rate 64kbit ceil 
> ${RATE}kbit prio 1
> tc class ${TCOP} dev ${IF} parent 1:1  classid 1:20 htb rate 64kbit ceil 
> ${RATE}kbit prio 2
> 
> tc class ${TCOP} dev ${IF} parent 1:20 classid 1:100 htb rate ${RATE}kbit
> tc class ${TCOP} dev ${IF} parent 1:20 classid 1:101 htb rate ${RATE}kbit
> tc class ${TCOP} dev ${IF} parent 1:20 classid 1:102 htb rate ${RATE}kbit
> 
> tc qdisc ${TCOP} dev ${IF} parent 1:10  handle 10:  pfifo
> tc qdisc ${TCOP} dev ${IF} parent 1:100 handle 100: sfq perturb 10
> tc qdisc ${TCOP} dev ${IF} parent 1:101 handle 101: sfq perturb 10
> tc qdisc ${TCOP} dev ${IF} parent 1:102 handle 102: sfq perturb 10
> 
> tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 1 handle 1 fw 
> classid 1:10
> tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 4 handle 4 fw 
> classid 1:100
> 
> # IAX2 prio 0.
> iptables -t mangle ${IPTOP} PREROUTING -p udp -m udp --dport 4569 -j 
> MARK --set-mark 0x1
> iptables -t mangle ${IPTOP} PREROUTING -p udp -m udp --dport 4569 -j RETURN
> 
> # everything else goes into lowest priority (best effort).
> iptables -t mangle ${IPTOP} PREROUTING -j MARK --set-mark 0x4
> iptables -t mangle ${IPTOP} OUTPUT -j MARK --set-mark 0x4
> 
> Doug
> 
> 
> _______________________________________________
> Asterisk-Users mailing list
> Asterisk-Users at lists.digium.com
> http://lists.digium.com/mailman/listinfo/asterisk-users
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-users
> 




More information about the asterisk-users mailing list