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