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 `_ 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 `_ 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).