Bandwidth Profiles in VOLTHA
=============================================

This document describes Bandwidth profiles format in Sadis, how they are configured to VOLTHA and
how they are mapped to physical configuration for the OLT and the ONU with Traffic Descriptors
and T-CONT configuration.


Bandwidth Profiles Representations in Sadis
===========================================
The ONOS Sadis application supports configuration of the bandwidth profiles in two formats, `IETF` and `MEF`.
The values contained are expressed in kilobits/second (kbps).
The expectation is a `Default` meter will always present for workflows that have flow rules installed at port
startup, such as for EAPOL and DHCP. Meters referred by subscribers must also be present.

The `MEF` Brandwidth Profile format is as follows:

.. code:: json

 {
   "id": "Default",
   "air": 100000,
   "cbs": 30,
   "cir": 600,
   "ebs": 30,
   "eir": 400
 }

and the `IETF` format:

.. code:: json

 {
   "id": "DT_downstream_default_bw_profile",
   "pir": 1168192,
   "pbs": 0,
   "cir": 0,
   "cbs": 0,
   "gir": 0
 }

Independent of format the `olt` ONOS apps will generate a meter-per-bandwidth profile.

An example of a meter in ONOS is:

.. code:: bash

 onos> meters
 DefaultMeter{device=of:00000a0a0a0a0a0a, cellId=1, appId=DefaultApplicationId{id=411, name=org.opencord.olt},
     unit=KB_PER_SEC, isBurst=true, state=ADDED,
     bands=[DefaultBand{rate=600, burst-size=30, type=DROP, drop-precedence=null},
     DefaultBand{rate=101000, burst-size=60, type=DROP, drop-precedence=null},
     DefaultBand{rate=100000, burst-size=0, type=DROP, drop-precedence=null}], annotations={}}

note the different bands that map to the values of the `Default` bandwidth profile as well.
The number of bands in the meter are based on the BW profile. If BW profile has only PIR value, then there is only
one band, but if the BW profile has all - EIR, PIR and GIR, then we have all the three bands.

The `cellId=1` value is the identification of the meter (in other places used as `meterId`) and it will be used in
flows for a subscriber that requires the specific bandwidth profile corresponding to that meter.

We can check the bandwidthProfile associated with this meter:

.. code:: bash

 onos> volt-bpmeter-mappings
 bpInfo=Default deviceId=of:00000000c0a8646f meterId=1

From the above, we see that `meterId=1` corresponds to bandwidthProfile Default, configured in SADIS.

We can check the parameters of the configured bandwidthProfile with the following command, passing the Id of the meter
in `sadis`:

.. code:: bash

 onos> bandwidthprofile Default
 BandwidthProfileInformation{id=Default, committedInformationRate=600, committedBurstSize=30, exceededInformationRate=400, exceededBurstSize=30}

Bandwidth Profiles and Subscriber Mapping
=========================================

Each subscriber in sadis can refer up to 4 meters, 2 meters per ONU and 2 per OLT, upstream and downstream.
An example is:

.. code:: json

 {
  "uniTagMatch" : 55,
  "ponCTag" : 55,
  "ponSTag" : 555,
  "usPonCTagPriority" : 5,
  "usPonSTagPriority" : 5,
  "dsPonCTagPriority" : 5,
  "dsPonSTagPriority" : 5,
  "technologyProfileId" : 67,
  "downstreamBandwidthProfile" : "High-Speed-Internet",
  "upstreamBandwidthProfile" : "TCONT_TYPE3_700Mbps_Peak_500Mbps_Assured_ForVoD",
  "downstreamOltBandwidthProfile" : "High-Speed-Internet",
  "upstreamOltBandwidthProfile" : "TCONT_TYPE3_700Mbps_Peak_500Mbps_Assured_ForVoD",
  "configuredMacAddress" : "2c:60:0c:ee:d7:68",
  "serviceName" : "VOD",
  "isDhcpRequired" : "true",
  "isIgmpRequired" : "true"
 }

If the `downstreamOltBandwidthProfile` and `upstreamOltBandwidthProfile` are not specified the values of
`downstreamBandwidthProfile` and `upstreamBandwidthProfile` are taken and used.

A meter is referred by a flow for a specific subscriber by the `meter` instruction, as an example the following
flow refers to meter `1`:

.. code:: bash

 ADDED, bytes=0, packets=0, table=0, priority=10000, selector=[IN_PORT:256, ETH_TYPE:eapol],
     treatment=[immediate=[OUTPUT:CONTROLLER, VLAN_PUSH:vlan, VLAN_ID:4091], meter=METER:1,
     metadata=METADATA:ffb004000000001/0]


TCONT Mapping
-------------

Different Bandwidth profiles get mapped to different TCONT types:

- If GIR > 0, GIR = PIR, additional_bw_eligibility = none then TCONT Type-1 is selected -> set guaranteed_bw
  = maximum_bw = CBR_RT_BW (or CBR_NRT_BW) = GIR and alloc_type=none and send these parameters to BAL.
  (alloc_type is inferred from the other parameters)
- If GIR = 0, CIR > 0, CIR = PIR, additional_bw_eligibility = none then TCONT Type-2 is selected -> set guaranteed_bw
  = maximum_bw = CIR, CBR_RT_BW = 0 and CBR_NRT_BW = 0 and alloc_type = NSR and send these parameters to BAL.
  (alloc_type is set to NSR by default)
- If GIR = 0, CIR > 0, PIR > CIR,  additional_bw_eligibility = non_assured then TCONT Type-3
  is selected -> set guaranteed_bw = CIR, maximum_bw = PIR, CBR_RT_BW = 0 and CBR_NRT_BW = 0 and alloc_type = NSR
  and send these parameters to BAL. (alloc_type is set to NSR by default)
- If GIR = 0, CIR = 0, PIR > 0, additional_bw_eligibility = best_effort then TCONT Type-4 is selected -> set
  guaranteed_bw = 0, maximum_bw = PIR, CBR_RT_BW = 0 and CBR_NRT_BW = 0 and alloc_type = NSR and send these
  parameters to BAL. (alloc_type is set to NSR by default)
- If GIR > 0, PIR >= GIR + CIR, additional_bw_eligibility = non_assured or best_effort then TCONT Type-5 is selected
  -> set guaranteed_bw = GIR+CIR, maximum_bw = PIR, CBR_RT_BW (or CBR_NRT_BW) = GIR and alloc_type = NSR and send these
  parameters to BAL. (alloc_type is set to NSR by default)

The `additional_bw_eligibility` can take `None`, `BestEffort`, `NonAssured` as values.

Further information can be found in this `document <https://docs.google.com/document/d/1HipmsHD5LEQlOc-Y2tYV7DHD1fn7-_1lehBgp79sRwU/edit?usp=sharing>`_
that goes into depth about the T-CONT type support.

A meter gets applied to TCONTs based on the service definition on technology profile.

Traffic Descriptor (TD)
-----------------------
The `G.988 standard <https://www.itu.int/rec/T-REC-G.988-202109-I!Amd4/en>`_ at page 117 describes the mapping of values
to Traffic Descriptor MEs.

For VOLTHA the Traffic Descriptor ME is computed as follows CIR(TD)=AIR+CIR, where both AIR and CIR are extracted
from the bandwidth profile.

Please note that the values for the elements in the Traffic Descriptor ME are in Bytes/second so a conversion from the
kilobits/second of the Sadis representation is done by multiplying the values by 125 (kbps --> bps --> Bps).


