Child pages
  • Contributions

<config>
<output path=’ C:\Users\ndavis\git\OnfInfoModelOutput\ ModelDescriptions\TR-512.2_v1.3_OnfCoreIm-ForwardingAndTermination.docx' />
</config>

<context model=’ C:\Users\ndavis\git\ONFInfoModel\OnfModel\ CoreModel.uml' element=’{0}’ importedBundles='gmf;papyrus' searchMetamodels='true'/>

<gendoc><drop/>

Change path substrings above from “ {path for output files}\ ” to your local path for the output files and “ {path for CoreModel}\ ” to your local path for the Core Model. <drop/>

DELETE: Prior to publishing this –gd.docx (including for review), change path substrings above from “ C:\Users\ndavis\git\OnfInfoModelOutput\ ” to “ {path for output files}\ ” and from “ C:\Users\ndavis\git\ONFInfoModel\OnfModel\ ” to “ {path for CoreModel}\ ” <drop/> [A1]

 

SUE Projects:1306 ONF Misc:5-Templates:5-21 MS Word - Spec:links:ONF-horiz-med.tif  

 

 

 

 

 

 

 

 

 

 

SUE Projects:1306 ONF Misc:5-Templates:5-21 MS Word - Spec:links:bottom-shape-cyan.jpg

ONF Document Type: Technical Recommendation

ONF Document Name: Core Information Model version 1.4
 

Disclaimer

THIS SPECIFICATION IS PROVIDED “AS IS” WITH NO WARRANTIES WHATSOEVER, INCLUDING ANY WARRANTY OF MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR ANY PARTICULAR PURPOSE, OR ANY WARRANTY OTHERWISE ARISING OUT OF ANY PROPOSAL, SPECIFICATION OR SAMPLE.

Any marks and brands contained herein are the property of their respective owners.

 

Open Networking Foundation

2275 E. Bayshore Road, Suite 103, Palo Alto, CA 94303

www.opennetworking.org

 

©2017 Open Networking Foundation. All rights reserved.

 

Open Networking Foundation, the ONF symbol, and OpenFlow are registered trademarks of the Open Networking Foundation, in the United States and/or in other countries. All other brands, products, or service names are or may be trademarks or service marks of, and are used to identify, products or services of their respective owners.   

 

Finalizing this document once generated… delete this text prior to publication:

-           Replace “{{..}}” with square brackets (which trip up Gendoc)

-           Select text in document from beginning of table of contents (first line) to end of document

  • Click menu item “Update Field” (on this large block of text)
    • if “Update Table…” dialogue appears select “Update entire table”
  • Repeat “update fields” 2 more times (on the same large block of text)
    • if “Update Table…” dialogue appears select “Update entire table”

-           Remove reviewer comment

Note that the table of contents and figures need to be updated several times as the table length changes the page numbering and the cross references will need to be re-updated.


Table of Contents

Disclaimer

Open Networking Foundation

Document History

1 Introduction

2 References

3 Definitions

4 Conventions

5 Introduction to the Core Network Model

5.1 Understanding the figures

6 Forwarding and Termination model detail

6.1.1.1 LogicalTerminationPoint (LTP)

6.1.1.2 LayerProtocol (LP)

6.1.2 Forwarding

6.1.2.1 ForwardingDomain (FD)

6.1.2.2 ForwardingConstruct (FC)

6.1.2.3 FcPort

6.1.2.4 Link

6.1.2.5 LinkPort

6.1.3 NetworkElement, NetworkControlDomain and SdnController

7 Explanatory Figures

7.1 Forwarding

7.1.1 Basic Forwarding

7.1.2 Forwarding the topology

7.2 Termination

7.3 Directionality

8 Fragment: Insert class <drop/>

9 Fragment: Insert standard diagram <drop/>

10 Fragment: Insert small diagram <drop/>

11 Fragment: Insert attribute row brief <drop/>

12 Fragment: Start attribute table brief <drop/>

13 Fragment: Insert Attribute table brief (old) <drop/>

14 Fragment: Insert Attribute table brief <drop/>

15 Fragment: Insert Ten Specified Attribute table brief <drop/>

List of Figures

Figure 1-1 Methodology of IM and DS Development

Document History

Version

Date

Description of Change

1.4

March 2018

Version 1.4 (Initial Version)

 

 

 

 

 

 

 

 

 

 


1        Introductio [A2] n

This document is an addendum to the TR-512_v1.4 ONF Core Information Model and forms part of the description of the ONF-CIM. For general overview material and references to the other parts refer to TR-512.1 ONF Core IM - Overview .

1.1      References

For a full list of references see TR-512.1 .

1.2      Definitions

For a full list of definition see TR-512.1 .

1.3      Conventions

See TR-512.1 for an explanation of:

  • UML conventions
  • Lifecycle Stereotypes
  • Diagram symbol set

1.4      Viewing UML diagrams

Some of the UML diagrams are very dense. To view them either zoom (sometimes to 400%) or open the associated image file (and zoom appropriately) or open the corresponding UML diagram via Papyrus (for each figure with a UML diagram the UML model diagram name is provided under the figure or within the figure).

1.5      Understanding the figures

Figures showing fragments of the model using standard UML symbols and also figures illustrating application of the model are provided throughout this document. Many of the application-oriented figures also provide UML class diagrams for the corresponding model fragments (see TR-512.1 for diagram symbol sets). All UML diagrams depict a subset of the relationships between the classes, such as inheritance (i.e. specialization), association relationships (such as aggregation and composition), and conditional features or capabilities. Some UML diagrams also show further details of the individual classes, such as their attributes and the data types used by the attributes.


2        Introduction to Software

The focus of this document is on software aspects of network devices and compute hosts, and can be split into two broad areas :

  1. Software inventory (similar to hardware inventory)
  2. Software functionality (equivalent to ‘running hardware’, which we don't explicitly model in the ONF CIM)

 

Note that we want to reuse the existing functionality classes, ProcessingConstruct and ConstraintDomain (and not duplicate them) because we want to decouple the functionality provided from how it is implemented (in hardware only, in software only or a combination of both).

Another challenge is that we want to link everything together, so that we can:

  • Show how running software provides functionality (similar to running hardware)
  • Support management of memory, CPU and storage capacity (related back to its usage by running software)
  • Show how the combination of hardware and software together produces functionality
  • Consistently represent software running directly on hardware CPU and memory as well as the VMM/VM and container cases

 

Note that there are a number of scenarios that we want the software model to cover including :

  • Hypervisor/VMM as running software hosts VMs
  • VM as running software has guest operating system
  • operating system as running software enables running applications
  • VM Image is installed element
  • (Linux) container as running software enables running applications
  • Software agent as running software
  • Container engine as running software hosts containers
  • Container as running software enables running applications
  • Container image is installed element

 

A data dictionary that sets out the details of all classes, data types and attributes is also provided ( TR-512.DD ).

3        Purpose and essentials of the Software Model

3.1      Background

In the ONF CIM, we currently represent all types of functionality, but only relate hardware provided functionality back to its providing implementation. The aim of this module is to provide a similar representation to functionality that is provided by software. This allows us to show not only the functionality, but also how it is implemented. For example a BGP ProcessingConstruct instance may require a separate BGP software process, and that running software process may consume a certain amount of CPU and memory. The software model will allow us to tie this all together, to enable management of CPU and memory capacity and also how functionality is provided.

3.2      Model

Representing the software inventory requires us to show where the software is stored. To do this we will define a file system model.

A FileSystem contains FileSystemEntries which can either be Files or Directories. Directories can contain Files and Directories. This model contains the key attributes only and can be extended in the future if required. Note that this document does not define a storage model.

 

Now we will define the core software model.

InstalledSoftwareComponent records the software artifacts available to be run and their location in the filesystem.

RunningSoftwareProcess records the currently running software processes. RunningOperatingSystem is recorded as a special case of RunningSoftwareProcess (that other software processes can run in).

Usually we would attach only the RunningOperatingSystem to a ConstraintDomain, but there may be other cases where a RunningSoftware to ConstraintDomain association instance may be required (such as distributed software processes).

Our FileSystem model relates the RunningSoftwareProcesses to the InstalledSoftwareComponent. If this information is not available (and hence the FileSystem part of the model is not populated) then the model can still be used, but the linkage between installed and running software won’t be available.

Note also with ConstraintDomain associations, we see two patterns :

        an incoming * -- 0..1 association on the representing side, and

        an outgoing * -- * association on the constraining side.

[A3]

Now we will look at how we can add VM / VMM support into our basic model.

The basic model is unchanged, but we have added in new classes to support both native (bare metal) and hosted VMs.

The VMM is a type of software process that can run VMs.

The VM has a ConstraintDomain associated with it (similar to the ConstraintDomain for the physical case). The guest RunningOperatingSystem instances are linked  to this ConstraintDomain instance, coupling the VM to the guest operating system. Note that we are linking via ConstraintDomain rather than with direct associations, as this gives us flexibility to mix and match various hardware and software combinations.

 

Container support is very similar to the VMM/ VM case.

At this stage it is not clear if an association to ConstraintDomain is required or not – this can be added if required.

The next step is to make sure we have properly integrated the software model into the ONF CIM core model.

Because we are using ConstraintDomain as a decoupling class (similar to how LTP is used to decouple the transport part of the model), then we only need to add one additional association to the ones that we have previously shown.

The PcFromRunningSoftwareProcess allows us to directly relate functionality to a software process. Note that at this stage, we don’t have a similar association to Equipment. This is because :

  • Equipment is usually ‘running’ (or powered up) as a complete unit – parts aren’t de-powered in a way that they need to be re-powered by the management system.
  • Equipment is less modular than software and it is often not sensible to try and determine which bits of hardware are providing a given functional block (we explore a FPGA example in the appendix document)
  • We don’t have the same capacity management issues with hardware as for software

4        Software Examples

Examples are provided in TR-512.A.13 Appendix on Software Examples [A4] .

 

End of Document

</gendoc><drop/>

To take latest template: <drop/>

  • delete text from “ Template version… ” to end of file <drop/>
  • insert a line in “Normal” style<drop/>
  • insert text (Insert Object Text from File… (alt njf)) from: <drop/>
    • TR-512.GT_v1.3_OnfCoreIm-CommonGendocTemplate-Fragments.docx <drop/>

Template version 0.0.10 17 September 2017 <drop/>

<fragment name=’ insertClass ’ importedBundles=’commons;gmf;papyrus’><drop/>
<arg name=’ cl ’ type=’uml::Class’/><drop/>
<arg name=’ className ’ type=’String’/><drop/>
<arg name=’ packageName ’ type=’String’/><drop/>
[if (not cl.qualifiedName.contains(packageName))]<drop/>
[else] <drop/>
[if(cl.name.contains(className))]<drop/>

Qualified Name: [cl.qualifiedName/]

[for (co:Comment | cl.ownedComment)]<drop/>

<dropEmpty> [cleanAndFormat(co._body.clean())/] </dropEmpty>

[/for]<drop/>
[if (cl.isAbstract)]<drop/>

This class is abstract.

[/if]<drop/>

[if ( cl.oclAsType(uml::Class).general ->notEmpty())]<drop/>

 

Inherits properties from:

[for (gen:Class | cl.oclAsType(uml::Class).general)]<drop/>

  • [gen.name/]

[/for]<drop/>

[/if]<drop/>

[for (st:Stereotype | cl.getAppliedStereotypes())]<drop/>
[if(not st.name.contains(‘OpenModelClass’))]<drop/>

This class is [st.name/].

[else] <drop/>
[/if]<drop/>
[/for]<drop/>
[else] <drop/>
[/if]
[/if]
</fragment><drop/>

<fragment name=’ insertStandardDiagram ’ importedBundles=’commons;gmf;papyrus’><drop/>
<arg name=’ p ’ type=’uml::Package’/><drop/>
<arg name=’ diagramName ’ type=’String’/><drop/>
<arg name=’ diagramTitle ’ type=’String’/><drop/>

[for (d:Diagram|p.getPapyrusDiagrams())]<drop/>

[if d.name.contains(diagramName)]

<drop/>

<image object='[d.getDiagram()/]' maxW='true' keepH='false' keepW = ‘false’> </image>

CoreModel diagram: [d.name/]

Figure 6 - 2 [diagramTitle/]

[else]<drop/>

[/if]<drop/>

[/for]<drop/>
</fragment ><drop/>

 

<fragment name=’ insertSmallDiagram ’ importedBundles=’commons;gmf;papyrus’><drop/>
<arg name=’ p ’ type=’uml::Package’/><drop/>
<arg name=’ diagramName ’ type=’String’/><drop/>
<arg name=’ diagramTitle ’ type=’String’/><drop/>

[for (d:Diagram|p.getPapyrusDiagrams())]<drop/>

[if d.name.contains(diagramName)]

<drop/>

<image object='[d.getDiagram()/]' maxW='true' keepH='false' keepW = ‘false’> </image>

CoreModel diagram: [d.name/]

Figure 6 - 2 [diagramTitle/]

[else]<drop/>

[/if]<drop/>

[/for]<drop/>
</fragment ><drop/>

<fragment name=’ insertAttributeRowBriefNotObsolete ’ importedBundles=’commons;gmf;papyrus’><drop/>

Does not work unless we have Mature stereotype… <drop/>
<arg name=’ p ’ type=’uml::Property’/><drop/>

[for (st:Stereotype | p.getAppliedStereotypes())]<drop/>

[if(not st.name.contains(‘OpenModelAttribute’))]

[if(not st.name.contains(‘Obsolete’))]

[p.name/]

[for (st:Stereotype | p.getAppliedStereotypes())]<drop/>

[if(not st.name.contains(‘OpenModelAttribute’))] [st.name/]

[ /if]<drop/>

[/for]<drop/>

 

Do NOT remove the previous line as word throws an error if the cell is empty <drop/>

[if  p.ownedComment->notEmpty()]<drop/>

[for (c:Comment | p.ownedComment)] <drop/>

[cleanAndFormat(c._body.clean())/]

[/for]

[else] [if (p.name.contains (‘_’))] See referenced class

[else] To be provided

[/if]<drop/>

[/if]<drop/>

 

Do NOT remove the previous line as word throws an error if the cell is empty <drop/>

[/if]<drop/>

[/if]<drop/>

[/for]<drop/>
</fragment><drop/>

9        Fragment: Insert attribute row brief <drop/>

<fragment name=’ insertAttributeRowBrief ’ importedBundles=’commons;gmf;papyrus’><drop/>
<arg name=’ p ’ type=’uml::Property’/><drop/>

[p.name/]

[for (st:Stereotype | p.getAppliedStereotypes())]<drop/>

[if(not st.name.contains(‘OpenModelAttribute’))] [st.name/]

[ /if]<drop/>

[/for]<drop/>

 

Do NOT remove the previous line as word throws an error if the cell is empty <drop/>

[if  p.ownedComment->notEmpty()]<drop/>

[for (c:Comment | p.ownedComment)] <drop/>

[cleanAndFormat(c._body.clean())/]

[/for]

[else] [if (p.name.contains (‘_’))] See referenced class

[else] To be provided

[/if]<drop/>

[/if]<drop/>

 

Do NOT remove the previous line as word throws an error if the cell is empty <drop/>

</fragment><drop/>

<fragment name=’ insertAttributeTableHeader ’ importedBundles=’commons;gmf;papyrus’><drop/>
<arg name=’ cl ’ type=’uml::Class’/><drop/>

Attribute Name

Lifecycle Stereotype (empty = Mature)

Description

</fragment><drop/>

<fragment name=’ insertAttributeTableBrief ’ importedBundles=’commons;gmf;papyrus’ importedFragments=' insert AttributeTableHeader; insert AttributeRowBrief ’><drop/>
<arg name=’ cl ’ type=’uml::Class’/><drop/>
[if  cl.ownedAttribute->notEmpty()]<drop/>

Table 1 : Attributes for [cl.name/]

<table><drop/>

[cl. insert AttributeTableHeader ()/]

[for (p:Property|cl.ownedAttribute)]<drop/>

[if (not p.name.contains(‘_’))]<drop/>

[p. insert AttributeRowBrief ()/]

[/if]<drop/>

[/for]<drop/>

[for (p:Property|cl.ownedAttribute)]<drop/>

[if (p.name.contains(‘_’))]<drop/>

[p. insert AttributeRowBrief ()/]

[/if]<drop/>

[/for]<drop/>

</table><drop/>

[/if]<drop/>

</fragment><drop/>

<fragment name=’ insertTenSpecifiedAttributeTableBrief ’ importedBundles=’commons;gmf;papyrus’ importedFragments=' insert AttributeTableHeader; insert AttributeRowBrief ’><drop/>
<arg name=’ cl ’ type=’uml::Class’/><drop/>

<arg name=’ p1 ’ type=‘String’/><drop/>

<arg name=’ p2 ’ type=‘String’/><drop/>
<arg name=’ p3 ’ type=‘String’/><drop/>
<arg name=’ p4 ’ type=‘String’/><drop/>
<arg name=’ p5 ’ type=‘String’/><drop/>
<arg name=’ p6 ’ type=‘String’/><drop/>
<arg name=’ p7 ’ type=‘String’/><drop/>
<arg name=’ p8 ’ type=‘String’/><drop/>
<arg name=’ p9 ’ type=‘String’/><drop/>
<arg name=’ p10 ’ type=‘String’/><drop/>
[if  cl.ownedAttribute->notEmpty()]<drop/>

Table 1 : Attributes for [cl.name/]

<table><drop/>

[cl. insert AttributeTableHeader ()/]

[for (p:Property|cl.ownedAttribute)]<drop/>

[if  (p.name.contains( p1 ) or p.name.contains( p2 ) or p.name.contains( p3 ) or p.name.contains( p4 ) or p.name.contains( p5 ) or p.name.contains( p6 ) or p.name.contains( p7 ) or p.name.contains( p8 ) or p.name.contains( p9 ) or p.name.contains( p10 ))]<drop/>

[if (not p.name.contains(‘_’))]<drop/>

[p. insert AttributeRowBrief ()/]

[/if]<drop/>

[/if]<drop/>

[if  (p.name.contains( p1 ) or p.name.contains( p2 ) or p.name.contains( p3 ) or p.name.contains( p4 ) or p.name.contains( p5 ) or p.name.contains( p6 ) or p.name.contains( p7 ) or p.name.contains( p8 ) or p.name.contains( p9 ) or p.name.contains( p10 ))]<drop/>

[if (p.name.contains(‘_’))]<drop/>

[p. insert AttributeRowBrief ()/]

[/if]<drop/>

[/if]<drop/>

[/for]<drop/>

</table><drop/>

[/if]<drop/>

</fragment><drop/>

13          Fragment: Insert DataType <drop/>

<fragment name=’ insertDataType ’ importedBundles=’commons;gmf;papyrus’><drop/>
<arg name=’ dt ’ type=’uml::DataType’/><drop/>
<arg name=’ dataTypeName ’ type=’String’/><drop/>
<arg name=’ packageName ’ type=’String’/><drop/>
[if (dt.qualifiedName.contains(packageName))]<drop/>
[if(dt.name.contains(dataTypeName))]<drop/>

Qualified Name: [dt.qualifiedName/]

[for (co:Comment | dt.ownedComment)]<drop/>

<dropEmpty> [cleanAndFormat(co._body.clean())/] </dropEmpty>

[/for]<drop/>
[if ( dt.oclAsType(uml::DataType).general ->notEmpty())]<drop/>

 

Inherits properties from:

[for (tp:DataType | dt.oclAsType(uml::DataType).general)]<drop/>

  • [tp.name/]

[/for]<drop/>

[for (gen:Class | dt.oclAsType(uml::DataType).general)]<drop/>

  • [gen.name/]

[/for]<drop/>

[/if]<drop/>

 

[for (st:Stereotype | dt.getAppliedStereotypes())]<drop/>
This class is [st.name/].

[/for]<drop/>
[else] <drop/>
[/if]
[/if]
</fragment><drop/>

14          Fragment: Start Data Type attribute table brief <drop/>

<fragment name=’ insertDataTypeAttributeTableHeader ’ importedBundles=’commons;gmf;papyrus’><drop/>
<arg name=’ dt ’ type=’uml::DataType’/><drop/>

Attribute Name

Lifecycle Stereotype (empty = Mature)

Description

</fragment><drop/>

15          Fragment: Insert Data Type Attribute table brief <drop/>

<fragment name=’ insertDataTypeAttributeTableBrief ’ importedBundles=’commons;gmf;papyrus’ importedFragments=' insertDataType AttributeTableHeader; insertA ttributeRowBrief ’><drop/>
<arg name=’ dt ’ type=’uml::DataType’/><drop/>
[if  dt.ownedAttribute->notEmpty()]<drop/>

Table 1 : Attributes for [dt.name/]

<table><drop/>

[dt. insertDataType AttributeTableHeader ()/]

[for (p:Property|dt.ownedAttribute)]<drop/>

[p. insert AttributeRowBrief ()/]

[/for]<drop/>

</table><drop/>

[/if]<drop/>

</fragment><drop/>

 

16          Fragment: Insert enums <drop/>

<fragment name=’ insertEnums ’ importedBundles=’commons;gmf;papyrus’><drop/>
<arg name=’ dt ’ type=’uml::DataType’/><drop/>

16.1.1.1                   [dt.name/]

Qualified Name: [dt.qualifiedName/]

[for (co:Comment | dt.ownedComment)]<drop/>

<dropEmpty> [cleanAndFormat(co._body.clean())/] </dropEmpty>

[/for]<drop/>

 

Applied stereotypes:

[if dt.getAppliedStereotypes()->notEmpty()] <drop/>

[for (st:Stereotype | dt.getAppliedStereotypes())]<drop/>

  • [st.name/]

[/for]<drop/>

[else] No stereotypes applied

[/if]<drop/>

[if ( dt.oclAsType(uml::DataType).general ->notEmpty())]<drop/>

 

Inherits literals from:

[for (tp:DataType | dt.oclAsType(uml::DataType).general)]<drop/>

  • [tp.name/]

[/for]

[/if]<drop/>

[if ( dt.oclAsType(Enumeration).ownedLiteral->notEmpty())]<drop/>

 

Contains Enumeration Literals:

[for (e:EnumerationLiteral|dt.oclAsType(Enumeration).ownedLiteral)]<drop/>

  • [e.name/]:
    • [for (co:Comment | e.ownedComment)]<drop/>
    • <dropEmpty> [cleanAndFormat(co._body.clean())/]
    • </dropEmpty>[/for]<drop/>
    • [if dt.getAppliedStereotypes()->notEmpty()] <drop/>
    • Applied stereotypes:
      • [for (st:Stereotype | e.getAppliedStereotypes())]<drop/>
      • [st.name/]
      • [/for]<drop/>
    • [/if]<drop/>

[/for]<drop/>

[/if]<drop/>

</fragment><drop/>

 


[A1] Nigel to fix

[A2] To the reviewer

-           Hypertext document references “TR-512…” will not work at this point (as they reference the .pdf files that have not yet been generated).

-           There are some comments in some documents please consider the comments as you review.

-           If you have proposals to change text (typos or small rewordings for grammar errors), please modify the text with change tracking enabled.

-           If you have major concerns or questions or general comments please use word comments (like this)

 

[A3] check if this is the correct diagram

[A4] Nigel to fix reference