qos-scripts: drop the use of IMQ, use ifb and act_connmark instead

SVN-Revision: 25640
master
Felix Fietkau 14 years ago
parent c0f0316109
commit fca74c3a44
  1. 2
      package/qos-scripts/Makefile
  2. 18
      package/qos-scripts/files/usr/bin/qos-stat
  3. 5
      package/qos-scripts/files/usr/bin/qos-stop
  4. 39
      package/qos-scripts/files/usr/lib/qos/generate.sh

@ -18,7 +18,7 @@ include $(INCLUDE_DIR)/package.mk
define Package/qos-scripts define Package/qos-scripts
SECTION:=utils SECTION:=utils
CATEGORY:=Base system CATEGORY:=Base system
DEPENDS:=+tc +kmod-sched +iptables +iptables-mod-filter +iptables-mod-ipopt +iptables-mod-conntrack-extra +iptables-mod-imq DEPENDS:=+tc +kmod-sched +iptables +iptables-mod-filter +iptables-mod-ipopt +iptables-mod-conntrack-extra
TITLE:=QoS scripts TITLE:=QoS scripts
PKGARCH:=all PKGARCH:=all
endef endef

@ -33,26 +33,34 @@ print_comments() {
echo '' echo ''
} }
get_device() {
( config_load network; scan_interfaces; config_get "$1" ifname )
}
interface_stats() { interface_stats() {
local interface="$1" local interface="$1"
local device local device
config_get device "$interface" device device="$(get_device "$interface")"
[ -z "$device" ] && config_get device "$interface" device
config_get_bool enabled "$interface" enabled 1 config_get_bool enabled "$interface" enabled 1
[ -z "$device" -o 1 -ne "$enabled" ] && { [ -z "$device" -o 1 -ne "$enabled" ] && {
return 1 return 1
} }
config_get_bool halfduplex "$interface" halfduplex config_get_bool halfduplex "$interface" halfduplex 0
[ 1 -ne "$halfduplex" ] && { if [ 1 -ne "$halfduplex" ]; then
unset halfduplex unset halfduplex
print_comments "$interface" "Egress" "Start" print_comments "$interface" "Egress" "Start"
tc -s class show dev "$device" tc -s class show dev "$device"
print_comments "$interface" "Egress" "End" print_comments "$interface" "Egress" "End"
} id="root"
else
id=""
fi
print_comments "$interface" "Ingress${halfduplex:+/Egress}" "Start" print_comments "$interface" "Ingress${halfduplex:+/Egress}" "Start"
tc -s class show dev "$(iptables -v -L PREROUTING -t mangle | awk '/IMQ: todev .*$/ && $6 ~ /'$device'/ {print "imq"$12}')" tc -s class show dev "$(tc filter show dev $device $id | grep mirred | sed -e 's,.*\(ifb.*\)).*,\1,')"
print_comments "$interface" "Ingress${halfduplex:+/Egress}" "End" print_comments "$interface" "Ingress${halfduplex:+/Egress}" "End"
} }

@ -1,6 +1,7 @@
#!/bin/sh #!/bin/sh
for iface in $(tc qdisc show | grep hfsc | awk '{print $5}'); do for iface in $(tc qdisc show | grep -E '(hfsc|ingress)' | awk '{print $5}'); do
tc qdisc del dev "$iface" root tc qdisc del dev "$iface" ingress 2>&- >&-
tc qdisc del dev "$iface" root 2>&- >&-
done done
iptables -t mangle -F iptables -t mangle -F
iptables -t mangle -X iptables -t mangle -X

@ -210,7 +210,7 @@ config_cb() {
config_get_bool enabled "$CONFIG_SECTION" enabled 1 config_get_bool enabled "$CONFIG_SECTION" enabled 1
[ 1 -eq "$enabled" ] || return 0 [ 1 -eq "$enabled" ] || return 0
config_get classgroup "$CONFIG_SECTION" classgroup config_get classgroup "$CONFIG_SECTION" classgroup
config_set "$CONFIG_SECTION" imqdev "$C" config_set "$CONFIG_SECTION" ifbdev "$C"
C=$(($C+1)) C=$(($C+1))
append INTERFACES "$CONFIG_SECTION" append INTERFACES "$CONFIG_SECTION"
config_set "$classgroup" enabled 1 config_set "$classgroup" enabled 1
@ -274,7 +274,7 @@ tcrules() {
start_interface() { start_interface() {
local iface="$1" local iface="$1"
local num_imq="$2" local num_ifb="$2"
config_get device "$iface" device config_get device "$iface" device
config_get_bool enabled "$iface" enabled 1 config_get_bool enabled "$iface" enabled 1
[ -z "$device" -o 1 -ne "$enabled" ] && { [ -z "$device" -o 1 -ne "$enabled" ] && {
@ -298,10 +298,10 @@ start_interface() {
prefix="cls" prefix="cls"
;; ;;
down) down)
[ "$(ls -d /proc/sys/net/ipv4/conf/imq* 2>&- | wc -l)" -ne "$num_imq" ] && add_insmod imq numdevs="$num_imq" [ "$(ls -d /proc/sys/net/ipv4/conf/ifb* 2>&- | wc -l)" -ne "$num_ifb" ] && add_insmod ifb numifbs="$num_ifb"
config_get imqdev "$iface" imqdev config_get ifbdev "$iface" ifbdev
[ "$overhead" = 1 ] && download=$(($download * 98 / 100 - (80 * 1024 / $download))) [ "$overhead" = 1 ] && download=$(($download * 98 / 100 - (80 * 1024 / $download)))
dev="imq$imqdev" dev="ifb$ifbdev"
rate="$download" rate="$download"
dl_mode=1 dl_mode=1
prefix="d_cls" prefix="d_cls"
@ -326,6 +326,22 @@ tc qdisc del dev $dev root >&- 2>&-
tc qdisc add dev $dev root handle 1: hfsc default ${class_default}0 tc qdisc add dev $dev root handle 1: hfsc default ${class_default}0
tc class add dev $dev parent 1: classid 1:1 hfsc sc rate ${rate}kbit ul rate ${rate}kbit" tc class add dev $dev parent 1: classid 1:1 hfsc sc rate ${rate}kbit ul rate ${rate}kbit"
done done
[ -n "$download" ] && {
add_insmod cls_u32
add_insmod em_u32
add_insmod act_connmark
add_insmod act_mirred
add_insmod sch_ingress
}
if [ -n "$halfduplex" ]; then
export dev_up="tc qdisc del dev $device root >&- 2>&-
tc qdisc add dev $device root handle 1: hfsc
tc filter add dev $device parent 1: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb$ifbdev"
elif [ -n "$download" ]; then
append dev_${dir} "tc qdisc del dev $device ingress >&- 2>&-
tc qdisc add dev $device ingress
tc filter add dev $device parent ffff: protocol ip prio 1 u32 match u32 0 0 flowid 1:1 action connmark action mirred egress redirect dev ifb$ifbdev" "$N"
fi
add_insmod cls_fw add_insmod cls_fw
add_insmod sch_hfsc add_insmod sch_hfsc
add_insmod sch_sfq add_insmod sch_sfq
@ -334,7 +350,7 @@ tc class add dev $dev parent 1: classid 1:1 hfsc sc rate ${rate}kbit ul rate ${r
cat <<EOF cat <<EOF
${INSMOD:+$INSMOD$N}${dev_up:+$dev_up ${INSMOD:+$INSMOD$N}${dev_up:+$dev_up
$clsq $clsq
}${imqdev:+$dev_down }${ifbdev:+$dev_down
$d_clsq $d_clsq
$d_clsl $d_clsl
$d_clsf $d_clsf
@ -395,22 +411,13 @@ start_cg() {
for iface in $INTERFACES; do for iface in $INTERFACES; do
config_get classgroup "$iface" classgroup config_get classgroup "$iface" classgroup
config_get device "$iface" device config_get device "$iface" device
config_get imqdev "$iface" imqdev config_get ifbdev "$iface" ifbdev
config_get upload "$iface" upload config_get upload "$iface" upload
config_get download "$iface" download config_get download "$iface" download
config_get halfduplex "$iface" halfduplex config_get halfduplex "$iface" halfduplex
download="${download:-${halfduplex:+$upload}}" download="${download:-${halfduplex:+$upload}}"
add_insmod ipt_IMQ
append up "iptables -t mangle -A OUTPUT -o $device -j ${cg}" "$N" append up "iptables -t mangle -A OUTPUT -o $device -j ${cg}" "$N"
append up "iptables -t mangle -A FORWARD -o $device -j ${cg}" "$N" append up "iptables -t mangle -A FORWARD -o $device -j ${cg}" "$N"
[ -z "$download" ] || {
append down "iptables -t mangle -A POSTROUTING -o $device -j ${cg}" "$N"
[ -z "$halfduplex" ] || {
append down "iptables -t mangle -A POSTROUTING -o $device -j IMQ --todev $imqdev" "$N"
}
append down "iptables -t mangle -A PREROUTING -i $device -j ${cg}" "$N"
append down "iptables -t mangle -A PREROUTING -i $device -j IMQ --todev $imqdev" "$N"
}
done done
cat <<EOF cat <<EOF
$INSMOD $INSMOD

Loading…
Cancel
Save