In-band Network Telemetry (INT)
===============================

ONOS network configuration for INT application
----------------------------------------------

.. tip::
    Learn more about `ONOS network configuration service
    <https://wiki.onosproject.org/display/ONOS/The+Network+Configuration+Service>`_.

Here's a list of fields that you can configure:

* ``collectorIp``: The IP address of the INT collector, Must be an IP of a host that attached to the fabric. *Required*

* ``collectorPort``: The UDP port that the INT collector will listen on. *Required*

* ``minFlowHopLatencyChangeNs``: The minimum latency change to bypass the flow report
  filter in nanosecond. *Optional, default is 0.*

  We use this value to instruct an INT-capable device to produce reports only for packets
  which hop latency changed by at least ``minFlowHopLatencyChangeNs`` nanosecond from
  the previously reported value for the same flow (5-tuple).

  For example: produce a report only if ``(currentHopLatency - previousHopLatency) > minFlowHopLatencyChangeNs``.
  Some pipeline implementations might support only specific intervals, e.g., powers of 2.

* ``watchSubnets``: List of subnets we want to watch. *Optional, default is an empty list.*

  * Devices will watch packets with source IP or destination IP matched in this list.
  * To watch every packet, use ``0.0.0.0/0``.
  * Note that the pipeline won't watch the INT report traffic.

* ``queueReportLatencyThresholds``: A map that specified thresholds to trigger queue
  report or reset the queue report quota. *Optional, default is an empty map.*

  The key of this map is the queue ID. The devices will only report queues in this map.

  * ``triggerNs``: The latency threshold to trigger queue report in nanosecond. **Required**
  * ``resetNs``: The latency threshold to reset queue report quota in nanosecond. **Optional**

    * When absent, the device will reset the queue report quota when latency is half of ``triggerNs``.

Below is an example of ONOS network configuration for INT application:

.. code-block:: json

    {
        "apps": {
            "org.stratumproject.fabric.tna.inbandtelemetry": {
                "report": {
                    "collectorIp": "10.32.11.2",
                    "collectorPort": 32766,
                    "minFlowHopLatencyChangeNs": 512,
                    "watchSubnets": [
                        "10.32.11.0/24"
                    ],
                    "queueReportLatencyThresholds": {
                        "0": {"triggerNs": 2000, "resetNs": 500},
                        "2": {"triggerNs": 1000, "resetNs": 400}
                    }
                }
            }
        }
    }
