want to randomly drop packets based on percent
Subsystems (2)
Hey,
I'm using the 2.4.32 kernel with madwifi and iproute2 version 2-2.6.16-060323.tar.gz
I wanted to insert artificial packet loss based on a percent so i found:
network emulab qdisc could do it, so i compiled support into the kernel and tried:
tc qdisc change dev eth0 root netem loss .1%
however i keep getting the error
RTNETLINK answer: Invalid argument
I am not sure how to go about solving this problem for now, so if anyone has any suggestions i'd greatly appreciate it.
I really only need to drop random packets being forwarded through ip_forward ... however randomly dropping any packet based on a % is sufficient so I figured netem would be great.
So in the meantime I figured I would try to insert packet loss in ip_forward.c by generating a random number and dropping based on that. I could goto drop; depending on the number in the function int ip_forward(struct sk_buff *skb)
But then I ran into the problem of properly seeding the random number generator... srand(time(0)) is one way... however time() returns seconds, therefore i would drop multiple packets in a single second if I used this method which is very undesirable. What is the proper way to generate a random number here?
Thanks!
George
Quoted 8 lines
I'm using the 2.4.32 kernel with madwifi and iproute2 version 2-2.6.16-060323.tar.gz
I wanted to insert artificial packet loss based on a percent so i found:
network emulab qdisc could do it, so i compiled support into the kernel and tried:
tc qdisc change dev eth0 root netem loss .1%
You could just use the 'random' match module from netfilter/POMng, but I doubt it will compile out-of-the-box on 2.4.32. It would then be as simple as
iptables -t mangle -I PREROUTING -m random --average 1 -j DROP
Quoted 3 lines
I really only need to drop random packets being forwarded through
ip_forward... however randomly dropping any packet based on a % is sufficient so I figured netem would be great.
Jan Engelhardt
Quoted 9 lines · On Mon, 17 Apr 2006 03:38:33 -0400 George Nychis <[email protected]> wrote:
Hey,
I'm using the 2.4.32 kernel with madwifi and iproute2 version 2-2.6.16-060323.tar.gz
I wanted to insert artificial packet loss based on a percent so i found:
network emulab qdisc could do it, so i compiled support into the kernel and tried:
tc qdisc change dev eth0 root netem loss .1%
Most likely, you the version of the kernel you are running was not configured with netem enabled.
Quoted 9 lines · Stephen Hemminger
Quoted 4 lines · On Mon, 17 Apr 2006 03:38:33 -0400 George Nychis <[email protected]> wrote:
Hey,
I'm using the 2.4.32 kernel with madwifi and iproute2 version 2-2.6.16-060323.tar.gz
Quoted 11 lines
Quoted 5 lines
I wanted to insert artificial packet loss based on a percent so i found:
network emulab qdisc could do it, so i compiled support into the kernel and tried:
tc qdisc change dev eth0 root netem loss .1%Most likely, you the version of the kernel you are running was not configured with netem enabled.
Hey Stephen,
I have netem enabled in the kernel... I've checked this numerous times. I enabled it under Networking Options -> QoS -> Network emulator. I even did a make clean, make mrproper, and rebuilt from scratch.
Maybe I'll try compiling it as a module and see if anything changes.
Any other ideas?
----
In response to Matt:
Thank you!
One last question, if I take this route, what is the easiest way to allow me to change the packet loss without hard coding a percent into the kernel?
Quoted 11 lines · On Mon, 17 Apr 2006 18:30:51 -0400 George Nychis <[email protected]> wrote:
Quoted 7 lines · Stephen Hemminger
Quoted 2 lines · On Mon, 17 Apr 2006 03:38:33 -0400 George Nychis <[email protected]> wrote:
Hey,
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
I'm using the 2.4.32 kernel with madwifi and iproute2 version 2-2.6.16-060323.tar.gz
I wanted to insert artificial packet loss based on a percent so i found:
network emulab qdisc could do it, so i compiled support into the kernel and tried:
tc qdisc change dev eth0 root netem loss .1%
^^^^^^
You need to do add not change. Add will set the queue discipline to netem (default is pfifo_fast). Change is for changing netem parameters after it is loaded.
Quoted 25 lines · Stephen Hemminger
Quoted 13 lines · On Mon, 17 Apr 2006 18:30:51 -0400 George Nychis <[email protected]> wrote:
Quoted 9 lines · Stephen Hemminger
Quoted 2 lines · On Mon, 17 Apr 2006 03:38:33 -0400 George Nychis <[email protected]> wrote:
Hey,
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
I'm using the 2.4.32 kernel with madwifi and iproute2 version 2-2.6.16-060323.tar.gz
I wanted to insert artificial packet loss based on a percent so i found:
network emulab qdisc could do it, so i compiled support into the kernel and tried:
tc qdisc change dev eth0 root netem loss .1%
Quoted 8 lines
^^^^^^You need to do add not change. Add will set the queue discipline to netem (default is
pfifo_fast). Change is for changing netem parameters after it is loaded.
bahhh I see... the wiki has "change" instead of add. Now i'm running into another problem, I have an XCP qdisc that I have already added via:
tc qdisc add dev ath0 root xcp capacity 54Mbit size 500
therefore when I also try to incorperate loss:
tcq disc add dev ath0 root netem loss .1%
I get:
RTNETLINK answers: File exists
Is it possible to use two qdiscs on the same interface?
Thanks!
George
O
Quoted 14 lines
Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
I wanted to insert artificial packet loss based on a percent so i found:
network emulab qdisc could do it, so i compiled support into the kernel and tried:
tc qdisc change dev eth0 root netem loss .1%Quoted 8 lines
^^^^^^You need to do add not change. Add will set the queue discipline to netem (default is
pfifo_fast). Change is for changing netem parameters after it is loaded.
Quoted 4 lines
bahhh I see... the wiki has "change" instead of add. Now i'm running into another problem, I have an XCP qdisc that I have already added via:
tc qdisc add dev ath0 root xcp capacity 54Mbit size 500
Wiki reads as a set of examples. First uses, "add" after that "change".
Quoted 8 lines
therefore when I also try to incorperate loss:
tcq disc add dev ath0 root netem loss .1%I get:
RTNETLINK answers: File existsIs it possible to use two qdiscs on the same interface?
No, but netem is "classful" so you can put xcp inside netem. Look at the token bucket example on the wiki.
Quoted 37 lines · Stephen Hemminger
O
Quoted 17 lines
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
I wanted to insert artificial packet loss based on a percent so i found:
network emulab qdisc could do it, so i compiled support into the kernel and tried:
tc qdisc change dev eth0 root netem loss .1%Quoted 10 lines
^^^^^^You need to do add not change. Add will set the queue discipline to netem (default is
pfifo_fast). Change is for changing netem parameters after it is loaded.Quoted 5 lines
bahhh I see... the wiki has "change" instead of add. Now i'm running into another problem, I have an XCP qdisc that I have already added via:
tc qdisc add dev ath0 root xcp capacity 54Mbit size 500Wiki reads as a set of examples. First uses, "add" after that "change".
Quoted 6 lines
therefore when I also try to incorperate loss:
tcq disc add dev ath0 root netem loss .1%I get:
RTNETLINK answers: File exists
Quoted 10 lines
Quoted 4 lines
Is it possible to use two qdiscs on the same interface?
No, but netem is "classful" so you can put xcp inside netem. Look at the token bucket example on the wiki.
Okay I'm slightly confused... I would like to have the traffic traverse both the XCP qdisc and the netem qdisc... looking through the wiki it shows me how to classify two sets of traffic, but how do i push all traffic through both?
Quoted 37 lines · Stephen Hemminger
O
Quoted 17 lines
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
I wanted to insert artificial packet loss based on a percent so i found:
network emulab qdisc could do it, so i compiled support into the kernel and tried:
tc qdisc change dev eth0 root netem loss .1%Quoted 10 lines
^^^^^^You need to do add not change. Add will set the queue discipline to netem (default is
pfifo_fast). Change is for changing netem parameters after it is loaded.Quoted 5 lines
bahhh I see... the wiki has "change" instead of add. Now i'm running into another problem, I have an XCP qdisc that I have already added via:
tc qdisc add dev ath0 root xcp capacity 54Mbit size 500Wiki reads as a set of examples. First uses, "add" after that "change".
Quoted 6 lines
therefore when I also try to incorperate loss:
tcq disc add dev ath0 root netem loss .1%I get:
RTNETLINK answers: File exists
Quoted 10 lines
Quoted 4 lines
Is it possible to use two qdiscs on the same interface?
No, but netem is "classful" so you can put xcp inside netem. Look at the token bucket example on the wiki.
Sorry, I was looking at the LARTC guide, completely skipped over the blatently obvious block of commands you were pointing me too :P
Thanks!
George