You are not logged in.

#1 2017-09-30 18:55:07

quellen
Member
From: Italy
Registered: 2014-05-24
Posts: 281

[Solved] wondershaper-git doesn't work anymore

Hi,
wondershaper-git doesn't work anymore on my ARchLinux64-bit. Until two months ago it worked perfectly :-|

$ sudo wondershaper -a eth0 -d 10000 -u 500
What is ":1"?
Usage: ... u32 [ match SELECTOR ... ] [ link HTID ] [ classid CLASSID ]
               [ action ACTION_SPEC ] [ offset OFFSET_SPEC ]
               [ ht HTID ] [ hashkey HASHKEY_SPEC ]
               [ sample SAMPLE ] [skip_hw | skip_sw]
or         u32 divisor DIVISOR

Where: SELECTOR := SAMPLE SAMPLE ...
       SAMPLE := { ip | ip6 | udp | tcp | icmp | u{32|16|8} | mark }
                 SAMPLE_ARGS [ divisor DIVISOR ]
       FILTERID := X:Y:Z

NOTE: CLASSID is parsed at hexadecimal input.
$ uname -r
4.12.13-1-ARCH

$ pacman -Q|grep iprout
iproute2 4.13.0-1

Can someone solve this problem?

Last edited by quellen (2017-10-02 09:22:09)


sorry for my bad english

Offline

#2 2017-09-30 18:58:57

jasonwryan
Anarchist
From: .nz
Registered: 2009-05-09
Posts: 30,424
Website

Re: [Solved] wondershaper-git doesn't work anymore

Moving to AUR Issues...


Arch + dwm   •   Mercurial repos  •   Surfraw

Registered Linux User #482438

Offline

#3 2017-09-30 19:08:03

frostschutz
Member
Registered: 2013-11-15
Posts: 1,418

Re: [Solved] wondershaper-git doesn't work anymore

wondershaper is 15+ years old... and unmaintained.

Change `#!/bin/bash` to `#!/bin/bash -x` and run it again, it will show the command it executes, then you might get an idea on what is wrong and how to fix it.

Offline

#4 2017-09-30 19:33:12

quellen
Member
From: Italy
Registered: 2014-05-24
Posts: 281

Re: [Solved] wondershaper-git doesn't work anymore

thanks for reply!

do you mean this?

$ SHELL="/bin/bash -x"
$ /bin/bash -x
+ [[ himxBH != *i* ]]
+ [[ -n :0.0 ]]
+ shopt -s checkwinsize
+ PS1='[\u@\h \W]\$ '
+ case ${TERM} in
+ PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
+ '[' -r /usr/share/bash-completion/bash_completion ']'
+ [[ himxBH != *i* ]]
+ alias 'ls=ls --color=auto'
+ PS1='[\u@\h \W]\$ '
++ printf '\033]0;%s@%s:%s\007' pippo linux '~'
$ sudo wondershaper -a eth0 -d 10000 -u 500
+ sudo wondershaper -a eth0 -d 10000 -u 500
What is ":1"?
Usage: ... u32 [ match SELECTOR ... ] [ link HTID ] [ classid CLASSID ]
               [ action ACTION_SPEC ] [ offset OFFSET_SPEC ]
               [ ht HTID ] [ hashkey HASHKEY_SPEC ]
               [ sample SAMPLE ] [skip_hw | skip_sw]
or         u32 divisor DIVISOR

Where: SELECTOR := SAMPLE SAMPLE ...
       SAMPLE := { ip | ip6 | udp | tcp | icmp | u{32|16|8} | mark }
                 SAMPLE_ARGS [ divisor DIVISOR ]
       FILTERID := X:Y:Z

NOTE: CLASSID is parsed at hexadecimal input.
++ printf '\033]0;%s@%s:%s\007' pippo linux '~'

Last edited by quellen (2017-09-30 19:43:59)


sorry for my bad english

Offline

#5 2017-09-30 20:18:48

frostschutz
Member
Registered: 2013-11-15
Posts: 1,418

Re: [Solved] wondershaper-git doesn't work anymore

I mean inside the script itself.

Offline

#6 2017-10-01 08:14:47

quellen
Member
From: Italy
Registered: 2014-05-24
Posts: 281

Re: [Solved] wondershaper-git doesn't work anymore

$ sudo /bin/bash -x wondershaper -a eth0 -d 10000 -u 500
+ DSPEED=
+ USPEED=
+ IFACE=
+ MODE=
+ getopts hd:u:a:pcs o
+ case "$o" in
+ IFACE=eth0
+ getopts hd:u:a:pcs o
+ case "$o" in
+ DSPEED=10000
+ getopts hd:u:a:pcs o
+ case "$o" in
+ USPEED=500
+ getopts hd:u:a:pcs o
+ '[' '' = presets ']'
+ [[ ! -z '' ]]
+ '[' '' = status ']'
+ '[' '' = clear ']'
+ [[ -z 10000 ]]
+ [[ -z 500 ]]
+ [[ -z eth0 ]]
+ NOPRIOHOSTSRC=80
+ NOPRIOHOSTDST=
+ NOPRIOPORTSRC=
+ NOPRIOPORTDST=
+ tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 10mbit
+ tc class add dev eth0 parent 1: classid 1:1 cbq rate 500kbit allot 1500 prio 5 bounded isolated
+ tc class add dev eth0 parent 1:1 classid 1:10 cbq rate 500kbit allot 1600 prio 1 avpkt 1000
+ tc class add dev eth0 parent 1:1 classid 1:20 cbq rate 450kbit allot 1600 prio 2 avpkt 1000
+ tc class add dev eth0 parent 1:1 classid 1:30 cbq rate 400kbit allot 1600 prio 2 avpkt 1000
+ tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
+ tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
+ tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10
+ tc filter add dev eth0 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10
+ tc filter add dev eth0 parent 1:0 protocol ip prio 11 u32 match ip protocol 1 0xff flowid 1:10
+ tc filter add dev eth0 parent 1: protocol ip prio 12 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 flowid 1:10
+ for a in $NOPRIOHOSTSRC
+ tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip src 80 flowid 1:30
+ tc filter add dev eth0 parent 1: protocol ip prio 18 u32 match ip dst 0.0.0.0/0 flowid 1:20
+ tc qdisc add dev eth0 handle ffff: ingress
+ tc filter add dev eth0 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 10000kbit burst 10k drop flowid :1
What is ":1"?
Usage: ... u32 [ match SELECTOR ... ] [ link HTID ] [ classid CLASSID ]
               [ action ACTION_SPEC ] [ offset OFFSET_SPEC ]
               [ ht HTID ] [ hashkey HASHKEY_SPEC ]
               [ sample SAMPLE ] [skip_hw | skip_sw]
or         u32 divisor DIVISOR

Where: SELECTOR := SAMPLE SAMPLE ...
       SAMPLE := { ip | ip6 | udp | tcp | icmp | u{32|16|8} | mark }
                 SAMPLE_ARGS [ divisor DIVISOR ]
       FILTERID := X:Y:Z

NOTE: CLASSID is parsed at hexadecimal input.

I don't understand anything, is someone able to find out what's wrong?


sorry for my bad english

Offline

#7 2017-10-01 11:19:16

loqs
Member
Registered: 2014-03-06
Posts: 17,378

Re: [Solved] wondershaper-git doesn't work anymore

tc filter add dev eth0 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 10000kbit burst 10k drop flowid :1

Is the command that is failing with the error message

What is ":1"?

Offline

#8 2017-10-01 11:44:26

quellen
Member
From: Italy
Registered: 2014-05-24
Posts: 281

Re: [Solved] wondershaper-git doesn't work anymore

can i do something?


sorry for my bad english

Offline

#9 2017-10-01 12:09:53

loqs
Member
Registered: 2014-03-06
Posts: 17,378

Re: [Solved] wondershaper-git doesn't work anymore

You could try downgrading to iproute2 4.12.0-2 if it works under that version you could bisect between 4.12 and 4.13 to find which commit causes the issue then discuss it with upstream.
Alternatively you could find someone who understands the failing command and ask for a functioning replacement.  Or you could find alternative software that is maintained.

Offline

#10 2017-10-01 12:42:30

frostschutz
Member
Registered: 2013-11-15
Posts: 1,418

Re: [Solved] wondershaper-git doesn't work anymore

Can you do a 'tc qdisc show dev eth0' and 'tc class show dev eth0' after running wondershaper?

It's trying to add a filter for ffff:1 (ingress) - I haven't used tc in a long time and always avoided ingress shaping.

You could also try running that command with ffff:1 instead of just :1

or classid instead of flowid

*guessing wildly*

Last edited by frostschutz (2017-10-01 12:44:35)

Offline

#11 2017-10-01 16:34:20

quellen
Member
From: Italy
Registered: 2014-05-24
Posts: 281

Re: [Solved] wondershaper-git doesn't work anymore

thanks,
maybe i have solved: if i run this command after wondershaper it works!

$ sudo tc filter add dev eth0 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 10000kbit burst 10k drop flowid

(i have removed ":1")

Is possible to use only "tc" without "wondershaper"?

Last edited by quellen (2017-10-01 16:34:46)


sorry for my bad english

Offline

#12 2017-10-01 21:25:43

loqs
Member
Registered: 2014-03-06
Posts: 17,378

Re: [Solved] wondershaper-git doesn't work anymore

quellen wrote:

Is possible to use only "tc" without "wondershaper"?

wondershaper is just a shell script around a number of tc calls.

Offline

#13 2017-10-02 09:21:56

quellen
Member
From: Italy
Registered: 2014-05-24
Posts: 281

Re: [Solved] wondershaper-git doesn't work anymore

thanks, i have SOLVED:
i have removed the code ":1" from the script:

BEFORE:

$ cat /usr/bin/wondershaper 
#!/bin/bash 
# Wonder Shaper
#
# Set the following values to somewhat less than your actual download
# and uplink speed. In kilobits. Also set the device that is to be shaped.
# 
# Orginal: bert hubert <ahu@ds9a.nl>, Copyright 2002, Licensed under the GPL
# Fixes: magnific0 (http://www.github.com/magnific0/wondershaper)
#        systemd .service and .conf file by kfgz and cmsigler at aur.archlinux.org

usage()
{
cat << EOF
USAGE: $0 [-hcs] [-a <adapter>] [-d <rate>] [-u <rate>]

Limit the bandwidth of an adapter

OPTIONS:
   -h           Show this message
   -a <adapter> Set the adpter
   -d <rate>    Set maximum download rate (in Kbps)
   -u <rate>    Set maximum upload rate (in Kbps)
   -p           Use presets in /etc/conf.d/wondershaper.conf
   -c           Clear the limits from adapter
   -s           Show the current status of adapter

MODES:
   wondershaper -a <adapter> -d <rate> -u <rate>
   wondershaper -c -a <adapter>
   wondershaper -s -a <adapter>

EXAMPLES:
   wondershaper -a eth0 -d 1024 -u 512
   wondershaper -c -a eth0

EOF
}

DSPEED=
USPEED=
IFACE=
MODE=

while getopts hd:u:a:pcs o
do	case "$o" in
	h)	usage
		exit 1;;
	d)	DSPEED=$OPTARG;;
	u)      USPEED=$OPTARG;;
	a)      IFACE=$OPTARG;;
	p)      MODE="presets";;
	c)      MODE="clear";;
	s)      MODE="status";;
	[?])	usage
		exit 1;;
	esac
done

if [ "$MODE" = "presets" ]
then
    if [ -f /etc/conf.d/wondershaper.conf ]
    then 
	source /etc/conf.d/wondershaper.conf 
    else 
	echo "/etc/conf.d/wondershaper.conf not found"
	exit 1
    fi
fi

if [[ ! -z $MODE ]] && [[ -z $IFACE ]]
then
    echo "Please supply the adapter name for the mode."
    echo ""
    usage
    exit 1
fi

if [ "$MODE" = "status" ]
then
    tc -s qdisc ls dev $IFACE
    tc -s class ls dev $IFACE
    exit
fi

if [ "$MODE" = "clear" ]
then
    tc qdisc del dev $IFACE root    2> /dev/null > /dev/null
    tc qdisc del dev $IFACE ingress 2> /dev/null > /dev/null
    exit
fi

if [[ -z $DSPEED ]] || [[ -z $USPEED ]] || [[ -z $IFACE ]]
then
    usage
    exit 1
fi

# low priority OUTGOING traffic - you can leave this blank if you want
# low priority source netmasks
NOPRIOHOSTSRC=80

# low priority destination netmasks
NOPRIOHOSTDST=

# low priority source ports
NOPRIOPORTSRC=

# low priority destination ports
NOPRIOPORTDST=



###### uplink

# install root CBQ

tc qdisc add dev $IFACE root handle 1: cbq avpkt 1000 bandwidth 10mbit 

# shape everything at $USPEED speed - this prevents huge queues in your
# DSL modem which destroy latency:
# main class

tc class add dev $IFACE parent 1: classid 1:1 cbq rate ${USPEED}kbit \
allot 1500 prio 5 bounded isolated 

# high prio class 1:10:

tc class add dev $IFACE parent 1:1 classid 1:10 cbq rate ${USPEED}kbit \
   allot 1600 prio 1 avpkt 1000

# bulk and default class 1:20 - gets slightly less traffic, 
#  and a lower priority:

tc class add dev $IFACE parent 1:1 classid 1:20 cbq rate $[9*$USPEED/10]kbit \
   allot 1600 prio 2 avpkt 1000

# 'traffic we hate'

tc class add dev $IFACE parent 1:1 classid 1:30 cbq rate $[8*$USPEED/10]kbit \
   allot 1600 prio 2 avpkt 1000

# all get Stochastic Fairness:
tc qdisc add dev $IFACE parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $IFACE parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $IFACE parent 1:30 handle 30: sfq perturb 10

# start filters
# TOS Minimum Delay (ssh, NOT scp) in 1:10:
tc filter add dev $IFACE parent 1:0 protocol ip prio 10 u32 \
      match ip tos 0x10 0xff  flowid 1:10

# ICMP (ip protocol 1) in the interactive class 1:10 so we 
# can do measurements & impress our friends:
tc filter add dev $IFACE parent 1:0 protocol ip prio 11 u32 \
        match ip protocol 1 0xff flowid 1:10

# prioritize small packets (<64 bytes)

tc filter add dev $IFACE parent 1: protocol ip prio 12 u32 \
   match ip protocol 6 0xff \
   match u8 0x05 0x0f at 0 \
   match u16 0x0000 0xffc0 at 2 \
   flowid 1:10


# some traffic however suffers a worse fate
for a in $NOPRIOPORTDST
do
	tc filter add dev $IFACE parent 1: protocol ip prio 14 u32 \
	   match ip dport $a 0xffff flowid 1:30
done

for a in $NOPRIOPORTSRC
do
 	tc filter add dev $IFACE parent 1: protocol ip prio 15 u32 \
	   match ip sport $a 0xffff flowid 1:30
done

for a in $NOPRIOHOSTSRC
do
 	tc filter add dev $IFACE parent 1: protocol ip prio 16 u32 \
	   match ip src $a flowid 1:30
done

for a in $NOPRIOHOSTDST
do
 	tc filter add dev $IFACE parent 1: protocol ip prio 17 u32 \
	   match ip dst $a flowid 1:30
done

# rest is 'non-interactive' ie 'bulk' and ends up in 1:20

tc filter add dev $IFACE parent 1: protocol ip prio 18 u32 \
   match ip dst 0.0.0.0/0 flowid 1:20


########## downlink #############
# slow downloads down to somewhat less than the real speed  to prevent 
# queuing at our ISP. Tune to see how high you can set it.
# ISPs tend to have *huge* queues to make sure big downloads are fast
#
# attach ingress policer:

tc qdisc add dev $IFACE handle ffff: ingress

# filter *everything* to it (0.0.0.0/0), drop everything that's
# coming in too fast:

tc filter add dev $IFACE parent ffff: protocol ip prio 50 u32 match ip src \
   0.0.0.0/0 police rate ${DSPEED}kbit burst 10k drop flowid :1

AFTER:

$ cat /usr/bin/wondershaper 
#!/bin/bash 
# Wonder Shaper
#
# Set the following values to somewhat less than your actual download
# and uplink speed. In kilobits. Also set the device that is to be shaped.
# 
# Orginal: bert hubert <ahu@ds9a.nl>, Copyright 2002, Licensed under the GPL
# Fixes: magnific0 (http://www.github.com/magnific0/wondershaper)
#        systemd .service and .conf file by kfgz and cmsigler at aur.archlinux.org

usage()
{
cat << EOF
USAGE: $0 [-hcs] [-a <adapter>] [-d <rate>] [-u <rate>]

Limit the bandwidth of an adapter

OPTIONS:
   -h           Show this message
   -a <adapter> Set the adpter
   -d <rate>    Set maximum download rate (in Kbps)
   -u <rate>    Set maximum upload rate (in Kbps)
   -p           Use presets in /etc/conf.d/wondershaper.conf
   -c           Clear the limits from adapter
   -s           Show the current status of adapter

MODES:
   wondershaper -a <adapter> -d <rate> -u <rate>
   wondershaper -c -a <adapter>
   wondershaper -s -a <adapter>

EXAMPLES:
   wondershaper -a eth0 -d 1024 -u 512
   wondershaper -c -a eth0

EOF
}

DSPEED=
USPEED=
IFACE=
MODE=

while getopts hd:u:a:pcs o
do	case "$o" in
	h)	usage
		exit 1;;
	d)	DSPEED=$OPTARG;;
	u)      USPEED=$OPTARG;;
	a)      IFACE=$OPTARG;;
	p)      MODE="presets";;
	c)      MODE="clear";;
	s)      MODE="status";;
	[?])	usage
		exit 1;;
	esac
done

if [ "$MODE" = "presets" ]
then
    if [ -f /etc/conf.d/wondershaper.conf ]
    then 
	source /etc/conf.d/wondershaper.conf 
    else 
	echo "/etc/conf.d/wondershaper.conf not found"
	exit 1
    fi
fi

if [[ ! -z $MODE ]] && [[ -z $IFACE ]]
then
    echo "Please supply the adapter name for the mode."
    echo ""
    usage
    exit 1
fi

if [ "$MODE" = "status" ]
then
    tc -s qdisc ls dev $IFACE
    tc -s class ls dev $IFACE
    exit
fi

if [ "$MODE" = "clear" ]
then
    tc qdisc del dev $IFACE root    2> /dev/null > /dev/null
    tc qdisc del dev $IFACE ingress 2> /dev/null > /dev/null
    exit
fi

if [[ -z $DSPEED ]] || [[ -z $USPEED ]] || [[ -z $IFACE ]]
then
    usage
    exit 1
fi

# low priority OUTGOING traffic - you can leave this blank if you want
# low priority source netmasks
NOPRIOHOSTSRC=80

# low priority destination netmasks
NOPRIOHOSTDST=

# low priority source ports
NOPRIOPORTSRC=

# low priority destination ports
NOPRIOPORTDST=



###### uplink

# install root CBQ

tc qdisc add dev $IFACE root handle 1: cbq avpkt 1000 bandwidth 10mbit 

# shape everything at $USPEED speed - this prevents huge queues in your
# DSL modem which destroy latency:
# main class

tc class add dev $IFACE parent 1: classid 1:1 cbq rate ${USPEED}kbit \
allot 1500 prio 5 bounded isolated 

# high prio class 1:10:

tc class add dev $IFACE parent 1:1 classid 1:10 cbq rate ${USPEED}kbit \
   allot 1600 prio 1 avpkt 1000

# bulk and default class 1:20 - gets slightly less traffic, 
#  and a lower priority:

tc class add dev $IFACE parent 1:1 classid 1:20 cbq rate $[9*$USPEED/10]kbit \
   allot 1600 prio 2 avpkt 1000

# 'traffic we hate'

tc class add dev $IFACE parent 1:1 classid 1:30 cbq rate $[8*$USPEED/10]kbit \
   allot 1600 prio 2 avpkt 1000

# all get Stochastic Fairness:
tc qdisc add dev $IFACE parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $IFACE parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $IFACE parent 1:30 handle 30: sfq perturb 10

# start filters
# TOS Minimum Delay (ssh, NOT scp) in 1:10:
tc filter add dev $IFACE parent 1:0 protocol ip prio 10 u32 \
      match ip tos 0x10 0xff  flowid 1:10

# ICMP (ip protocol 1) in the interactive class 1:10 so we 
# can do measurements & impress our friends:
tc filter add dev $IFACE parent 1:0 protocol ip prio 11 u32 \
        match ip protocol 1 0xff flowid 1:10

# prioritize small packets (<64 bytes)

tc filter add dev $IFACE parent 1: protocol ip prio 12 u32 \
   match ip protocol 6 0xff \
   match u8 0x05 0x0f at 0 \
   match u16 0x0000 0xffc0 at 2 \
   flowid 1:10


# some traffic however suffers a worse fate
for a in $NOPRIOPORTDST
do
	tc filter add dev $IFACE parent 1: protocol ip prio 14 u32 \
	   match ip dport $a 0xffff flowid 1:30
done

for a in $NOPRIOPORTSRC
do
 	tc filter add dev $IFACE parent 1: protocol ip prio 15 u32 \
	   match ip sport $a 0xffff flowid 1:30
done

for a in $NOPRIOHOSTSRC
do
 	tc filter add dev $IFACE parent 1: protocol ip prio 16 u32 \
	   match ip src $a flowid 1:30
done

for a in $NOPRIOHOSTDST
do
 	tc filter add dev $IFACE parent 1: protocol ip prio 17 u32 \
	   match ip dst $a flowid 1:30
done

# rest is 'non-interactive' ie 'bulk' and ends up in 1:20

tc filter add dev $IFACE parent 1: protocol ip prio 18 u32 \
   match ip dst 0.0.0.0/0 flowid 1:20


########## downlink #############
# slow downloads down to somewhat less than the real speed  to prevent 
# queuing at our ISP. Tune to see how high you can set it.
# ISPs tend to have *huge* queues to make sure big downloads are fast
#
# attach ingress policer:

tc qdisc add dev $IFACE handle ffff: ingress

# filter *everything* to it (0.0.0.0/0), drop everything that's
# coming in too fast:

tc filter add dev $IFACE parent ffff: protocol ip prio 50 u32 match ip src \
   0.0.0.0/0 police rate ${DSPEED}kbit burst 10k drop flowid

sorry for my bad english

Offline

Board footer

Powered by FluxBB