blob: 7a3ad04278c23a6e229060c51b81e04262c8296d [file] [log] [blame]
Andrea Campanella4dfe9322022-05-10 12:40:10 +02001<?xml version="1.0" encoding="utf-8" ?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4<head>
5<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
7<title>Operator workflows</title>
8<style type="text/css">
9
10/*
11:Author: David Goodger (goodger@python.org)
12:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
13:Copyright: This stylesheet has been placed in the public domain.
14
15Default cascading style sheet for the HTML output of Docutils.
16
17See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
18customize this style sheet.
19*/
20
21/* used to remove borders from tables and images */
22.borderless, table.borderless td, table.borderless th {
23 border: 0 }
24
25table.borderless td, table.borderless th {
26 /* Override padding for "table.docutils td" with "! important".
27 The right padding separates the table cells. */
28 padding: 0 0.5em 0 0 ! important }
29
30.first {
31 /* Override more specific margin styles with "! important". */
32 margin-top: 0 ! important }
33
34.last, .with-subtitle {
35 margin-bottom: 0 ! important }
36
37.hidden {
38 display: none }
39
40.subscript {
41 vertical-align: sub;
42 font-size: smaller }
43
44.superscript {
45 vertical-align: super;
46 font-size: smaller }
47
48a.toc-backref {
49 text-decoration: none ;
50 color: black }
51
52blockquote.epigraph {
53 margin: 2em 5em ; }
54
55dl.docutils dd {
56 margin-bottom: 0.5em }
57
58object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
59 overflow: hidden;
60}
61
62/* Uncomment (and remove this text!) to get bold-faced definition list terms
63dl.docutils dt {
64 font-weight: bold }
65*/
66
67div.abstract {
68 margin: 2em 5em }
69
70div.abstract p.topic-title {
71 font-weight: bold ;
72 text-align: center }
73
74div.admonition, div.attention, div.caution, div.danger, div.error,
75div.hint, div.important, div.note, div.tip, div.warning {
76 margin: 2em ;
77 border: medium outset ;
78 padding: 1em }
79
80div.admonition p.admonition-title, div.hint p.admonition-title,
81div.important p.admonition-title, div.note p.admonition-title,
82div.tip p.admonition-title {
83 font-weight: bold ;
84 font-family: sans-serif }
85
86div.attention p.admonition-title, div.caution p.admonition-title,
87div.danger p.admonition-title, div.error p.admonition-title,
88div.warning p.admonition-title, .code .error {
89 color: red ;
90 font-weight: bold ;
91 font-family: sans-serif }
92
93/* Uncomment (and remove this text!) to get reduced vertical space in
94 compound paragraphs.
95div.compound .compound-first, div.compound .compound-middle {
96 margin-bottom: 0.5em }
97
98div.compound .compound-last, div.compound .compound-middle {
99 margin-top: 0.5em }
100*/
101
102div.dedication {
103 margin: 2em 5em ;
104 text-align: center ;
105 font-style: italic }
106
107div.dedication p.topic-title {
108 font-weight: bold ;
109 font-style: normal }
110
111div.figure {
112 margin-left: 2em ;
113 margin-right: 2em }
114
115div.footer, div.header {
116 clear: both;
117 font-size: smaller }
118
119div.line-block {
120 display: block ;
121 margin-top: 1em ;
122 margin-bottom: 1em }
123
124div.line-block div.line-block {
125 margin-top: 0 ;
126 margin-bottom: 0 ;
127 margin-left: 1.5em }
128
129div.sidebar {
130 margin: 0 0 0.5em 1em ;
131 border: medium outset ;
132 padding: 1em ;
133 background-color: #ffffee ;
134 width: 40% ;
135 float: right ;
136 clear: right }
137
138div.sidebar p.rubric {
139 font-family: sans-serif ;
140 font-size: medium }
141
142div.system-messages {
143 margin: 5em }
144
145div.system-messages h1 {
146 color: red }
147
148div.system-message {
149 border: medium outset ;
150 padding: 1em }
151
152div.system-message p.system-message-title {
153 color: red ;
154 font-weight: bold }
155
156div.topic {
157 margin: 2em }
158
159h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
160h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
161 margin-top: 0.4em }
162
163h1.title {
164 text-align: center }
165
166h2.subtitle {
167 text-align: center }
168
169hr.docutils {
170 width: 75% }
171
172img.align-left, .figure.align-left, object.align-left, table.align-left {
173 clear: left ;
174 float: left ;
175 margin-right: 1em }
176
177img.align-right, .figure.align-right, object.align-right, table.align-right {
178 clear: right ;
179 float: right ;
180 margin-left: 1em }
181
182img.align-center, .figure.align-center, object.align-center {
183 display: block;
184 margin-left: auto;
185 margin-right: auto;
186}
187
188table.align-center {
189 margin-left: auto;
190 margin-right: auto;
191}
192
193.align-left {
194 text-align: left }
195
196.align-center {
197 clear: both ;
198 text-align: center }
199
200.align-right {
201 text-align: right }
202
203/* reset inner alignment in figures */
204div.align-right {
205 text-align: inherit }
206
207/* div.align-center * { */
208/* text-align: left } */
209
210.align-top {
211 vertical-align: top }
212
213.align-middle {
214 vertical-align: middle }
215
216.align-bottom {
217 vertical-align: bottom }
218
219ol.simple, ul.simple {
220 margin-bottom: 1em }
221
222ol.arabic {
223 list-style: decimal }
224
225ol.loweralpha {
226 list-style: lower-alpha }
227
228ol.upperalpha {
229 list-style: upper-alpha }
230
231ol.lowerroman {
232 list-style: lower-roman }
233
234ol.upperroman {
235 list-style: upper-roman }
236
237p.attribution {
238 text-align: right ;
239 margin-left: 50% }
240
241p.caption {
242 font-style: italic }
243
244p.credits {
245 font-style: italic ;
246 font-size: smaller }
247
248p.label {
249 white-space: nowrap }
250
251p.rubric {
252 font-weight: bold ;
253 font-size: larger ;
254 color: maroon ;
255 text-align: center }
256
257p.sidebar-title {
258 font-family: sans-serif ;
259 font-weight: bold ;
260 font-size: larger }
261
262p.sidebar-subtitle {
263 font-family: sans-serif ;
264 font-weight: bold }
265
266p.topic-title {
267 font-weight: bold }
268
269pre.address {
270 margin-bottom: 0 ;
271 margin-top: 0 ;
272 font: inherit }
273
274pre.literal-block, pre.doctest-block, pre.math, pre.code {
275 margin-left: 2em ;
276 margin-right: 2em }
277
278pre.code .ln { color: grey; } /* line numbers */
279pre.code, code { background-color: #eeeeee }
280pre.code .comment, code .comment { color: #5C6576 }
281pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
282pre.code .literal.string, code .literal.string { color: #0C5404 }
283pre.code .name.builtin, code .name.builtin { color: #352B84 }
284pre.code .deleted, code .deleted { background-color: #DEB0A1}
285pre.code .inserted, code .inserted { background-color: #A3D289}
286
287span.classifier {
288 font-family: sans-serif ;
289 font-style: oblique }
290
291span.classifier-delimiter {
292 font-family: sans-serif ;
293 font-weight: bold }
294
295span.interpreted {
296 font-family: sans-serif }
297
298span.option {
299 white-space: nowrap }
300
301span.pre {
302 white-space: pre }
303
304span.problematic {
305 color: red }
306
307span.section-subtitle {
308 /* font-size relative to parent (h1..h6 element) */
309 font-size: 80% }
310
311table.citation {
312 border-left: solid 1px gray;
313 margin-left: 1px }
314
315table.docinfo {
316 margin: 2em 4em }
317
318table.docutils {
319 margin-top: 0.5em ;
320 margin-bottom: 0.5em }
321
322table.footnote {
323 border-left: solid 1px black;
324 margin-left: 1px }
325
326table.docutils td, table.docutils th,
327table.docinfo td, table.docinfo th {
328 padding-left: 0.5em ;
329 padding-right: 0.5em ;
330 vertical-align: top }
331
332table.docutils th.field-name, table.docinfo th.docinfo-name {
333 font-weight: bold ;
334 text-align: left ;
335 white-space: nowrap ;
336 padding-left: 0 }
337
338/* "booktabs" style (no vertical lines) */
339table.docutils.booktabs {
340 border: 0px;
341 border-top: 2px solid;
342 border-bottom: 2px solid;
343 border-collapse: collapse;
344}
345table.docutils.booktabs * {
346 border: 0px;
347}
348table.docutils.booktabs th {
349 border-bottom: thin solid;
350 text-align: left;
351}
352
353h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
354h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
355 font-size: 100% }
356
357ul.auto-toc {
358 list-style-type: none }
359
360</style>
361</head>
362<body>
363<div class="document" id="operator-workflows">
364<span id="workflows"></span>
365<h1 class="title">Operator workflows</h1>
366
367<p><tt class="docutils literal">Workflow</tt> is a term that spilled from the SEBA Reference Design (RD) into VOLTHA.</p>
368<p>In SEBA a workflow is a collection of subscriber management items like identification, location,
369and bandwidth profile. In addition each workflows maps to a service type which translates to a technology profile,
370and an operator desired flow of operations (i.e state-machine).
371The workflow is implemented by a selection of ONOS apps, XOS services (in SEBA)
372and a set of configurations (sadis, etcd, netcfg). Those apps paired with the configuration specified by the
373workflow (e.g. need EAPOL) in turn create low level flows, groups, meters, schedulers, queues etc.
374A workflow is then triggered by a particular set of APIs, for example the request to add a subscriber.</p>
375<p>A full description of the different operator's workflows can be
376<a class="reference external" href="https://drive.google.com/drive/folders/1MfxwoDSvAR_rgFHt6n9Sai7IuiJPrHxF">found here</a>.</p>
377<p>A big part of the workflow in SEBA is defined within NEM (Network Edge Mediator).
378Given that NEM is not available in a plain VOLTHA deployment the user has to ensure proper config in the right places,
379and then triggering of api's themselves.</p>
380<p>To deploy a specific workflow follow the steps under <cite>deploying-a-different-workflow</cite> in the <a class="reference external" href="../voltha-helm-charts/README.md">voltha-helm-charts
381README</a>.</p>
382<p>A workflow in VOLTHA entails different elements: Customer tag allocation, Technology profile, Bandwidth profile,
383Flow and Group Management</p>
384<div class="section" id="customer-tag-allocation">
385<h1>Customer tag allocation</h1>
386<p>The vlan tags for a particular subscriber are defined in the <tt class="docutils literal">sadis</tt> configuration.
387<a class="reference external" href="https://github.com/opencord/sadis">Sadis</a> stands for <cite>Subscriber and Device Information Service</cite>
388and is the ONOS application responsible to store and distribute Subscriber information.</p>
389<p>Information on different <tt class="docutils literal">sadis</tt> configurations can be found here:
390<a class="reference external" href="https://docs.google.com/document/d/1JLQ51CZg4jsXsBQcrJn-fc2kVvXH6lw0PYoyIclwmBs">https://docs.google.com/document/d/1JLQ51CZg4jsXsBQcrJn-fc2kVvXH6lw0PYoyIclwmBs</a></p>
391</div>
392<div class="section" id="technology-profile">
393<h1>Technology profile</h1>
394<p>Technology profiles describes technology specific attributes required to implement
395Subscriber Services on an OpenFlow managed Logical Switch overlaid upon an OLT
396or other technology specific platform.</p>
397<p>More information on Technology profiles can be found here:
398<a class="reference external" href="https://youtu.be/L0JBJ3R1Mag">2018/03/22 VOLTHA TST on Technology profile</a>
399<a class="reference external" href="https://wiki-archive.opencord.org/attachments/4981667/4981671.docx">VOLTHA technical notes on Technology profile</a>
400<a class="reference external" href="https://wiki-archive.opencord.org/attachments/4981667/4981670.docx">VOLTHA Implementation of Technology profiles</a>
401<a class="reference external" href="https://wiki-archive.opencord.org/Technology-Profile-Instance_4982088.html">Technology profile instance example</a></p>
402<p>Technology profiles in VOLTHA are stored in ETCD. If you want to load a custom
403Technology profile in your stack you can do so by:</p>
404<pre class="code bash literal-block">
405<span class="name variable">ETCD_POD</span><span class="operator">=</span><span class="keyword">$(</span>kubectl get pods <span class="punctuation">|</span> grep etcd <span class="punctuation">|</span> awk <span class="literal string single">'NR==1{print \$1}'</span><span class="keyword">)</span>
406kubectl cp &lt;my-tech-profile&gt;.json <span class="name variable">$ETCD_POD</span>:/tmp/tp.json
407kubectl <span class="name builtin">exec</span> -it <span class="name variable">$ETCD_POD</span> -- /bin/sh -c <span class="literal string single">'cat /tmp/tp.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/XGS-PON/64'</span>
408</pre>
409<p><em>Note that `XGS-PON` represents the technology of your OLT device and `64` is
410the default id of the technology profile. If you want to use a technology profile
411that is not the default for a particular subscriber that needs to be configured
412in `sadis`.</em></p>
413</div>
414<div class="section" id="bandwidth-profile">
415<h1>Bandwidth profile</h1>
416<p>Bandwidth profiles control the allocation Bandwidth for a particular subscriber.
417They are defined in the <cite>sadis</cite> application.
418VOLTHA supports both the MEF and IETF definition of Bandwidth Profile.
419More information on the different definitions can be found on the <a class="reference external" href="https://wiki.mef.net/display/CESG/Bandwidth+Profile">MEF wiki</a>.</p>
420<p>MEF:</p>
421<pre class="code json literal-block">
422<span class="punctuation">{</span><span class="whitespace">
423 </span><span class="name tag">&quot;id&quot;</span><span class="whitespace"> </span><span class="punctuation">:</span><span class="whitespace"> </span><span class="literal string double">&quot;Default&quot;</span><span class="punctuation">,</span><span class="whitespace">
424 </span><span class="name tag">&quot;cir&quot;</span><span class="whitespace"> </span><span class="punctuation">:</span><span class="whitespace"> </span><span class="literal number integer">1000000</span><span class="punctuation">,</span><span class="whitespace">
425 </span><span class="name tag">&quot;cbs&quot;</span><span class="whitespace"> </span><span class="punctuation">:</span><span class="whitespace"> </span><span class="literal number integer">1001</span><span class="punctuation">,</span><span class="whitespace">
426 </span><span class="name tag">&quot;eir&quot;</span><span class="whitespace"> </span><span class="punctuation">:</span><span class="whitespace"> </span><span class="literal number integer">1002</span><span class="punctuation">,</span><span class="whitespace">
427 </span><span class="name tag">&quot;ebs&quot;</span><span class="whitespace"> </span><span class="punctuation">:</span><span class="whitespace"> </span><span class="literal number integer">1003</span><span class="punctuation">,</span><span class="whitespace">
428 </span><span class="name tag">&quot;air&quot;</span><span class="whitespace"> </span><span class="punctuation">:</span><span class="whitespace"> </span><span class="literal number integer">1004</span><span class="whitespace">
429</span><span class="punctuation">}</span>
430</pre>
431<p>IETF:</p>
432<pre class="code json literal-block">
433<span class="punctuation">{</span><span class="whitespace">
434 </span><span class="name tag">&quot;id&quot;</span><span class="whitespace"> </span><span class="punctuation">:</span><span class="whitespace"> </span><span class="literal string double">&quot;Default&quot;</span><span class="punctuation">,</span><span class="whitespace">
435 </span><span class="name tag">&quot;pir&quot;</span><span class="punctuation">:</span><span class="whitespace"> </span><span class="literal number integer">1168192</span><span class="punctuation">,</span><span class="whitespace">
436 </span><span class="name tag">&quot;pbs&quot;</span><span class="punctuation">:</span><span class="whitespace"> </span><span class="literal number integer">0</span><span class="punctuation">,</span><span class="whitespace">
437 </span><span class="name tag">&quot;cir&quot;</span><span class="punctuation">:</span><span class="whitespace"> </span><span class="literal number integer">0</span><span class="punctuation">,</span><span class="whitespace">
438 </span><span class="name tag">&quot;cbs&quot;</span><span class="punctuation">:</span><span class="whitespace"> </span><span class="literal number integer">0</span><span class="punctuation">,</span><span class="whitespace">
439 </span><span class="name tag">&quot;gir&quot;</span><span class="punctuation">:</span><span class="whitespace"> </span><span class="literal number integer">0</span><span class="whitespace">
440</span><span class="punctuation">}</span>
441</pre>
442<p>Each bandwidth profile is then translated into an OpenFlow Meter for configuration on the OLT.</p>
443<p>Each OpenFlow Meter is then translated to a different TCONT type in the <cite>openolt-adapter</cite>.
444VOLTHA supports all 5 TCONT types.</p>
445<p>The translation of Bandwidth profile parameters to TCONT types happens as follows:</p>
446<ul>
447<li><div class="first line-block">
448<div class="line"><cite>Type-1</cite>: If CIR &gt; 0, CIR = PIR, additional_bw_eligibility = none --&gt; set guaranteed_bw = maximum_bw = CBR_RT_BW</div>
449<div class="line">(or CBR_NRT_BW) = CIR and alloc_type=none. (alloc_type is inferred from the other parameters)</div>
450</div>
451</li>
452<li><div class="first line-block">
453<div class="line"><cite>Type-2</cite>: If CIR = 0, GIR or AIR &gt; 0, GIR or AIR = PIR, additional_bw_eligibility = none --&gt; set guaranteed_bw =</div>
454<div class="line">maximum_bw = AIR, CBR_RT_BW = 0 and CBR_NRT_BW = 0 and alloc_type = NSR (alloc_type is set to NSR by default)</div>
455</div>
456</li>
457<li><div class="first line-block">
458<div class="line"><cite>Type-3</cite>: If CIR = 0, GIR or AIR &gt; 0, PIR &gt; GIR or AIR, additional_bw_eligibility = non_assured --&gt;</div>
459<div class="line">guaranteed_bw = AIR, maximum_bw = PIR, CBR_RT_BW = 0 and CBR_NRT_BW = 0 and alloc_type = NSR and send</div>
460<div class="line">these parameters to BAL. (alloc_type is set to NSR by default)</div>
461</div>
462</li>
463<li><div class="first line-block">
464<div class="line"><cite>Type-4</cite>: if CIR = 0, GIR or AIR = 0, PIR &gt; 0, additional_bw_eligibility = best_effort --&gt; set</div>
465<div class="line">guaranteed_bw = 0, maximum_bw = PIR, CBR_RT_BW = 0 and CBR_NRT_BW = 0 and alloc_type = NSR and send</div>
466<div class="line">(alloc_type is set to NSR by default)</div>
467</div>
468</li>
469<li><div class="first line-block">
470<div class="line"><cite>Type-5</cite>: if CIR &gt; 0, PIR &gt;= CIR + GIR or AIR, additional_bw_eligibility = non_assured or</div>
471<div class="line">best_effort --&gt; set guaranteed_bw = CIR+AIR, maximum_bw = PIR, CBR_RT_BW = 0 (or CBR_NRT_BW) = CIR</div>
472<div class="line">and alloc_type = NSR. (alloc_type is set to NSR by default)</div>
473</div>
474</li>
475</ul>
476<p>Further implementation details can be found in <a class="reference external" href="https://docs.google.com/document/d/1HipmsHD5LEQlOc-Y2tYV7DHD1fn7-_1lehBgp79sRwU/edit#">this document</a>.</p>
477</div>
478<div class="section" id="flow-management">
479<h1>Flow management</h1>
480<p>Flows are managed in ONOS by the <cite>olt</cite> application. Through the configuration of
481this application you can define whether your setup will create:</p>
482<ul class="simple">
483<li>An <cite>EAPOL</cite> trap flow</li>
484<li>A <cite>DHCP</cite> trap flow</li>
485<li>An <cite>IGMP</cite> trap flow</li>
486</ul>
487<p>in addition to the default data plane flows.</p>
488</div>
489<div class="section" id="group-management">
490<h1>Group management</h1>
491<p>Groups are managed in ONOS by the <cite>mcast</cite> application. Through the configuration of
492this application you can achieve multicast for services such as IpTV.</p>
493</div>
494</div>
495</body>
496</html>