VNFRQTS - TOSCA example fix
[vnfrqts/requirements.git] / docs / Chapter5 / Tosca.rst
1 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
2 .. http://creativecommons.org/licenses/by/4.0
3 .. Copyright 2017 AT&T Intellectual Property.  All rights reserved.
4
5 TOSCA YAML
6 ----------
7
8
9 Introduction
10 ^^^^^^^^^^^^
11
12 This reference document is the VNF TOSCA Template Requirements for
13 ONAP, which provides recommendations and standards for building VNF
14 TOSCA templates compatible with ONAP initial implementations of
15 Network Cloud. It has the following features:
16
17 1. VNF TOSCA template designer supports GUI and CLI.
18
19 2. VNF TOSCA template is aligned to the newest TOSCA protocol, “Working
20    Draft 04-Revision 06”.
21
22 3. VNF TOSCA template supports HPA features, such as NUMA, Hyper
23    Threading, SRIOV, etc.
24
25 Intended Audience
26 ^^^^^^^^^^^^^^^^^^
27
28 This document is intended for persons developing VNF TOSCA templates
29 that will be orchestrated by ONAP.
30
31 Scope
32 ^^^^^^^^^^^^^^^^
33
34 ONAP implementations of Network Cloud supports TOSCA Templates, also
35 referred to as TOSCA in this document.
36
37 ONAP requires the TOSCA Templates to follow a specific format. This
38 document provides the mandatory, recommended, and optional requirements
39 associated with this format.
40
41 Overview
42 ^^^^^^^^^^^^^^^^
43
44 The document includes three charters to help the VNF providers to use the
45 VNF model design tools and understand the VNF package structure and VNF
46 TOSCA templates.
47
48 In the ONAP, VNF Package and VNFD template can be designed by manually
49 or via model designer tools. VNF model designer tools can provide the
50 GUI and CLI tools for the VNF provider to develop the VNF Package and VNFD
51 template.
52
53 The VNF package structure is align to the NFV TOSCA protocol, and
54 supports CSAR
55
56 The VNFD and VNF package are all align to the NFV TOSCA protocol, which
57 supports multiple TOSCA template yaml files, and also supports
58 self-defined node or other extensions.
59
60 NFV TOSCA Template
61 ^^^^^^^^^^^^^^^^^^^^
62
63 TOSCA templates supported by ONAP must follow the requirements
64 enumerated in this section.
65
66 TOSCA Introduction
67 ^^^^^^^^^^^^^^^^^^^
68
69 TOSCA defines a Meta model for defining IT services. This Meta model
70 defines both the structure of a service as well as how to manage it. A
71 Topology Template (also referred to as the topology model of a service)
72 defines the structure of a service. Plans define the process models that
73 are used to create and terminate a service as well as to manage a
74 service during its whole lifetime.
75
76 A Topology Template consists of a set of Node Templates and Relationship
77 Templates that together define the topology model of a service as a (not
78 necessarily connected) directed graph. A node in this graph is
79 represented by a *Node Template*. A Node Template specifies the
80 occurrence of a Node Type as a component of a service. A *Node Type*
81 defines the properties of such a component (via *Node Type Properties*)
82 and the operations (via *Interfaces*) available to manipulate the
83 component. Node Types are defined separately for reuse purposes and a
84 Node Template references a Node Type and adds usage constraints, such as
85 how many times the component can occur.
86
87 |image1|
88
89 Figure 1: Structural Elements of Service Template and their Relations
90
91 TOSCA Modeling Principles & Data Model
92 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
93
94 This section describing TOSCA modeling principles and data model for
95 NFV, which shall be based on [TOSCA-1.0] and [TOSCA-Simple-Profile-YAML
96 V1.0], or new type based on ETSI NFV requirements, etc.
97
98 VNF Descriptor Template
99 ^^^^^^^^^^^^^^^^^^^^^^^^^
100
101 The VNF Descriptor (VNFD) describes the topology of the VNF by means of
102 ETSI NFV IFA011 [IFA011] terms such as VDUs, Connection Points, Virtual
103 Links, External Connection Points, Scaling Aspects, Instantiation Levels
104 and Deployment Flavours.
105
106 The VNFD (VNF Descriptor) is read by both the NFVO and the VNFM. It
107 represents the contract & interface of a VNF and ensures the
108 interoperability across the NFV functional blocks.
109
110 The main parts of the VNFD are the following:
111
112 -  VNF topology: it is modeled in a cloud agnostic way using virtualized
113    containers and their connectivity. Virtual Deployment Units (VDU)
114    describe the capabilities of the virtualized containers, such as
115    virtual CPU, RAM, disks; their connectivity is modeled with VDU
116    Connection Point Descriptors (VduCpd), Virtual Link Descriptors (Vld)
117    and VNF External Connection Point Descriptors (VnfExternalCpd);
118
119 -  VNF deployment aspects: they are described in one or more deployment
120    flavours, including instantiation levels, supported LCM operations,
121    VNF LCM operation configuration parameters, placement constraints
122    (affinity / antiaffinity), minimum and maximum VDU instance numbers,
123    and scaling aspect for horizontal scaling.
124
125 The following table defines the TOSCA Type “derived from” values that
126 SHALL be used when using the TOSCA Simple Profile for NFV version 1.0
127 specification [TOSCA-Simple-Profile-NFV-v1.0] for NFV VNFD with aggreed
128 changes from ETSI SOL001 draft.
129
130 +---------------------+------------------------------------+-----------------+
131 | **ETSI NFV Element**| **TOSCA VNFD**                     | **Derived from**|
132 |                     |                                    |                 |
133 | **[IFA011]**        | **[TOSCA-Simple-Profile-NFV-v1.0]**|                 |
134 +=====================+====================================+=================+
135 | VNF                 | tosca.nodes.nfv.VNF                | tosca.nodes.Root|
136 +---------------------+------------------------------------+-----------------+
137 | Cpd (Connection     | tosca.nodes.nfv.Cp                 | tosca.nodes.Root|
138 | Point)              | tosca.nodes.nfv.Cp                 | tosca.nodes.Root|
139 +---------------------+------------------------------------+-----------------+
140 | VduCpd (internal    | tosca.nodes.nfv.VduCp              | tosca.nodes.\   |
141 | connection point)   |                                    | nfv.Cp          |
142 +---------------------+------------------------------------+-----------------+
143 | VnfVirtualLinkDesc  | tosca.nodes.nfv.VnfVirtualLink     | tosca.nodes.Root|
144 | (Virtual Link)      |                                    |                 |
145 +---------------------+------------------------------------+-----------------+
146 | VDU Virtual Storage | tosca.nodes.nfv.VDU.VirtualStorage | tosca.nodes.Root|
147 +---------------------+------------------------------------+-----------------+
148 | VDU Virtual Compute | tosca.nodes.nfv.VDU.Compute        | tosca.nodes.Root|
149 +---------------------+------------------------------------+-----------------+
150 | Software Image      |                                    |                 |
151 +---------------------+------------------------------------+-----------------+
152 | Deployment Flavour  |                                    |                 |
153 +---------------------+------------------------------------+-----------------+
154 | Scaling Aspect      |                                    |                 |
155 +---------------------+------------------------------------+-----------------+
156 | Element Group       |                                    |                 |
157 +---------------------+------------------------------------+-----------------+
158 | Instantiation       |                                    |                 |
159 | Level               |                                    |                 |
160 +---------------------+------------------------------------+-----------------+
161
162
163 +--------------------------------------------------------------------+
164 | +--------------------------------------------------------------+   |
165 | | tosca\_definitions\_version: tosca\_simple\_yaml\_1\_0       |   |
166 | |                                                              |   |
167 | | description: VNFD TOSCA file demo                            |   |
168 | |                                                              |   |
169 | | imports:                                                     |   |
170 | |                                                              |   |
171 | | - TOSCA\_definition\_nfv\_1\_0.yaml                          |   |
172 | |                                                              |   |
173 | | - TOSCA\_definition\_nfv\_ext\_1\_0.yaml                     |   |
174 | |                                                              |   |
175 | | | **node\_types:                                             |   |
176 | |   tosca.nodes.nfv.VNF.vOpenNAT:                              |   |
177 | |   derived\_from:** tosca.nodes.nfv.VNF                       |   |
178 | | | **requirements:                                            |   |
179 | |   **- **sriov\_plane:                                        |   |
180 | |   capability:** tosca.capabilities.nfv.VirtualLinkable       |   |
181 | | | **node:** tosca.nodes.nfv.VnfVirtualLinkDesc               |   |
182 | | | **relationship:** tosca.relationships.nfv.VirtualLinksTo   |   |
183 | +--------------------------------------------------------------+   |
184 +====================================================================+
185 +--------------------------------------------------------------------+
186
187
188 HPA Requirements
189 ^^^^^^^^^^^^^^^^^^
190
191 1. SR-IOV Passthrought
192
193 Definitions of SRIOV\_Port are necessary if VDU supports SR-IOV. Here is
194 an example.
195
196 .. code-block:: yaml
197
198   node\_templates:
199
200   vdu\_vNat:
201
202   SRIOV\_Port:
203
204   attributes:
205
206   tosca\_name: SRIOV\_Port
207
208   properties:
209
210   virtual\_network\_interface\_requirements:
211
212   - name: sriov
213
214   support\_mandatory: false
215
216   description: sriov
217
218   requirement:
219
220   SRIOV: true
221
222   role: root
223
224   description: sriov port
225
226   layer\_protocol: ipv4
227
228   requirements:
229
230   - virtual\_binding:
231
232   capability: virtual\_binding
233
234   node: vdu\_vNat
235
236   relationship:
237
238   type: tosca.relationships.nfv.VirtualBindsTo
239
240   - virtual\_link:
241
242   node: tosca.nodes.Root
243
244   type: tosca.nodes.nfv.VduCpd
245
246   substitution\_mappings:
247
248   requirements:
249
250   sriov\_plane:
251
252   - SRIOV\_Port
253
254   - virtual\_link
255
256   node\_type: tosca.nodes.nfv.VNF.vOpenNAT
257
258
259 2. Hugepages
260
261 Definitions of mem\_page\_size as one property shall be added to
262 Properties and set the value to large if one VDU node supports
263 huagepages. Here is an example.
264
265 .. code-block:: yaml
266
267   node\_templates:
268
269   vdu\_vNat:
270
271   Hugepages:
272
273   attributes:
274
275   tosca\_name: Huge\_pages\_demo
276
277   properties:
278
279   mem\_page\_size:large
280
281
282 3. NUMA (CPU/Mem)
283
284 Likewise, we shall add definitions of numa to
285 requested\_additional\_capabilities if we wand VUD nodes to support
286 NUMA. Here is an example.
287
288 .. code-block:: yaml
289
290   topology\_template:
291
292   node\_templates:
293
294   vdu\_vNat:
295
296   capabilities:
297
298   virtual\_compute:
299
300   properties:
301
302   virtual\_memory:
303
304   numa\_enabled: true
305
306   virtual\_mem\_size: 2 GB
307
308   requested\_additional\_capabilities:
309
310   numa:
311
312   support\_mandatory: true
313
314   requested\_additional\_capability\_name: numa
315
316   target\_performance\_parameters:
317
318   hw:numa\_nodes: "2"
319
320   hw:numa\_cpus.0: "0,1"
321
322   hw:numa\_mem.0: "1024"
323
324   hw:numa\_cpus.1: "2,3,4,5"
325
326   hw:numa\_mem.1: "1024"
327
328
329 4. Hyper-Theading
330
331 Definitions of Hyper-Theading are necessary as one of
332 requested\_additional\_capabilities of one VUD node if that node
333 supports Hyper-Theading. Here is an example.
334
335 .. code-block:: yaml
336
337   topology\_template:
338
339   node\_templates:
340
341   vdu\_vNat:
342
343   capabilities:
344
345   virtual\_compute:
346
347   properties:
348
349   virtual\_memory:
350
351   numa\_enabled: true
352
353   virtual\_mem\_size: 2 GB
354
355   requested\_additional\_capabilities:
356
357   hyper\_threading:
358
359   support\_mandatory: true
360
361   requested\_additional\_capability\_name: hyper\_threading
362
363   target\_performance\_parameters:
364
365   hw:cpu\_sockets : "2"
366
367   hw:cpu\_threads : "2"
368
369   hw:cpu\_cores : "2"
370
371   hw:cpu\_threads\_policy: "isolate"
372
373
374 5. OVS+DPDK
375
376 Definitions of ovs\_dpdk are necessary as one of
377 requested\_additional\_capabilities of one VUD node if that node
378 supports dpdk. Here is an example.
379
380 .. code-block:: yaml
381
382   topology\_template:
383
384   node\_templates:
385
386   vdu\_vNat:
387
388   capabilities:
389
390   virtual\_compute:
391
392   properties:
393
394   virtual\_memory:
395
396   numa\_enabled: true
397
398   virtual\_mem\_size: 2 GB
399
400   requested\_additional\_capabilities:
401
402   ovs\_dpdk:
403
404   support\_mandatory: true
405
406   requested\_additional\_capability\_name: ovs\_dpdk
407
408   target\_performance\_parameters:
409
410   sw:ovs\_dpdk: "true"
411
412
413 NFV TOSCA Type Definition
414 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
415
416 tosca.capabilites.nfv.VirtualCompute
417 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
418
419 This capability is used with the properties specified in ETSI SOL001 draft.
420
421 tosca.nodes.nfv.VDU.Compute
422 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
423
424 The NFV Virtualization Deployment Unit (VDU) compute node type
425 represents a VDU entity which it describes the deployment and
426 operational behavior of a VNF component (VNFC), as defined by **[ETSI
427 NFV IFA011].**
428
429 +-----------------------+-------------------------------+
430 | Shorthand Name        | VDU.Compute                   |
431 +=======================+===============================+
432 | Type Qualified Name   | tosca:VDU.Compute             |
433 +-----------------------+-------------------------------+
434 | Type URI              | tosca.nodes.nfv.VDU.Compute   |
435 +-----------------------+-------------------------------+
436 | derived\_from         | tosca.nodes.Compute           |
437 +-----------------------+-------------------------------+
438
439
440
441 Attributes
442 ++++++++++++
443
444 None
445
446
447 Capabilities
448 ++++++++++++++
449
450 +------------+--------------------+------------+------------------------------+
451 | Name       | Type               | Constraints| Description                  |
452 +============+====================+============+==============================+
453 | virtual\   | tosca.\            |            | Describes virtual compute    |
454 | _compute   | capabilities.nfv.\ |            | resources capabilities.      |
455 |            | VirtualCompute     |            |                              |
456 +------------+--------------------+------------+------------------------------+
457 | monitoring\| tosca.\            | None       | Monitoring parameter, which  |
458 | _parameter | capabilities.nfv.\ |            | can be tracked for a VNFC    |
459 |            | Metric             |            | based on this VDU            |
460 |            |                    |            |                              |
461 |            |                    |            | Examples include:            |
462 |            |                    |            | memory-consumption,          |
463 |            |                    |            | CPU-utilisation,             |
464 |            |                    |            | bandwidth-consumption, VNFC  |
465 |            |                    |            | downtime, etc.               |
466 +------------+--------------------+------------+------------------------------+
467 | Virtual\   | tosca.\            |            | Defines ability of           |
468 | _binding   | capabilities.nfv.\ |            | VirtualBindable              |
469 |            | VirtualBindable    |            |                              |
470 |            |                    |            |                              |
471 |            | editor note: need  |            |                              |
472 |            | to create a        |            |                              |
473 |            | capability type    |            |                              |
474 +------------+--------------------+------------+------------------------------+
475
476
477
478 Definition
479 ++++++++++++
480
481 .. code-block:: yaml
482
483   tosca.nodes.nfv.VDU.Compute:
484
485   derived\_from: tosca.nodes.Compute
486
487   properties:
488
489   name:
490
491   type: string
492
493   required: true
494
495   description:
496
497   type: string
498
499   required: true
500
501   boot\_order:
502
503   type: list # explicit index (boot index) not necessary, contrary to IFA011
504
505   entry\_schema:
506
507   type: string
508
509   required: false
510
511   nfvi\_constraints:
512
513   type: list
514
515   entry\_schema:
516
517   type: string
518
519   required: false
520
521   configurable\_properties:
522
523   type: map
524
525   entry\_schema:
526
527   type: tosca.datatypes.nfv.VnfcConfigurableProperties
528
529   required: true
530
531   attributes:
532
533   private\_address:
534
535   status: deprecated
536
537   public\_address:
538
539   status: deprecated
540
541   networks:
542
543   status: deprecated
544
545   ports:
546
547   status: deprecated
548
549   capabilities:
550
551   virtual\_compute:
552
553   type: tosca.capabilities.nfv.VirtualCompute
554
555   virtual\_binding:
556
557   type: tosca.capabilities.nfv.VirtualBindable
558
559   #monitoring\_parameter:
560
561   # modeled as ad hoc (named) capabilities in VDU node template
562
563   # for example:
564
565   #capabilities:
566
567   # cpu\_load: tosca.capabilities.nfv.Metric
568
569   # memory\_usage: tosca.capabilities.nfv.Metric
570
571   host: #Editor note: FFS. How this capabilities should be used in NFV Profile|
572
573   type: *tosca.capabilities.Container*
574
575   valid\_source\_types:
576   [*tosca.nodes.SoftwareComponent*]
577
578   occurrences: [0,UNBOUNDED]
579
580   endpoint:
581
582   occurrences: [0,0]
583
584   os:
585
586   occurrences: [0,0]
587
588   scalable:
589   #Editor note: FFS. How this capabilities should be used in NFV Profile
590
591   type: *tosca.capabilities.Scalable*
592
593   binding:
594
595   occurrences: [0,UNBOUND]
596
597   requirements:
598
599   - virtual\_storage:
600
601   capability: tosca.capabilities.nfv.VirtualStorage
602
603   relationship: tosca.relationships.nfv.VDU.AttachedTo
604
605   node: tosca.nodes.nfv.VDU.VirtualStorage
606
607   occurences: [ 0, UNBOUNDED ]
608
609   - local\_storage: #For NFV Profile, this requirement is deprecated.
610
611   occurrences: [0,0]
612
613   artifacts:
614
615   - sw\_image:
616
617   file:
618
619   type: tosca.artifacts.nfv.SwImage
620
621
622 Artifact
623 ++++++++++
624
625 Note: currently not supported.
626
627 +--------+---------+----------------+------------+------------------------+
628 | Name   | Required| Type           | Constraints| Description            |
629 +========+=========+================+============+========================+
630 | SwImage| Yes     | tosca.\        |            | Describes the software |
631 |        |         | artifacts.nfv.\|            | image which is directly|
632 |        |         | SwImage        |            | realizing this virtual |
633 |        |         |                |            | storage                |
634 +--------+---------+----------------+------------+------------------------+
635
636
637 |image2|
638
639
640
641 tosca.nodes.nfv.VDU.VirtualStorage
642 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
643
644 The NFV VirtualStorage node type represents a virtual storage entity
645 which it describes the deployment and operational behavior of a virtual
646 storage resources, as defined by **[ETSI NFV IFA011].**
647
648 **[editor note]** open issue: should NFV profile use the current storage
649 model as described in YAML 1.1. Pending on Shitao proposal (see
650 NFVIFA(17)000110 discussion paper)
651
652 **[editor note]** new relationship type as suggested in Matt
653 presentation. Slide 8. With specific rules of “valid\_target\_type”
654
655 +---------------------------+--------------------------------------+
656 | **Shorthand Name**        | VirtualStorage                       |
657 +===========================+======================================+
658 | **Type Qualified Name**   | tosca: VirtualStorage                |
659 +---------------------------+--------------------------------------+
660 | **Type URI**              | tosca.nodes.nfv.VDU.VirtualStorage   |
661 +---------------------------+--------------------------------------+
662 | **derived\_from**         | tosca.nodes.Root                     |
663 +---------------------------+--------------------------------------+
664
665 tosca.artifacts.nfv.SwImage
666 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
667
668 +---------------------------+------------------------------------+
669 | **Shorthand Name**        | SwImage                            |
670 +===========================+====================================+
671 | **Type Qualified Name**   | tosca:SwImage                      |
672 +---------------------------+------------------------------------+
673 | **Type URI**              | tosca.artifacts.nfv.SwImage        |
674 +---------------------------+------------------------------------+
675 | **derived\_from**         | tosca.artifacts.Deployment.Image   |
676 +---------------------------+------------------------------------+
677
678 Properties
679 ++++++++++++
680
681 +-----------------+---------+----------+------------+-------------------------+
682 | Name            | Required| Type     | Constraints| Description             |
683 +=================+=========+==========+============+=========================+
684 | name            | yes     | string   |            | Name of this software   |
685 |                 |         |          |            | image                   |
686 +-----------------+---------+----------+------------+-------------------------+
687 | version         | yes     | string   |            | Version of this software|
688 |                 |         |          |            | image                   |
689 +-----------------+---------+----------+------------+-------------------------+
690 | checksum        | yes     | string   |            | Checksum of the software|
691 |                 |         |          |            | image file              |
692 +-----------------+---------+----------+------------+-------------------------+
693 | container\      | yes     | string   |            | The container format    |
694 | _format         |         |          |            | describes the container |
695 |                 |         |          |            | file format in which    |
696 |                 |         |          |            | software image is       |
697 |                 |         |          |            | provided.               |
698 +-----------------+---------+----------+------------+-------------------------+
699 | disk\_format    | yes     | string   |            | The disk format of a    |
700 |                 |         |          |            | software image is the   |
701 |                 |         |          |            | format of the underlying|
702 |                 |         |          |            | disk image              |
703 +-----------------+---------+----------+------------+-------------------------+
704 | min\_disk       | yes     | scalar-\ |            | The minimal disk size   |
705 |                 |         | unit.size|            | requirement for this    |
706 |                 |         |          |            | software image.         |
707 +-----------------+---------+----------+------------+-------------------------+
708 | min\_ram        | no      | scalar-\ |            | The minimal RAM         |
709 |                 |         | unit.size|            | requirement for this    |
710 |                 |         |          |            | software image.         |
711 +-----------------+---------+----------+------------+-------------------------+
712 | Size            | yes     | scalar-\ |            | The size of this        |
713 |                 |         | unit.size|            | software image          |
714 +-----------------+---------+----------+------------+-------------------------+
715 | sw\_image       | yes     | string   |            | A reference to the      |
716 |                 |         |          |            | actual software image   |
717 |                 |         |          |            | within VNF Package, or  |
718 |                 |         |          |            | url.                    |
719 +-----------------+---------+----------+------------+-------------------------+
720 | operating\      | no      | string   |            | Identifies the operating|
721 | _system         |         |          |            | system used in the      |
722 |                 |         |          |            | software image.         |
723 +-----------------+---------+----------+------------+-------------------------+
724 | supported\      | no      | list     |            | Identifies the          |
725 | _virtualization\|         |          |            | virtualization          |
726 | _enviroment     |         |          |            | environments (e.g.      |
727 |                 |         |          |            | hypervisor) compatible  |
728 |                 |         |          |            | with this software image|
729 +-----------------+---------+----------+------------+-------------------------+
730
731
732 Definition
733 +++++++++++
734
735 .. code-block:: yaml
736
737   tosca.artifacts.nfv.SwImage:
738
739     derived\_from: tosca.artifacts.Deployment.Image
740
741     properties or metadata:
742
743       #id:
744
745         # node name
746
747       name:
748
749         type: string
750
751   required: true
752
753       version:
754
755         type: string
756
757   required: true
758
759       checksum:
760
761         type: string
762
763   required: true
764
765       container\_format:
766
767         type: string
768
769   required: true
770
771       disk\_format:
772
773         type: string
774
775   required: true
776
777       min\_disk:
778
779         type: scalar-unit.size # Number
780
781   required: true
782
783       min\_ram:
784
785         type: scalar-unit.size # Number
786
787   required: false
788
789       size:
790
791         type: scalar-unit.size # Number
792
793   required: true
794
795       sw\_image:
796
797         type: string
798
799   required: true
800
801       operating\_system:
802
803         type: string
804
805   required: false
806
807       supported\_virtualisation\_environments:
808
809         type: list
810
811         entry\_schema:
812
813           type: string
814
815   required: false
816
817
818 .. |image1| image:: ../Image1.png
819    :width: 5.76806in
820    :height: 4.67161in
821
822 .. |image2| image:: ../Image2.png
823    :width: 5.40486in
824    :height: 2.46042in