~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to utilities/local-latency

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-08-05 16:26:42 UTC
  • mfrom: (13588.1.17 local-latency-port)
  • Revision ID: launchpad@pqm.canonical.com-20110805162642-hgal6meu10l3utts
[r=henninge][bug=821482][no-qa] Add --port option.

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
import subprocess
7
7
 
8
8
from script_commands import (
9
 
    Command,
10
 
    OptionParser,
 
9
    helps,
 
10
    run_subcommand,
11
11
    UserError,
12
12
    )
13
13
 
14
14
 
15
15
def tc(command):
16
 
     subprocess.call('sudo tc ' + command, shell=True)
17
 
 
18
 
 
19
 
class StartCommand(Command):
20
 
 
21
 
    @classmethod
22
 
    def get_parser(cls):
23
 
        parser = OptionParser()
24
 
        parser.add_option(
25
 
            '-d', '--delay', dest='delay', type='int',
26
 
            help='Length of delay in miliseconds (each way).')
27
 
        return parser
28
 
 
29
 
    @staticmethod
30
 
    def run(delay=500, port=443):
31
 
        tc('qdisc add dev lo root handle 1: prio')
32
 
        tc('qdisc add dev lo parent 1:3 handle 30: netem delay %dms' % delay)
33
 
        tc('filter add dev lo protocol ip parent 1:0 prio 3 u32 match ip'
34
 
           ' dport %d 0xffff flowid 1:3' % port)
35
 
        tc('filter add dev lo protocol ip parent 1:0 prio 3 u32 match ip'
36
 
           ' sport %d 0xffff flowid 1:3' % port)
37
 
 
38
 
 
39
 
Command.commands['start'] = StartCommand
40
 
 
41
 
 
42
 
class StopCommand(Command):
43
 
 
44
 
    @staticmethod
45
 
    def get_parser():
46
 
        parser = OptionParser()
47
 
        return parser
48
 
 
49
 
    @staticmethod
50
 
    def run():
51
 
        tc('qdisc del dev lo root')
52
 
 
53
 
 
54
 
Command.commands['stop'] = StopCommand
 
16
    """Run a tc command under sudo.
 
17
 
 
18
    :param tc: The remainder of the command (leaving out tc).
 
19
    """
 
20
    subprocess.call('sudo tc ' + command, shell=True)
 
21
 
 
22
 
 
23
@helps(delay='Length of delay in miliseconds (each way).',
 
24
       port='Port to induce delay on.')
 
25
def start(delay=500, port=443):
 
26
    """Add artificial latency to the lo interface on the specified port."""
 
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():
 
36
    """Remove latency from the lo."""
 
37
    tc('qdisc del dev lo root')
 
38
 
 
39
 
 
40
subcommands = {
 
41
    'start': start,
 
42
    'stop': stop,
 
43
    }
55
44
 
56
45
 
57
46
 
58
47
if __name__ == "__main__":
59
48
    try:
60
 
        Command.run_subcommand(sys.argv[1:])
 
49
        run_subcommand(subcommands, sys.argv[1:])
61
50
    except UserError as e:
62
51
        sys.stderr.write(str(e)+'\n')