Re: SEPARATING VOIP AND SURFING

Linux Advanced Routing and Traffic Control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ricardo Soria wrote:
Dear list:

I have a problem I cannot handle yet, and need to
solve it as soon as possible.  Would be very greatful
with anybody who can help me.

I have a 512/512 link to internet, that I want to
share between several computers.  I have eth0, with a
public IP address, conected to Internet, and also,
eth1, with a private IP address, for network with the
surfing computers.  I have a main class with the whole
512kbit, then 2 child classes in this way (you can see
the complete script at the end):

class 1: rate = ceil = 64kbit, prio 0, for VOIP
class 2: rate = ceil = 448kbit, for SURFING

Class 2 is subdivided again in about 20 classes, for
20 surfing computers, this way:

class 3: rate = 18kbit, ceil = 448kbit, prio 1, SURF

I have a classical problem (I think).  As you can see,
first 64kbit are for VOIP, so, it is necesary the best
quality, and the minimal delays.  64Kbit is pretty
enough for 1 VOIP channel (it is supposed to really
use no more than 20kbit).  And also, the 64kbit class
has the highest priority.  Nevertheless, specially
when all 20 users are surfing, or some user are
browsing weight pages, or when 2 or more users are
downloading at the same time, I cannot get VOIP to
work properly, because quality becomes very poor.  I
have made all kind of imaginable test, probes and
combinations, trying to test with different burst
values for classes, attaching sfq qdiscs to all leaf
classes, then only to surfing classes, then only to
VOIP classes, and even, gaming with R2Q/Quantums, that
would not be necessary, because 64Kbit is very more
than enough.

So please, does anyone have any idea how to completely
separate VOIP and SURFING, making 2 independent
channels, without one service affect to other ??

Very thanks in advance.

If you are still able to read, after having read all
this stuff, here goes my script as is now...

Best Regards to everybody.

Ricardo.

================================================

#!/bin/bash

tc qdisc add dev eth1 root handle 1: htb default 121
r2q 1
tc qdisc add dev eth0 root handle 1: htb default 20
r2q 5

tc class add dev eth1 parent 1: classid 1:1 htb rate
512kbit ceil 512kbit
tc class add dev eth0 parent 1: classid 1:1 htb rate
512kbit ceil 512kbit

tc class add dev eth1 parent 1:1 classid 1:10 htb rate
64kbit ceil 64kbit prio 0
tc class add dev eth0 parent 1:1 classid 1:10 htb rate
64kbit ceil 64kbit prio 0

tc class add dev eth1 parent 1:1 classid 1:20 htb rate
448kbit ceil 448kbit prio 1
tc class add dev eth0 parent 1:1 classid 1:20 htb rate
448kbit ceil 448kbit prio 1

# PER MACHINE OR IP CLASSES

tc class add dev eth1 parent 1:20 classid 1:90 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:91 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:101 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:102 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:103 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:104 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:105 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:106 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:107 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:108 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:109 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:110 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:111 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:112 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:113 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:114 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:115 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:116 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:117 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:118 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:119 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:120 htb
rate 18kbit ceil 448kbit prio 1
tc class add dev eth1 parent 1:20 classid 1:121 htb
rate 18kbit ceil 448kbit prio 1

# SFQ QDISCS PER LEAF CLASS

# VOIP
tc qdisc add dev eth0 parent 1:10 handle 10: sfq
perturb 10
tc qdisc add dev eth0 parent 1:20 handle 20: sfq
perturb 10

#SURFING
tc qdisc add dev eth1 parent 1:10 handle 10: sfq
perturb 10
tc qdisc add dev eth1 parent 1:90 handle 90: sfq
perturb 10
tc qdisc add dev eth1 parent 1:91 handle 91: sfq
perturb 10
tc qdisc add dev eth1 parent 1:101 handle 101: sfq
perturb 10
tc qdisc add dev eth1 parent 1:102 handle 102: sfq
perturb 10
tc qdisc add dev eth1 parent 1:103 handle 103: sfq
perturb 10
tc qdisc add dev eth1 parent 1:104 handle 104: sfq
perturb 10
tc qdisc add dev eth1 parent 1:105 handle 105: sfq
perturb 10
tc qdisc add dev eth1 parent 1:106 handle 106: sfq
perturb 10
tc qdisc add dev eth1 parent 1:107 handle 107: sfq
perturb 10
tc qdisc add dev eth1 parent 1:108 handle 108: sfq
perturb 10
tc qdisc add dev eth1 parent 1:109 handle 109: sfq
perturb 10
tc qdisc add dev eth1 parent 1:110 handle 110: sfq
perturb 10
tc qdisc add dev eth1 parent 1:111 handle 111: sfq
perturb 10
tc qdisc add dev eth1 parent 1:112 handle 112: sfq
perturb 10
tc qdisc add dev eth1 parent 1:113 handle 113: sfq
perturb 10
tc qdisc add dev eth1 parent 1:114 handle 114: sfq
perturb 10
tc qdisc add dev eth1 parent 1:115 handle 115: sfq
perturb 10
tc qdisc add dev eth1 parent 1:116 handle 116: sfq
perturb 10
tc qdisc add dev eth1 parent 1:117 handle 117: sfq
perturb 10
tc qdisc add dev eth1 parent 1:118 handle 118: sfq
perturb 10
tc qdisc add dev eth1 parent 1:119 handle 119: sfq
perturb 10
tc qdisc add dev eth1 parent 1:120 handle 120: sfq
perturb 10
tc qdisc add dev eth1 parent 1:121 handle 121: sfq
perturb 10

# FILTERS

# VOIP
tc filter add dev eth0 protocol ip parent 1:0 prio 0
u32 match ip src 216.118.226.244 flowid 1:10
tc filter add dev eth1 protocol ip parent 1:0 prio 0
u32 match ip dst 216.118.226.244 flowid 1:10

# SURFING
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.2   flowid 1:90
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.3   flowid 1:91
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.101 flowid 1:101
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.102 flowid 1:102
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.103 flowid 1:103
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.104 flowid 1:104
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.105 flowid 1:105
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.106 flowid 1:106
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.107 flowid 1:107
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.108 flowid 1:108
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.109 flowid 1:109
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.110 flowid 1:110
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.111 flowid 1:111
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.112 flowid 1:112
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.113 flowid 1:113
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.114 flowid 1:114
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.115 flowid 1:115
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.116 flowid 1:116
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.117 flowid 1:117
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.118 flowid 1:118
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.119 flowid 1:119
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.120 flowid 1:120

# END


I haven't read the script properly, but generally three points come to mind.

You need to back off more from link speed - total ceils to about 80% and share that between interactive and bulk.

SFQ default queue length is too long to be used as you want - use esfq or change the length to 16 in the source code (see www.docum.org FAQs).

You should really only send bulk to SFQ - It will behave better than a fifo if you mix traffic - but at the low rates you set it will still cause too much delay for interactive (small UDP/TCP).

Andy.


_______________________________________________ LARTC mailing list / LARTC@xxxxxxxxxxxxxxx http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux