Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 1 | .. _workflows: |
| 2 | |
| 3 | Operator workflows |
| 4 | ================== |
| 5 | |
| 6 | ``Workflow`` is a term that spilled from the SEBA Reference Design (RD) into VOLTHA. |
| 7 | |
Andrea Campanella | 882cfcc | 2021-02-04 10:53:57 +0100 | [diff] [blame] | 8 | In SEBA a workflow is a collection of subscriber management items like identification, location, |
| 9 | and bandwidth profile. In addition each workflows maps to a service type which translates to a technology profile, |
| 10 | and an operator desired flow of operations (i.e state-machine). |
| 11 | The workflow is implemented by a selection of ONOS apps, XOS services (in SEBA) |
| 12 | and a set of configurations (sadis, etcd, netcfg). Those apps paired with the configuration specified by the |
| 13 | workflow (e.g. need EAPOL) in turn create low level flows, groups, meters, schedulers, queues etc. |
| 14 | A workflow is then triggered by a particular set of APIs, for example the request to add a subscriber. |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 15 | |
Andrea Campanella | 882cfcc | 2021-02-04 10:53:57 +0100 | [diff] [blame] | 16 | A full description of the different operator's workflows can be |
| 17 | `found here <https://drive.google.com/drive/folders/1MfxwoDSvAR_rgFHt6n9Sai7IuiJPrHxF>`_. |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 18 | |
| 19 | A big part of the workflow in SEBA is defined within NEM (Network Edge Mediator). |
Andrea Campanella | 882cfcc | 2021-02-04 10:53:57 +0100 | [diff] [blame] | 20 | Given that NEM is not available in a plain VOLTHA deployment the user has to ensure proper config in the right places, |
| 21 | and then triggering of api's themselves. |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 22 | |
Andrea Campanella | c18d118 | 2021-09-10 12:01:38 +0200 | [diff] [blame^] | 23 | To deploy a specific workflow follow the steps under `deploying-a-different-workflow` in the `voltha-helm-charts |
| 24 | README <../voltha-helm-charts/README.md>`_. |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 25 | |
Andrea Campanella | 077cd5e | 2021-04-16 11:12:41 +0200 | [diff] [blame] | 26 | A workflow in VOLTHA entails different elements: Customer tag allocation, Technology profile, Bandwidth profile, |
| 27 | Flow and Group Management |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 28 | |
| 29 | Customer tag allocation |
Andrea Campanella | 077cd5e | 2021-04-16 11:12:41 +0200 | [diff] [blame] | 30 | ----------------------- |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 31 | |
| 32 | The vlan tags for a particular subscriber are defined in the ``sadis`` configuration. |
| 33 | `Sadis <https://github.com/opencord/sadis>`_ stands for `Subscriber and Device Information Service` |
| 34 | and is the ONOS application responsible to store and distribute Subscriber information. |
| 35 | |
| 36 | Information on different ``sadis`` configurations can be found here: |
| 37 | https://docs.google.com/document/d/1JLQ51CZg4jsXsBQcrJn-fc2kVvXH6lw0PYoyIclwmBs |
| 38 | |
| 39 | Technology profile |
Andrea Campanella | 077cd5e | 2021-04-16 11:12:41 +0200 | [diff] [blame] | 40 | ------------------ |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 41 | |
| 42 | Technology profiles describes technology specific attributes required to implement |
| 43 | Subscriber Services on an OpenFlow managed Logical Switch overlaid upon an OLT |
| 44 | or other technology specific platform. |
| 45 | |
Andrea Campanella | c18d118 | 2021-09-10 12:01:38 +0200 | [diff] [blame^] | 46 | More information on Technology profiles can be found here: |
| 47 | `2018/03/22 VOLTHA TST on Technology profile <https://youtu.be/L0JBJ3R1Mag>`_ |
| 48 | `VOLTHA technical notes on Technology profile <https://wiki-archive.opencord.org/attachments/4981667/4981671.docx>`_ |
| 49 | `VOLTHA Implementation of Technology profiles <https://wiki-archive.opencord.org/attachments/4981667/4981670.docx>`_ |
| 50 | `Technology profile instance example <https://wiki-archive.opencord.org/Technology-Profile-Instance_4982088.html>`_ |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 51 | |
| 52 | Technology profiles in VOLTHA are stored in ETCD. If you want to load a custom |
| 53 | Technology profile in your stack you can do so by: |
| 54 | |
| 55 | .. code:: bash |
| 56 | |
| 57 | ETCD_POD=$(kubectl get pods | grep etcd | awk 'NR==1{print \$1}') |
| 58 | kubectl cp <my-tech-profile>.json $ETCD_POD:/tmp/tp.json |
| 59 | kubectl exec -it $ETCD_POD -- /bin/sh -c 'cat /tmp/tp.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/XGS-PON/64' |
| 60 | |
| 61 | *Note that `XGS-PON` represents the technology of your OLT device and `64` is |
| 62 | the default id of the technology profile. If you want to use a technology profile |
| 63 | that is not the default for a particular subscriber that needs to be configured |
| 64 | in `sadis`.* |
| 65 | |
| 66 | Bandwidth profile |
Andrea Campanella | 077cd5e | 2021-04-16 11:12:41 +0200 | [diff] [blame] | 67 | ----------------- |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 68 | |
| 69 | Bandwidth profiles control the allocation Bandwidth for a particular subscriber. |
Andrea Campanella | 077cd5e | 2021-04-16 11:12:41 +0200 | [diff] [blame] | 70 | They are defined in the `sadis` application. |
| 71 | VOLTHA supports both the MEF and IETF definition of Bandwidth Profile. |
| 72 | More information on the different definitions can be found on the `MEF wiki <https://wiki.mef.net/display/CESG/Bandwidth+Profile>`_. |
| 73 | |
| 74 | MEF: |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 75 | |
| 76 | .. code-block:: json |
| 77 | |
| 78 | { |
| 79 | "id" : "Default", |
| 80 | "cir" : 1000000, |
| 81 | "cbs" : 1001, |
| 82 | "eir" : 1002, |
| 83 | "ebs" : 1003, |
| 84 | "air" : 1004 |
| 85 | } |
| 86 | |
Andrea Campanella | 077cd5e | 2021-04-16 11:12:41 +0200 | [diff] [blame] | 87 | IETF: |
| 88 | |
| 89 | .. code-block:: json |
| 90 | |
| 91 | { |
| 92 | "id" : "Default", |
| 93 | "pir": 1168192, |
| 94 | "pbs": 0, |
| 95 | "cir": 0, |
| 96 | "cbs": 0, |
| 97 | "gir": 0 |
| 98 | } |
| 99 | |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 100 | Each bandwidth profile is then translated into an OpenFlow Meter for configuration on the OLT. |
| 101 | |
Andrea Campanella | 077cd5e | 2021-04-16 11:12:41 +0200 | [diff] [blame] | 102 | Each OpenFlow Meter is then translated to a different TCONT type in the `openolt-adapter`. |
| 103 | VOLTHA supports all 5 TCONT types. |
| 104 | |
| 105 | The translation of Bandwidth profile parameters to TCONT types happens as follows: |
| 106 | |
| 107 | - | `Type-1`: If CIR > 0, CIR = PIR, additional_bw_eligibility = none --> set guaranteed_bw = maximum_bw = CBR_RT_BW |
| 108 | | (or CBR_NRT_BW) = CIR and alloc_type=none. (alloc_type is inferred from the other parameters) |
| 109 | - | `Type-2`: If CIR = 0, GIR or AIR > 0, GIR or AIR = PIR, additional_bw_eligibility = none --> set guaranteed_bw = |
| 110 | | maximum_bw = AIR, CBR_RT_BW = 0 and CBR_NRT_BW = 0 and alloc_type = NSR (alloc_type is set to NSR by default) |
| 111 | - | `Type-3`: If CIR = 0, GIR or AIR > 0, PIR > GIR or AIR, additional_bw_eligibility = non_assured --> |
| 112 | | guaranteed_bw = AIR, maximum_bw = PIR, CBR_RT_BW = 0 and CBR_NRT_BW = 0 and alloc_type = NSR and send |
| 113 | | these parameters to BAL. (alloc_type is set to NSR by default) |
| 114 | - | `Type-4`: if CIR = 0, GIR or AIR = 0, PIR > 0, additional_bw_eligibility = best_effort --> set |
| 115 | | guaranteed_bw = 0, maximum_bw = PIR, CBR_RT_BW = 0 and CBR_NRT_BW = 0 and alloc_type = NSR and send |
| 116 | | (alloc_type is set to NSR by default) |
| 117 | - | `Type-5`: if CIR > 0, PIR >= CIR + GIR or AIR, additional_bw_eligibility = non_assured or |
| 118 | | best_effort --> set guaranteed_bw = CIR+AIR, maximum_bw = PIR, CBR_RT_BW = 0 (or CBR_NRT_BW) = CIR |
| 119 | | and alloc_type = NSR. (alloc_type is set to NSR by default) |
| 120 | |
| 121 | Further implementation details can be found in `this document <https://docs.google.com/document/d/1HipmsHD5LEQlOc-Y2tYV7DHD1fn7-_1lehBgp79sRwU/edit#>`_. |
| 122 | |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 123 | Flow management |
Andrea Campanella | 077cd5e | 2021-04-16 11:12:41 +0200 | [diff] [blame] | 124 | --------------- |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 125 | |
| 126 | Flows are managed in ONOS by the `olt` application. Through the configuration of |
| 127 | this application you can define whether your setup will create: |
| 128 | |
| 129 | - An `EAPOL` trap flow |
| 130 | - A `DHCP` trap flow |
| 131 | - An `IGMP` trap flow |
| 132 | |
| 133 | in addition to the default data plane flows. |
| 134 | |
| 135 | Group management |
Andrea Campanella | 077cd5e | 2021-04-16 11:12:41 +0200 | [diff] [blame] | 136 | ---------------- |
Matteo Scandolo | ef5d6f4 | 2020-07-27 16:46:38 -0700 | [diff] [blame] | 137 | |
| 138 | Groups are managed in ONOS by the `mcast` application. Through the configuration of |
| 139 | this application you can achieve multicast for services such as IpTV. |