Simulate network latency on specific port using tc
Try this:
sudo tc qdisc add dev eth1 root handle 1: prio priomap 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
sudo tc qdisc add dev eth1 parent 1:2 handle 20: netem delay 3000ms
sudo tc filter add dev eth1 parent 1:0 protocol ip u32 match ip sport 7000 0xffff flowid 1:2
Explanation:
- Add the all zeros priomap to
prio
so all regular traffic flows through a single band. By defaultprio
assigns traffic to different band according to the DSCP value of the packet. This means that some traffic that doesn't match your filter might end up in the same class as the delayed traffic. - Assign netem to one of the classes -
1:2
- Finally, add your filter so it assigns the flow id
1:2
to matching packets. This is probably where you went wrong. You need to assign the filter to1:2
of the classful prio qdisc, not the classless netem.
To test this setup, I changed the filter to dport 80 instead of sport 7000, and ran wget against checkip.amazonaws.com
, which took 6 seconds (3 second delay for the TCP Syn, 3 second delay for the HTTP GET):
malt@ubuntu:~$ wget -O - checkip.amazonaws.com
--2016-10-23 06:21:42-- http://checkip.amazonaws.com/
Resolving checkip.amazonaws.com (checkip.amazonaws.com)... 75.101.161.183, 54.235.71.200, 107.20.206.176, ...
Connecting to checkip.amazonaws.com (checkip.amazonaws.com)|75.101.161.183|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10
Saving to: ‘STDOUT’
- 0%[ ] 0 --.-KB/s X.X.X.X
- 100%[===========================================================>] 10 --.-KB/s in 0s
2016-10-23 06:21:48 (3.58 MB/s) - written to stdout [10/10]
Connections to other ports though (e.g. 443 - HTTPS, 22 - SSH, etc) were much quicker. You can also run sudo tc -s qdisc show dev eth1
to make sure that the number of packets handled by netem makes sense.
How to tc filter with NETEM?
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 flowid 1:1 match ip dst 192.168.2.219
tc qdisc add dev eth0 parent 1:1 handle 10: netem delay 25ms 5ms
- PS: by adding 5ms jitter to delay, you also create packet reordering
in the network. Assuming that this is what you want. - PPS: I am not sure whether adding jitter creates reordering or not
in OpenWRT. But it surely does in the Linux kernel. Netem has undergone umpteen number of changes since 2010. PPPS: To introduce jitter w/o packet reordering, set a very high
rate limit.tc qdisc add dev eth0 parent 1:1 handle 10: rate 1000 mbit netem delay 25ms 5ms
Simulating a bad internet connection
You can try using "Fiddler"
You have options to simulate bad network (like old modems 33k or 56k)
You need to plug in your device to your PC and turn on the proxy (every request will be transfered through Fiddler)
Then you could test your code with a bad network then see what happening ;)
Related Topics
Linux Intel 64Bit Assembly Division
Multi-Architectural Binary Rpm and The Noarch
Level Triggered Interrupt Handling and Nested Interrupts
Phony Targets for Parallel Execution of Make
Brother Ql-720Nw Specifying Media Size Seems Ignored
How to Populate /Dev with a Custom Directory with Udev
Ftrace: System Crash When Changing Current_Tracer from Function_Graph via Echo
What Happens When I Sudo Bash -C
Passwd in One Command Isn't Working
The Behavior When a Gnu Make Phony Target Happens to Be The Same as a Directory Name
What Is The Right Place for Findxxx.Cmake Files for Locally Compiled Libs
Ffmpeg Combining Images to Video and Streaming in One Command Line
Why Does 'Change_Protection' Hog CPU While Loading a Large Amount of Data into Ram
Arch/X86/Include/Asm/Unistd.H VS. Include/Asm-Generic/Unistd.H
Why Do My Keystrokes Turn into Crazy Characters After I Dump a Bunch of Binary Data into My Terminal
Start Tomcat from Eclipse in Port 80 in Ubuntu with Authbind