13588.1.1
by Aaron Bentley
Add basic local-latency script. |
1 |
#!/usr/bin/env python
|
13588.1.3
by Aaron Bentley
Allow specifying delay. |
2 |
|
3 |
__metaclass__ = type |
|
4 |
||
13588.1.1
by Aaron Bentley
Add basic local-latency script. |
5 |
import sys |
6 |
import subprocess |
|
7 |
||
13588.1.4
by Aaron Bentley
Extract common functionality to script_commands. |
8 |
from script_commands import ( |
13588.1.8
by Aaron Bentley
Remove Command. |
9 |
helps, |
10 |
run_subcommand, |
|
13588.1.4
by Aaron Bentley
Extract common functionality to script_commands. |
11 |
UserError, |
12 |
)
|
|
13588.1.1
by Aaron Bentley
Add basic local-latency script. |
13 |
|
13588.1.3
by Aaron Bentley
Allow specifying delay. |
14 |
|
13588.1.2
by Aaron Bentley
Port-specific version. |
15 |
def tc(command): |
13588.1.12
by Aaron Bentley
Update docs. |
16 |
"""Run a tc command under sudo.
|
17 |
||
18 |
:param tc: The remainder of the command (leaving out tc).
|
|
19 |
"""
|
|
13588.1.13
by Aaron Bentley
Update from review. |
20 |
subprocess.call('sudo tc ' + command, shell=True) |
13588.1.2
by Aaron Bentley
Port-specific version. |
21 |
|
13588.1.3
by Aaron Bentley
Allow specifying delay. |
22 |
|
13588.1.7
by Aaron Bentley
Switch to command-from-function approach. |
23 |
@helps(delay='Length of delay in miliseconds (each way).', |
24 |
port='Port to induce delay on.') |
|
25 |
def start(delay=500, port=443): |
|
13588.1.12
by Aaron Bentley
Update docs. |
26 |
"""Add artificial latency to the lo interface on the specified port."""
|
13588.1.7
by Aaron Bentley
Switch to command-from-function approach. |
27 |
tc('qdisc add dev lo root handle 1: prio') |
28 |
tc('qdisc add dev lo parent 1:3 handle 30: netem delay %dms' % delay) |
|
29 |
tc('filter add dev lo protocol ip parent 1:0 prio 3 u32 match ip' |
|
30 |
' dport %d 0xffff flowid 1:3' % port) |
|
31 |
tc('filter add dev lo protocol ip parent 1:0 prio 3 u32 match ip' |
|
32 |
' sport %d 0xffff flowid 1:3' % port) |
|
33 |
||
34 |
||
35 |
def stop(): |
|
13588.1.16
by Aaron Bentley
Updates from review. |
36 |
"""Remove latency from the lo."""
|
13588.1.7
by Aaron Bentley
Switch to command-from-function approach. |
37 |
tc('qdisc del dev lo root') |
38 |
||
39 |
||
13588.1.8
by Aaron Bentley
Remove Command. |
40 |
subcommands = { |
41 |
'start': start, |
|
42 |
'stop': stop, |
|
43 |
}
|
|
13588.1.4
by Aaron Bentley
Extract common functionality to script_commands. |
44 |
|
13588.1.1
by Aaron Bentley
Add basic local-latency script. |
45 |
|
46 |
||
47 |
if __name__ == "__main__": |
|
48 |
try: |
|
13588.1.8
by Aaron Bentley
Remove Command. |
49 |
run_subcommand(subcommands, sys.argv[1:]) |
13588.1.4
by Aaron Bentley
Extract common functionality to script_commands. |
50 |
except UserError as e: |
13588.1.1
by Aaron Bentley
Add basic local-latency script. |
51 |
sys.stderr.write(str(e)+'\n') |