|
|
@ -1,3 +1,9 @@ |
|
|
|
# This program is free software; you can redistribute it and/or modify |
|
|
|
# it under the terms of the GNU General Public License version 2 as |
|
|
|
# published by the Free Software Foundation. |
|
|
|
# |
|
|
|
# Copyright (C) 2012-4 Michael D. Taht, Toke Høiland-Jørgensen, Sebastian Moeller |
|
|
|
|
|
|
|
#improve the logread output |
|
|
|
sqm_logger() { |
|
|
|
logger -t SQM -s ${1} |
|
|
@ -74,42 +80,6 @@ get_ifb_associated_with_if() { |
|
|
|
echo ${CUR_IFB} |
|
|
|
} |
|
|
|
|
|
|
|
# what is the lowest-index currently not used ifb device |
|
|
|
#sm: hopefully this is not required any longer, and can be deleted after a bit more testing... |
|
|
|
get_lowest_unused_ifb() { |
|
|
|
LOWEST_FREE_IFB= |
|
|
|
# this just returns a list of currently existing IFBs, these need not be associated with any interface |
|
|
|
CUR_UP_IFBS=$( ifconfig | grep -o -e ifb'[[:digit:]]\+' ) |
|
|
|
# the possible IFBs (N in insmod ifb numifbs=N) |
|
|
|
here=$( pwd ) |
|
|
|
cd /sys/devices/virtual/net/ |
|
|
|
CUR_ALLOWED_IFBS=$( ls -d ifb* ) |
|
|
|
sqm_logger "Currently allowed IFBs: ${CUR_ALLOWED_IFBS}" |
|
|
|
cd ${here} |
|
|
|
# this is the sorted list of the active ifbs |
|
|
|
# note for 3.10.32 unused and even down IFBs linger on in the tc output, so take $CUR_UP_IFBS instead |
|
|
|
# a better test might be to check for each allowed IFB whether it is in use |
|
|
|
# but the only way I figured out doing this means interating over all interfaces and that sounds costly |
|
|
|
# so instead we rely on stop.sh actually calling ifconfig ${LAST_USED_IFB} down |
|
|
|
CUR_USED_IFBS=$( tc -d qdisc | grep -o -e ifb'[[:digit:]]\+' | sort -u) |
|
|
|
sqm_logger "Currently used IFBs: ${CUR_USED_IFBS}" |
|
|
|
# now find the lowest index not in the sorted list |
|
|
|
local CUR_IDX=0 |
|
|
|
while [ -z "$LOWEST_FREE_IFB" ] |
|
|
|
do |
|
|
|
#TMP=$( echo "${CUR_USED_IFBS}" | grep -o -e ifb${CUR_IDX} ) |
|
|
|
TMP=$( echo "${CUR_UP_IFBS}" | grep -o -e ifb${CUR_IDX} ) |
|
|
|
[ -z "$TMP" ] && LOWEST_FREE_IFB="ifb"${CUR_IDX} |
|
|
|
CUR_IDX=$(( $CUR_IDX + 1 )) |
|
|
|
done |
|
|
|
# check whether the number is in the allowed range |
|
|
|
LOWEST_FREE_IFB=$( echo "${CUR_ALLOWED_IFBS}" | grep -o -e ${LOWEST_FREE_IFB} ) |
|
|
|
[ -z "${LOWEST_FREE_IFB}" ] && sqm_logger "The IFB candidate ifb$(( ${CUR_IDX} - 1 )) is not in the range of allowed IFBs, bailing out..." |
|
|
|
sqm_logger "selected ifb index: ${LOWEST_FREE_IFB}" |
|
|
|
echo ${LOWEST_FREE_IFB} |
|
|
|
} |
|
|
|
|
|
|
|
# instead of playing around with indices just create a named IFB |
|
|
|
# ATTENTION, IFB names can only be 15 chararcters, so we chop of excessive characters at the start of the interface name |
|
|
|
# if required |
|
|
|
create_new_ifb_for_if() { |
|
|
@ -134,8 +104,6 @@ get_ifb_for_if() { |
|
|
|
CUR_IF=$1 |
|
|
|
# if an ifb is already associated return that |
|
|
|
CUR_IFB=$( get_ifb_associated_with_if ${CUR_IF} ) |
|
|
|
# otherwise find the lowest unused ifb device |
|
|
|
#[ -z "$CUR_IFB" ] && CUR_IFB=$( get_lowest_unused_ifb ) |
|
|
|
[ -z "$CUR_IFB" ] && CUR_IFB=$( create_new_ifb_for_if ${CUR_IF} ) |
|
|
|
[ -z "$CUR_IFB" ] && sqm_logger "Could not find existing IFB for ${CUR_IF}, nor create a new IFB instead..." |
|
|
|
echo ${CUR_IFB} |
|
|
@ -145,13 +113,6 @@ get_ifb_for_if() { |
|
|
|
[ -z "$DEV" ] && DEV=$( get_ifb_for_if ${IFACE} ) # automagically get the right IFB device for the IFACE" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#sqm_logger "iqdisc opts: ${iqdisc_opts}" |
|
|
|
#sqm_logger "eqdisc opts: ${eqdisc_opts}" |
|
|
|
|
|
|
|
#sqm_logger "LLAM: ${LLAM}" |
|
|
|
#sqm_logger "LINKLAYER: ${LINKLAYER}" |
|
|
|
|
|
|
|
get_htb_adsll_string() { |
|
|
|
ADSLL="" |
|
|
|
if [ "$LLAM" = "htb_private" -a "$LINKLAYER" != "none" ]; |
|
|
|