Hi,
I work on a organization that have a little office near to main building. That office has only 3 PC's and 3 telephone. Phones are "connected" to an asterisk server.
The problem is that ISP service is not simmetric. ISP provides 1 bit for download and hopefully 256k for upload. PC's are connected to a hub that is connected to a Linksys WRT54GL router with OpenWRT which in turn is connected to ISP modem.
I'd wonder if I can tweak in some way qos on OpenWRT in order to avoid "jerky" voice when someone make a phone call.
The following is my script, please could you help me to improve it?
Thanks in advance
Code:
UPVOIPSVR=X.X.X.X
MYORGNET=X.X.X.Y/24
IFWAN=eth0.1
PHYSICALBW_MBPS=10 # mbps
let PHYSICALBW=$PHYSICALBW_MBPS*1000000 # bps
CONTRACTBW_MBPS=1 # mbps
let CONTRACTBW=$CONTRACTBW_MBPS*1000000 # bps
CODEC=g711
CALLBW_KBPS=87 # kbps
let CALLBW=$CALLBW_KBPS*1000 # bps
FRAMEINTERVAL_MS=20 # in miliseconds
CALLS=3
let VOIPBW=$CALLS*$CALLBW
let VOIPBW_KPBS=$VOIPBW/1000
let NONVOIPBW=$CONTRACTBW-$VOIPBW
let NONVOIPBW_KPBS=$NONVOIPBW/1000
let NONVOIPBWUP=$NONVOIPBW/4
let NONVOIPBWUP_KBPS=$NONVOIPBWUP/1000
UPVOIPSVR=200.69.213.172
UPNET=200.69.213.0/24
IFWAN=eth0.1
PHYSICALBW_MBPS=10 # mbps
let PHYSICALBW=$PHYSICALBW_MBPS*1000000 # bps
CONTRACTBW_MBPS=1 # mbps
let CONTRACTBW=$CONTRACTBW_MBPS*1000000 # bps
CODEC=g711
CALLBW_KBPS=87 # kbps
let CALLBW=$CALLBW_KBPS*1000 # bps
FRAMEINTERVAL_MS=20 # in miliseconds
CALLS=3
let VOIPBW=$CALLS*$CALLBW
let VOIPBW_KPBS=$VOIPBW/1000
let NONVOIPBW=$CONTRACTBW-$VOIPBW
let NONVOIPBW_KPBS=$NONVOIPBW/1000
let NONVOIPBWUP=$NONVOIPBW/4
let NONVOIPBWUP_KBPS=$NONVOIPBWUP/1000
let INTERVALCAPACITY=$CONTRACTBW*$FRAMEINTERVAL_MS/1000/8 # bytes
let INTERVALVOIPUSAGE=$CALLS*$CALLBW*$FRAMEINTERVAL_MS/1000/8 #bytes
let NONVOIPBURST=$INTERVALCAPACITY-$INTERVALVOIPUSAGE
tc qdisc add dev $IFWAN ingress handle ffff:
tc filter add dev $IFWAN parent ffff: protocol ip prio 1 u32 \
match ip src $UPVOIPSVR \
flowid ffff:1
tc filter add dev $IFWAN parent ffff: protocol ip prio 2 u32 \
match ip src 0.0.0.0/0 \
police rate $NONVOIPBW burst 100kb drop \
flowid ffff:2
tc qdisc add dev $IFWAN root handle 1:0 prio
tc filter add dev $IFWAN parent 1:0 protocol ip prio 1 u32 \
match ip dst $UPVOIPSVR \
police rate $VOIPBW burst 100kb continue \
flowid 1:1
tc filter add dev $IFWAN parent 1:0 protocol ip prio 2 u32 \
match ip dst 0.0.0.0/0 \
flowid 1:2
tc qdisc add dev $IFWAN parent 1:2 handle 12: tbf \
rate $NONVOIPBWUP burst $NONVOIPBURST limit 100kb
let INTERVALCAPACITY=$CONTRACTBW*$FRAMEINTERVAL_MS/1000/8 # bytes
let INTERVALVOIPUSAGE=$CALLS*$CALLBW*$FRAMEINTERVAL_MS/1000/8 #bytes
let NONVOIPBURST=$INTERVALCAPACITY-$INTERVALVOIPUSAGE
tc qdisc add dev $IFWAN ingress handle ffff:
tc filter add dev $IFWAN parent ffff: protocol ip prio 1 u32 \
match ip src $UPVOIPSVR \
flowid ffff:1
tc filter add dev $IFWAN parent ffff: protocol ip prio 2 u32 \
match ip src 0.0.0.0/0 \
police rate $NONVOIPBW burst 100kb drop \
flowid ffff:2
tc qdisc add dev $IFWAN root handle 1:0 prio
tc filter add dev $IFWAN parent 1:0 protocol ip prio 1 u32 \
match ip dst $UPVOIPSVR \
police rate $VOIPBW burst 100kb continue \
flowid 1:1
tc filter add dev $IFWAN parent 1:0 protocol ip prio 2 u32 \
match ip dst 0.0.0.0/0 \
flowid 1:2
tc qdisc add dev $IFWAN parent 1:2 handle 12: tbf \
rate $NONVOIPBWUP burst $NONVOIPBURST limit 100kb