[LARTC] Best QoS Policy for VoIP
rsenykoff@harrislogic.com
rsenykoff@harrislogic.com
Wed, 5 Jan 2005 14:41:50 -0600
This is a multipart message in MIME format.
--=_alternative 0071B18086256F80_=
Content-Type: text/plain; charset="US-ASCII"
Hello all,
I've got a couple redundant (Spanning Tree Protocol) boxes running FC1
minimal install + bridge-utils and they are working great for QoS + ntop
monitoring. I'm wondering if I should handle the VoIP traffic a little
differently. I don't mind letting VoIP and Video lend out traffic when it
isn't being used, so that's why I gave them such large chunks of the
bandwidth. Especially the video, which is only used sometimes, and even
then it only usually needs around 400 / 400. It seems that CBQ is pretty
good just because I can vary the bounded / isolated stuff. For example,
Citrix is isolated and always gets that bandwidth. Video and VoIP are
bounded, but not isolated. Sametime is a instant messaging client. Here's
my script (have 2 scripts, both the same except that one is for eth0, the
other for eth1. Also, we have 3Mb / 3Mb connection.
#!/bin/sh
#####################################
############ VARIABLES ##############
# #
e=eth0 # interface
t1=2.40Mbit # size of your WAN - remember you can't max this or you'll
experience latency. 75-80% of max is a good place to start.
el=100Mbit # size of eth0
w=0.24Mbit # weighting of your WAN (10% of t1)
sizeCitrix=0.4Mbit
sizeVoIP=0.8Mbit
sizeVideo=1.0Mbit
sizeBulk=0.1Mbit
sizeSametime=0.1Mbit
weightCitrix=0.04Mbit
weightVoIP=0.08Mbit
weightVideo=0.1Mbit
weightBulk=0.01Mbit
weightSametime=0.01Mbit
CONNECTRIA1="XXX.XXX.XXX.XXX"
CONNECTRIA2="XXX.XXX.XXX.XXX"
SAMETIME="XXX.XXX.XXX.XXX"
# #
#####################################
#####################################
# Delete any old rules #
tc qdisc del root dev $e
## each class is able to take more bandwidth as it is available, but must
## surrender it as the higher priorities (2, 3, then 4) need it.
## The lower the priority number, the more priority it gets. Thus when
## there is extra bandwidth available, the lower number classes get it as
## they need it.
# root qdisc / qdisc = queueing discipline #
tc qdisc add dev $e root handle 1:0 cbq bandwidth 100Mbit avpkt 1000 cell
8
tc class add dev $e parent 1:0 classid 1:1 cbq bandwidth 100Mbit rate $t1
weight $w prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
# child qdiscs (like child nodes on a tree) #
tc class add dev $e parent 1:1 classid 1:3 cbq bandwidth 100Mbit rate
$sizeCitrix weight $weightCitrix prio 8 allot 1514 cell 8 maxburst 20
avpkt 300 isolated
tc qdisc add dev $e parent 1:3 handle 30: sfq perturb 20
tc class add dev $e parent 1:1 classid 1:5 cbq bandwidth 100Mbit rate
$sizeVoIP weight $weightVoIP prio 8 allot 1514 cell 8 maxburst 20 avpkt
204 bounded
tc class add dev $e parent 1:1 classid 1:6 cbq bandwidth 100Mbit rate
$sizeVideo weight $weightVideo prio 8 allot 1514 cell 8 maxburst 20 avpkt
580 bounded
tc class add dev $e parent 1:1 classid 1:7 cbq bandwidth 100Mbit rate
$sizeSametime weight $weightSametime prio 8 allot 1514 cell 8 maxburst 20
avpkt 550
tc qdisc add dev $e parent 1:7 handle 70: sfq perturb 20
tc class add dev $e parent 1:1 classid 1:9 cbq bandwidth 100Mbit rate
$sizeBulk weight $weightBulk prio 8 allot 1514 cell 8 maxburst 20 avpkt
1000
tc qdisc add dev $e parent 1:9 handle 90: sfq perturb 20
#####################################
############### Citrix ##############
# #
# SSH #
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip sport 22
0xffff flowid 1:3
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip dport 22
0xffff flowid 1:3
# CITRIX/ICA #
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip sport 1494
0xffff flowid 1:3
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip dport 1494
0xffff flowid 1:3
# CITRIX Metaframe #
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip src
$CONNECTRIA1/32 flowid 1:3
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip dst
$CONNECTRIA1/32 flowid 1:3
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip src
$CONNECTRIA2/32 flowid 1:3
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip dst
$CONNECTRIA2/32 flowid 1:3
#####################################
############### VoIP ################
# #
# IAX # this is the old format - IAX2 should be what's really seen going
on
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip sport 5036
0xffff flowid 1:5
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip dport 5036
0xffff flowid 1:5
# IAX2 #
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip sport 4569
0xffff flowid 1:5
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip dport 4569
0xffff flowid 1:5
#### Remotely VPNd SIP Phones #####
# Ron Senykoff Home
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip src
XXX.XXX.XXX.XXX/32 flowid 1:5
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip dst
XXX.XXX.XXX.XXX/32 flowid 1:5
#####################################
############### Video ###############
# #
# H323 #
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip sport 1720
0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip dport 1720
0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip sport
15328 0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip dport
15328 0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip sport
15329 0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip dport
15329 0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip sport
15330 0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip dport
15330 0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip sport
15331 0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip dport
15331 0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip sport
15332 0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip dport
15332 0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip sport 3230
0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip dport 3230
0xffff flowid 1:6
.
. shortened for posting purposes
.
.
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip sport 3247
0xffff flowid 1:6
tc filter add dev $e protocol ip parent 1:0 prio 2 u32 match ip dport 3247
0xffff flowid 1:6
#####################################
############ Sametime ###############
# #
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip src
$SAMETIME/32 flowid 1:7
tc filter add dev $e protocol ip parent 1:0 prio 1 u32 match ip dst
$SAMETIME/32 flowid 1:7
#####################################
######### Bulk / Default ############
# #
tc filter add dev $e protocol ip parent 1:0 prio 3 u32 match ip src
0.0.0.0/0 flowid 1:9
tc filter add dev $e protocol ip parent 1:0 prio 3 u32 match ip dst
0.0.0.0/0 flowid 1:9
--=_alternative 0071B18086256F80_=
Content-Type: text/html; charset="US-ASCII"
<br><font size=2 face="Courier New">Hello all,</font>
<br>
<br><font size=2 face="Courier New">I've got a couple redundant (Spanning
Tree Protocol) boxes running FC1 minimal install + bridge-utils and they
are working great for QoS + ntop monitoring. I'm wondering if I should
handle the VoIP traffic a little differently. I don't mind letting VoIP
and Video lend out traffic when it isn't being used, so that's why I gave
them such large chunks of the bandwidth. Especially the video, which is
only used sometimes, and even then it only usually needs around 400 / 400.
It seems that CBQ is pretty good just because I can vary the bounded /
isolated stuff. For example, Citrix is isolated and always gets that bandwidth.
Video and VoIP are bounded, but not isolated. Sametime is a instant messaging
client. Here's my script (have 2 scripts, both the same except that one
is for eth0, the other for eth1. Also, we have 3Mb / 3Mb connection.</font>
<br>
<br><font size=2 face="Courier New">#!/bin/sh</font>
<br><font size=2 face="Courier New">#####################################</font>
<br><font size=2 face="Courier New">############ VARIABLES ##############</font>
<br><font size=2 face="Courier New">#
#</font>
<br><font size=2 face="Courier New">e=eth0 # interface</font>
<br><font size=2 face="Courier New">t1=2.40Mbit # size of your WAN
- remember you can't max this or you'll experience latency. 75-80% of max
is a good place to start.</font>
<br><font size=2 face="Courier New">el=100Mbit # size of eth0</font>
<br><font size=2 face="Courier New">w=0.24Mbit # weighting of your
WAN (10% of t1)</font>
<br>
<br><font size=2 face="Courier New">sizeCitrix=0.4Mbit</font>
<br><font size=2 face="Courier New">sizeVoIP=0.8Mbit</font>
<br><font size=2 face="Courier New">sizeVideo=1.0Mbit</font>
<br><font size=2 face="Courier New">sizeBulk=0.1Mbit</font>
<br><font size=2 face="Courier New">sizeSametime=0.1Mbit</font>
<br>
<br><font size=2 face="Courier New">weightCitrix=0.04Mbit</font>
<br><font size=2 face="Courier New">weightVoIP=0.08Mbit</font>
<br><font size=2 face="Courier New">weightVideo=0.1Mbit</font>
<br><font size=2 face="Courier New">weightBulk=0.01Mbit</font>
<br><font size=2 face="Courier New">weightSametime=0.01Mbit</font>
<br>
<br><font size=2 face="Courier New">CONNECTRIA1="XXX.XXX.XXX.XXX"</font>
<br><font size=2 face="Courier New">CONNECTRIA2="XXX.XXX.XXX.XXX"</font>
<br><font size=2 face="Courier New">SAMETIME="XXX.XXX.XXX.XXX"</font>
<br>
<br><font size=2 face="Courier New">#
#</font>
<br><font size=2 face="Courier New">#####################################</font>
<br><font size=2 face="Courier New">#####################################</font>
<br>
<br><font size=2 face="Courier New"># Delete any old rules #</font>
<br><font size=2 face="Courier New">tc qdisc del root dev $e</font>
<br>
<br><font size=2 face="Courier New">## each class is able to take more
bandwidth as it is available, but must</font>
<br><font size=2 face="Courier New">## surrender it as the higher priorities
(2, 3, then 4) need it.</font>
<br><font size=2 face="Courier New">## The lower the priority number, the
more priority it gets. Thus when</font>
<br><font size=2 face="Courier New">## there is extra bandwidth available,
the lower number classes get it as</font>
<br><font size=2 face="Courier New">## they need it.</font>
<br>
<br><font size=2 face="Courier New"># root qdisc / qdisc = queueing
discipline #</font>
<br><font size=2 face="Courier New">tc qdisc add dev $e root handle 1:0
cbq bandwidth 100Mbit avpkt 1000 cell 8</font>
<br>
<br><font size=2 face="Courier New">tc class add dev $e parent 1:0 classid
1:1 cbq bandwidth 100Mbit rate $t1 weight $w prio 8 allot 1514 cell 8 maxburst
20 avpkt 1000 bounded</font>
<br>
<br><font size=2 face="Courier New"># child qdiscs (like child nodes on
a tree) #</font>
<br><font size=2 face="Courier New">tc class add dev $e parent 1:1 classid
1:3 cbq bandwidth 100Mbit rate $sizeCitrix weight $weightCitrix prio 8
allot 1514 cell 8 maxburst 20 avpkt 300 isolated</font>
<br><font size=2 face="Courier New">tc qdisc add dev $e parent 1:3 handle
30: sfq perturb 20</font>
<br>
<br><font size=2 face="Courier New">tc class add dev $e parent 1:1 classid
1:5 cbq bandwidth 100Mbit rate $sizeVoIP weight $weightVoIP prio 8 allot
1514 cell 8 maxburst 20 avpkt 204 bounded</font>
<br>
<br><font size=2 face="Courier New">tc class add dev $e parent 1:1 classid
1:6 cbq bandwidth 100Mbit rate $sizeVideo weight $weightVideo prio 8 allot
1514 cell 8 maxburst 20 avpkt 580 bounded</font>
<br>
<br><font size=2 face="Courier New">tc class add dev $e parent 1:1 classid
1:7 cbq bandwidth 100Mbit rate $sizeSametime weight $weightSametime prio
8 allot 1514 cell 8 maxburst 20 avpkt 550</font>
<br><font size=2 face="Courier New">tc qdisc add dev $e parent 1:7 handle
70: sfq perturb 20</font>
<br>
<br><font size=2 face="Courier New">tc class add dev $e parent 1:1 classid
1:9 cbq bandwidth 100Mbit rate $sizeBulk weight $weightBulk prio 8 allot
1514 cell 8 maxburst 20 avpkt 1000</font>
<br><font size=2 face="Courier New">tc qdisc add dev $e parent 1:9 handle
90: sfq perturb 20</font>
<br>
<br><font size=2 face="Courier New">#####################################</font>
<br><font size=2 face="Courier New">############### Citrix ##############</font>
<br><font size=2 face="Courier New">#
#</font>
<br>
<br><font size=2 face="Courier New"># SSH #</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip sport 22 0xffff flowid 1:3</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:3</font>
<br>
<br><font size=2 face="Courier New"># CITRIX/ICA #</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip sport 1494 0xffff flowid 1:3</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip dport 1494 0xffff flowid 1:3</font>
<br>
<br><font size=2 face="Courier New"># CITRIX Metaframe #</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip src $CONNECTRIA1/32 flowid 1:3</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip dst $CONNECTRIA1/32 flowid 1:3</font>
<br>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip src $CONNECTRIA2/32 flowid 1:3</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip dst $CONNECTRIA2/32 flowid 1:3</font>
<br>
<br><font size=2 face="Courier New">#####################################</font>
<br><font size=2 face="Courier New">############### VoIP ################</font>
<br><font size=2 face="Courier New">#
#</font>
<br>
<br><font size=2 face="Courier New"># IAX # this is the old format - IAX2
should be what's really seen going on</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip sport 5036 0xffff flowid 1:5</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip dport 5036 0xffff flowid 1:5</font>
<br>
<br><font size=2 face="Courier New"># IAX2 #</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip sport 4569 0xffff flowid 1:5</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip dport 4569 0xffff flowid 1:5</font>
<br>
<br><font size=2 face="Courier New">#### Remotely VPNd SIP Phones
#####</font>
<br>
<br><font size=2 face="Courier New"># Ron Senykoff Home</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip src XXX.XXX.XXX.XXX/32 flowid 1:5</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip dst XXX.XXX.XXX.XXX/32 flowid 1:5</font>
<br>
<br><font size=2 face="Courier New">#####################################</font>
<br><font size=2 face="Courier New">############### Video ###############</font>
<br><font size=2 face="Courier New">#
#</font>
<br>
<br><font size=2 face="Courier New"># H323 #</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip sport 1720 0xffff flowid 1:6</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip dport 1720 0xffff flowid 1:6</font>
<br>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip sport 15328 0xffff flowid 1:6</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip dport 15328 0xffff flowid 1:6</font>
<br>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip sport 15329 0xffff flowid 1:6</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip dport 15329 0xffff flowid 1:6</font>
<br>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip sport 15330 0xffff flowid 1:6</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip dport 15330 0xffff flowid 1:6</font>
<br>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip sport 15331 0xffff flowid 1:6</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip dport 15331 0xffff flowid 1:6</font>
<br>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip sport 15332 0xffff flowid 1:6</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip dport 15332 0xffff flowid 1:6</font>
<br>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip sport 3230 0xffff flowid 1:6</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip dport 3230 0xffff flowid 1:6</font>
<br><font size=2 face="Courier New">.</font>
<br><font size=2 face="Courier New">. shortened for posting purposes</font>
<br><font size=2 face="Courier New">.</font>
<br><font size=2 face="Courier New">.</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip sport 3247 0xffff flowid 1:6</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 2 u32 match ip dport 3247 0xffff flowid 1:6</font>
<br>
<br><font size=2 face="Courier New">#####################################</font>
<br><font size=2 face="Courier New">############ Sametime ###############</font>
<br><font size=2 face="Courier New">#
#</font>
<br>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip src $SAMETIME/32 flowid 1:7</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 1 u32 match ip dst $SAMETIME/32 flowid 1:7</font>
<br>
<br><font size=2 face="Courier New">#####################################</font>
<br><font size=2 face="Courier New">######### Bulk / Default ############</font>
<br><font size=2 face="Courier New">#
#</font>
<br>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 3 u32 match ip src 0.0.0.0/0 flowid 1:9</font>
<br><font size=2 face="Courier New">tc filter add dev $e protocol ip parent
1:0 prio 3 u32 match ip dst 0.0.0.0/0 flowid 1:9</font>
<br>
<br>
<br>
--=_alternative 0071B18086256F80_=--