tools_webrtc dir converted to py3 + top level PRESUBMIT script
Bug: webrtc:13607
Change-Id: Ib018e43ea977cc24dd71048e68e3343741f7f31b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/249083
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Jeremy Leconte <jleconte@google.com>
Commit-Queue: Christoffer Jansson <jansson@google.com>
Cr-Commit-Position: refs/heads/main@{#35953}
diff --git a/tools_webrtc/network_emulator/emulate.py b/tools_webrtc/network_emulator/emulate.py
index 51224c8..a35ccd3 100755
--- a/tools_webrtc/network_emulator/emulate.py
+++ b/tools_webrtc/network_emulator/emulate.py
@@ -1,4 +1,5 @@
-#!/usr/bin/env python
+#!/usr/bin/env vpython3
+
# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
@@ -46,170 +47,163 @@
class NonStrippingEpilogOptionParser(optparse.OptionParser):
- """Custom parser to let us show the epilog without weird line breaking."""
+ """Custom parser to let us show the epilog without weird line breaking."""
- def format_epilog(self, formatter):
- return self.epilog
+ def format_epilog(self, formatter):
+ return self.epilog
def _GetExternalIp():
- """Finds out the machine's external IP by connecting to google.com."""
- external_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- external_socket.connect(('google.com', 80))
- return external_socket.getsockname()[0]
+ """Finds out the machine's external IP by connecting to google.com."""
+ external_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ external_socket.connect(('google.com', 80))
+ return external_socket.getsockname()[0]
def _ParseArgs():
- """Define and parse the command-line arguments."""
- presets_string = '\n'.join(str(p) for p in _PRESETS)
- parser = NonStrippingEpilogOptionParser(epilog=(
- '\nAvailable presets:\n'
- ' Bandwidth (kbps) Packet\n'
- 'ID Name Receive Send Queue Delay loss \n'
- '-- ---- --------- -------- ----- ------- ------\n'
- '%s\n' % presets_string))
- parser.add_option('-p',
- '--preset',
- type='int',
- default=_DEFAULT_PRESET_ID,
- help=('ConnectionConfig configuration, specified by ID. '
- 'Default: %default'))
- parser.add_option(
- '-r',
- '--receive-bw',
- type='int',
- default=_DEFAULT_PRESET.receive_bw_kbps,
- help=('Receive bandwidth in kilobit/s. Default: %default'))
- parser.add_option('-s',
- '--send-bw',
- type='int',
- default=_DEFAULT_PRESET.send_bw_kbps,
- help=('Send bandwidth in kilobit/s. Default: %default'))
- parser.add_option('-d',
- '--delay',
- type='int',
- default=_DEFAULT_PRESET.delay_ms,
- help=('Delay in ms. Default: %default'))
- parser.add_option('-l',
- '--packet-loss',
- type='float',
- default=_DEFAULT_PRESET.packet_loss_percent,
- help=('Packet loss in %. Default: %default'))
- parser.add_option(
- '-q',
- '--queue',
- type='int',
- default=_DEFAULT_PRESET.queue_slots,
- help=('Queue size as number of slots. Default: %default'))
- parser.add_option(
- '--port-range',
- default='%s,%s' % _DEFAULT_PORT_RANGE,
- help=('Range of ports for constrained network. Specify as '
- 'two comma separated integers. Default: %default'))
- parser.add_option(
- '--target-ip',
- default=None,
- help=('The interface IP address to apply the rules for. '
- 'Default: the external facing interface IP address.'))
- parser.add_option('-v',
- '--verbose',
- action='store_true',
- default=False,
- help=('Turn on verbose output. Will print all \'ipfw\' '
- 'commands that are executed.'))
+ """Define and parse the command-line arguments."""
+ presets_string = '\n'.join(str(p) for p in _PRESETS)
+ parser = NonStrippingEpilogOptionParser(epilog=(
+ '\nAvailable presets:\n'
+ ' Bandwidth (kbps) Packet\n'
+ 'ID Name Receive Send Queue Delay loss \n'
+ '-- ---- --------- -------- ----- ------- ------\n'
+ '%s\n' % presets_string))
+ parser.add_option('-p',
+ '--preset',
+ type='int',
+ default=_DEFAULT_PRESET_ID,
+ help=('ConnectionConfig configuration, specified by ID. '
+ 'Default: %default'))
+ parser.add_option('-r',
+ '--receive-bw',
+ type='int',
+ default=_DEFAULT_PRESET.receive_bw_kbps,
+ help=('Receive bandwidth in kilobit/s. Default: %default'))
+ parser.add_option('-s',
+ '--send-bw',
+ type='int',
+ default=_DEFAULT_PRESET.send_bw_kbps,
+ help=('Send bandwidth in kilobit/s. Default: %default'))
+ parser.add_option('-d',
+ '--delay',
+ type='int',
+ default=_DEFAULT_PRESET.delay_ms,
+ help=('Delay in ms. Default: %default'))
+ parser.add_option('-l',
+ '--packet-loss',
+ type='float',
+ default=_DEFAULT_PRESET.packet_loss_percent,
+ help=('Packet loss in %. Default: %default'))
+ parser.add_option('-q',
+ '--queue',
+ type='int',
+ default=_DEFAULT_PRESET.queue_slots,
+ help=('Queue size as number of slots. Default: %default'))
+ parser.add_option('--port-range',
+ default='%s,%s' % _DEFAULT_PORT_RANGE,
+ help=('Range of ports for constrained network. Specify as '
+ 'two comma separated integers. Default: %default'))
+ parser.add_option('--target-ip',
+ default=None,
+ help=('The interface IP address to apply the rules for. '
+ 'Default: the external facing interface IP address.'))
+ parser.add_option('-v',
+ '--verbose',
+ action='store_true',
+ default=False,
+ help=('Turn on verbose output. Will print all \'ipfw\' '
+ 'commands that are executed.'))
- options = parser.parse_args()[0]
+ options = parser.parse_args()[0]
- # Find preset by ID, if specified.
- if options.preset and not _PRESETS_DICT.has_key(options.preset):
- parser.error('Invalid preset: %s' % options.preset)
+ # Find preset by ID, if specified.
+ if options.preset and options.preset not in _PRESETS_DICT:
+ parser.error('Invalid preset: %s' % options.preset)
- # Simple validation of the IP address, if supplied.
- if options.target_ip:
- try:
- socket.inet_aton(options.target_ip)
- except socket.error:
- parser.error('Invalid IP address specified: %s' %
- options.target_ip)
-
- # Convert port range into the desired tuple format.
+ # Simple validation of the IP address, if supplied.
+ if options.target_ip:
try:
- if isinstance(options.port_range, str):
- options.port_range = tuple(
- int(port) for port in options.port_range.split(','))
- if len(options.port_range) != 2:
- parser.error(
- 'Invalid port range specified, please specify two '
- 'integers separated by a comma.')
- except ValueError:
- parser.error('Invalid port range specified.')
+ socket.inet_aton(options.target_ip)
+ except socket.error:
+ parser.error('Invalid IP address specified: %s' % options.target_ip)
- _InitLogging(options.verbose)
- return options
+ # Convert port range into the desired tuple format.
+ try:
+ if isinstance(options.port_range, str):
+ options.port_range = tuple(
+ int(port) for port in options.port_range.split(','))
+ if len(options.port_range) != 2:
+ parser.error('Invalid port range specified, please specify two '
+ 'integers separated by a comma.')
+ except ValueError:
+ parser.error('Invalid port range specified.')
+
+ _InitLogging(options.verbose)
+ return options
def _InitLogging(verbose):
- """Setup logging."""
- log_level = _DEFAULT_LOG_LEVEL
- if verbose:
- log_level = logging.DEBUG
- logging.basicConfig(level=log_level, format='%(message)s')
+ """Setup logging."""
+ log_level = _DEFAULT_LOG_LEVEL
+ if verbose:
+ log_level = logging.DEBUG
+ logging.basicConfig(level=log_level, format='%(message)s')
def main():
- options = _ParseArgs()
+ options = _ParseArgs()
- # Build a configuration object. Override any preset configuration settings if
- # a value of a setting was also given as a flag.
- connection_config = _PRESETS_DICT[options.preset]
- if options.receive_bw is not _DEFAULT_PRESET.receive_bw_kbps:
- connection_config.receive_bw_kbps = options.receive_bw
- if options.send_bw is not _DEFAULT_PRESET.send_bw_kbps:
- connection_config.send_bw_kbps = options.send_bw
- if options.delay is not _DEFAULT_PRESET.delay_ms:
- connection_config.delay_ms = options.delay
- if options.packet_loss is not _DEFAULT_PRESET.packet_loss_percent:
- connection_config.packet_loss_percent = options.packet_loss
- if options.queue is not _DEFAULT_PRESET.queue_slots:
- connection_config.queue_slots = options.queue
- emulator = network_emulator.NetworkEmulator(connection_config,
- options.port_range)
- try:
- emulator.CheckPermissions()
- except network_emulator.NetworkEmulatorError as e:
- logging.error('Error: %s\n\nCause: %s', e.fail_msg, e.error)
- return -1
+ # Build a configuration object. Override any preset configuration settings if
+ # a value of a setting was also given as a flag.
+ connection_config = _PRESETS_DICT[options.preset]
+ if options.receive_bw is not _DEFAULT_PRESET.receive_bw_kbps:
+ connection_config.receive_bw_kbps = options.receive_bw
+ if options.send_bw is not _DEFAULT_PRESET.send_bw_kbps:
+ connection_config.send_bw_kbps = options.send_bw
+ if options.delay is not _DEFAULT_PRESET.delay_ms:
+ connection_config.delay_ms = options.delay
+ if options.packet_loss is not _DEFAULT_PRESET.packet_loss_percent:
+ connection_config.packet_loss_percent = options.packet_loss
+ if options.queue is not _DEFAULT_PRESET.queue_slots:
+ connection_config.queue_slots = options.queue
+ emulator = network_emulator.NetworkEmulator(connection_config,
+ options.port_range)
+ try:
+ emulator.CheckPermissions()
+ except network_emulator.NetworkEmulatorError as e:
+ logging.error('Error: %s\n\nCause: %s', e.fail_msg, e.error)
+ return -1
- if not options.target_ip:
- external_ip = _GetExternalIp()
- else:
- external_ip = options.target_ip
+ if not options.target_ip:
+ external_ip = _GetExternalIp()
+ else:
+ external_ip = options.target_ip
- logging.info('Constraining traffic to/from IP: %s', external_ip)
- try:
- emulator.Emulate(external_ip)
- logging.info(
- 'Started network emulation with the following configuration:\n'
- ' Receive bandwidth: %s kbps (%s kB/s)\n'
- ' Send bandwidth : %s kbps (%s kB/s)\n'
- ' Delay : %s ms\n'
- ' Packet loss : %s %%\n'
- ' Queue slots : %s', connection_config.receive_bw_kbps,
- connection_config.receive_bw_kbps / 8,
- connection_config.send_bw_kbps, connection_config.send_bw_kbps / 8,
- connection_config.delay_ms, connection_config.packet_loss_percent,
- connection_config.queue_slots)
- logging.info('Affected traffic: IP traffic on ports %s-%s',
- options.port_range[0], options.port_range[1])
- raw_input('Press Enter to abort Network Emulation...')
- logging.info('Flushing all Dummynet rules...')
- network_emulator.Cleanup()
- logging.info('Completed Network Emulation.')
- return 0
- except network_emulator.NetworkEmulatorError as e:
- logging.error('Error: %s\n\nCause: %s', e.fail_msg, e.error)
- return -2
+ logging.info('Constraining traffic to/from IP: %s', external_ip)
+ try:
+ emulator.Emulate(external_ip)
+ logging.info(
+ 'Started network emulation with the following configuration:\n'
+ ' Receive bandwidth: %s kbps (%s kB/s)\n'
+ ' Send bandwidth : %s kbps (%s kB/s)\n'
+ ' Delay : %s ms\n'
+ ' Packet loss : %s %%\n'
+ ' Queue slots : %s', connection_config.receive_bw_kbps,
+ connection_config.receive_bw_kbps / 8, connection_config.send_bw_kbps,
+ connection_config.send_bw_kbps / 8, connection_config.delay_ms,
+ connection_config.packet_loss_percent, connection_config.queue_slots)
+ logging.info('Affected traffic: IP traffic on ports %s-%s',
+ options.port_range[0], options.port_range[1])
+ input('Press Enter to abort Network Emulation...')
+ logging.info('Flushing all Dummynet rules...')
+ network_emulator.Cleanup()
+ logging.info('Completed Network Emulation.')
+ return 0
+ except network_emulator.NetworkEmulatorError as e:
+ logging.error('Error: %s\n\nCause: %s', e.fail_msg, e.error)
+ return -2
if __name__ == '__main__':
- sys.exit(main())
+ sys.exit(main())