...
A NetworkFunction is also non-trivial in terms of its internal structure. A NetworkFunction normally has its own internal topology that spans over multiple VMs and has internal networks. A NetworkFunction-typed node is expected to be implemented through substitution. This substitution can be specified by the service designer in design time. However, the service designer may also leave a NetworkFunction-typed node without design-time implementation. In this case, the most appropriate substitution should be found by the Orchestrator in run time.
Whether a NetworkFunction is Virtual, Physical, or Allotted is determined based on its other requirements.
- A NetworkFunction that requires a PNF Device (i.e., a custom hardware element preinstalled into the network) is a Physical Network Function, PNF
- A NetworkFunction that requires a Providing service is an Allotted Resource (e.g., a Firewall as a Service offering, or an embedded network function in a network operating system)
- A NetworkFunction with neither of these requirements in a VIrtual Network Function, or VNF.
By avoiding subtyping NetworkFunction into physical, virtual, etc., the type hierarchy needed for abstract runtime resolution is preserved. This permits the platform to select concrete types which satisfy the service requirements using the non-normative OASIS recommendation on abstract resolution based on type through operator specified means such as policy.
It may be advantageous to derive some classic network functions such as firewall, router, load balancer, etc., from NetworkFunction. Doing so still preserves the ability to use abstraction to represent a network function within a Service that uses it.
TODO: explain why this type does not have any capabilities and requirements
...
Name | Required | Type | Constraints | Description |
---|---|---|---|---|
nf_classification | yes | onap.datatypes.NetworkFunctionClassificationClassification | Structured description of this function. For abstract function nodes, may be used for finding an implementation. |
...
Code Block | ||||
---|---|---|---|---|
| ||||
node_types:
onap.nodes.Resource.NetworkFunction:
description: |
a base of the ONAP hierarchy of network functions
If you have a requirement for a factory, you're allotted
If you have a requirement for a PNFdevice, you're physical
If you have neither, you're virtual.
Expect to see network functions be group members for naming and homing.
derived_from: onap.nodes.Resource
properties:
nf_classification:
description: |
data governed value used by operations to filter network functions
type: onap.datatypes.Classification
required: true
capabilities:
# Expect to define these in the derived node_type, with mappings to appropriate the NetworkFunctionComponent CP
# This exposes external CPs of the NF.
requirements:
# Expect to define these in the derived node_type, with mappings to appropriate inner nodes
|
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
node_types: onap.nodes.functions.AbstractFirewall: derived_from: onap.nodes.FunctionNetworkFunction properties: nf_classification: constraints: - equal: {nf_functiontype: "Firewall"} requirements: - unprotected: capability: onap.capabilities.Linkable - protected: capability: onap.capabilities.Linkable |
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
onap.nodes.Resource.NetworkFunction: description: | a base of the ONAP hierarchy of network functions If you have a requirement for a factory, you're allotted If you have a requirement for a PNFdevice, you're physical If you have neither, you're virtual. Expect to see network functions be group members for naming and homing. derived_from: onap.nodes.Resource properties: nf_classification: description: | data governed value used by operations to filter network functions type: onap.datatypes.NetworkFunctionClassificationClassification required: true capabilities: # Expect to define these in the derived node_type, with mappings to appropriate the NetworkFunctionComponent CP # This exposes external CPs of the NF. requirements: # Expect to define these in the derived node_type, with mappings to appropriate inner nodes |
...
Code Block | ||||
---|---|---|---|---|
| ||||
node_types: onap.nodes.functions.AbstractFirewall: derived_from: onap.nodes.FunctionNetworkFunction properties: nf_classification: constraints: - equal: {nf_functiontype: "Firewall"} requirements: - unprotected: capability: onap.capabilities.Linkable - protected: capability: onap.capabilities.Linkable vendorXXX.nodes.VerySpecialFirewall: derived_from: onap.nodes.functions.AbstractFirewall requirements: - management: capability: onap.capabilities.Linkable |
...
Code Block | ||||
---|---|---|---|---|
| ||||
node_types: onap.nodes.functions.AbstractFirewall: derived_from: onap.nodes.FunctionNetworkFunction properties: functionnf_classification: type: string constraints: type: "Firewall" - equal: "firewall" requirements: - unprotected: capability: onap.capabilities.Linkable - protected: capability: onap.capabilities.Linkable vendorXXX.nodes.VerySpecialFirewall: derived_from: onap.nodes.functions.AbstractFirewall requirements: - management: capability: onap.capabilities.Linkable |
...