examples: remove diffserv
The diffserv examples here are out of date and incomplete. Remove them rather than try and fix them. Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
This commit is contained in:
parent
86c0bf5982
commit
d49e5c2437
|
|
@ -1,68 +0,0 @@
|
||||||
#! /bin/sh -x
|
|
||||||
#
|
|
||||||
# sample script on using the ingress capabilities
|
|
||||||
# This script just tags on the ingress interfac using Ipchains
|
|
||||||
# the result is used for fast classification and re-marking
|
|
||||||
# on the egress interface
|
|
||||||
#
|
|
||||||
#path to various utilities;
|
|
||||||
#change to reflect yours.
|
|
||||||
#
|
|
||||||
IPROUTE=/root/DS-6-beta/iproute2-990530-dsing
|
|
||||||
TC=$IPROUTE/tc/tc
|
|
||||||
IP=$IPROUTE/ip/ip
|
|
||||||
IPCHAINS=/root/DS-6-beta/ipchains-1.3.9/ipchains
|
|
||||||
INDEV=eth2
|
|
||||||
EGDEV="dev eth1"
|
|
||||||
#
|
|
||||||
# tag all incoming packets from host 10.2.0.24 to value 1
|
|
||||||
# tag all incoming packets from host 10.2.0.3 to value 2
|
|
||||||
# tag the rest of incoming packets from subnet 10.2.0.0/24 to value 3
|
|
||||||
#These values are used in the egress
|
|
||||||
#
|
|
||||||
############################################################
|
|
||||||
$IPCHAINS -A input -s 10.2.0.4/24 -m 3
|
|
||||||
$IPCHAINS -A input -i $INDEV -s 10.2.0.24 -m 1
|
|
||||||
$IPCHAINS -A input -i $INDEV -s 10.2.0.3 -m 2
|
|
||||||
|
|
||||||
######################## Egress side ########################
|
|
||||||
|
|
||||||
|
|
||||||
# attach a dsmarker
|
|
||||||
#
|
|
||||||
$TC qdisc add $EGDEV handle 1:0 root dsmark indices 64 set_tc_index
|
|
||||||
#
|
|
||||||
# values of the DSCP to change depending on the class
|
|
||||||
#
|
|
||||||
#becomes EF
|
|
||||||
$TC class change $EGDEV classid 1:1 dsmark mask 0x3 \
|
|
||||||
value 0xb8
|
|
||||||
#becomes AF11
|
|
||||||
$TC class change $EGDEV classid 1:2 dsmark mask 0x3 \
|
|
||||||
value 0x28
|
|
||||||
#becomes AF21
|
|
||||||
$TC class change $EGDEV classid 1:3 dsmark mask 0x3 \
|
|
||||||
value 0x48
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# The class mapping
|
|
||||||
#
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 4 handle 1 fw classid 1:1
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 4 handle 2 fw classid 1:2
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 4 handle 3 fw classid 1:3
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
echo "---- qdisc parameters Ingress ----------"
|
|
||||||
$TC qdisc ls dev $INDEV
|
|
||||||
echo "---- Class parameters Ingress ----------"
|
|
||||||
$TC class ls dev $INDEV
|
|
||||||
echo "---- filter parameters Ingress ----------"
|
|
||||||
$TC filter ls dev $INDEV parent 1:0
|
|
||||||
|
|
||||||
echo "---- qdisc parameters Egress ----------"
|
|
||||||
$TC qdisc ls $EGDEV
|
|
||||||
echo "---- Class parameters Egress ----------"
|
|
||||||
$TC class ls $EGDEV
|
|
||||||
echo "---- filter parameters Egress ----------"
|
|
||||||
$TC filter ls $EGDEV parent 1:0
|
|
||||||
|
|
@ -1,87 +0,0 @@
|
||||||
#! /bin/sh -x
|
|
||||||
#
|
|
||||||
# sample script on using the ingress capabilities
|
|
||||||
# This script tags the fwmark on the ingress interface using IPchains
|
|
||||||
# the result is used first for policing on the Ingress interface then
|
|
||||||
# for fast classification and re-marking
|
|
||||||
# on the egress interface
|
|
||||||
#
|
|
||||||
#path to various utilities;
|
|
||||||
#change to reflect yours.
|
|
||||||
#
|
|
||||||
IPROUTE=/root/DS-6-beta/iproute2-990530-dsing
|
|
||||||
TC=$IPROUTE/tc/tc
|
|
||||||
IP=$IPROUTE/ip/ip
|
|
||||||
IPCHAINS=/root/DS-6-beta/ipchains-1.3.9/ipchains
|
|
||||||
INDEV=eth2
|
|
||||||
EGDEV="dev eth1"
|
|
||||||
#
|
|
||||||
# tag all incoming packets from host 10.2.0.24 to value 1
|
|
||||||
# tag all incoming packets from host 10.2.0.3 to value 2
|
|
||||||
# tag the rest of incoming packets from subnet 10.2.0.0/24 to value 3
|
|
||||||
#These values are used in the egress
|
|
||||||
############################################################
|
|
||||||
$IPCHAINS -A input -s 10.2.0.0/24 -m 3
|
|
||||||
$IPCHAINS -A input -i $INDEV -s 10.2.0.24 -m 1
|
|
||||||
$IPCHAINS -A input -i $INDEV -s 10.2.0.3 -m 2
|
|
||||||
############################################################
|
|
||||||
#
|
|
||||||
# install the ingress qdisc on the ingress interface
|
|
||||||
############################################################
|
|
||||||
$TC qdisc add dev $INDEV handle ffff: ingress
|
|
||||||
############################################################
|
|
||||||
|
|
||||||
#
|
|
||||||
# attach a fw classifier to the ingress which polices anything marked
|
|
||||||
# by ipchains to tag value 3 (The rest of the subnet packets -- not
|
|
||||||
# tag 1 or 2) to not go beyond 1.5Mbps
|
|
||||||
# Allow up to at least 60 packets to burst (assuming maximum packet
|
|
||||||
# size of # 1.5 KB) in the long run and up to about 6 packets in the
|
|
||||||
# shot run
|
|
||||||
|
|
||||||
############################################################
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 50 handle 3 fw \
|
|
||||||
police rate 1500kbit burst 90k mtu 9k drop flowid :1
|
|
||||||
############################################################
|
|
||||||
|
|
||||||
######################## Egress side ########################
|
|
||||||
|
|
||||||
|
|
||||||
# attach a dsmarker
|
|
||||||
#
|
|
||||||
$TC qdisc add $EGDEV handle 1:0 root dsmark indices 64
|
|
||||||
#
|
|
||||||
# values of the DSCP to change depending on the class
|
|
||||||
#
|
|
||||||
$TC class change $EGDEV classid 1:1 dsmark mask 0x3 \
|
|
||||||
value 0xb8
|
|
||||||
$TC class change $EGDEV classid 1:2 dsmark mask 0x3 \
|
|
||||||
value 0x28
|
|
||||||
$TC class change $EGDEV classid 1:3 dsmark mask 0x3 \
|
|
||||||
value 0x48
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# The class mapping
|
|
||||||
#
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 4 handle 1 fw classid 1:1
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 4 handle 2 fw classid 1:2
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 4 handle 3 fw classid 1:3
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
echo "---- qdisc parameters Ingress ----------"
|
|
||||||
$TC qdisc ls dev $INDEV
|
|
||||||
echo "---- Class parameters Ingress ----------"
|
|
||||||
$TC class ls dev $INDEV
|
|
||||||
echo "---- filter parameters Ingress ----------"
|
|
||||||
$TC filter ls dev $INDEV parent ffff:
|
|
||||||
|
|
||||||
echo "---- qdisc parameters Egress ----------"
|
|
||||||
$TC qdisc ls $EGDEV
|
|
||||||
echo "---- Class parameters Egress ----------"
|
|
||||||
$TC class ls $EGDEV
|
|
||||||
echo "---- filter parameters Egress ----------"
|
|
||||||
$TC filter ls $EGDEV parent 1:0
|
|
||||||
#
|
|
||||||
#deleting the ingress qdisc
|
|
||||||
#$TC qdisc del $DEV ingress
|
|
||||||
|
|
@ -1,170 +0,0 @@
|
||||||
#! /bin/sh -x
|
|
||||||
#
|
|
||||||
# sample script on using the ingress capabilities using u32 classifier
|
|
||||||
# This script tags tcindex based on metering on the ingress
|
|
||||||
# interface the result is used for fast classification and re-marking
|
|
||||||
# on the egress interface
|
|
||||||
# This is an example of a color aware mode marker with PIR configured
|
|
||||||
# based on draft-wahjak-mcm-00.txt (section 3.1)
|
|
||||||
#
|
|
||||||
# The colors are defined using the Diffserv Fields
|
|
||||||
#path to various utilities;
|
|
||||||
#change to reflect yours.
|
|
||||||
#
|
|
||||||
IPROUTE=/usr/src/iproute2-current
|
|
||||||
TC=$IPROUTE/tc/tc
|
|
||||||
IP=$IPROUTE/ip/ip
|
|
||||||
INDEV=eth0
|
|
||||||
EGDEV="dev eth1"
|
|
||||||
CIR1=1500kbit
|
|
||||||
CIR2=1000kbit
|
|
||||||
|
|
||||||
#The CBS is about 60 MTU sized packets
|
|
||||||
CBS1=90k
|
|
||||||
CBS2=90k
|
|
||||||
|
|
||||||
############################################################
|
|
||||||
#
|
|
||||||
# install the ingress qdisc on the ingress interface
|
|
||||||
$TC qdisc add dev $INDEV handle ffff: ingress
|
|
||||||
############################################################
|
|
||||||
#
|
|
||||||
# Create u32 filters
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 4 handle 1: u32 \
|
|
||||||
divisor 1
|
|
||||||
############################################################
|
|
||||||
|
|
||||||
# The meters: Note that we have shared meters in this case as identified
|
|
||||||
# by the index parameter
|
|
||||||
meter1=" police index 1 rate $CIR1 burst $CBS1 "
|
|
||||||
meter2=" police index 2 rate $CIR2 burst $CBS1 "
|
|
||||||
meter3=" police index 3 rate $CIR2 burst $CBS2 "
|
|
||||||
meter4=" police index 4 rate $CIR1 burst $CBS2 "
|
|
||||||
meter5=" police index 5 rate $CIR1 burst $CBS2 "
|
|
||||||
|
|
||||||
# All packets are marked with a tcindex value which is used on the egress
|
|
||||||
# tcindex 1 maps to AF41, 2->AF42, 3->AF43, 4->BE
|
|
||||||
|
|
||||||
# *********************** AF41 ***************************
|
|
||||||
#AF41 (DSCP 0x22) is passed on with a tcindex value 1
|
|
||||||
#if it doesn't exceed its CIR/CBS
|
|
||||||
#policer 1 is used.
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 4 u32 \
|
|
||||||
match ip tos 0x88 0xfc \
|
|
||||||
$meter1 \
|
|
||||||
continue flowid :1
|
|
||||||
#
|
|
||||||
# if it exceeds the above but not the extra rate/burst below, it gets a
|
|
||||||
# tcindex value of 2
|
|
||||||
# policer 2 is used
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 5 u32 \
|
|
||||||
match ip tos 0x88 0xfc \
|
|
||||||
$meter2 \
|
|
||||||
continue flowid :2
|
|
||||||
#
|
|
||||||
# if it exceeds the above but not the rule below, it gets a tcindex value
|
|
||||||
# of 3 (policer 3)
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 6 u32 \
|
|
||||||
match ip tos 0x88 0xfc \
|
|
||||||
$meter3 \
|
|
||||||
drop flowid :3
|
|
||||||
#
|
|
||||||
|
|
||||||
# *********************** AF42 ***************************
|
|
||||||
#AF42 (DSCP 0x24) from is passed on with a tcindex value 2
|
|
||||||
#if it doesn't exceed its CIR/CBS
|
|
||||||
#policer 2 is used. Note that this is shared with the AF41
|
|
||||||
#
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 5 u32 \
|
|
||||||
match ip tos 0x90 0xfc \
|
|
||||||
$meter2 \
|
|
||||||
continue flowid :2
|
|
||||||
#
|
|
||||||
# if it exceeds the above but not the rule below, it gets a tcindex value
|
|
||||||
# of 3 (policer 3)
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 6 u32 \
|
|
||||||
match ip tos 0x90 0xfc \
|
|
||||||
$meter3 \
|
|
||||||
drop flowid :3
|
|
||||||
#
|
|
||||||
# *********************** AF43 ***************************
|
|
||||||
#
|
|
||||||
#AF43 (DSCP 0x26) from is passed on with a tcindex value 3
|
|
||||||
#if it doesn't exceed its CIR/CBS
|
|
||||||
#policer 3 is used. Note that this is shared with the AF41 and AF42
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 6 u32 \
|
|
||||||
match ip tos 0x98 0xfc \
|
|
||||||
$meter3 \
|
|
||||||
drop flowid :3
|
|
||||||
#
|
|
||||||
# *********************** BE ***************************
|
|
||||||
#
|
|
||||||
# Anything else (not from the AF4*) gets discarded if it
|
|
||||||
# exceeds 1Mbps and by default goes to BE if it doesn't
|
|
||||||
# Note that the BE class is also used by the AF4* in the worst
|
|
||||||
# case
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 7 u32 \
|
|
||||||
match ip src 0/0\
|
|
||||||
$meter4 \
|
|
||||||
drop flowid :4
|
|
||||||
|
|
||||||
######################## Egress side ########################
|
|
||||||
|
|
||||||
# attach a dsmarker
|
|
||||||
#
|
|
||||||
$TC qdisc add $EGDEV handle 1:0 root dsmark indices 64
|
|
||||||
#
|
|
||||||
# values of the DSCP to change depending on the class
|
|
||||||
#note that the ECN bits are masked out
|
|
||||||
#
|
|
||||||
#AF41 (0x88 is 0x22 shifted to the right by two bits)
|
|
||||||
#
|
|
||||||
$TC class change $EGDEV classid 1:1 dsmark mask 0x3 \
|
|
||||||
value 0x88
|
|
||||||
#AF42
|
|
||||||
$TC class change $EGDEV classid 1:2 dsmark mask 0x3 \
|
|
||||||
value 0x90
|
|
||||||
#AF43
|
|
||||||
$TC class change $EGDEV classid 1:3 dsmark mask 0x3 \
|
|
||||||
value 0x98
|
|
||||||
#BE
|
|
||||||
$TC class change $EGDEV classid 1:3 dsmark mask 0x3 \
|
|
||||||
value 0x0
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# The class mapping
|
|
||||||
#
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 1 tcindex classid 1:1
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 2 tcindex classid 1:2
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 3 tcindex classid 1:3
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 4 tcindex classid 1:4
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
echo "---- qdisc parameters Ingress ----------"
|
|
||||||
$TC qdisc ls dev $INDEV
|
|
||||||
echo "---- Class parameters Ingress ----------"
|
|
||||||
$TC class ls dev $INDEV
|
|
||||||
echo "---- filter parameters Ingress ----------"
|
|
||||||
$TC filter ls dev $INDEV parent ffff:
|
|
||||||
|
|
||||||
echo "---- qdisc parameters Egress ----------"
|
|
||||||
$TC qdisc ls $EGDEV
|
|
||||||
echo "---- Class parameters Egress ----------"
|
|
||||||
$TC class ls $EGDEV
|
|
||||||
echo "---- filter parameters Egress ----------"
|
|
||||||
$TC filter ls $EGDEV parent 1:0
|
|
||||||
#
|
|
||||||
#deleting the ingress qdisc
|
|
||||||
#$TC qdisc del $INDEV ingress
|
|
||||||
|
|
@ -1,132 +0,0 @@
|
||||||
#! /bin/sh -x
|
|
||||||
#
|
|
||||||
# sample script on using the ingress capabilities
|
|
||||||
# This script fwmark tags(IPchains) based on metering on the ingress
|
|
||||||
# interface the result is used for fast classification and re-marking
|
|
||||||
# on the egress interface
|
|
||||||
# This is an example of a color blind mode marker with no PIR configured
|
|
||||||
# based on draft-wahjak-mcm-00.txt (section 3.1)
|
|
||||||
#
|
|
||||||
#path to various utilities;
|
|
||||||
#change to reflect yours.
|
|
||||||
#
|
|
||||||
IPROUTE=/root/DS-6-beta/iproute2-990530-dsing
|
|
||||||
TC=$IPROUTE/tc/tc
|
|
||||||
IP=$IPROUTE/ip/ip
|
|
||||||
IPCHAINS=/root/DS-6-beta/ipchains-1.3.9/ipchains
|
|
||||||
INDEV=eth2
|
|
||||||
EGDEV="dev eth1"
|
|
||||||
CIR1=1500kbit
|
|
||||||
CIR2=1000kbit
|
|
||||||
|
|
||||||
#The CBS is about 60 MTU sized packets
|
|
||||||
CBS1=90k
|
|
||||||
CBS2=90k
|
|
||||||
|
|
||||||
meter1="police rate $CIR1 burst $CBS1 "
|
|
||||||
meter2="police rate $CIR1 burst $CBS2 "
|
|
||||||
meter3="police rate $CIR2 burst $CBS1 "
|
|
||||||
meter4="police rate $CIR2 burst $CBS2 "
|
|
||||||
meter5="police rate $CIR2 burst $CBS2 "
|
|
||||||
#
|
|
||||||
# tag the rest of incoming packets from subnet 10.2.0.0/24 to fw value 1
|
|
||||||
# tag all incoming packets from any other subnet to fw tag 2
|
|
||||||
############################################################
|
|
||||||
$IPCHAINS -A input -i $INDEV -s 0/0 -m 2
|
|
||||||
$IPCHAINS -A input -i $INDEV -s 10.2.0.0/24 -m 1
|
|
||||||
#
|
|
||||||
############################################################
|
|
||||||
# install the ingress qdisc on the ingress interface
|
|
||||||
$TC qdisc add dev $INDEV handle ffff: ingress
|
|
||||||
#
|
|
||||||
############################################################
|
|
||||||
|
|
||||||
# All packets are marked with a tcindex value which is used on the egress
|
|
||||||
# tcindex 1 maps to AF41, 2->AF42, 3->AF43, 4->BE
|
|
||||||
#
|
|
||||||
############################################################
|
|
||||||
#
|
|
||||||
# anything with fw tag of 1 is passed on with a tcindex value 1
|
|
||||||
#if it doesn't exceed its allocated rate (CIR/CBS)
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 4 handle 1 fw \
|
|
||||||
$meter1 \
|
|
||||||
continue flowid 4:1
|
|
||||||
#
|
|
||||||
# if it exceeds the above but not the extra rate/burst below, it gets a
|
|
||||||
#tcindex value of 2
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 5 handle 1 fw \
|
|
||||||
$meter2 \
|
|
||||||
continue flowid 4:2
|
|
||||||
#
|
|
||||||
# if it exceeds the above but not the rule below, it gets a tcindex value
|
|
||||||
# of 3
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 6 handle 1 fw \
|
|
||||||
$meter3 \
|
|
||||||
drop flowid 4:3
|
|
||||||
#
|
|
||||||
# Anything else (not from the subnet 10.2.0.24/24) gets discarded if it
|
|
||||||
# exceeds 1Mbps and by default goes to BE if it doesn't
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 6 handle 2 fw \
|
|
||||||
$meter5 \
|
|
||||||
drop flowid 4:4
|
|
||||||
|
|
||||||
|
|
||||||
######################## Egress side ########################
|
|
||||||
|
|
||||||
|
|
||||||
# attach a dsmarker
|
|
||||||
#
|
|
||||||
$TC qdisc add $EGDEV handle 1:0 root dsmark indices 64
|
|
||||||
#
|
|
||||||
# values of the DSCP to change depending on the class
|
|
||||||
#note that the ECN bits are masked out
|
|
||||||
#
|
|
||||||
#AF41 (0x88 is 0x22 shifted to the right by two bits)
|
|
||||||
#
|
|
||||||
$TC class change $EGDEV classid 1:1 dsmark mask 0x3 \
|
|
||||||
value 0x88
|
|
||||||
#AF42
|
|
||||||
$TC class change $EGDEV classid 1:2 dsmark mask 0x3 \
|
|
||||||
value 0x90
|
|
||||||
#AF43
|
|
||||||
$TC class change $EGDEV classid 1:3 dsmark mask 0x3 \
|
|
||||||
value 0x98
|
|
||||||
#BE
|
|
||||||
$TC class change $EGDEV classid 1:4 dsmark mask 0x3 \
|
|
||||||
value 0x0
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# The class mapping (using tcindex; could easily have
|
|
||||||
# replaced it with the fw classifier instead)
|
|
||||||
#
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 1 tcindex classid 1:1
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 2 tcindex classid 1:2
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 3 tcindex classid 1:3
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 4 tcindex classid 1:4
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
echo "---- qdisc parameters Ingress ----------"
|
|
||||||
$TC qdisc ls dev $INDEV
|
|
||||||
echo "---- Class parameters Ingress ----------"
|
|
||||||
$TC class ls dev $INDEV
|
|
||||||
echo "---- filter parameters Ingress ----------"
|
|
||||||
$TC filter ls dev $INDEV parent ffff:
|
|
||||||
|
|
||||||
echo "---- qdisc parameters Egress ----------"
|
|
||||||
$TC qdisc ls $EGDEV
|
|
||||||
echo "---- Class parameters Egress ----------"
|
|
||||||
$TC class ls $EGDEV
|
|
||||||
echo "---- filter parameters Egress ----------"
|
|
||||||
$TC filter ls $EGDEV parent 1:0
|
|
||||||
#
|
|
||||||
#deleting the ingress qdisc
|
|
||||||
#$TC qdisc del $INDEV ingress
|
|
||||||
|
|
@ -1,198 +0,0 @@
|
||||||
#! /bin/sh -x
|
|
||||||
#
|
|
||||||
# sample script on using the ingress capabilities using u32 classifier
|
|
||||||
# This script tags tcindex based on metering on the ingress
|
|
||||||
# interface the result is used for fast classification and re-marking
|
|
||||||
# on the egress interface
|
|
||||||
# This is an example of a color aware mode marker with PIR configured
|
|
||||||
# based on draft-wahjak-mcm-00.txt (section 3.2)
|
|
||||||
#
|
|
||||||
# The colors are defined using the Diffserv Fields
|
|
||||||
#path to various utilities;
|
|
||||||
#change to reflect yours.
|
|
||||||
#
|
|
||||||
IPROUTE=/root/DS-6-beta/iproute2-990530-dsing
|
|
||||||
TC=$IPROUTE/tc/tc
|
|
||||||
IP=$IPROUTE/ip/ip
|
|
||||||
IPCHAINS=/root/DS-6-beta/ipchains-1.3.9/ipchains
|
|
||||||
INDEV=eth2
|
|
||||||
EGDEV="dev eth1"
|
|
||||||
CIR1=1000kbit
|
|
||||||
CIR2=500kbit
|
|
||||||
# the PIR is what is in excess of the CIR
|
|
||||||
PIR1=1000kbit
|
|
||||||
PIR2=500kbit
|
|
||||||
|
|
||||||
#The CBS is about 60 MTU sized packets
|
|
||||||
CBS1=90k
|
|
||||||
CBS2=90k
|
|
||||||
#the EBS is about 20 max sized packets
|
|
||||||
EBS1=30k
|
|
||||||
EBS2=30k
|
|
||||||
|
|
||||||
# The meters: Note that we have shared meters in this case as identified
|
|
||||||
# by the index parameter
|
|
||||||
meter1=" police index 1 rate $CIR1 burst $CBS1 "
|
|
||||||
meter1a=" police index 2 rate $PIR1 burst $EBS1 "
|
|
||||||
meter2=" police index 3 rate $CIR2 burst $CBS1 "
|
|
||||||
meter2a=" police index 4 rate $PIR2 burst $EBS1 "
|
|
||||||
meter3=" police index 5 rate $CIR2 burst $CBS2 "
|
|
||||||
meter3a=" police index 6 rate $PIR2 burst $EBS2 "
|
|
||||||
meter4=" police index 7 rate $CIR1 burst $CBS2 "
|
|
||||||
|
|
||||||
############################################################
|
|
||||||
#
|
|
||||||
# install the ingress qdisc on the ingress interface
|
|
||||||
$TC qdisc add dev $INDEV handle ffff: ingress
|
|
||||||
############################################################
|
|
||||||
#
|
|
||||||
# All packets are marked with a tcindex value which is used on the egress
|
|
||||||
# tcindex 1 maps to AF41, 2->AF42, 3->AF43, 4->BE
|
|
||||||
#
|
|
||||||
# *********************** AF41 ***************************
|
|
||||||
#AF41 (DSCP 0x22) from is passed on with a tcindex value 1
|
|
||||||
#if it doesn't exceed its CIR/CBS + PIR/EBS
|
|
||||||
#policer 1 is used.
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 1 u32 \
|
|
||||||
match ip tos 0x88 0xfc \
|
|
||||||
$meter1 \
|
|
||||||
continue flowid :1
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 2 u32 \
|
|
||||||
match ip tos 0x88 0xfc \
|
|
||||||
$meter1a \
|
|
||||||
continue flowid :1
|
|
||||||
#
|
|
||||||
# if it exceeds the above but not the extra rate/burst below, it gets a
|
|
||||||
# tcindex value of 2
|
|
||||||
# policer 2 is used
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 3 u32 \
|
|
||||||
match ip tos 0x88 0xfc \
|
|
||||||
$meter2 \
|
|
||||||
continue flowid :2
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 4 u32 \
|
|
||||||
match ip tos 0x88 0xfc \
|
|
||||||
$meter2a \
|
|
||||||
continue flowid :2
|
|
||||||
#
|
|
||||||
# if it exceeds the above but not the rule below, it gets a tcindex value
|
|
||||||
# of 3 (policer 3)
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 5 u32 \
|
|
||||||
match ip tos 0x88 0xfc \
|
|
||||||
$meter3 \
|
|
||||||
continue flowid :3
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 6 u32 \
|
|
||||||
match ip tos 0x88 0xfc \
|
|
||||||
$meter3a \
|
|
||||||
drop flowid :3
|
|
||||||
#
|
|
||||||
# *********************** AF42 ***************************
|
|
||||||
#AF42 (DSCP 0x24) from is passed on with a tcindex value 2
|
|
||||||
#if it doesn't exceed its CIR/CBS + PIR/EBS
|
|
||||||
#policer 2 is used. Note that this is shared with the AF41
|
|
||||||
#
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 8 u32 \
|
|
||||||
match ip tos 0x90 0xfc \
|
|
||||||
$meter2 \
|
|
||||||
continue flowid :2
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 9 u32 \
|
|
||||||
match ip tos 0x90 0xfc \
|
|
||||||
$meter2a \
|
|
||||||
continue flowid :2
|
|
||||||
#
|
|
||||||
# if it exceeds the above but not the rule below, it gets a tcindex value
|
|
||||||
# of 3 (policer 3)
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 10 u32 \
|
|
||||||
match ip tos 0x90 0xfc \
|
|
||||||
$meter3 \
|
|
||||||
continue flowid :3
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 11 u32 \
|
|
||||||
match ip tos 0x90 0xfc \
|
|
||||||
$meter3a \
|
|
||||||
drop flowid :3
|
|
||||||
|
|
||||||
#
|
|
||||||
# *********************** AF43 ***************************
|
|
||||||
#
|
|
||||||
#AF43 (DSCP 0x26) from is passed on with a tcindex value 3
|
|
||||||
#if it doesn't exceed its CIR/CBS + PIR/EBS
|
|
||||||
#policer 3 is used. Note that this is shared with the AF41 and AF42
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 13 u32 \
|
|
||||||
match ip tos 0x98 0xfc \
|
|
||||||
$meter3 \
|
|
||||||
continue flowid :3
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 14 u32 \
|
|
||||||
match ip tos 0x98 0xfc \
|
|
||||||
$meter3a \
|
|
||||||
drop flowid :3
|
|
||||||
#
|
|
||||||
## *********************** BE ***************************
|
|
||||||
##
|
|
||||||
## Anything else (not from the AF4*) gets discarded if it
|
|
||||||
## exceeds 1Mbps and by default goes to BE if it doesn't
|
|
||||||
## Note that the BE class is also used by the AF4* in the worst
|
|
||||||
## case
|
|
||||||
##
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 16 u32 \
|
|
||||||
match ip src 0/0\
|
|
||||||
$meter4 \
|
|
||||||
drop flowid :4
|
|
||||||
|
|
||||||
######################## Egress side ########################
|
|
||||||
|
|
||||||
# attach a dsmarker
|
|
||||||
#
|
|
||||||
$TC qdisc add $EGDEV handle 1:0 root dsmark indices 64
|
|
||||||
#
|
|
||||||
# values of the DSCP to change depending on the class
|
|
||||||
#note that the ECN bits are masked out
|
|
||||||
#
|
|
||||||
#AF41 (0x88 is 0x22 shifted to the right by two bits)
|
|
||||||
#
|
|
||||||
$TC class change $EGDEV classid 1:1 dsmark mask 0x3 \
|
|
||||||
value 0x88
|
|
||||||
#AF42
|
|
||||||
$TC class change $EGDEV classid 1:2 dsmark mask 0x3 \
|
|
||||||
value 0x90
|
|
||||||
#AF43
|
|
||||||
$TC class change $EGDEV classid 1:3 dsmark mask 0x3 \
|
|
||||||
value 0x98
|
|
||||||
#BE
|
|
||||||
$TC class change $EGDEV classid 1:3 dsmark mask 0x3 \
|
|
||||||
value 0x0
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# The class mapping
|
|
||||||
#
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 1 tcindex classid 1:1
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 2 tcindex classid 1:2
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 3 tcindex classid 1:3
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 4 tcindex classid 1:4
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
echo "---- qdisc parameters Ingress ----------"
|
|
||||||
$TC qdisc ls dev $INDEV
|
|
||||||
echo "---- Class parameters Ingress ----------"
|
|
||||||
$TC class ls dev $INDEV
|
|
||||||
echo "---- filter parameters Ingress ----------"
|
|
||||||
$TC filter ls dev $INDEV parent ffff:
|
|
||||||
|
|
||||||
echo "---- qdisc parameters Egress ----------"
|
|
||||||
$TC qdisc ls $EGDEV
|
|
||||||
echo "---- Class parameters Egress ----------"
|
|
||||||
$TC class ls $EGDEV
|
|
||||||
echo "---- filter parameters Egress ----------"
|
|
||||||
$TC filter ls $EGDEV parent 1:0
|
|
||||||
#
|
|
||||||
#deleting the ingress qdisc
|
|
||||||
#$TC qdisc del $INDEV ingress
|
|
||||||
|
|
@ -1,144 +0,0 @@
|
||||||
#! /bin/sh -x
|
|
||||||
#
|
|
||||||
# sample script on using the ingress capabilities
|
|
||||||
# This script fwmark tags(IPchains) based on metering on the ingress
|
|
||||||
# interface the result is used for fast classification and re-marking
|
|
||||||
# on the egress interface
|
|
||||||
# This is an example of a color blind mode marker with no PIR configured
|
|
||||||
# based on draft-wahjak-mcm-00.txt (section 3.1)
|
|
||||||
#
|
|
||||||
#path to various utilities;
|
|
||||||
#change to reflect yours.
|
|
||||||
#
|
|
||||||
IPROUTE=/root/DS-6-beta/iproute2-990530-dsing
|
|
||||||
TC=$IPROUTE/tc/tc
|
|
||||||
IP=$IPROUTE/ip/ip
|
|
||||||
IPCHAINS=/root/DS-6-beta/ipchains-1.3.9/ipchains
|
|
||||||
INDEV=eth2
|
|
||||||
EGDEV="dev eth1"
|
|
||||||
CIR1=1500kbit
|
|
||||||
CIR2=500kbit
|
|
||||||
|
|
||||||
#The CBS is about 60 MTU sized packets
|
|
||||||
CBS1=90k
|
|
||||||
CBS2=90k
|
|
||||||
|
|
||||||
meter1="police rate $CIR1 burst $CBS1 "
|
|
||||||
meter1a="police rate $CIR2 burst $CBS1 "
|
|
||||||
meter2="police rate $CIR1 burst $CBS2 "
|
|
||||||
meter2a="police rate $CIR2 burst $CBS2 "
|
|
||||||
meter3="police rate $CIR2 burst $CBS1 "
|
|
||||||
meter3a="police rate $CIR2 burst $CBS1 "
|
|
||||||
meter4="police rate $CIR2 burst $CBS2 "
|
|
||||||
meter5="police rate $CIR1 burst $CBS2 "
|
|
||||||
#
|
|
||||||
# tag the rest of incoming packets from subnet 10.2.0.0/24 to fw value 1
|
|
||||||
# tag all incoming packets from any other subnet to fw tag 2
|
|
||||||
############################################################
|
|
||||||
$IPCHAINS -A input -i $INDEV -s 0/0 -m 2
|
|
||||||
$IPCHAINS -A input -i $INDEV -s 10.2.0.0/24 -m 1
|
|
||||||
#
|
|
||||||
############################################################
|
|
||||||
# install the ingress qdisc on the ingress interface
|
|
||||||
$TC qdisc add dev $INDEV handle ffff: ingress
|
|
||||||
#
|
|
||||||
############################################################
|
|
||||||
|
|
||||||
# All packets are marked with a tcindex value which is used on the egress
|
|
||||||
# tcindex 1 maps to AF41, 2->AF42, 3->AF43, 4->BE
|
|
||||||
#
|
|
||||||
############################################################
|
|
||||||
#
|
|
||||||
# anything with fw tag of 1 is passed on with a tcindex value 1
|
|
||||||
#if it doesn't exceed its allocated rate (CIR/CBS)
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 1 handle 1 fw \
|
|
||||||
$meter1 \
|
|
||||||
continue flowid 4:1
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 2 handle 1 fw \
|
|
||||||
$meter1a \
|
|
||||||
continue flowid 4:1
|
|
||||||
#
|
|
||||||
# if it exceeds the above but not the extra rate/burst below, it gets a
|
|
||||||
#tcindex value of 2
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 3 handle 1 fw \
|
|
||||||
$meter2 \
|
|
||||||
continue flowid 4:2
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 4 handle 1 fw \
|
|
||||||
$meter2a \
|
|
||||||
continue flowid 4:2
|
|
||||||
#
|
|
||||||
# if it exceeds the above but not the rule below, it gets a tcindex value
|
|
||||||
# of 3
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 5 handle 1 fw \
|
|
||||||
$meter3 \
|
|
||||||
continue flowid 4:3
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 6 handle 1 fw \
|
|
||||||
$meter3a \
|
|
||||||
drop flowid 4:3
|
|
||||||
#
|
|
||||||
# Anything else (not from the subnet 10.2.0.24/24) gets discarded if it
|
|
||||||
# exceeds 1Mbps and by default goes to BE if it doesn't
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 7 handle 2 fw \
|
|
||||||
$meter5 \
|
|
||||||
drop flowid 4:4
|
|
||||||
|
|
||||||
|
|
||||||
######################## Egress side ########################
|
|
||||||
|
|
||||||
|
|
||||||
# attach a dsmarker
|
|
||||||
#
|
|
||||||
$TC qdisc add $EGDEV handle 1:0 root dsmark indices 64
|
|
||||||
#
|
|
||||||
# values of the DSCP to change depending on the class
|
|
||||||
#note that the ECN bits are masked out
|
|
||||||
#
|
|
||||||
#AF41 (0x88 is 0x22 shifted to the right by two bits)
|
|
||||||
#
|
|
||||||
$TC class change $EGDEV classid 1:1 dsmark mask 0x3 \
|
|
||||||
value 0x88
|
|
||||||
#AF42
|
|
||||||
$TC class change $EGDEV classid 1:2 dsmark mask 0x3 \
|
|
||||||
value 0x90
|
|
||||||
#AF43
|
|
||||||
$TC class change $EGDEV classid 1:3 dsmark mask 0x3 \
|
|
||||||
value 0x98
|
|
||||||
#BE
|
|
||||||
$TC class change $EGDEV classid 1:4 dsmark mask 0x3 \
|
|
||||||
value 0x0
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# The class mapping (using tcindex; could easily have
|
|
||||||
# replaced it with the fw classifier instead)
|
|
||||||
#
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 1 tcindex classid 1:1
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 2 tcindex classid 1:2
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 3 tcindex classid 1:3
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 4 tcindex classid 1:4
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
echo "---- qdisc parameters Ingress ----------"
|
|
||||||
$TC qdisc ls dev $INDEV
|
|
||||||
echo "---- Class parameters Ingress ----------"
|
|
||||||
$TC class ls dev $INDEV
|
|
||||||
echo "---- filter parameters Ingress ----------"
|
|
||||||
$TC filter ls dev $INDEV parent ffff:
|
|
||||||
|
|
||||||
echo "---- qdisc parameters Egress ----------"
|
|
||||||
$TC qdisc ls $EGDEV
|
|
||||||
echo "---- Class parameters Egress ----------"
|
|
||||||
$TC class ls $EGDEV
|
|
||||||
echo "---- filter parameters Egress ----------"
|
|
||||||
$TC filter ls $EGDEV parent 1:0
|
|
||||||
#
|
|
||||||
#deleting the ingress qdisc
|
|
||||||
#$TC qdisc del $INDEV ingress
|
|
||||||
|
|
@ -1,145 +0,0 @@
|
||||||
#! /bin/sh
|
|
||||||
#
|
|
||||||
# sample script on using the ingress capabilities using u32 classifier
|
|
||||||
# This script tags tcindex based on metering on the ingress
|
|
||||||
# interface the result is used for fast classification and re-marking
|
|
||||||
# on the egress interface
|
|
||||||
# This is an example of a color blind mode marker with PIR configured
|
|
||||||
# based on draft-wahjak-mcm-00.txt (section 3.2)
|
|
||||||
#
|
|
||||||
#path to various utilities;
|
|
||||||
#change to reflect yours.
|
|
||||||
#
|
|
||||||
IPROUTE=/root/DS-6-beta/iproute2-990530-dsing
|
|
||||||
TC=$IPROUTE/tc/tc
|
|
||||||
IP=$IPROUTE/ip/ip
|
|
||||||
INDEV=eth2
|
|
||||||
EGDEV="dev eth1"
|
|
||||||
CIR1=1000kbit
|
|
||||||
CIR2=1000kbit
|
|
||||||
# The PIR is the excess (in addition to the CIR i.e if always
|
|
||||||
# going to the PIR --> average rate is CIR+PIR)
|
|
||||||
PIR1=1000kbit
|
|
||||||
PIR2=500kbit
|
|
||||||
|
|
||||||
#The CBS is about 60 MTU sized packets
|
|
||||||
CBS1=90k
|
|
||||||
CBS2=90k
|
|
||||||
#the EBS is about 10 max sized packets
|
|
||||||
EBS1=15k
|
|
||||||
EBS2=15k
|
|
||||||
# The meters
|
|
||||||
meter1=" police rate $CIR1 burst $CBS1 "
|
|
||||||
meter1a=" police rate $PIR1 burst $EBS1 "
|
|
||||||
meter2=" police rate $CIR2 burst $CBS1 "
|
|
||||||
meter2a="police rate $PIR2 burst $CBS1 "
|
|
||||||
meter3=" police rate $CIR2 burst $CBS2 "
|
|
||||||
meter3a=" police rate $PIR2 burst $EBS2 "
|
|
||||||
meter4=" police rate $CIR1 burst $CBS2 "
|
|
||||||
meter5=" police rate $CIR1 burst $CBS2 "
|
|
||||||
|
|
||||||
|
|
||||||
# install the ingress qdisc on the ingress interface
|
|
||||||
############################################################
|
|
||||||
$TC qdisc add dev $INDEV handle ffff: ingress
|
|
||||||
############################################################
|
|
||||||
#
|
|
||||||
############################################################
|
|
||||||
|
|
||||||
# All packets are marked with a tcindex value which is used on the egress
|
|
||||||
# NOTE: tcindex 1 maps to AF41, 2->AF42, 3->AF43, 4->BE
|
|
||||||
#
|
|
||||||
#anything from subnet 10.2.0.2/24 is passed on with a tcindex value 1
|
|
||||||
#if it doesn't exceed its CIR/CBS + PIR/EBS
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 1 u32 \
|
|
||||||
match ip src 10.2.0.0/24 $meter1 \
|
|
||||||
continue flowid :1
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 2 u32 \
|
|
||||||
match ip src 10.2.0.0/24 $meter1a \
|
|
||||||
continue flowid :1
|
|
||||||
|
|
||||||
#
|
|
||||||
# if it exceeds the above but not the extra rate/burst below, it gets a
|
|
||||||
#tcindex value of 2
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 3 u32 \
|
|
||||||
match ip src 10.2.0.0/24 $meter2 \
|
|
||||||
continue flowid :2
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 4 u32 \
|
|
||||||
match ip src 10.2.0.0/24 $meter2a \
|
|
||||||
continue flowid :2
|
|
||||||
#
|
|
||||||
# if it exceeds the above but not the rule below, it gets a tcindex value
|
|
||||||
# of 3
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 5 u32 \
|
|
||||||
match ip src 10.2.0.0/24 $meter3 \
|
|
||||||
continue flowid :3
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 6 u32 \
|
|
||||||
match ip src 10.2.0.0/24 $meter3a \
|
|
||||||
drop flowid :3
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Anything else (not from the subnet 10.2.0.24/24) gets discarded if it
|
|
||||||
# exceeds 1Mbps and by default goes to BE if it doesn't
|
|
||||||
#
|
|
||||||
$TC filter add dev $INDEV parent ffff: protocol ip prio 7 u32 \
|
|
||||||
match ip src 0/0 $meter5 \
|
|
||||||
drop flowid :4
|
|
||||||
|
|
||||||
|
|
||||||
######################## Egress side ########################
|
|
||||||
|
|
||||||
|
|
||||||
# attach a dsmarker
|
|
||||||
#
|
|
||||||
$TC qdisc add $EGDEV handle 1:0 root dsmark indices 64
|
|
||||||
#
|
|
||||||
# values of the DSCP to change depending on the class
|
|
||||||
#note that the ECN bits are masked out
|
|
||||||
#
|
|
||||||
#AF41 (0x88 is 0x22 shifted to the right by two bits)
|
|
||||||
#
|
|
||||||
$TC class change $EGDEV classid 1:1 dsmark mask 0x3 \
|
|
||||||
value 0x88
|
|
||||||
#AF42
|
|
||||||
$TC class change $EGDEV classid 1:2 dsmark mask 0x3 \
|
|
||||||
value 0x90
|
|
||||||
#AF43
|
|
||||||
$TC class change $EGDEV classid 1:3 dsmark mask 0x3 \
|
|
||||||
value 0x98
|
|
||||||
#BE
|
|
||||||
$TC class change $EGDEV classid 1:3 dsmark mask 0x3 \
|
|
||||||
value 0x0
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# The class mapping
|
|
||||||
#
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 1 tcindex classid 1:1
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 2 tcindex classid 1:2
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 3 tcindex classid 1:3
|
|
||||||
$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
|
|
||||||
handle 4 tcindex classid 1:4
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
echo "---- qdisc parameters Ingress ----------"
|
|
||||||
$TC qdisc ls dev $INDEV
|
|
||||||
echo "---- Class parameters Ingress ----------"
|
|
||||||
$TC class ls dev $INDEV
|
|
||||||
echo "---- filter parameters Ingress ----------"
|
|
||||||
$TC filter ls dev $INDEV parent ffff:
|
|
||||||
|
|
||||||
echo "---- qdisc parameters Egress ----------"
|
|
||||||
$TC qdisc ls $EGDEV
|
|
||||||
echo "---- Class parameters Egress ----------"
|
|
||||||
$TC class ls $EGDEV
|
|
||||||
echo "---- filter parameters Egress ----------"
|
|
||||||
$TC filter ls $EGDEV parent 1:0
|
|
||||||
#
|
|
||||||
#deleting the ingress qdisc
|
|
||||||
#$TC qdisc del $INDEV ingress
|
|
||||||
|
|
@ -1,98 +0,0 @@
|
||||||
|
|
||||||
Note all these are mere examples which can be customized to your needs
|
|
||||||
|
|
||||||
AFCBQ
|
|
||||||
-----
|
|
||||||
AF PHB built using CBQ, DSMARK,GRED (default in GRIO mode) ,RED for BE
|
|
||||||
and the tcindex classifier with some algorithmic mapping
|
|
||||||
|
|
||||||
EFCBQ
|
|
||||||
-----
|
|
||||||
EF PHB built using CBQ (for rate control and prioritization),
|
|
||||||
DSMARK( to remark DSCPs), tcindex classifier and RED for the BE
|
|
||||||
traffic.
|
|
||||||
|
|
||||||
EFPRIO
|
|
||||||
------
|
|
||||||
EF PHB using the PRIO scheduler, Token Bucket to rate control EF,
|
|
||||||
tcindex classifier, DSMARK to remark, and RED for the BE traffic
|
|
||||||
|
|
||||||
EDGE scripts
|
|
||||||
==============
|
|
||||||
|
|
||||||
CB-3(1|2)-(u32/chains)
|
|
||||||
======================
|
|
||||||
|
|
||||||
|
|
||||||
The major differences are that the classifier is u32 on -u32 extension
|
|
||||||
and IPchains on the chains extension. CB stands for color Blind
|
|
||||||
and 31 is for the mode where only a CIR and CBS are defined whereas
|
|
||||||
32 stands for a mode where a CIR/CBS + PIR/EBS are defined.
|
|
||||||
|
|
||||||
Color Blind (CB)
|
|
||||||
==========-----=
|
|
||||||
We look at one special subnet that we are interested in for simplicty
|
|
||||||
reasons to demonstrate the capability. We send the packets from that
|
|
||||||
subnet to AF4*, BE or end up dropping depending on the metering results.
|
|
||||||
|
|
||||||
|
|
||||||
The algorithm overview is as follows:
|
|
||||||
|
|
||||||
*classify:
|
|
||||||
|
|
||||||
**case: subnet X
|
|
||||||
----------------
|
|
||||||
if !exceed meter1 tag as AF41
|
|
||||||
else
|
|
||||||
if !exceed meter2 tag as AF42
|
|
||||||
else
|
|
||||||
if !exceed meter 3 tag as AF43
|
|
||||||
else
|
|
||||||
drop
|
|
||||||
|
|
||||||
default case: Any other subnet
|
|
||||||
-------------------------------
|
|
||||||
if !exceed meter 5 tag as AF43
|
|
||||||
else
|
|
||||||
drop
|
|
||||||
|
|
||||||
|
|
||||||
One Egress side change the DSCPs of the packets to reflect AF4* and BE
|
|
||||||
based on the tags from the ingress.
|
|
||||||
|
|
||||||
-------------------------------------------------------------
|
|
||||||
|
|
||||||
Color Aware
|
|
||||||
===========
|
|
||||||
|
|
||||||
Define some meters with + policing and give them IDs eg
|
|
||||||
|
|
||||||
meter1=police index 1 rate $CIR1 burst $CBS1
|
|
||||||
meter2=police index 2 rate $CIR2 burst $CBS2 etc
|
|
||||||
|
|
||||||
General overview:
|
|
||||||
classify based on the DSCPs and use the policer ids to decide tagging
|
|
||||||
|
|
||||||
|
|
||||||
*classify on ingress:
|
|
||||||
|
|
||||||
switch (dscp) {
|
|
||||||
case AF41: /* tos&0xfc == 0x88 */
|
|
||||||
if (!exceed meter1) break;
|
|
||||||
case AF42: /* tos&0xfc == 0x90 */
|
|
||||||
if (!exceed meter2) {
|
|
||||||
tag as AF42;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case AF43: /* tos&0xfc == 0x98 */
|
|
||||||
if (!exceed meter3) {
|
|
||||||
tag as AF43;
|
|
||||||
break;
|
|
||||||
} else
|
|
||||||
drop;
|
|
||||||
default:
|
|
||||||
if (!exceed meter4) tag as BE;
|
|
||||||
else drop;
|
|
||||||
}
|
|
||||||
|
|
||||||
On the Egress side mark the proper AF tags
|
|
||||||
|
|
@ -1,105 +0,0 @@
|
||||||
#!/usr/bin/perl
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# AF using CBQ for a single interface eth0
|
|
||||||
# 4 AF classes using GRED and one BE using RED
|
|
||||||
# Things you might want to change:
|
|
||||||
# - the device bandwidth (set at 10Mbits)
|
|
||||||
# - the bandwidth allocated for each AF class and the BE class
|
|
||||||
# - the drop probability associated with each AF virtual queue
|
|
||||||
#
|
|
||||||
# AF DSCP values used (based on AF draft 04)
|
|
||||||
# -----------------------------------------
|
|
||||||
# AF DSCP values
|
|
||||||
# AF1 1. 0x0a 2. 0x0c 3. 0x0e
|
|
||||||
# AF2 1. 0x12 2. 0x14 3. 0x16
|
|
||||||
# AF3 1. 0x1a 2. 0x1c 3. 0x1e
|
|
||||||
# AF4 1. 0x22 2. 0x24 3. 0x26
|
|
||||||
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# A simple DSCP-class relationship formula used to generate
|
|
||||||
# values in the for loop of this script; $drop stands for the
|
|
||||||
# DP
|
|
||||||
# $dscp = ($class*8+$drop*2)
|
|
||||||
#
|
|
||||||
# if you use GRIO buffer sharing, then GRED priority is set as follows:
|
|
||||||
# $gprio=$drop+1;
|
|
||||||
#
|
|
||||||
|
|
||||||
$TC = "/usr/src/iproute2-current/tc/tc";
|
|
||||||
$DEV = "dev lo";
|
|
||||||
$DEV = "dev eth1";
|
|
||||||
$DEV = "dev eth0";
|
|
||||||
# the BE-class number
|
|
||||||
$beclass = "5";
|
|
||||||
|
|
||||||
#GRIO buffer sharing on or off?
|
|
||||||
$GRIO = "";
|
|
||||||
$GRIO = "grio";
|
|
||||||
# The bandwidth of your device
|
|
||||||
$linerate="10Mbit";
|
|
||||||
# The BE and AF rates
|
|
||||||
%rate_table=();
|
|
||||||
$berate="1500Kbit";
|
|
||||||
$rate_table{"AF1rate"}="1500Kbit";
|
|
||||||
$rate_table{"AF2rate"}="1500Kbit";
|
|
||||||
$rate_table{"AF3rate"}="1500Kbit";
|
|
||||||
$rate_table{"AF4rate"}="1500Kbit";
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
print "\n# --- General setup ---\n";
|
|
||||||
print "$TC qdisc add $DEV handle 1:0 root dsmark indices 64 set_tc_index\n";
|
|
||||||
print "$TC filter add $DEV parent 1:0 protocol ip prio 1 tcindex mask 0xfc " .
|
|
||||||
"shift 2 pass_on\n";
|
|
||||||
#"shift 2\n";
|
|
||||||
print "$TC qdisc add $DEV parent 1:0 handle 2:0 cbq bandwidth $linerate ".
|
|
||||||
"cell 8 avpkt 1000 mpu 64\n";
|
|
||||||
print "$TC filter add $DEV parent 2:0 protocol ip prio 1 tcindex ".
|
|
||||||
"mask 0xf0 shift 4 pass_on\n";
|
|
||||||
for $class (1..4) {
|
|
||||||
print "\n# --- AF Class $class specific setup---\n";
|
|
||||||
$AFrate=sprintf("AF%drate",$class);
|
|
||||||
print "$TC class add $DEV parent 2:0 classid 2:$class cbq ".
|
|
||||||
"bandwidth $linerate rate $rate_table{$AFrate} avpkt 1000 prio ".
|
|
||||||
(6-$class)." bounded allot 1514 weight 1 maxburst 21\n";
|
|
||||||
print "$TC filter add $DEV parent 2:0 protocol ip prio 1 handle $class ".
|
|
||||||
"tcindex classid 2:$class\n";
|
|
||||||
print "$TC qdisc add $DEV parent 2:$class gred setup DPs 3 default 2 ".
|
|
||||||
"$GRIO\n";
|
|
||||||
#
|
|
||||||
# per DP setup
|
|
||||||
#
|
|
||||||
for $drop (1..3) {
|
|
||||||
print "\n# --- AF Class $class DP $drop---\n";
|
|
||||||
$dscp = $class*8+$drop*2;
|
|
||||||
$tcindex = sprintf("1%x%x",$class,$drop);
|
|
||||||
print "$TC filter add $DEV parent 1:0 protocol ip prio 1 ".
|
|
||||||
"handle $dscp tcindex classid 1:$tcindex\n";
|
|
||||||
$prob = $drop*0.02;
|
|
||||||
if ($GRIO) {
|
|
||||||
$gprio = $drop+1;
|
|
||||||
print "$TC qdisc change $DEV parent 2:$class gred limit 60KB min 15KB ".
|
|
||||||
"max 45KB burst 20 avpkt 1000 bandwidth $linerate DP $drop ".
|
|
||||||
"probability $prob ".
|
|
||||||
"prio $gprio\n";
|
|
||||||
} else {
|
|
||||||
print "$TC qdisc change $DEV parent 2:$class gred limit 60KB min 15KB ".
|
|
||||||
"max 45KB burst 20 avpkt 1000 bandwidth $linerate DP $drop ".
|
|
||||||
"probability $prob \n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#
|
|
||||||
#
|
|
||||||
print "\n#------BE Queue setup------\n";
|
|
||||||
print "$TC filter add $DEV parent 1:0 protocol ip prio 2 ".
|
|
||||||
"handle 0 tcindex mask 0 classid 1:1\n";
|
|
||||||
print "$TC class add $DEV parent 2:0 classid 2:$beclass cbq ".
|
|
||||||
"bandwidth $linerate rate $berate avpkt 1000 prio 6 " .
|
|
||||||
"bounded allot 1514 weight 1 maxburst 21 \n";
|
|
||||||
print "$TC filter add $DEV parent 2:0 protocol ip prio 1 handle 0 tcindex ".
|
|
||||||
"classid 2:5\n";
|
|
||||||
print "$TC qdisc add $DEV parent 2:5 red limit 60KB min 15KB max 45KB ".
|
|
||||||
"burst 20 avpkt 1000 bandwidth $linerate probability 0.4\n";
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
#!/usr/bin/perl
|
|
||||||
$TC = "/root/DS-6-beta/iproute2-990530-dsing/tc/tc";
|
|
||||||
$DEV = "dev eth1";
|
|
||||||
$efrate="1.5Mbit";
|
|
||||||
$MTU="1.5kB";
|
|
||||||
print "$TC qdisc add $DEV handle 1:0 root dsmark indices 64 set_tc_index\n";
|
|
||||||
print "$TC filter add $DEV parent 1:0 protocol ip prio 1 tcindex ".
|
|
||||||
"mask 0xfc shift 2\n";
|
|
||||||
print "$TC qdisc add $DEV parent 1:0 handle 2:0 prio\n";
|
|
||||||
#
|
|
||||||
# EF class: Maximum about one MTU sized packet allowed on the queue
|
|
||||||
#
|
|
||||||
print "$TC qdisc add $DEV parent 2:1 tbf rate $efrate burst $MTU limit 1.6kB\n";
|
|
||||||
print "$TC filter add $DEV parent 2:0 protocol ip prio 1 ".
|
|
||||||
"handle 0x2e tcindex classid 2:1 pass_on\n";
|
|
||||||
#
|
|
||||||
# BE class
|
|
||||||
#
|
|
||||||
print "#BE class(2:2) \n";
|
|
||||||
print "$TC qdisc add $DEV parent 2:2 red limit 60KB ".
|
|
||||||
"min 15KB max 45KB burst 20 avpkt 1000 bandwidth 10Mbit ".
|
|
||||||
"probability 0.4\n";
|
|
||||||
#
|
|
||||||
print "$TC filter add $DEV parent 2:0 protocol ip prio 2 ".
|
|
||||||
"handle 0 tcindex mask 0 classid 2:2 pass_on\n";
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
#!/usr/bin/perl
|
|
||||||
#
|
|
||||||
$TC = "/root/DS-6-beta/iproute2-990530-dsing/tc/tc";
|
|
||||||
$DEV = "dev eth1";
|
|
||||||
print "$TC qdisc add $DEV handle 1:0 root dsmark indices 64 set_tc_index\n";
|
|
||||||
print "$TC filter add $DEV parent 1:0 protocol ip prio 1 tcindex ".
|
|
||||||
"mask 0xfc shift 2\n";
|
|
||||||
print "$TC qdisc add $DEV parent 1:0 handle 2:0 cbq bandwidth ".
|
|
||||||
"10Mbit cell 8 avpkt 1000 mpu 64\n";
|
|
||||||
#
|
|
||||||
# EF class
|
|
||||||
#
|
|
||||||
print "$TC class add $DEV parent 2:0 classid 2:1 cbq bandwidth ".
|
|
||||||
"10Mbit rate 1500Kbit avpkt 1000 prio 1 bounded isolated ".
|
|
||||||
"allot 1514 weight 1 maxburst 10 \n";
|
|
||||||
# packet fifo for EF?
|
|
||||||
print "$TC qdisc add $DEV parent 2:1 pfifo limit 5\n";
|
|
||||||
print "$TC filter add $DEV parent 2:0 protocol ip prio 1 ".
|
|
||||||
"handle 0x2e tcindex classid 2:1 pass_on\n";
|
|
||||||
#
|
|
||||||
# BE class
|
|
||||||
#
|
|
||||||
print "#BE class(2:2) \n";
|
|
||||||
print "$TC class add $DEV parent 2:0 classid 2:2 cbq bandwidth ".
|
|
||||||
"10Mbit rate 5Mbit avpkt 1000 prio 7 allot 1514 weight 1 ".
|
|
||||||
"maxburst 21 borrow split 2:0 defmap 0xffff \n";
|
|
||||||
print "$TC qdisc add $DEV parent 2:2 red limit 60KB ".
|
|
||||||
"min 15KB max 45KB burst 20 avpkt 1000 bandwidth 10Mbit ".
|
|
||||||
"probability 0.4\n";
|
|
||||||
print "$TC filter add $DEV parent 2:0 protocol ip prio 2 ".
|
|
||||||
"handle 0 tcindex mask 0 classid 2:2 pass_on\n";
|
|
||||||
|
|
@ -1,125 +0,0 @@
|
||||||
|
|
||||||
These were the tests done to validate the Diffserv scripts.
|
|
||||||
This document will be updated continuously. If you do more
|
|
||||||
thorough validation testing please post the details to the
|
|
||||||
diffserv mailing list.
|
|
||||||
Nevertheless, these tests should serve for basic validation.
|
|
||||||
|
|
||||||
AFCBQ, EFCBQ, EFPRIO
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
generate all possible DSCPs and observe that they
|
|
||||||
get sent to the proper classes. In the case of AF also
|
|
||||||
to the correct Virtual Queues.
|
|
||||||
|
|
||||||
Edge1
|
|
||||||
-----
|
|
||||||
generate TOS values 0x0,0x10,0xbb each with IP addresses
|
|
||||||
10.2.0.24 (mark 1), 10.2.0.3 (mark2) and 10.2.0.30 (mark 3)
|
|
||||||
and observe that they get marked as expected.
|
|
||||||
|
|
||||||
Edge2
|
|
||||||
-----
|
|
||||||
|
|
||||||
-Repeat the tests in Edge1
|
|
||||||
-ftp with data direction from 10.2.0.2
|
|
||||||
*observe that the metering/policing works correctly (and the marking
|
|
||||||
as well). In this case the mark used will be 3
|
|
||||||
|
|
||||||
Edge31-cb-chains
|
|
||||||
----------------
|
|
||||||
|
|
||||||
-ftp with data direction from 10.2.0.2
|
|
||||||
|
|
||||||
*observe that the metering/policing works correctly (and the marking
|
|
||||||
as well). In this case the mark used will be 1.
|
|
||||||
|
|
||||||
Metering: The data throughput should not exceed 2*CIR1 + 2*CIR2
|
|
||||||
which is roughly: 5mbps
|
|
||||||
|
|
||||||
Marking: the should be a variation of marked packets:
|
|
||||||
AF41(TOS=0x88) AF42(0x90) AF43(0x98) and BE (0x0)
|
|
||||||
|
|
||||||
More tests required to see the interaction of several sources (other
|
|
||||||
than subnet 10.2.0.0/24).
|
|
||||||
|
|
||||||
Edge31-ca-u32
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Generate data using modified tcpblast from 10.2.0.2 (behind eth2) to the
|
|
||||||
discard port of 10.1.0.2 (behind eth1)
|
|
||||||
|
|
||||||
1) generate with src tos = 0x88
|
|
||||||
Metering: Allocated throughput should not exceed 2*CIR1 + 2*CIR2
|
|
||||||
approximately 5mbps
|
|
||||||
Marking: Should vary between 0x88,0x90,0x98 and 0x0
|
|
||||||
|
|
||||||
2) generate with src tos = 0x90
|
|
||||||
Metering: Allocated throughput should not exceed CIR1 + 2*CIR2
|
|
||||||
approximately 3.5mbps
|
|
||||||
Marking: Should vary between 0x90,0x98 and 0x0
|
|
||||||
|
|
||||||
3) generate with src tos = 0x98
|
|
||||||
Metering: Allocated throughput should not exceed CIR1 + CIR2
|
|
||||||
approximately 2.5mbps
|
|
||||||
Marking: Should vary between 0x98 and 0x0
|
|
||||||
|
|
||||||
4) generate with src tos any other than the above
|
|
||||||
Metering: Allocated throughput should not exceed CIR1
|
|
||||||
approximately 1.5mbps
|
|
||||||
Marking: Should be consistent at 0x0
|
|
||||||
|
|
||||||
TODO: Testing on how each color shares when all 4 types of packets
|
|
||||||
are going through the edge device
|
|
||||||
|
|
||||||
Edge32-cb-u32, Edge32-cb-chains
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
-ftp with data direction from 10.2.0.2
|
|
||||||
|
|
||||||
*observe that the metering/policing works correctly (and the marking
|
|
||||||
as well).
|
|
||||||
|
|
||||||
Metering:
|
|
||||||
The data throughput should not exceed 2*CIR1 + 2*CIR2
|
|
||||||
+ 2*PIR2 + PIR1 for u32 which is roughly: 6mbps
|
|
||||||
The data throughput should not exceed 2*CIR1 + 5*CIR2
|
|
||||||
for chains which is roughly: 6mbps
|
|
||||||
|
|
||||||
Marking: the should be a variation of marked packets:
|
|
||||||
AF41(TOS=0x88) AF42(0x90) AF43(0x98) and BE (0x0)
|
|
||||||
|
|
||||||
TODO:
|
|
||||||
-More tests required to see the interaction of several sources (other
|
|
||||||
than subnet 10.2.0.0/24).
|
|
||||||
-More tests needed to capture stats on how many times the CIR was exceeded
|
|
||||||
but the data was not remarked etc.
|
|
||||||
|
|
||||||
Edge32-ca-u32
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Generate data using modified tcpblast from 10.2.0.2 (behind eth2) to the
|
|
||||||
discard port of 10.1.0.2 (behind eth1)
|
|
||||||
|
|
||||||
1) generate with src tos = 0x88
|
|
||||||
Metering: Allocated throughput should not exceed 2*CIR1 + 2*CIR2
|
|
||||||
+PIR1 -- approximately 4mbps
|
|
||||||
Marking: Should vary between 0x88,0x90,0x98 and 0x0
|
|
||||||
|
|
||||||
2) generate with src tos = 0x90
|
|
||||||
Metering: Allocated throughput should not exceed CIR1 + 2*CIR2
|
|
||||||
+ 2* PIR2 approximately 3mbps
|
|
||||||
Marking: Should vary between 0x90,0x98 and 0x0
|
|
||||||
|
|
||||||
3) generate with src tos = 0x98
|
|
||||||
Metering: Allocated throughput should not exceed PIR1+ CIR1 + CIR2
|
|
||||||
approximately 2.5mbps
|
|
||||||
Marking: Should vary between 0x98 and 0x0
|
|
||||||
|
|
||||||
4) generate with src tos any other than the above
|
|
||||||
Metering: Allocated throughput should not exceed CIR1
|
|
||||||
approximately 1mbps
|
|
||||||
Marking: Should be consistent at 0x0
|
|
||||||
|
|
||||||
TODO: Testing on how each color shares when all 4 types of packets
|
|
||||||
are going through the edge device
|
|
||||||
Loading…
Reference in New Issue