# Global interface: # $put -- port under test (e.g. $swp2) # collect_stats($streams...) -- A function to get stats for individual streams # ets_start_traffic($band) -- Start traffic for this band # ets_change_qdisc($op, $dev, $nstrict, $quanta...) -- Add or change qdisc
# WS describes the Qdisc configuration. It has one value per band (so the # number of array elements indicates the number of bands). If the value is # 0, it is a strict band, otherwise the it's a DRR band and the value is # that band's quantum.
declare -a WS
qdisc_describe()
{
local nbands=${#WS[@]}
local nstrict=0
local i
for ((i = 0; i < nbands; i++)); do if ((!${WS[$i]})); then
: $((nstrict++)) fi done
echo -n "ets bands $nbands" if ((nstrict)); then echo -n " strict $nstrict" fi if ((nstrict < nbands)); then echo -n " quanta" for ((i = nstrict; i < nbands; i++)); do echo -n " ${WS[$i]}" done fi
}
__strict_eval()
{
local desc=$1; shift
local d=$1; shift
local total=$1; shift
local above=$1; shift
RET=0
if ((! total)); then
check_err 1 "No traffic observed"
log_test "$desc"
return fi
local ratio=$(echo"scale=2; 100 * $d / $total" | bc -l) if ((above)); then
test $(echo"$ratio > 95.0" | bc -l) -eq 1
check_err $? "Not enough traffic"
log_test "$desc"
log_info "Expected ratio >95% Measured ratio $ratio" else
test $(echo"$ratio < 5" | bc -l) -eq 1
check_err $? "Too much traffic"
log_test "$desc"
log_info "Expected ratio <5% Measured ratio $ratio" fi
}
strict_eval()
{
__strict_eval "$@" 1
}
notraf_eval()
{
__strict_eval "$@" 0
}
__ets_dwrr_test()
{
local -a streams=("$@")
local low_stream=${streams[0]}
local seen_strict=0
local -a t0 t1 d
local stream
local total
local i
for stream in ${streams[@]}; do
ets_start_traffic $stream
defer stop_traffic $! done
sleep 10
t0=($(collect_stats "${streams[@]}"))
sleep 10
t1=($(collect_stats "${streams[@]}"))
d=($(for ((i = 0; i < ${#streams[@]}; i++)); do echo $((${t1[$i]} - ${t0[$i]})) done))
total=$(echo ${d[@]} | sed 's/ /+/g' | bc)
for ((i = 0; i < ${#streams[@]}; i++)); do
local stream=${streams[$i]} if ((seen_strict)); then
notraf_eval "band $stream" ${d[$i]} $total elif ((${WS[$stream]} == 0)); then
strict_eval "band $stream" ${d[$i]} $total
seen_strict=1 elif ((stream == low_stream)); then # Low stream is used as DWRR evaluation reference.
continue else
multipath_eval "bands $low_stream:$stream" \
${WS[$low_stream]} ${WS[$stream]} \
${d[0]} ${d[$i]} fi done
}
ets_qdisc_setup()
{
local dev=$1; shift
local nstrict=$1; shift
local -a quanta=("$@")
local ndwrr=${#quanta[@]}
local nbands=$((nstrict + ndwrr))
local nstreams=$(if ((nbands > 3)); thenecho 3; elseecho $nbands; fi)
local priomap=$(seq 0 $((nstreams - 1)))
local i
WS=($( for ((i = 0; i < nstrict; i++)); do echo 0 done for ((i = 0; i < ndwrr; i++)); do echo ${quanta[$i]} done
))
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.