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())