~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-04 18:06:38 UTC
  • mfrom: (13588.1.4 induce-latency)
  • Revision ID: launchpad@pqm.canonical.com-20110804180638-e1m4y7fcwlseqrle
[r=jcsackett][bug=821038] Add local-latency script.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
 
 
3
__metaclass__ = type
 
4
 
 
5
import sys
 
6
import subprocess
 
7
 
 
8
from script_commands import (
 
9
    Command,
 
10
    OptionParser,
 
11
    UserError,
 
12
    )
 
13
 
 
14
 
 
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
 
55
 
 
56
 
 
57
 
 
58
if __name__ == "__main__":
 
59
    try:
 
60
        Command.run_subcommand(sys.argv[1:])
 
61
    except UserError as e:
 
62
        sys.stderr.write(str(e)+'\n')