###################################
TAS Command-Line Parameters
###################################

******************************
IP Configuration
******************************

   *  ``--ip-addr=ADDR[/PREFIXLEN]``

      Set local IP address. Currently only exactly one IP address is supported.

   *  ``--ip-route=DEST[/PREFIX],NEXTHOP``

      Add an IP route for the destination subnet ``DEST/PREFIX`` via ``NEXTHOP``.
      Can be specified more than once.
      For example, a default route could be ``--ip-route=0.0.0.0/0,192.168.1.1``.


******************************
Fast Path Configuration
******************************

   *  ``--fp-cores-max=CORES``

      Maximum number of cores to use for fast-path. (default: 1)

   *  ``--fp-no-ints``

      Disable receive interrupts in the NIC driver, switches over to just
      polling.

   *  ``--fp-no-xsumoffload``

      Disable transmit checksum offloads, primarily useful to run TAS with NICs
      that do not support checksum offload, but comes at a slight performance
      cost.

   *  ``--fp-no-autoscale``

      Disable auto scaling, instead fix the number of cores used by the fast
      path to the maximum.

   *  ``--fp-no-hugepages``

      Do not use huge pages for the shared memory region between TAS and
      applications. (DPDK still uses huge pages for it's buffers unless
      explicitly disabled through ``--dpdk-extra``)

   *  ``--dpdk-extra=ARG``

      Pass ``ARG`` through as a parameter to the dpdk EAL. (see
      https://doc.dpdk.org/guides/linux_gsg/linux_eal_parameters.html)


******************************
TCP Protocol Parameters
******************************

   *  ``--tcp-rtt-init=RTT``

      Initial RTT used for congestion control. Is updated with actual
      measurements when they arrive.

   *  ``--tcp-link-bw=BANDWIDH``

      Link bandwidth in GBPS. TODO: what is this used for? (default: 10).

   *  ``--tcp-rxbuf-len=LEN``

      Connection receive buffer len in bytes (default: 8,192).

   *  ``--tcp-txbuf-len=LEN``

      Connection transmit buffer len in bytes (default: 8,192).

   *  ``--tcp-handshake-timeout=TIMEOUT``

      TCP handshake timeout in microseconds (default 10,000us).

   *  ``--tcp-handshake-retries=RETRIES``

      Maximum retries for timeouts during handshake.  (default: 10).


******************************
Congestion Control Parameters
******************************

   *  ``--cc=ALGORITHM``

      Choose which congestion control algorithm to use. The supported options
      are:

         +  ``dctcp-rate``: dctcp algorithm adapted to directly operate on the
            connection rate.

         +  ``dctcp-win``: original dctcp algorithm with the window converted to
            a rate for enforcement.

         + ``timely``: latency-based TIMELY control law.

         + ``const-rate``: set all connections to a constant rate (effectively
           disables congestion control, useful for debugging).

   *  ``--cc-control-interval=INT``

      Control interval length as multiples of the connection's RTT. (default: 2)

   *  ``--cc-control-granularity=G``

      Minimal control loop granularity. Control loop is only executed at most
      once every ``G`` microseconds. (default: 50)

   *  ``--cc-rexmit-ints=INTERVALS``

      Number of connection cnotrol intervals before TAS triggers a re-transmit.
      (default: 4).

DCTCP
=========================
For the ``dctcp-rate`` and ``dctcp-win`` algorithm:

   *  ``--cc-dctcp-weight=WEIGHT``

      EWMA weight for dctcp's ECN rate (alpha, default: 0.0625).

   *  ``--cc-dctcp-mimd=INC_FACT``

      Enable mutliplicative increase by ``INC_FACT`` (disabled by default, only
      used for tests).

   *  ``--cc-dctcp-min=RATE``

      Minimum rate to set for flows (kbps, default: 10000).

Timely
=========================
Parameters for the ``timely`` algorithm:

   *  ``--cc-timely-tlow=TIME``

      Tlow threshold in microseconds. (default: 30)

   *  ``--cc-timely-thigh=TIME``

      Thigh threshold in microseconds. (default: 150)

   *  ``--cc-timely-step=STEP``

      Additive increase step size in kbps (default: 10000)

   *  ``--cc-timely-init=RATE``

      Initial connection rate in kbps (default: 10000)

   *  ``--cc-timely-alpha=FRAC``

      EWMA weight for rtt diff. (default: 0.02)

   *  ``--cc-timely-beta=FRAC``

      Multiplicative decrease factor. (default: 0.8)

   *  ``--cc-timely-minrtt=RTT``

      Minimal RTT without queueing in microseconds. (default: 11)

   *  ``--cc-timely-minrate=RTT``

      Minimal connection rate to use in kbps (default: 10000)

Constant Rate
=========================
For the ``const-rate`` "algorithm" the following configuration options apply:

   *  ``--cc-const-rate=RATE``

      Sets the rate to use in kbps.


******************************
ARP Protocol Parameters
******************************

   *  ``--arp-timeout=TIMEOUT``

      Initial ARP request timetout in microseconds. This doubles with every
      retry (default: 500).

   *  ``--arp-timeout-max=TIMEOUT``

      Maximal ARP timeout in microseconds. If the retry-timeout grows larger
      than this, the request fails. (default: 10,000,000 us)


******************************
Slowpath Queues
******************************

   *  ``--nic-rx-len=LEN``

      Number of entries in TAS slowpath receive queue. (default: 16,384).

   *  ``--nic-tx-len=LEN``

      Number of entries in TAS slowpath transmit queue. (default: 16,384).

   *  ``--app-kin-len=LEN``

      Application slow path receive queue length in bytes. (default: 1,048,576).

   *  ``--app-kout-len=LEN``

      Application slow path transmit queue length in bytes. (default: 1,048,576).


******************************
Host Kernel Interface
******************************

   *  ``--kni-name=NAME``

      Enables the DPDK kernel network interface, by creating a dummy network
      interface with the name ``NAME``. (default: disabled)


******************************
Miscellaneous
******************************

   *  ``--quiet``

       Disable non-essential logging.

   *  ``--ready-fd=FD``

      Causes TAS to write to file descriptor ``FD`` when ready. Can be used by
      supervisor processes to detect when TAS is ready, e.g. used in full system
      tests.
