VNFRQTS - Changes to fix doc warnings
[vnfrqts/requirements.git] / docs / Chapter5.rst
index 976619c..830dd5e 100644 (file)
@@ -3,11 +3,11 @@
 .. Copyright 2017 AT&T Intellectual Property.  All rights reserved.
 
 
-**VNF Modeling Requirements**
-=====================================
+VNF Modeling Requirements
+=========================
 
 TOSCA YAML
---------------------------
+----------
 
 
 Introduction
@@ -827,7 +827,8 @@ This section contains general Heat Orchestration Template guidelines.
 YAML Format
 ~~~~~~~~~~~
 
-R-95303 A VNF's Heat Orchestration Template **MUST** be defined using valid YAML.
+R-95303 A VNF's Heat Orchestration Template **MUST** be defined
+using valid YAML.
 
 YAML (YAML Ain't
 Markup Language) is a human friendly data serialization standard for all
@@ -844,7 +845,8 @@ YAML rules include:
 
  - You must indent your properties and lists with 1 or more spaces
 
- - All Resource IDs and resource property parameters are case-sensitive. (e.g., "ThIs", is not the same as "thiS")
+ - All Resource IDs and resource property parameters are
+   case-sensitive. (e.g., "ThIs", is not the same as "thiS")
 
 Heat Orchestration Template Structure
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1028,7 +1030,8 @@ The constraints block of a parameter definition defines additional
 validation constraints that apply to the value of the parameter.
 The parameter values provided in the VNF Heat Orchestration Template
 are validated against the constraints at instantiation time.
-The stack creation fails if the parameter value doesn’t comply to the constraints.
+The stack creation fails if the parameter value doesn’t comply to
+the constraints.
 
 The constraints are defined as a list with the following syntax
 
@@ -1266,7 +1269,8 @@ in the Newton release of OpenStack.
 outputs
 +++++++
 
-R-36982 A VNF’s Heat Orchestration template **MAY** contain the “outputs:” section.
+R-36982 A VNF’s Heat Orchestration template **MAY**
+contain the “outputs:” section.
 
 This section allows for specifying output parameters
 available to users once the template has been instantiated. If the
@@ -1323,8 +1327,9 @@ for merging parameters and parameter defaults from the environment file.
 R-67231 A VNF’s Heat Orchestration template’s Environment File’s **MUST NOT**
 contain the “resource_registry:” section.
 
-ONAP implementation does not support the Environment File resource_registry
-section. The resource_registry section allows for the definition of custom resources.
+ONAP implementation does not support the Environment File
+resource_registry section. The resource_registry section
+allows for the definition of custom resources.
 
 
 SDC Treatment of Environment Files
@@ -1761,10 +1766,10 @@ This section provides the ONAP naming requirements for
 {vm-type}
 ~~~~~~~~~
 
-R-01455 When a VNF's Heat Orchestration Template creates a Virtual Machine  (i.e., 'OS::Nova::Server'),
-each 'class' of VMs **MUST** be assigned a VNF unique
-'{vm-type}'; where 'class' defines VMs that **MUST** have the following
-identical characteristics:
+R-01455 When a VNF's Heat Orchestration Template creates a
+Virtual Machine  (i.e., 'OS::Nova::Server'), each 'class' of VMs
+**MUST** be assigned a VNF unique '{vm-type}'; where 'class'
+defines VMs that **MUST** have the following identical characteristics:
 
       1.) OS::Nova::Server property flavor value
 
@@ -1824,8 +1829,9 @@ Resource property parameter names **SHOULD** match the case of
 
 The assignment of a {network-role} is discussed in `Networking`_.
 
-R-21330 A VNF’s Heat Orchestration Template’s Resource property parameter
-that is associated with external network **MUST** include the ‘{network-role}’’ as part of the parameter name
+R-21330 A VNF’s Heat Orchestration Template’s Resource property
+parameter that is associated with external network **MUST**
+include the ‘{network-role}’’ as part of the parameter name
 
 R-11168 A VNF's Heat Orchestration Template's Resource ID that is
 associated with an external network **MUST** include the
@@ -1910,7 +1916,8 @@ with a single '{vm-type}' and a single internal network, the Resource ID
 - the '{vm-type}' **MUST** appear before the 'int\_{network-role}' and
   **MUST** be separated by an underscore '_'
 
-   - (e.g., '{vm-type}\_int\_{network-role}', '{vm-type}_{index}\_int\_{network-role}')
+   - (e.g., '{vm-type}\_int\_{network-role}',
+     '{vm-type}_{index}\_int\_{network-role}')
 
 - note that an '{index}' value **MAY** separate the '{vm-type}' and the
   'int\_{network-role}' and when this occurs underscores **MUST** separate
@@ -1940,154 +1947,168 @@ followed, no deviations are permitted. Resource ID formats that are marked
 SHOULD should be followed. However, deviations are permissible to meet
 the needs of the VNF’s Heat Orchestration Template.
 
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-|        Resource Type         |                        Resource ID Format                       |            Requirements            |          Notes          |
-|                              |                                                                 |                                    |                         |
-+==============================+=================================================================+====================================+=========================+
-| OS::Cinder::Volume           | {vm-type}\_volume\_{index}                                      | **SHOULD**                         |                         |
-|                              |                                                                 |                                    |                         |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-| OS::Cinder::VolumeAttachment | {vm-type}\_volumeattachment\_{index}                            | **SHOULD**                         |                         |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-| OS::Heat::CloudConfig        | {vm-type}_RCC                                                   | **SHOULD**                         |                         |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-| OS::Heat::MultipartMime      | {vm-type}_RMM                                                   | **SHOULD**                         |                         |
-|                              |                                                                 |                                    |                         |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-| OS::Heat::ResourceGroup      | {vm-type}_RRG                                                   | **SHOULD**                         |                         |
-|                              |                                                                 |                                    |                         |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-|                              |                                                                 |                                    |                         |
-|                              |                                                                 |                                    |                         |
-|                              |                                                                 |                                    | Resource ID for the     |
-|                              | {vm-type}_{index}\_subint\_{network-role}_                      | **MUST** for subinterface creation | OS::Heat::ResourceGroup |
-|                              | port\_{index}_subinterfaces                                     |                                    | that creates            |
-|                              |                                                                 |                                    | subinterfaces           |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-| OS::Heat::SoftwareConfig     | {vm-type}_RSC                                                   | **SHOULD**                         |                         |
-|                              |                                                                 |                                    |                         |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-| OS::Neutron::Port            | {vm-type}_{vm-type-index}_{network-role}\_port\_{port-index}    | **MUST**                           | Resource ID for port    |
-|                              |                                                                 |                                    | connecting to an        |
-|                              |                                                                 |                                    | external network. The   |
-|                              |                                                                 |                                    | {vm-type-index}         |
-|                              |                                                                 |                                    | is the                  |
-|                              |                                                                 |                                    | instance of the         |
-|                              |                                                                 |                                    | {vm_type}. The          |
-|                              |                                                                 |                                    | {port-index}            |
-|                              |                                                                 |                                    | is the                  |
-|                              |                                                                 |                                    | instance of the         |
-|                              |                                                                 |                                    | “port” on the           |
-|                              |                                                                 |                                    | {vm-type}. There is     |
-|                              |                                                                 |                                    | no index after          |
-|                              |                                                                 |                                    | {network_role} since    |
-|                              |                                                                 |                                    | since {network-role}    |
-|                              |                                                                 |                                    | is unque to the VNF,    |
-|                              |                                                                 |                                    | there should            |
-|                              |                                                                 |                                    | only be one instance.   |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-|                              | {vm-type}_{index}\_int\_{network-role}\_port\_{index}           |                                    | Resource ID for port    |
-|                              |                                                                 | **MUST**                           | connecting to an        |
-|                              |                                                                 |                                    | internal network. The   |
-|                              |                                                                 |                                    | {index} that follows    |
-|                              |                                                                 |                                    | {vm-type} is the        |
-|                              |                                                                 |                                    | instance of the         |
-|                              |                                                                 |                                    | {vm_type}. The          |
-|                              |                                                                 |                                    | {index} that follows    |
-|                              |                                                                 |                                    | “port” is the           |
-|                              |                                                                 |                                    | instance of the         |
-|                              |                                                                 |                                    | “port” on the           |
-|                              |                                                                 |                                    | {vm-type}. There is     |
-|                              |                                                                 |                                    | no index after          |
-|                              |                                                                 |                                    | {network_role} since    |
-|                              |                                                                 |                                    | since {network-role}    |
-|                              |                                                                 |                                    | is unque to the AIC     |
-|                              |                                                                 |                                    | LCP; there should       |
-|                              |                                                                 |                                    | only be one instance.   |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-|                              | Reserve_Port\_{vm-type}_{network-role}\_floating_ip\_{index}    |                                    | Resource ID for a       |
-|                              |                                                                 | **MUST**                           | reserve port that is    |
-|                              |                                                                 |                                    | used for an             |
-|                              |                                                                 |                                    | allowed_address_pair.   |
-|                              | Reserve_Port\_{vm-type}_{network-role}\_floating_v6_ip\_{index} |                                    | See Section 5.6.5.5     |
-|                              |                                                                 |                                    | for additional          |
-|                              |                                                                 |                                    | details.                |
-|                              |                                                                 |                                    |                         |
-|                              |                                                                 |                                    | There is no {index}     |
-|                              |                                                                 |                                    | that follows            |
-|                              |                                                                 |                                    | {vm-type}               |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-| OS::Neutron::SecurityGroup   | {vm-type}_Sec_Grp                                               |                                    | Security Group          |
-|                              |                                                                 | **SHOULD**                         | applicable to one       |
-|                              |                                                                 |                                    | {vm-type} and more      |
-|                              |                                                                 |                                    | than one network        |
-|                              |                                                                 |                                    | (internal and/or        |
-|                              |                                                                 |                                    | external)               |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-|                              | {network-role}_Sec_Grp                                          |                                    | Security Group          |
-|                              |                                                                 | **SHOULD**                         | applicable to more      |
-|                              |                                                                 |                                    | than one {vm-type}      |
-|                              |                                                                 |                                    | and one external        |
-|                              |                                                                 |                                    | network                 |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-|                              | int\_{network-role}_Sec_Grp                                     |                                    | Security Group          |
-|                              |                                                                 | **SHOULD**                         | applicable to more      |
-|                              |                                                                 |                                    | than one {vm-type}      |
-|                              |                                                                 |                                    | and one internal        |
-|                              |                                                                 |                                    | network                 |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-|                              | {vm-type}_{network-role}_Sec_Grp                                |                                    | Security Group          |
-|                              |                                                                 | **SHOULD**                         | applicable to one       |
-|                              |                                                                 |                                    | {vm-type} and one       |
-|                              |                                                                 |                                    | external network        |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-|                              | {vm-type}\_int\_{network-role}_Sec_Grp                          |                                    | Security Group          |
-|                              |                                                                 | **SHOULD**                         | applicable to one       |
-|                              |                                                                 |                                    | {vm-type} and one       |
-|                              |                                                                 |                                    | internal network        |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-|                              | Shared_Sec_Grp                                                  |                                    | Security Group          |
-|                              |                                                                 | **SHOULD**                         | applicable to more      |
-|                              |                                                                 |                                    | than one {vm-type}      |
-|                              |                                                                 |                                    | and more than one       |
-|                              |                                                                 |                                    | network (internal       |
-|                              |                                                                 |                                    | and/or external)        |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-| OS::Neutron::Subnet          | int\_{network-role}\_subnet\_{index}                            |                                    | VNF Heat                |
-|                              |                                                                 | **MUST**                           | Orchestration           |
-|                              |                                                                 |                                    | Templates can only      |
-|                              |                                                                 |                                    | create internal         |
-|                              |                                                                 |                                    | networks.               |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-| OS::Neutron::Net             | int\_{network-role}\_network                                    |                                    | VNF Heat                |
-|                              |                                                                 | **MUST**                           | Orchestration           |
-|                              |                                                                 |                                    | Templates can only      |
-|                              |                                                                 |                                    | create internal         |
-|                              |                                                                 |                                    | networks. There is no   |
-|                              |                                                                 |                                    | {index} because         |
-|                              |                                                                 |                                    | {nework-role} should    |
-|                              |                                                                 |                                    | be unique.              |
-|                              |                                                                 |                                    |                         |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-| OS::Nova::Keypair            | {vm-type}\_keypair\_{index}                                     | **SHOULD**                         | Key Pair applicable to  |
-|                              |                                                                 |                                    | one {vm-type}           |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-|                              | {vnf-type}_keypair                                              | **SHOULD**                         | Key Pair applicable     |
-|                              |                                                                 |                                    | to all {vm-type} in the |
-|                              |                                                                 |                                    | VNF                     |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-| OS::Nova::Server             | {vm-type}\_server\_{index}                                      | Mandatory                          |                         |
-|                              |                                                                 |                                    |                         |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-| OS::Nova::ServerGroup        | {vm-type}_RSG                                                   | **SHOULD**                         | Both formats are        |
-|                              |                                                                 |                                    | valid.                  |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-|                              | {vm-type}_Server_Grp                                            | **SHOULD**                         |                         |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-|                              | {vm-type}_ServerGroup                                           | **SHOULD**                         |                         |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
-| OS::Swift::Container         | {vm-type}_RSwiftC                                               | **SHOULD**                         |                         |
-+------------------------------+-----------------------------------------------------------------+------------------------------------+-------------------------+
++-----------------+-------------------------+-------------+------------------+
+|Resource Type    |Resource ID Format       | Requirements| Notes            |
+|                 |                         |             |                  |
++=================+=========================+=============+==================+
+| OS::Cinder::    | {vm-type}\_volume\      | **SHOULD**  |                  |
+| Volume          | _{index}                |             |                  |
++-----------------+-------------------------+-------------+------------------+
+| OS::Cinder::    | {vm-type}\              | **SHOULD**  |                  |
+| VolumeAttachment| _volumeattachment\      |             |                  |
+|                 | _{index}                |             |                  |
++-----------------+-------------------------+-------------+------------------+
+| OS::Heat::      | {vm-type}_RCC           | **SHOULD**  |                  |
+| CloudConfig     |                         |             |                  |
++-----------------+-------------------------+-------------+------------------+
+| OS::Heat::      | {vm-type}_RMM           | **SHOULD**  |                  |
+| MultipartMime   |                         |             |                  |
++-----------------+-------------------------+-------------+------------------+
+| OS::Heat::      | {vm-type}_RRG           | **SHOULD**  |                  |
+| ResourceGroup   |                         |             |                  |
++-----------------+-------------------------+-------------+------------------+
+|                 | {vm-type}\_{index}\     | **MUST** for| Resource ID for  |
+|                 | _subint\_{network-role}\| subinterface| the OS::Heat::   |
+|                 | _port\_{index}\         | creation    | ResourceGroup    |
+|                 | _subinterfaces          |             | that creates     |
+|                 |                         |             | subinterfaces    |
++-----------------+-------------------------+-------------+------------------+
+| OS::Heat::      | {vm-type}_RSC           | **SHOULD**  |                  |
+| SoftwareConfig  |                         |             |                  |
++-----------------+-------------------------+-------------+------------------+
+| OS::Neutron::   | {vm-type}\              | **MUST**    | Resource ID for  |
+| Port            | _{vm-type-index}\       |             | port connecting  |
+|                 | _{network-role}\_port\  |             | to an external   |
+|                 | _{port-index}           |             | network. The     |
+|                 |                         |             | {vm-type-index}  |
+|                 |                         |             | is the instance  |
+|                 |                         |             | of the {vm_type}.|
+|                 |                         |             | The {port-index} |
+|                 |                         |             | is the instance  |
+|                 |                         |             | of the “port” on |
+|                 |                         |             | the {vm-type}.   |
+|                 |                         |             | There is no index|
+|                 |                         |             | after            |
+|                 |                         |             | {network_role}   |
+|                 |                         |             | since            |
+|                 |                         |             | {network-role} is|
+|                 |                         |             | unique to the    |
+|                 |                         |             | VNF, there should|
+|                 |                         |             | only be one      |
+|                 |                         |             | instance.        |
++-----------------+-------------------------+-------------+------------------+
+|                 | {vm-type}\_{index}\_int\| **MUST**    | Resource ID for  |
+|                 | _{network-role}\_port\  |             | port connecting  |
+|                 | _{index}                |             | to an internal   |
+|                 |                         |             | network. The     |
+|                 |                         |             | {index} that     |
+|                 |                         |             | follows {vm-type}|
+|                 |                         |             | is the instance  |
+|                 |                         |             | of the {vm_type}.|
+|                 |                         |             | The {index} that |
+|                 |                         |             | follows “port” is|
+|                 |                         |             | the instance of  |
+|                 |                         |             | the “port” on the|
+|                 |                         |             | {vm-type}. There |
+|                 |                         |             | is no index after|
+|                 |                         |             | {network_role}   |
+|                 |                         |             | since            |
+|                 |                         |             | {network-role} is|
+|                 |                         |             | unque to the AIC |
+|                 |                         |             | LCP; there should|
+|                 |                         |             | only be one      |
+|                 |                         |             | instance.        |
++-----------------+-------------------------+-------------+------------------+
+|                 | Reserve_Port\_{vm-type}\|             | Resource ID for a|
+|                 | _{network-role}\        | **MUST**    | reserve port that|
+|                 | _floating_ip\_{index}   |             | is used for an   |
+|                 |                         |             | allowed_address  |
+|                 | Reserve_Port\_{vm-type}\|             | \_pair. See      |
+|                 | _{network-role}\        |             | Section 5.6.5.5  |
+|                 | _floating_v6_ip\        |             | for additional   |
+|                 | _{index}                |             | details.         |
+|                 |                         |             |                  |
+|                 |                         |             | There is no      |
+|                 |                         |             | {index} that     |
+|                 |                         |             | follows {vm-type}|
++-----------------+-------------------------+-------------+------------------+
+| OS::Neutron::   | {vm-type}\_Sec\_Grp     | **SHOULD**  | Security Group   |
+| SecurityGroup   |                         |             | applicable to one|
+|                 |                         |             | {vm-type} and    |
+|                 |                         |             | more than one    |
+|                 |                         |             | network (internal|
+|                 |                         |             | and/or external) |
++-----------------+-------------------------+-------------+------------------+
+|                 | {network-role}\_Sec\_Grp| **SHOULD**  | Security Group   |
+|                 |                         |             | applicable to    |
+|                 |                         |             | more than one    |
+|                 |                         |             | {vm-type} and one|
+|                 |                         |             | external network |
++-----------------+-------------------------+-------------+------------------+
+|                 | int\_{network-role}\    | **SHOULD**  | Security Group   |
+|                 | _Sec\_Grp               |             | applicable to    |
+|                 |                         |             | more than one    |
+|                 |                         |             | {vm-type} and one|
+|                 |                         |             | internal network |
++-----------------+-------------------------+-------------+------------------+
+|                 | {vm-type}\              | **SHOULD**  | Security Group   |
+|                 | _{network-role}\_Sec\   |             | applicable to one|
+|                 | _Grp                    |             | {vm-type} and one|
+|                 |                         |             | external network |
++-----------------+-------------------------+-------------+------------------+
+|                 | {vm-type}\_int\         | **SHOULD**  | Security Group   |
+|                 | _{network-role}\_Sec\   |             | applicable to one|
+|                 | _Grp                    |             | {vm-type} and one|
+|                 |                         |             | internal network |
++-----------------+-------------------------+-------------+------------------+
+|                 | Shared\_Sec\_Grp        | **SHOULD**  | Security Group   |
+|                 |                         |             | applicable to    |
+|                 |                         |             | more than one    |
+|                 |                         |             | {vm-type} and    |
+|                 |                         |             | more than one    |
+|                 |                         |             | network (internal|
+|                 |                         |             | and/or external) |
++-----------------+-------------------------+-------------+------------------+
+| OS::Neutron::   | int\_{network-role}\    | **MUST**    | VNF Heat         |
+| Subnet          | _subnet\_{index}        |             | Orchestration    |
+|                 |                         |             | Templates can    |
+|                 |                         |             | only create      |
+|                 |                         |             | internal         |
+|                 |                         |             | networks.        |
++-----------------+-------------------------+-------------+------------------+
+| OS::Neutron::Net| int\_{network-role}\    | **MUST**    | VNF Heat         |
+|                 | _network                |             | Orchestration    |
+|                 |                         |             | Templates can    |
+|                 |                         |             | only create      |
+|                 |                         |             | internal         |
+|                 |                         |             | networks. There  |
+|                 |                         |             | is no {index}    |
+|                 |                         |             | because          |
+|                 |                         |             | {nework-role}    |
+|                 |                         |             |should be unique. |
++-----------------+-------------------------+-------------+------------------+
+| OS::Nova::      | {vm-type}\_keypair\     | **SHOULD**  | Key Pair         |
+| Keypair         | _{index}                |             | applicable to one|
+|                 |                         |             | a{vm-type}       |
++-----------------+-------------------------+-------------+------------------+
+|                 | {vnf-type}_keypair      | **SHOULD**  | Key Pair         |
+|                 |                         |             | applicable to all|
+|                 |                         |             | {vm-type} in the |
+|                 |                         |             | VNF              |
++-----------------+-------------------------+-------------+------------------+
+| OS::Nova::Server| {vm-type}\_server\      | Mandatory   |                  |
+|                 | _{index}                |             |                  |
++-----------------+-------------------------+-------------+------------------+
+| OS::Nova::      | {vm-type}_RSG           | **SHOULD**  | Both formats are |
+| ServerGroup     |                         |             | valid.           |
++-----------------+-------------------------+-------------+------------------+
+|                 | {vm-type}_Server_Grp    | **SHOULD**  |                  |
++-----------------+-------------------------+-------------+------------------+
+|                 | {vm-type}_ServerGroup   | **SHOULD**  |                  |
++-----------------+-------------------------+-------------+------------------+
+| OS::Swift::     | {vm-type}\_RSwiftC      | **SHOULD**  |                  |
+| Container       |                         |             |                  |
++-----------------+-------------------------+-------------+------------------+
 
 
     Table 2: Example OpenStack Heat Resource ID
@@ -2099,134 +2120,135 @@ The table below provides Resource ID Formats for Contrail heat resources.
    However, deviations in the Resource ID format that is shown is
    permitted.
 
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-|     Resource    |                               Resource ID                                |   Mandatory /   |      Notes      |   |
-|       Type      |                                  Format                                  |     Optional    |                 |   |
-+=================+==========================================================================+=================+=================+===+
-| OS::ContrailV2: | {vm-type}_{index}_{network-role}\_vmi\_{index}\_IP\_{index}              | **MUST** –      | The {index}     |   |
-| :InstanceIp     |                                                                          | IPv4 address on | that follows    |   |
-|                 |                                                                          | vmi external    | {vm-type} is    |   |
-|                 |                                                                          | network         | the instance of |   |
-|                 |                                                                          |                 | the {vm_type}.  |   |
-|                 |                                                                          |                 | The {index}     |   |
-|                 |                                                                          |                 | that follows    |   |
-|                 |                                                                          |                 | “vmi” is the    |   |
-|                 |                                                                          |                 | instance of the |   |
-|                 |                                                                          |                 | “vmi” on the    |   |
-|                 |                                                                          |                 | {vm-type}.      |   |
-|                 |                                                                          |                 | There is no     |   |
-|                 |                                                                          |                 | index after     |   |
-|                 |                                                                          |                 | {network_role}  |   |
-|                 |                                                                          |                 | since since     |   |
-|                 |                                                                          |                 | {network-role}  |   |
-|                 |                                                                          |                 | is unque. The   |   |
-|                 |                                                                          |                 | {index} that    |   |
-|                 |                                                                          |                 | follows the     |   |
-|                 |                                                                          |                 | “IP” is the     |   |
-|                 |                                                                          |                 | instance of the |   |
-|                 |                                                                          |                 | “IP” on the     |   |
-|                 |                                                                          |                 | “vmi”           |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-|                 | {vm-type}_{index}_{network-role}\_vmi\_{index}\_v6\_IP\_{index}          | **MUST** –      |                 |   |
-|                 |                                                                          | IPv6 address on |                 |   |
-|                 |                                                                          | vmi external    |                 |   |
-|                 |                                                                          | network         |                 |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-|                 | {vm-type}_{index}\_int\_{network-role}\_vmi\_{index}\_IP\_{index}        | **MUST** –      |                 |   |
-|                 |                                                                          | IPv4 address on |                 |   |
-|                 |                                                                          | vmi internal    |                 |   |
-|                 |                                                                          | network         |                 |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-|                 | {vm-type}_{index}\_int\_{network-role}\_vmi\_{index}\_v6\_IP\_{index}    | **MUST** –      |                 |   |
-|                 |                                                                          | IPv6 address on |                 |   |
-|                 |                                                                          | vmi internal    |                 |   |
-|                 |                                                                          | network         |                 |   |
-|                 |                                                                          |                 |                 |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-|                 | {vm-type}_{index}\_subint\_{network-role}\_vmi\_{index}\_IP\_{index}     | **MUST** –      |                 |   |
-|                 |                                                                          | IPv4 address on |                 |   |
-|                 |                                                                          | sub-interface   |                 |   |
-|                 |                                                                          | vmi external    |                 |   |
-|                 |                                                                          | network         |                 |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-|                 | {vm-type}_{index}\_subint\_{network-role}\_vmi\_{index}\_v6\_IP\_{index} | **MUST** –      |                 |   |
-|                 |                                                                          | IPv6 address on |                 |   |
-|                 |                                                                          | sub-interface   |                 |   |
-|                 |                                                                          | vmi external    |                 |   |
-|                 |                                                                          | network         |                 |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-| OS::ContrailV2: | {network-role}_RIRT                                                      | **MAY**         |                 |   |
-| :InterfaceRoute |                                                                          |                 |                 |   |
-| Table           |                                                                          |                 |                 |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-| OS::ContrailV2: | {network-role}_RNI                                                       | **MAY**         |                 |   |
-| :NetworkIpam    |                                                                          |                 |                 |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-| OS::ContrailV2: | {vm-type}_RPT                                                            | **MAY**         |                 |   |
-| :PortTuple      |                                                                          |                 |                 |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-| OS::ContrailV2: | {vm-type}\_RSHC\_{LEFT/RIGHT}                                            | **MAY**         |                 |   |
-| :ServiceHealthC |                                                                          |                 |                 |   |
-| heck            |                                                                          |                 |                 |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-| OS::ContrailV2: | {vm-type}\_RST\_{index}                                                  | **MAY**         |                 |   |
-| :ServiceTemplat |                                                                          |                 |                 |   |
-| e               |                                                                          |                 |                 |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-| OS::ContrailV2: | {vm-type}\_{index}\_{network-role}\_vmi\_{index}                         | **MUST** - vmi  | Resource ID for |   |
-| :VirtualMachine |                                                                          | attached to an  | virtual machine |   |
-| Interface       |                                                                          | external        | interface (vmi) |   |
-|                 |                                                                          | network         | connecting to   |   |
-|                 |                                                                          |                 | an external     |   |
-|                 |                                                                          |                 | network. The    |   |
-|                 |                                                                          |                 | {index} that    |   |
-|                 |                                                                          |                 | follows         |   |
-|                 |                                                                          |                 | {vm-type} is    |   |
-|                 |                                                                          |                 | the instance of |   |
-|                 |                                                                          |                 | the {vm_type}.  |   |
-|                 |                                                                          |                 | The {index}     |   |
-|                 |                                                                          |                 | that follows    |   |
-|                 |                                                                          |                 | “vmi” is the    |   |
-|                 |                                                                          |                 | instance of the |   |
-|                 |                                                                          |                 | “vmi” on the    |   |
-|                 |                                                                          |                 | {vm-type}.      |   |
-|                 |                                                                          |                 | There is no     |   |
-|                 |                                                                          |                 | index after     |   |
-|                 |                                                                          |                 | {network_role}  |   |
-|                 |                                                                          |                 | since since     |   |
-|                 |                                                                          |                 | {network-role}  |   |
-|                 |                                                                          |                 | is unque to the |   |
-|                 |                                                                          |                 | AIC LCP; there  |   |
-|                 |                                                                          |                 | should only be  |   |
-|                 |                                                                          |                 | one instance.   |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-|                 | {vm-type}_{index}\_int\_{network-role}\_vmi\_{index}                     | **MUST** - vmi  |                 |   |
-|                 |                                                                          | attached to an  |                 |   |
-|                 |                                                                          | internal        |                 |   |
-|                 |                                                                          | network         |                 |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-|                 | {vm-type}_{index}\_subint\_{network-role}\_vmi\_{index}                  | **MUST** - vmi  |                 |   |
-|                 |                                                                          | attached to a   |                 |   |
-|                 |                                                                          | sub-interface   |                 |   |
-|                 |                                                                          | network         |                 |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-| OS::ContrailV2: | int\_{network-role}\_RVN                                                 | **MAY**         | VNF Heat        |   |
-| :VirtualNetwork |                                                                          |                 | Orchestration   |   |
-|                 |                                                                          |                 | Templates can   |   |
-|                 |                                                                          |                 | only create     |   |
-|                 |                                                                          |                 | internal        |   |
-|                 |                                                                          |                 | networks. There |   |
-|                 |                                                                          |                 | is no {index}   |   |
-|                 |                                                                          |                 | because         |   |
-|                 |                                                                          |                 | {nework-role}   |   |
-|                 |                                                                          |                 | should be       |   |
-|                 |                                                                          |                 | unique. Both    |   |
-|                 |                                                                          |                 | formats are     |   |
-|                 |                                                                          |                 | valid.          |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
-|                 | int\_{network-role}\_network                                             | **MAY**         |                 |   |
-|                 |                                                                          |                 |                 |   |
-+-----------------+--------------------------------------------------------------------------+-----------------+-----------------+---+
++-----------------+---------------------+-----------------+-----------------+
+|     Resource    | Resource ID         |   Mandatory /   |      Notes      |
+|       Type      | Format              |     Optional    |                 |
++=================+=====================+=================+=================+
+| OS::ContrailV2: | {vm-type}\_{index}\ | **MUST** –      | The {index}     |
+| :InstanceIp     | _{network-role}\    | IPv4 address on | that follows    |
+|                 | _vmi\_{index}\      | vmi external    | {vm-type} is    |
+|                 | _IP\_{index}        | network         | the instance of |
+|                 |                     |                 | the {vm_type}.  |
+|                 |                     |                 | The {index}     |
+|                 |                     |                 | that follows    |
+|                 |                     |                 | “vmi” is the    |
+|                 |                     |                 | instance of the |
+|                 |                     |                 | “vmi” on the    |
+|                 |                     |                 | {vm-type}.      |
+|                 |                     |                 | There is no     |
+|                 |                     |                 | index after     |
+|                 |                     |                 | {network_role}  |
+|                 |                     |                 | since since     |
+|                 |                     |                 | {network-role}  |
+|                 |                     |                 | is unque. The   |
+|                 |                     |                 | {index} that    |
+|                 |                     |                 | follows the     |
+|                 |                     |                 | “IP” is the     |
+|                 |                     |                 | instance of the |
+|                 |                     |                 | “IP” on the     |
+|                 |                     |                 | “vmi”           |
++-----------------+---------------------+-----------------+-----------------+
+|                 | {vm-type}\_{index}\ | **MUST** –      |                 |
+|                 | _{network-role}\    | IPv6 address on |                 |
+|                 | _vmi\_{index}\_v6\  | vmi external    |                 |
+|                 | _IP\_{index}        | network         |                 |
++-----------------+---------------------+-----------------+-----------------+
+|                 | {vm-type}\_{index}\ | **MUST** –      |                 |
+|                 | _int\               | IPv4 address on |                 |
+|                 | _{network-role}\    | vmi internal    |                 |
+|                 | _vmi\_{index}\_IP\  | network         |                 |
+|                 | _{index}            |                 |                 |
++-----------------+---------------------+-----------------+-----------------+
+|                 | {vm-type}\_{index}\ | **MUST** –      |                 |
+|                 | _int\               | IPv6 address on |                 |
+|                 | _{network-role}\    | vmi internal    |                 |
+|                 | _vmi\_{index}\_v6\  | network         |                 |
+|                 | _IP\_{index}        |                 |                 |
++-----------------+---------------------+-----------------+-----------------+
+|                 | {vm-type}\_{index}\ | **MUST** –      |                 |
+|                 | _subint\            | IPv4 address on |                 |
+|                 | _{network-role}\    | sub-interface   |                 |
+|                 | _vmi\_{index}\_IP\  | vmi external    |                 |
+|                 | _{index}            | network         |                 |
++-----------------+---------------------+-----------------+-----------------+
+|                 | {vm-type}\_{index}\ | **MUST** –      |                 |
+|                 | _subint\            | IPv6 address on |                 |
+|                 | _{network-role}\    | sub-interface   |                 |
+|                 | _vmi\_{index}\_v6\  | vmi external    |                 |
+|                 | _IP\_{index}        | network         |                 |
++-----------------+---------------------+-----------------+-----------------+
+| OS::ContrailV2: | {network-role}\_RIRT| **MAY**         |                 |
+| :InterfaceRoute |                     |                 |                 |
+| Table           |                     |                 |                 |
++-----------------+---------------------+-----------------+-----------------+
+| OS::ContrailV2: | {network-role}\_RNI | **MAY**         |                 |
+| :NetworkIpam    |                     |                 |                 |
++-----------------+---------------------+-----------------+-----------------+
+| OS::ContrailV2: | {vm-type}\_RPT      | **MAY**         |                 |
+| :PortTuple      |                     |                 |                 |
++-----------------+---------------------+-----------------+-----------------+
+| OS::ContrailV2: | {vm-type}\_RSHC\    | **MAY**         |                 |
+| :ServiceHealthC | _{LEFT/RIGHT}       |                 |                 |
+| heck            |                     |                 |                 |
++-----------------+---------------------+-----------------+-----------------+
+| OS::ContrailV2: | {vm-type}\_RST\     | **MAY**         |                 |
+| :ServiceTemplat | _{index}            |                 |                 |
+| e               |                     |                 |                 |
++-----------------+---------------------+-----------------+-----------------+
+| OS::ContrailV2: | {vm-type}\_{index}\ | **MUST** - vmi  | Resource ID for |
+| :VirtualMachine | _{network-role}\    | attached to an  | virtual machine |
+| Interface       | _vmi\_{index}       | external        | interface (vmi) |
+|                 |                     | network         | connecting to   |
+|                 |                     |                 | an external     |
+|                 |                     |                 | network. The    |
+|                 |                     |                 | {index} that    |
+|                 |                     |                 | follows         |
+|                 |                     |                 | {vm-type} is    |
+|                 |                     |                 | the instance of |
+|                 |                     |                 | the {vm_type}.  |
+|                 |                     |                 | The {index}     |
+|                 |                     |                 | that follows    |
+|                 |                     |                 | “vmi” is the    |
+|                 |                     |                 | instance of the |
+|                 |                     |                 | “vmi” on the    |
+|                 |                     |                 | {vm-type}.      |
+|                 |                     |                 | There is no     |
+|                 |                     |                 | index after     |
+|                 |                     |                 | {network_role}  |
+|                 |                     |                 | since since     |
+|                 |                     |                 | {network-role}  |
+|                 |                     |                 | is unque to the |
+|                 |                     |                 | AIC LCP; there  |
+|                 |                     |                 | should only be  |
+|                 |                     |                 | one instance.   |
++-----------------+---------------------+-----------------+-----------------+
+|                 | {vm-type}\_{index}\ | **MUST** - vmi  |                 |
+|                 | _int\               | attached to an  |                 |
+|                 | _{network-role}\    | internal        |                 |
+|                 | _vmi\_{index}       | network         |                 |
++-----------------+---------------------+-----------------+-----------------+
+|                 | {vm-type}\_{index}\ | **MUST** - vmi  |                 |
+|                 | _subint\            | attached to a   |                 |
+|                 | _{network-role}\    | sub-interface   |                 |
+|                 | _vmi\_{index}       | network         |                 |
++-----------------+---------------------+-----------------+-----------------+
+| OS::ContrailV2: | int\_{network-role}\| **MAY**         | VNF Heat        |
+| :VirtualNetwork | _RVN                |                 | Orchestration   |
+|                 |                     |                 | Templates can   |
+|                 |                     |                 | only create     |
+|                 |                     |                 | internal        |
+|                 |                     |                 | networks. There |
+|                 |                     |                 | is no {index}   |
+|                 |                     |                 | because         |
+|                 |                     |                 | {nework-role}   |
+|                 |                     |                 | should be       |
+|                 |                     |                 | unique. Both    |
+|                 |                     |                 | formats are     |
+|                 |                     |                 | valid.          |
++-----------------+---------------------+-----------------+-----------------+
+|                 | int\_{network-role}\| **MAY**         |                 |
+|                 | _network            |                 |                 |
++-----------------+---------------------+-----------------+-----------------+
 
     Table 3: Example Contrail Heat resource ID
 
@@ -2450,9 +2472,10 @@ In this example, the {vm-type} has been defined as “lb” for load balancer.
 Contrail Issue with Values for OS::Nova::Server Property Name
 _____________________________________________________________
 
-R-44271 The VNF's Heat Orchestration Template's Resource 'OS::Nova::Server' property
-'name' parameter value **SHOULD NOT** contain special characters
-since the Contrail GUI has a limitation displaying special characters.
+R-44271 The VNF's Heat Orchestration Template's Resource
+'OS::Nova::Server' property 'name' parameter value **SHOULD NOT**
+contain special characters since the Contrail GUI has a limitation
+displaying special characters.
 
 However, if special characters must be used, the only special characters
 supported are:
@@ -3151,671 +3174,875 @@ Four properties of the resource OS::Neutron::Port that must follow the
 ONAP parameter naming convention. The four properties are:
 
 1. network
+2. fixed_ips, ip_address
+3. fixed_ips, subnet_id or fixed_ips, subnet
 
-2. fixed\_ips, ip\_address
+ * Note that in many examples in this document fixed_ips, subnet_id is used.
 
-3. fixed\_ips, subnet\_id
+4. allowed_address_pairs, ip_address
 
-4. allowed\_address\_pairs, ip\_address
+Below is a generic example. Note that for some parameters
+comma_delimited_list are supported in addition to String.
+
+.. code-block:: python
+
+  resources:
+
+  ...
+
+  <resource ID>:
+    type: OS::Neutron::Port
+    properties:
+      allowed_address_pairs: [{"ip_address": String, "mac_address": String},
+      {"ip_address": String, "mac_address": String}, ...]
+      fixed_ips: [{"ip_address": String, "subnet_id": String, "subnet":
+      String}, {"ip_address": String, "subnet_id": String, "subnet": String},
+      ...]
+      network: String
 
 The parameters associated with these properties may reference an
 external network or internal network. External networks and internal
 networks are defined in `Networking`_.
 
-External Networks
-_________________
+When the OS::Neutron::Port is attaching to an external network, all
+property values are parameters that are retrieved via the intrinsic
+function 'get_param'.
 
-When the parameter references an external network
-
--  R-72050 The VNF Heat Orchestration Template **MUST** contain {network-role} in the parameter name
-
--  the parameter must not be enumerated in the Heat environment file
-
--  the parameter is classified as an ONAP Orchestration Parameter
-
-+----------------------+---------------------------+--------------------------+
-| Property Name        | ONAP Parameter Name       | Parameter Type           |
-+======================+===========================+==========================+
-| network              | {network-role}\_net\_id   | string                   |
-|                      +---------------------------+--------------------------+
-|                      | {network-role}\_net\_name | string                   |
-+----------------------+---------------------------+--------------------------+
-| fixed\_ips,          | {vm-type}\_{network-role}\| string                   |
-| ip\_address          | _ip\_{index}              |                          |
-|                      +---------------------------+--------------------------+
-|                      | {vm-type}\_{network-role}\| comma\_delimited\_list   |
-|                      | _ips                      |                          |
-|                      +---------------------------+--------------------------+
-|                      | {vm-type}\_{network-role}\| string                   |
-|                      | _v6\_ip\_{index}          |                          |
-|                      +---------------------------+--------------------------+
-|                      | {vm-type}\_{network-role}\| comma\_delimited\_list   |
-|                      | _v6\_ips                  |                          |
-+----------------------+---------------------------+--------------------------+
-| fixed\_ips, subnet   | {network-role}\           | string                   |
-|                      | _subnet\_id               |                          |
-|                      +---------------------------+--------------------------+
-|                      | {network-role}\           | string                   |
-|                      | _v6\_subnet\_id           |                          |
-+----------------------+---------------------------+--------------------------+
-| allowed\_address     | {vm-type}\_{network-role}\| string                   |
-| \_pairs, ip\_address | _floating\_ip             |                          |
-|                      +---------------------------+--------------------------+
-|                      | {vm-type}\_{network-role}\| string                   |
-|                      | _floating\_v6\_ip         |                          |
-|                      +---------------------------+--------------------------+
-|                      | {vm-type}\_{network-role}\| string                   |
-|                      | _ip\_{index}              |                          |
-|                      +---------------------------+--------------------------+
-|                      | {vm-type}\_{network-role}\| comma\_delimited\_list   |
-|                      | _ips                      |                          |
-|                      +---------------------------+--------------------------+
-|                      | {vm-type}\_{network-role}\| string                   |
-|                      | _v6\_ip\_{index}          |                          |
-|                      +---------------------------+--------------------------+
-|                      | {vm-type}\_{network-role}\| comma\_delimited\_list   |
-|                      | _v6\_ips                  |                          |
-+----------------------+---------------------------+--------------------------+
-
-Table 5: OS::Neutron::Port Resource Property Parameters (External
-Networks)
+When the OS::Neutron::Port is attaching to an internal network, a
+property value maybe retrieved via the intrinsic
+function 'get_param', 'get_resource', or 'get_attr'.
 
-Internal Networks
-_________________
+This will be described in the forth coming sections.
 
-When the parameter references an internal network
-
--  R-57576 The VNF Heat Orchestration Template **MUST** contain int\_{network-role}
-   in the parameter name.
-
--  the parameter may be enumerated in the environment file.
-
-+-------------------------+--------------------------------+-----------------+
-| Property                | Parameter Name for             | Parameter Type  |
-|                         | Internal Networks              |                 |
-+=========================+================================+=================+
-| network                 | int\_{network-role}\           | string          |
-|                         | _net\_id                       |                 |
-|                         +--------------------------------+-----------------+
-|                         | int\_{network-role}\           | string          |
-|                         | _net\_name                     |                 |
-+-------------------------+--------------------------------+-----------------+
-| fixed\_ips, ip\_address | {vm-type}\_int\_{network-role}\| string          |
-|                         | _ip\_{index}                   |                 |
-|                         +--------------------------------+-----------------+
-|                         | {vm-type}\_int\_{network-role}\| comma\          |
-|                         | _ips                           | _delimited\_list|
-|                         +--------------------------------+-----------------+
-|                         | {vm-type}\_int\_{network-role}\| string          |
-|                         | _v6\_ip\_{index}               |                 |
-|                         +--------------------------------+-----------------+
-|                         | {vm-type}\_int\_{network-role}\| comma\          |
-|                         | _v6\_ips                       | _delimited\_list|
-+-------------------------+--------------------------------+-----------------+
-| fixed\_ips, subnet      | int\_{network-role}\           | string          |
-|                         | _subnet\_id                    |                 |
-|                         +--------------------------------+-----------------+
-|                         | int\_{network-role}\           | string          |
-|                         | _v6\_subnet\_id                |                 |
-+-------------------------+--------------------------------+-----------------+
-| allowed\_address\_pairs,| {vm-type}\_int\_{network-role}\| string          |
-| ip\_address             | _floating\_ip                  |                 |
-|                         +--------------------------------+-----------------+
-|                         | {vm-type}\_int\_{network-role}\| string          |
-|                         | _floating\_v6\_ip              |                 |
-|                         +--------------------------------+-----------------+
-|                         | {vm-type}\_int\_{network-role}\| string          |
-|                         | _ip\_{index}                   |                 |
-|                         +--------------------------------+-----------------+
-|                         | {vm-type}\_int\_{network-role}\| comma\          |
-|                         | _ips                           | _delimited\_list|
-|                         +--------------------------------+-----------------+
-|                         | {vm-type}\_int\_{network-role}\| string          |
-|                         | _v6\_ip\_{index}               |                 |
-|                         +--------------------------------+-----------------+
-|                         | {vm-type}\_int\_{network-role}\| comma\          |
-|                         | _v6\_ips                       | _delimited\_list|
-+-------------------------+--------------------------------+-----------------+
-
-Table 6: Port Resource Property Parameters (Internal Networks)
+Items to Note
+_____________
 
-Property: network
-+++++++++++++++++
+A network (internal or external) may contain one or or more subnets.
 
-The property networks in the resource OS::Neutron::Port must be
-referenced by Neutron Network ID, a UUID value, or by the network name
-defined in OpenStack.
+A VNF can have one or more ports connected to the same network.
 
-External Networks
-_________________
+A port can have one or more IP addresses assigned.
 
-R-93272 The VNF Heat Orchestration Template **MUST** adhere to the following parameter naming
-convention in the Heat Orchestration Template, when the parameter
-associated with the property network is referencing an “external” network:
+The IP address assignments can be IPv4 addresses and/or IPv6 addresses.
 
--  {network-role}\_net\_id for the Neutron network ID
+The IP addresses assignments for a unique external network **MUST**
+be all Cloud Assigned addresses OR **MUST** be all ONAP
+SDN-C assigned IP addresses.
 
--  {network-role}\_net\_name for the network name in OpenStack
+If the IP addresses are Cloud Assigned, all the IPv4 Addresses **MUST**
+be from
+the same subnet and all the IPv6 Addresses **MUST** be from the
+same subnet.
 
-The parameter must be declared as type: string
+If the IP addresses are ONAP SDN-C assigned,
+the IPv4 Addresses **MAY**
+be from
+different subnets and the IPv6 Addresses **MAY** be from different
+subnets.
 
-The parameter must not be enumerated in the Heat environment file.
+If a VNF's Port is attached to an external network the IP addresses **MAY**
+either be assigned by
 
-*Example Parameter Definition*
+ 1. ONAP's SDN-Controller (SDN-C)
+ 2. Cloud Assigned by OpenStack’s DHCP Service
 
-.. code-block:: yaml
+If a VNF's Port is attached to an external network and the port's IP addresses
+are assigned by ONAP's SDN-Controller, the 'OS::Neutron::Port' Resource's
 
- parameters:
-     {network-role}_net_id:
-         type: string
-         description: Neutron UUID for the {network-role} network
-     {network-role}_net_name:
-         type: string
-         description: Neutron name for the {network-role} network
+ * property 'fixed_ips' map property 'ip_address' **MUST** be used
+ * property 'fixed_ips' map property 'subnet'/'subnet_id' **MUST NOT** be used
 
-*Example: One Cloud Assigned IP Address (DHCP) assigned to a network
-that has only one subnet*
+If a VNF's Port is attached to an external network and the port's IP addresses
+are Cloud Assigned by OpenStack’s DHCP Service,
+the 'OS::Neutron::Port' Resource's
 
-In this example, the {network-role} has been defined as oam to represent
-an oam network and the {vm-type} has been defined as lb for load
-balancer. The Cloud Assigned IP Address uses the OpenStack DHCP service
-to assign IP addresses.
+ * property 'fixed_ips' map property 'ip_address' **MUST NOT** be used
+ * property fixed_ips' map property 'subnet'/'subnet_id' **MAY** be used
 
-.. code-block:: yaml
+If a VNF's Port is attached to an internal network and the port's IP addresses
+are assigned by the VNF's Heat Orchestration Template
+(i.e., enumerated in the Heat Orchestration Template's environment file),
+the 'OS::Neutron::Port' Resource's
 
- parameters:
-    oam_net_id:
-       type: string
-       description: Neutron UUID for the oam network
+ * property 'fixed_ips' map property 'ip_address' **MUST** be used
+ * property 'fixed_ips' map property 'subnet'/'subnet_id'
+   **MUST NOT** be used
 
- resources:
-    lb_port_1:
-       type: OS::Neutron::Port
-       network: { get_param: oam_net_id }
+If a VNF's Port is attached to an internal network and the port's IP addresses
+are Cloud Assigned by OpenStack’s DHCP Service,
+the 'OS::Neutron::Port' Resource's
 
-Internal Networks
-_________________
+ * property 'fixed_ips' map property 'ip_address' **MUST NOT** be used
+ * property 'fixed_ips' map property 'subnet'/'subnet_id' **MAY** be used
 
-R-65373 The VNF Heat Orchestration Template **MUST**  adhere to the following parameter naming
-convention, when the parameter associated with the property network is
-referencing an “internal” network:
+If a VNF's Heat Orchestration Template 'OS::Neutron::Port' Resource property
+'fixed_ips' map property 'ip_address' is specified, then the
+'fixed_ips' map property 'subnet'/'subnet_id' **MUST NOT**
+be specified.
 
--  int\_{network-role}\_net\_id for the Neutron network ID
+If a VNF's Heat Orchestration Template 'OS::Neutron::Port' Resource property
+'fixed_ips' map property 'subnet'/'subnet_id' is specified, then the
+'fixed_ips' map property 'ip_address' **MUST NOT**
+be specified.
 
--  int\_{network-role}\_net\_name for the network name in OpenStack
+.. csv-table:: **Table 4 OS::Nova::Server Resource Property Parameter Naming Convention**
+   :header: Resource,Property,Parameter Type,Parameter Name,Parameter Value Provided to Heat
+   :align: center
+   :widths: auto
 
-The parameter must be declared as type: string
+   OS::Nova::Server, image, string, {vm-type}_image_name, Environment File
 
-The assumption is that internal networks are created in the base module.
-The Neutron Network ID will be passed as an output parameter (e.g., ONAP
-Base Module Output Parameter) to the incremental modules. In the
-incremental modules, it will be defined as input parameter.
+Property: network
++++++++++++++++++
 
-*Example Parameter Definition*
+The Resource 'OS::Neutron::Port' property 'network' determines what network
+the port is attached to.
 
-.. code-block:: yaml
 
- parameters:
-     int_{network-role}_net_id:
-         type: string
-         description: Neutron UUID for the {network-role} network
-     int_{network-role}_net_name:
-         type: string
-         description: Neutron name for the {network-role} network
+R-18008 The VNF’s Heat Orchestration Template’s Resource ‘OS::Neutron::Port’
+property ‘network’ parameter **MUST** be declared as type: ‘string’.
 
-Property: fixed\_ips, Map Property: subnet\_id
-++++++++++++++++++++++++++++++++++++++++++++++
+R-62983 When the VNF’s Heat Orchestration Template’s
+Resource ‘OS::Neutron::Port’ is attaching to an external network,
+the ‘network’ parameter name **MUST**
 
-The property fixed\_ips is used to assign IPs to a port. The Map
-Property subnet\_id specifies the subnet the IP is assigned from.
+- follow the naming convention ‘{network-role}_net_id’ if the Neutron
+  network UUID value is used to reference the network
+- follow the naming convention ‘{network-role}_net_name’ if the OpenStack
+  network name is used to reference the network.
 
-The property fixed\_ips and Map Property subnet\_id must be used if a
-Cloud (i.e., DHCP) IP address assignment is being requested and the
-Cloud IP address assignment is targeted at a specific subnet when two or
-more subnets exist.
+where ‘{network-role}’ is the network-role of the external network and
+a ‘get_param’ **MUST** be used as the intrinsic function.
 
-The property fixed\_ips and Map Property subnet\_id should not be used
-if all IP assignments are fixed, or if the Cloud IP address assignment
-does not target a specific subnet or there is only one subnet.
+R-86182 When the VNF’s Heat Orchestration Template’s
+Resource ‘OS::Neutron::Port’ is attaching to an internal network,
+and the internal network is created in a different
+Heat Orchestration Template than the ‘OS::Neutron::Port’, the ‘network’
+parameter name **MUST**
 
-Note that DHCP assignment of IP addresses is also referred to as cloud
-assigned IP addresses.
+- follow the naming convention ‘int\_{network-role}_net_id’ if the Neutron
+  network UUID value is used to reference the network
+- follow the naming convention ‘int\_{network-role}_net_name’ if the
+  OpenStack network name in is used to reference the network.
 
-Subnet of an External Networks
-______________________________
+where ‘{network-role}’ is the network-role of the internal network
+and a ‘get_param’ **MUST** be used as the intrinsic function.
 
-R-47716 The VNF Heat Orchestration Template **MUST** adhere to the following parameter naming
-convention for the property fixed\_ips and Map Property subnet\_id
-parameter, when the parameter is referencing a subnet of an
-“external” network.
+In Requirement R-86182, the internal network is created in the VNF's
+Base Module (Heat Orchestration Template) and the parameter name is
+declared in the Base Module's outputs' section.
+The output parameter name will be declared as a parameter in the
+'parameters' section of the incremental module.
 
--  {network-role}\_subnet\_id if the subnet is an IPv4 subnet
+R-93177 When the VNF’s Heat Orchestration Template’s
+Resource ‘OS::Neutron::Port’ is attaching to an internal
+network, and the internal network is created in the same Heat
+Orchestration Template than the ‘OS::Neutron::Port’, the ‘network’
+parameter name **MUST** obtain the UUID of the internal network
+by using the intrinsic function ‘get_resource’ or ‘get_attr’
+and referencing the Resource ID of the internal network.
 
--  {network-role}\_v6\_subnet\_id if the subnet is an IPv6 subnet
+R-29872 The VNF’s Heat Orchestration Template’s Resource ‘OS::Nova::Server’
+property ‘network’ parameter **MUST NOT** be enumerated in the Heat
+Orchestration Template’s Environment File.
 
-The parameter must be declared as type: string
+The parameter values for external networks are provided by ONAP
+to the VNF's Heat Orchestration Template at orchestration time.
 
-The parameter must not be enumerated in the Heat environment file.
+The parameter values for internal networks created in the VNF's Base Module
+Heat Orchestration Template
+are provided to the VNF's Incremental Module Heat Orchestration Template
+at orchestration time.
 
-*Example Parameter Definition*
+*Example Parameter Definition of External Networks*
 
-.. code-block:: yaml
+.. code-block:: python
 
- parameters:
-     {network-role}_subnet_id:
-         type: string
-         description: Neutron subnet UUID for the {network-role} network
+  parameters:
 
-     {network-role}_v6_subnet_id:
-         type: string
-         description: Neutron subnet UUID for the {network-role} network
+    {network-role}_net_id:
+      type: string
+      description: Neutron UUID for the external {network-role} network
 
-*Example: One Cloud Assigned IPv4 Address (DHCP) assigned to a network
-that has two or more subnets subnet:*
+    {network-role}_net_name:
+      type: string
+      description: Neutron name for the external {network-role} network
 
-In this example, the {network-role} has been defined as oam to represent
-an oam network and the {vm-type} has been defined as lb for load
-balancer. The Cloud Assigned IP Address uses the OpenStack DHCP service
-to assign IP addresses.
 
-.. code-block:: yaml
+*Example Parameter Definition of Internal Networks in an Incremental Module*
 
- parameters:
-    oam_net_id:
-       type: string
-       description: Neutron UUID for the oam network
+.. code-block:: python
 
-    oam_subnet_id:
-       type: string
-       description: Neutron subnet UUID for the oam network
+  parameters:
 
- resources:
-    lb_port_1:
-       type: OS::Neutron::Port
-       network: { get_param: oam_net_id }
-    fixed_ips:
-      - subnet_id: { get_param: oam_subnet_id }
+    int_{network-role}_net_id:
+      type: string
+      description: Neutron UUID for the internal int_{network-role} network
 
-*Example: One Cloud Assigned IPv4 address and one Cloud Assigned IPv6
-address assigned to a network that has at least one IPv4 subnet and one
-IPv6 subnet*
+    int_{network-role}_net_name:
+      type: string
+      description: Neutron name for the internal int_{network-role} network
 
-In this example, the {network-role} has been defined as oam to represent
-an oam network and the {vm-type} has been defined as lb for load
-balancer.
+Property: fixed_ips, Map Property: ip_address
++++++++++++++++++++++++++++++++++++++++++++++
 
-.. code-block:: yaml
+The resource 'OS::Neutron::Port' property 'fixed_ips'
+map property 'ip_address'
+is used to assign one IPv4 or IPv6
+addresses to port.
 
- parameters:
-    oam_net_id:
-       type: string
-       description: Neutron UUID for the oam network
+One 'OS::Neutron::Port' resource may assign one or more
+IPv4 and/or IPv6 addresses.
 
-    oam_subnet_id:
-       type: string
-       description: Neutron subnet UUID for the oam network
+R-34037 The VNF’s Heat Orchestration Template’s resource ‘OS::Neutron::Port’
+property ‘fixed_ips’ map property ‘ip_address’ parameter **MUST**
+be declared as either type ‘string’ or type ‘comma_delimited_list’.
 
-    oam_v6_subnet_id:
-       type: string
-       description: Neutron subnet UUID for the oam network
+R-40971 When the VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ is attaching to an external network, and an IPv4 address is
+assigned using the property
+‘fixed_ips’ map property ‘ip_address’ and the parameter type is defined
+as a string, the parameter name **MUST** follow the naming
+convention ‘{vm-type}_{network-role}\_ip\_{index}’, where
 
- resources:
-    lb_port_1:
-       type: OS::Neutron::Port
-       properties:
-          network: { get_param: oam_net_id }
-          fixed_ips:
-           - subnet_id: { get_param: oam_subnet_id }
-           - subnet_id: { get_param: oam_v6_subnet_id }
+- ‘{vm-type}’ is the {vm-type} associated with the OS::Nova::Server
+- ‘{network-role}’ is the {network-role} of the external network
+- the value for {index} must start at zero (0) and increment by one
 
-Internal Networks
-_________________
+R-39841 The VNF’s Heat Orchestration Template’s Resource ‘OS::Neutron::Port’
+property ‘fixed_ips’ map property ‘ip_address’ parameter
+‘{vm-type}_{network-role}\_ip\_{index}’ **MUST NOT** be enumerated in the
+VNF’s Heat Orchestration Template’s Environment File.
 
-R-20106 The VNF Heat Orchestration Template **MUST** adhere to the following naming convention for
-the property fixed\_ips and Map Property subnet\_id parameter,
-when the parameter is referencing the subnet of an “internal” network:
+ONAP's SDN-Controller assigns the IP Address and ONAP provides
+the value at orchestration to the Heat Orchestration Template.
 
--  int\_{network-role}\_subnet\_id if the subnet is an IPv4 subnet
+*Example External Network IPv4 Address string Parameter Definition*
 
--  int\_{network-role}\_v6\_subnet\_id if the subnet is an IPv6 subnet
+.. code-block:: python
 
-The parameter must be declared as type: string
+  parameters:
 
-The assumption is that internal networks are created in the base module.
-The Neutron subnet network ID will be passed as an output parameter
-(e.g., ONAP Base Module Output Parameter) to the incremental modules. In
-the incremental modules, it will be defined as input parameter.
+    {vm-type}_{network-role}_ip_{index}:
+      type: string
+      description: Fixed IPv4 assignment for {vm-type} VM {index} on the{network-role} network
 
-*Example Parameter Definition*
+R-04697 When the VNF’s Heat Orchestration Template’s
+Resource ‘OS::Neutron::Port’ is attaching to an external
+network, and an IPv4 address is assigned using the property
+‘fixed_ips’ map property ‘ip_address’ and the parameter type
+is defined as a comma_delimited_list, the parameter name **MUST**
+follow the naming convention ‘{vm-type}_{network-role}_ips’,
+where
 
-.. code-block:: yaml
+- ‘{vm-type}’ is the {vm-type} associated with the OS::Nova::Server
+- ‘{network-role}’ is the {network-role} of the external network
 
- parameters:
-     int_{network-role}_subnet_id:
-        type: string
-         description: Neutron subnet UUID for the {network-role} network
+R-98905 The VNF’s Heat Orchestration Template’s Resource ‘OS::Neutron::Port’
+property ‘fixed_ips’ map property ‘ip_address’ parameter
+‘{vm-type}_{network-role}_ips’ **MUST NOT** be enumerated in the VNF’s
+Heat Orchestration Template’s Environment File.
 
-     int_{network-role}_v6_subnet_id:
-         type: string
-         description: Neutron subnet UUID for the {network-role} network
+ONAP's SDN-Controller assigns the IP Address and ONAP provides
+the value at orchestration to the Heat Orchestration Template.
 
-Property: fixed\_ips, Map Property: ip\_address
-+++++++++++++++++++++++++++++++++++++++++++++++
+*Example External Network IPv4 Address comma_delimited_list
+Parameter Definition*
 
-The property fixed\_ips is used to assign IPs to a port. The Map
-Property ip\_address specifies the IP address to be assigned to the
-port.
+.. code-block:: python
 
-The property fixed\_ips and Map Property ip\_address must be used when
-statically assigning one or more IP addresses to a port. This is also
-referred to as ONAP SDN-C IP address assignment. ONAP’s SDN-C provides
-the IP address assignment.
+  parameters:
 
-An IP address is assigned to a port on a VM (referenced by {vm-type})
-that is connected to an external network (referenced by {network-role})
-or internal network (referenced by int\_{network-role}).
+    {vm-type}_{network-role}_ips:
+      type: comma_delimited_list
+      description: Fixed IPv4 assignments for {vm-type} VMs on the {network-role} network
 
-R-41177 The VNF Heat Orchestration Template **MUST** include {vm-type} and {network-role}
-in the parameter name, when a SDN-C IP assignment is made to a
-port connected to an external network.
+R-71577 When the VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ is attaching to an external network, and an IPv6 address
+is assigned using the property ‘fixed_ips’ map property ‘ip_address’ and
+the parameter type is defined as a string, the parameter name **MUST** follow
+the naming convention ‘{vm-type}_{network-role}\_v6\_ip\_{index}’, where
 
-When a SDN-C IP assignment is made to a port connected to an internal
-network, the parameter name must contain {vm-type} and
-int\_{network-role}.
+- ‘{vm-type}’ is the {vm-type} associated with the OS::Nova::Server
+- ‘{network-role}’ is the {network-role} of the external network
+- the value for {index} must start at zero (0) and increment by one
 
-IP Address Assignments on External Networks
-___________________________________________
 
-When the property fixed\_ips and Map Property ip\_address is used to
-assign IP addresses to an external network, the parameter name is
-dependent on the parameter type (comma\_delimited\_list or string) and
-IP address type (IPv4 or IPv6).
+R-87123 The VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ property ‘fixed_ips’ map property ‘ip_address’
+parameter ‘{vm-type}_{network-role}\_v6\_ip\_{index}’
+**MUST NOT** be enumerated in the VNF’s Heat Orchestration
+Template’s Environment File.
 
-R-84898 The VNF Heat Orchestration Template **MUST** adhere to the following naming convention,
-when the parameter for property fixed\_ips and Map Property ip\_address
-is declared type: comma\_delimited\_list:
+ONAP's SDN-Controller assigns the IP Address and ONAP provides
+the value at orchestration to the Heat Orchestration Template.
 
--  {vm-type}\_{network-role}\_ips for IPv4 address
+*Example External Network IPv6 Address string Parameter Definition*
 
--  {vm-type}\_{network-role}\_v6\_ips for IPv6 address
+.. code-block:: python
 
-Each element in the IP list should be assigned to successive instances
-of {vm-type} on {network-role}.
+  parameters:
 
-The parameter must not be enumerated in the Heat environment file.
+    {vm-type}_{network-role}_v6_ip_{index}:
+      type: string
+      description: Fixed IPv6 assignment for {vm-type} VM {index} on the {network-role} network
 
-*Example Parameter Definition*
+R-23503 When the VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ is attaching to an external network, and an IPv6
+address is assigned using the property ‘fixed_ips’ map property ‘ip_address’
+and the parameter type is defined as a comma_delimited_list, the parameter
+name **MUST** follow the naming convention
+‘{vm-type}_{network-role}_v6_ips’, where
 
-.. code-block:: yaml
+- ‘{vm-type}’ is the {vm-type} associated with the OS::Nova::Server
+- ‘{network-role}’ is the {network-role} of the external network
 
- parameters:
+R-93030 The VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ property ‘fixed_ips’ map property ‘ip_address’
+parameter ‘{vm-type}_{network-role}_v6_ips’ **MUST NOT** be enumerated in the
+VNF’s Heat Orchestration Template’s Environment File.
 
-    {vm-type}_{network-role}_ips:
-       type: comma_delimited_list
-       description: Fixed IPv4 assignments for {vm-type} VMs on the {Network-role} network
+ONAP's SDN-Controller assigns the IP Address and ECOMP provides
+the value at orchestration to the Heat Orchestration Template.
+
+*Example External Network IPv6 Address comma_delimited_list Parameter
+Definition*
+
+.. code-block:: python
+
+  parameters:
 
     {vm-type}_{network-role}_v6_ips:
-       type: comma_delimited_list
-       description: Fixed IPv6 assignments for {vm-type} VMs on the {network-role} network
+      type: comma_delimited_list
+      description: Fixed IPv6 assignments for {vm-type} VMs on the {network-role} network
 
-*Example: comma\_delimited\_list parameters for IPv4 and IPv6 Address
-Assignments to an external network*
+R-78380 When the VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ is attaching to an internal network, and an IPv4 address
+is assigned using the property ‘fixed_ips’ map property ‘ip_address’ and
+the parameter type is defined as a string, the parameter name **MUST** follow
+the naming convention ‘{vm-type}\_int\_{network-role}\_ip\_{index}’, where
 
-In this example, the {network-role} has been defined as oam to represent
-an oam network and the {vm-type} has been defined as db for database.
+- ‘{vm-type}’ is the {vm-type} associated with the OS::Nova::Server
+- ‘{network-role}’ is the {network-role} of the internal network
+- the value for {index} must start at zero (0) and increment by one
 
-.. code-block:: yaml
+R-28795 The VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ property ‘fixed_ips’ map property ‘ip_address’
+parameter ‘{vm-type}\_int\_{network-role}\_ip\_{index}’ **MUST** be enumerated
+in the VNF’s Heat Orchestration Template’s Environment File.
 
- parameters:
-    oam_net_id:
-       type: string
-       description: Neutron UUID for a oam network
+The IP address is local to the VNF's internal network and is (re)used
+in every VNF spin up, thus the constant value is declared in the VNF's
+Heat Orchestration Template's Environment File.
 
-    db_oam_ips:
-       type: comma_delimited_list
-       description: Fixed IPv4 assignments for db VMs on the oam network
+*Example Internal Network IPv4 Address string Parameter Definition*
 
-    db_oam_v6_ips:
-       type: comma_delimited_list
-       description: Fixed IPv6 assignments for db VMs on the oam network
+.. code-block:: python
 
- resources:
-    db_0_port_1:
-       type: OS::Neutron::Port
-       network: { get_param: oam_net_id }
-       fixed_ips: [ { “ip_address”: {get_param: [ db_oam_ips, 0 ]}}, {“ip_address”: {get_param: [ db_oam_v6_ips, 0 ]}}]
+  parameters:
 
-    db_1_port_1:
-       type: OS::Neutron::Port
-       properties:
-       network: { get_param: oam_net_id }
-       fixed_ips:
-          - “ip_address”: {get_param: [ db_oam_ips, 1 ]}
-          - “ip_address”: {get_param: [ db_oam_v6_ips, 1 ]}
+    {vm-type}_int_{network-role}_ip_{index}:
+      type: string
+      description: Fixed IPv4 assignment for {vm-type} VM {index} on the int_{network-role} network
 
-R-34960 The VNF Heat Orchestration Template **MUST** adhere to the following
-naming convention,
-when the parameter for property fixed\_ips and Map Property ip\_address
-is declared type: string:
+R-85235 When the VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ is attaching to an internal network, and an IPv4
+address is assigned using the property ‘fixed_ips’ map property ‘ip_address’
+and the parameter type is defined as a comma_delimited_list, the parameter
+name **MUST** follow the naming convention
+‘{vm-type}\_int\_{network-role}_ips’, where
 
--  {vm-type}\_{network-role}\_ip\_{index} for an IPv4 address
+- ‘{vm-type}’ is the {vm-type} associated with the OS::Nova::Server
+- ‘{network-role}’ is the {network-role} of the internal network
 
--  {vm-type}\_{network-role}\_v6\_ip\_{index} for an IPv6 address
+R-90206 The VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ property ‘fixed_ips’ map property ‘ip_address’
+parameter ‘{vm-type}\_int\_{network-role}_int_ips’ **MUST** be enumerated in
+the VNF’s Heat Orchestration Template’s Environment File.
 
-The value for {index} must start at zero (0) and increment by one.
+The IP address is local to the VNF's internal network and is (re)used
+in every VNF spin up, thus the constant value is declared in the VNF's
+Heat Orchestration Template's Environment File.
 
-The parameter must not be enumerated in the Heat environment file.
+.. code-block:: python
 
-*Example Parameter Definition*
+  parameters:
 
-.. code-block:: yaml
+    {vm-type}_int_{network-role}_ips:
+      type: comma_delimited_list
+      description: Fixed IPv4 assignments for {vm-type} VMs on the int_{network-role} network
 
- parameters:
-    {vm-type}_{network-role}_ip_{index}:
-       type: string
-       description: Fixed IPv4 assignment for {vm-type} VM {index} on the{network-role} network
+R-27818 When the VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ is attaching to an internal network, and an IPv6 address
+is assigned using the property ‘fixed_ips’ map property ‘ip_address’ and
+the parameter type is defined as a string, the parameter name **MUST** follow
+the naming convention ‘{vm-type}\_int\_{network-role}\_v6\_ip\_{index}’, where
 
-    {vm-type}_{network-role}_v6_ip_{index}:
-       type: string
-       description: Fixed IPv6 assignment for {vm-type} VM {index} on the{network-role} network
+- ‘{vm-type}’ is the {vm-type} associated with the OS::Nova::Server
+- ‘{network-role}’ is the {network-role} of the internal network
+- the value for {index} must start at zero (0) and increment by one
 
-*Example: string parameters for IPv4 and IPv6 Address Assignments
-to an external network*
+R-97201 The VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ property ‘fixed_ips’ map property ‘ip_address’
+parameter ‘{vm-type}\_int\_{network-role}\_v6\_ip\_{index}’
+**MUST** be enumerated in the VNF’s Heat Orchestration
+Template’s Environment File.
 
-In this example, the {network-role} has been defined as “oam” to
-represent an oam network and the {vm-type} has been defined as “db” for
-database.
+The IP address is local to the VNF's internal network and is (re)used
+in every VNF spin up, thus the constant value is declared in the VNF's
+Heat Orchestration Template's Environment File.
 
-.. code-block:: yaml
+*Example Internal Network IPv6 Address string Parameter Definition*
 
- parameters:
-    oam_net_id:
-    type: string
-    description: Neutron UUID for an OAM network
+.. code-block:: python
 
- db_oam_ip_0:
-    type: string
-    description: Fixed IPv4 assignment for db VM 0 on the OAM network
+  parameters:
 
db_oam_ip_1:
-    type: string
-    description: Fixed IPv4 assignment for db VM 1 on the OAM network
   {vm-type}_int_{network-role}_v6_ip_{index}:
+      type: string
+      description: Fixed IPv6 assignment for {vm-type} VM {index} on the int_{network-role} network
 
- db_oam_v6_ip_0:
-    type: string
-    description: Fixed IPv6 assignment for db VM 0 on the OAM network
+R-29765 When the VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ is attaching to an internal network, and an IPv6
+address is assigned using the property ‘fixed_ips’ map property ‘ip_address’
+and the parameter type is defined as a comma_delimited_list, the parameter
+name **MUST** follow the naming convention
+‘{vm-type}\_int\_{network-role}_v6_ips’, where
 
- db_oam_v6_ip_1:
-    type: string
-    description: Fixed IPv6 assignment for db VM 1 on the OAM network
+- ‘{vm-type}’ is the {vm-type} associated with the OS::Nova::Server
+- ‘{network-role}’ is the {network-role} of the internal network
 
- resources:
-    db_0_port_1:
-       type: OS::Neutron::Port
-       properties:
-          network: { get_param: oam_net_id }
-          fixed_ips: [ { “ip_address”: {get_param: db_oam_ip_0}}, {“ip_address”: {get_param: db_oam_v6_ip_0 ]}}]
+*Example Internal Network IPv6 Address comma_delimited_list Parameter
+Definition*
 
-    db_1_port_1:
-       type: OS::Neutron::Port
-       properties:
-          network: { get_param: oam_net_id }
-          fixed_ips:
-             - “ip_address”: {get_param: db_oam_ip_1}}]
-             - “ip_address”: {get_param: db_oam_v6_ip_1}}]
+.. code-block:: python
+
+  parameters:
+
+    {vm-type}_int_{network-role}_v6_ips:
+      type: comma_delimited_list
+      description: Fixed IPv6 assignments for {vm-type} VMs on the int_{network-role} network
 
-IP Address Assignment on Internal Networks
-__________________________________________
+R-98569 The VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ property ‘fixed_ips’ map property ‘ip_address’
+parameter ‘{vm-type}\_int\_{network-role}_v6_ips’ **MUST** be enumerated in
+the VNF’s Heat Orchestration Template’s Environment File.
 
-When the property fixed\_ips and Map Property ip\_address is used to
-assign IP addresses to an internal network, the parameter name is
-dependent on the parameter type (comma\_delimited\_list or string) and
-IP address type (IPv4 or IPv6).
+The IP address is local to the VNF's internal network and is (re)used
+in every VNF spin up, thus the constant value is declared in the VNF's
+Heat Orchestration Template's Environment File.
 
-R-62584 The VNF Heat Orchestration Template **MUST** adhere to
-the following naming convention,
-when the parameter for property fixed\_ips and Map Property ip\_address
-is declared type: comma\_delimited\_list:
+R-62590 The VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ property ‘fixed_ips’ map property ‘ip_address’
+parameter associated with an external network, i.e.,
 
--  {vm-type}\_int\_{network-role}\_ips for IPv4 address
+- {vm-type}_{network-role}\_ip\_{index}
+- {vm-type}_{network-role}\_ip\_v6\_{index}
+- {vm-type}_{network-role}_ips
+- {vm-type}_{network-role}_v6_ips
 
--  {vm-type}\_int\_{network-role}\_v6\_ips for IPv6 address
+**MUST NOT** be enumerated in the Heat Orchestration Template’s
+Environment File. ONAP provides the IP address assignments at
+orchestration time.
 
-Each element in the IP list should be assigned to successive instances
-of {vm-type} on {network-role}.
+R-93496 The VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ property ‘fixed_ips’ map property ‘ip_address’
+parameter associated with an internal network, i.e.,
 
-The parameter must be enumerated in the Heat environment file. Since an
-internal network is local to the VNF, IP addresses can be re-used at
-every VNF instance.
+- {vm-type}\_int\_{network-role}\_ip\_{index}
+- {vm-type}\_int\_{network-role}\_ip\_v6\_{index}
+- {vm-type}\_int\_{network-role}_ips
+- {vm-type}\_int\_{network-role}_v6_ips
 
-*Example Parameter Definition*
+**MUST** be enumerated in the Heat Orchestration Template’s Environment
+File and IP addresses **MUST** be assigned.
 
-.. code-block:: yaml
+Summary Table
+_____________
 
- parameters:
+.. csv-table:: **Table # OS::Neutron::Port Property fixed_ips map property ip_address Parameter Naming Convention**
+   :header: Resource,Property,Map Property,Network Type,IP Address,Parameter Type,Parameter Name, Environment File
+   :align: center
+   :widths: auto
 
-    {vm-type}_int_{network-role}_ips:
-       type: comma_delimited_list
-       description: Fixed IPv4 assignments for {vm-type} VMs on the int_{network-role} network
+   OS::Neutron::Port, fixed_ips, ip_address, external, IPv4, string, {vm-type}\_{network-role}\_ip\_{index}, NO
+   OS::Neutron::Port, fixed_ips, ip_address, external, IPv4, comma\_delimited\_list, {vm-type}\_{network-role}\_ips, NO
+   OS::Neutron::Port, fixed_ips, ip_address, external, IPv6, string, {vm-type}\_{network-role}\_v6\_ip\_{index}, NO
+   OS::Neutron::Port, fixed_ips, ip_address, external, IPv6, comma\_delimited\_list, {vm-type}\_{network-role}\_v6\_ips, NO
+   OS::Neutron::Port, fixed_ips, ip_address, internal, IPv4, string, {vm-type}\_int\_{network-role}\_ip\_{index}, YES
+   OS::Neutron::Port, fixed_ips, ip_address, internal, IPv4, comma\_delimited\_list, {vm-type}\_int\_{network-role}\_ips, YES
+   OS::Neutron::Port, fixed_ips, ip_address, internal, IPv6, string, {vm-type}\_int\_{network-role}\_v6\_ip\_{index}, YES
+   OS::Neutron::Port, fixed_ips, ip_address, internal, IPv6, comma\_delimited\_list, {vm-type}\_int\_{network-role}\_v6\_ips, YES
 
-    {vm-type}_int_{network-role}_v6_ips:
-       type: comma_delimited_list
-       description: Fixed IPv6 assignments for {vm-type} VMs on the int_{network-role} network
 
-*Example: comma\_delimited\_list parameters for IPv4 and IPv6 Address
+Examples
+________
+
+*Example: comma_delimited_list parameters for IPv4 and IPv6 Address
+Assignments to an external network*
+
+In this example, the '{network-role}' has been defined as 'oam' to represent
+an oam network and the '{vm-type}' has been defined as 'db' for database.
+
+.. code-block:: python
+
+  parameters:
+    oam_net_id:
+      type: string
+      description: Neutron UUID for a oam network
+    db_oam_ips:
+      type: comma_delimited_list
+      description: Fixed IPv4 assignments for db VMs on the oam network
+    db_oam_v6_ips:
+      type: comma_delimited_list
+      description: Fixed IPv6 assignments for db VMs on the oam network
+  resources:
+    db_0_oam_port_0:
+      type: OS::Neutron::Port
+      properties:
+        network: { get_param: oam_net_id }
+        fixed_ips: [ { “ip_address”: {get_param: [ db_oam_ips, 0 ]}}, {
+        “ip_address”: {get_param: [ db_oam_v6_ips, 0 ]}}]
+    db_1_oam_port_0:
+      type: OS::Neutron::Port
+      properties:
+        network: { get_param: oam_net_id }
+        fixed_ips:
+          - “ip_address”: {get_param: [ db_oam_ips, 1 ]}
+          - “ip_address”: {get_param: [ db_oam_v6_ips, 1 ]}
+
+*Example: string parameters for IPv4 and IPv6 Address Assignments to an
+external network*
+
+In this example, the '{network-role}' has been defined as 'oam' to
+represent an oam network and the '{vm-type}' has been defined as 'db' for
+database.
+
+.. code-block:: python
+
+  parameters:
+    oam_net_id:
+      type: string
+      description: Neutron UUID for an OAM network
+    db_oam_ip_0:
+      type: string
+      description: Fixed IPv4 assignment for db VM 0 on the OAM network
+    db_oam_ip_1:
+      type: string
+      description: Fixed IPv4 assignment for db VM 1 on the OAM network
+    db_oam_v6_ip_0:
+      type: string
+      description: Fixed IPv6 assignment for db VM 0 on the OAM network
+    db_oam_v6_ip_1:
+      type: string
+      description: Fixed IPv6 assignment for db VM 1 on the OAM network
+  resources:
+    db_0_oam_port_0:
+      type: OS::Neutron::Port
+      properties:
+        network: { get_param: oam_net_id }
+        fixed_ips: [ { “ip_address”: {get_param: db_oam_ip_0}}, { “ip_address”: {get_param: db_oam_v6_ip_0 ]}}]
+    db_1_oam_port_0:
+      type: OS::Neutron::Port
+      properties:
+        network: { get_param: oam_net_id }
+        fixed_ips:
+          - “ip_address”: {get_param: db_oam_ip_1}}]
+          - “ip_address”: {get_param: db_oam_v6_ip_1}}]
+
+
+*Example: comma_delimited_list parameters for IPv4 and IPv6 Address
 Assignments to an internal network*
 
-In this example, the {network-role} has been defined as oam\_int to
-represent an oam network internal to the vnf. The role oam\_int was
-picked to differentiate from an external oam network with a
-{network-role} of oam. The {vm-type} has been defined as db for
+In this example, the '{network-role}' has been defined as 'ctrl' to
+represent an ctrl network internal to the vnf.
+The '{vm-type}' has been defined as 'db' for
 database.
 
-.. code-block:: yaml
+.. code-block:: python
 
- parameters:
-    int_oam_int_net_id:
-       type: string
-       description: Neutron UUID for the oam internal network
+  parameters:
+    int_ctrl_net_id:
+      type: string
+      description: Neutron UUID for the ctrl internal network
+    db_int_ctrl_ips:
+      type: comma_delimited_list
+      description: Fixed IPv4 assignments for db VMs on the ctrl internal
+      network
+    db_int_ctrl_v6_ips:
+      type: comma_delimited_list
+      description: Fixed IPv6 assignments for db VMs on the ctrl internal
+      network
+  resources:
+    db_0_int_ctrl_port_0:
+      type: OS::Neutron::Port
+      properties:
+        network: { get_param: int_ctrl_net_id }
+        fixed_ips: [ { “ip_address”: {get_param: [ db_int_ctrl_ips, 0 ]}}, {
+        “ip_address”: {get_param: [ db_int_ctrl_v6_ips, 0 ]}}]
+    db_1_int_ctrl_port_0:
+      type: OS::Neutron::Port
+      properties:
+        network: { get_param: int_ctrl_net_id }
+        fixed_ips:
+        - “ip_address”: {get_param: [ db_int_ctrl_ips, 1 ]}
+        - “ip_address”: {get_param: [ db_int_ctrl_v6_ips, 1 ]}
 
-    db_int_oam_int_ips:
-       type: comma_delimited_list
-       description: Fixed IPv4 assignments for db VMs on the oam internal network
 
-    db_int_oam_int_v6_ips:
-       type: comma_delimited_list
-       description: Fixed IPv6 assignments for db VMs on the oam internal network
+*Example: string parameters for IPv4 and IPv6 Address Assignments to an
+internal network*
 
- resources:
-    db_0_port_1:
-       type: OS::Neutron::Port
-       properties:
-       network: { get_param: int_oam_int_net_id }
-       fixed_ips: [ { “ip_address”: {get_param: [ db_int_oam_int_ips, 0]}}, { “ip_address”: {get_param: [ db_int_oam_int_v6_ips, 0 ]}}]
+In this example, the int\_{network-role} has been defined as
+int_ctrl to represent a control network internal to the vnf.
+The {vm-type} has been defined as db for database.
 
-    db_1_port_1:
-       type: OS::Neutron::Port
-       properties:
-       network: { get_param: int_oam_int_net_id }
-       fixed_ips:
-          - “ip_address”: {get_param: [ db_int_oam_int_ips, 1 ]}
-          - “ip_address”: {get_param: [ db_int_oam_int_v6_ips, 1 ]}
+.. code-block:: python
+
+  parameters:
+    int_ctrl_net_id:
+      type: string
+      description: Neutron UUID for an OAM internal network
+    db_int_ctrl_ip_0:
+      type: string
+      description: Fixed IPv4 assignment for db VM on the oam_int network
+    db_int_ctrl_ip_1:
+      type: string
+      description: Fixed IPv4 assignment for db VM 1 on the oam_int network
+    db_int_ctrl_v6_ip_0:
+      type: string
+      description: Fixed IPv6 assignment for db VM 0 on the oam_int network
+    db_int_ctrl_v6_ip_1:
+      type: string
+      description: Fixed IPv6 assignment for db VM 1 on the oam_int network
+  resources:
+    db_0_int_ctrl_port_0:
+      type: OS::Neutron::Port
+      properties:
+        network: { get_param: int_oam_int_net_id }
+        fixed_ips: [ { “ip_address”: {get_param: db_oam_int_ip_0}}, {
+        “ip_address”: {get_param: db_oam_int_v6_ip_0 ]}}]
+    db_1_int_ctrl_port_0:
+      type: OS::Neutron::Port
+      properties:
+        network: { get_param: int_oam_int_net_id }
+        fixed_ips:
+          - “ip_address”: {get_param: db_oam_int_ip_1}}]
+          - “ip_address”: {get_param: db_oam_int_v6_ip_1}}]
+
+
+Property: fixed\_ips, Map Property: subnet\_id
+++++++++++++++++++++++++++++++++++++++++++++++
+
+The resource 'OS::Neutron::Port' property 'fixed_ips' map
+property 'subnet'/'subnet_id' is used when a
+port is requesting an IP assignment via
+OpenStack’s DHCP Service (i.e., Cloud Assigned).
 
-R-29256 The VNF Heat Orchestration Template **MUST** must adhere to the following
-naming convention,
-when the parameter for property fixed\_ips and Map Property ip\_address
-is declared type: string:
+The IP address assignment will be made from the specified subnet.
 
--  {vm-type}\_int\_{network-role}\_ip\_{index} for an IPv4 address
+Specifying the subnet is not required; it is optional.
 
--  {vm-type}\_int\_{network-role}\_v6\_ip\_{index} for an IPv6 address
+If the network (external or internal) that the port is attaching
+to only contains one subnet, specifying the subnet is
+superfluous.  The IP address will be assigned from the one existing
+subnet.
 
-The value for {index} must start at zero (0) and increment by one.
+If the network (external or internal) that the port is attaching
+to contains two or more subnets, specifying the subnet in the
+'fixed_ips' map property 'subnet'/'subnet_id' determines which
+subnet the IP address will be assigned from.
 
-The parameter must be enumerated in the Heat environment file. Since an
-internal network is local to the VNF, IP addresses can be re-used at
-every VNF instance.
+If the network (external or internal) that the port is attaching
+to contains two or more subnets, and the subnet is not is not
+specified, OpenStack will randomly(?) determine which subnet
+the IP address will be assigned from.
+
+The property fixed_ips is used to assign IPs to a port. The Map Property
+subnet_id specifies the subnet the IP is assigned from.
+
+R-38236 The VNF’s Heat Orchestration Template’s resource
+‘OS::Neutron::Port’ property ‘fixed_ips’ map property
+‘subnet’/’subnet_id’ parameter **MUST** be declared type ‘string’.
+
+R-62802 When the VNF’s Heat Orchestration Template’s resource
+‘OS::Neutron::Port’ is attaching to an external network, and an IPv4
+address is being Cloud Assigned by OpenStack’s DHCP Service and the
+external network IPv4 subnet is to be specified using the property
+‘fixed_ips’ map property ‘subnet’/’subnet_id’, the parameter **MUST**
+follow the naming convention ‘{network-role}_subnet_id’, where
+‘{network-role}’ is the network role of the network.
+
+R-83677 The VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ property ‘fixed_ips’ map property
+subnet’/’subnet_id’ parameter ‘{network-role}_subnet_id’
+**MUST NOT** be enumerated in the VNF’s Heat Orchestration Template’s
+Environment File.
+
+ONAP's SDN-Controller provides the network's subnet's UUID
+value at orchestration to the Heat Orchestration Template.
 
 *Example Parameter Definition*
 
-.. code-block:: yaml
+.. code-block:: python
 
- parameters:
 parameters:
 
-    {vm-type}_int_{network-role}_ip_{index}:
-       type: string
-       description: Fixed IPv4 assignment for {vm-type} VM {index} on the{network-role} network
+    {network-role}_subnet_id:
+      type: string
+      description: Neutron IPv4 subnet UUID for the {network-role} network
 
-    {vm-type}_int_{network-role}_v6_ip_{index}:
-       type: string
-       description: Fixed IPv6 assignment for {vm-type} VM {index} on the{network-role} network
+R-15287 When the VNF’s Heat Orchestration Template’s resource
+‘OS::Neutron::Port’ is attaching to an external network, and an IPv6
+address is being Cloud Assigned by OpenStack’s DHCP Service and the
+external network IPv6 subnet is to be specified using the property
+‘fixed_ips’ map property ‘subnet’/’subnet_id’, the parameter **MUST**
+follow the naming convention ‘{network-role}_subnet_v6_id’, where
+‘{network-role}’ is the network role of the network.
 
-*Example: string parameters for IPv4 and IPv6 Address Assignments
-to an internal network*
+R-80829 The VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ property ‘fixed_ips’ map property
+subnet’/’subnet_id’ parameter ‘{network-role}_subnet_v6_id’
+**MUST NOT** be enumerated in the VNF’s Heat Orchestration Template’s
+Environment File.
 
-In this example, the {network-role} has been defined as oam\_int to
-represent an oam network internal to the vnf. The role oam\_int was
-picked to differentiate from an external oam network with a
-{network-role} of oam. The {vm-type} has been defined as db for
-database.
+ONAP's SDN-Controller provides the network's subnet's UUID
+value at orchestration to the Heat Orchestration Template.
 
-.. code-block:: yaml
+*Example Parameter Definition*
 
- parameters:
-    int_oam_int_net_id:
-       type: string
-       description: Neutron UUID for an OAM internal network
+.. code-block:: python
 
-    db_oam_int_ip_0:
-       type: string
-       description: Fixed IPv4 assignment for db VM on the oam_int network
+  parameters:
 
-    db_oam_int_ip_1:
-       type: string
-       description: Fixed IPv4 assignment for db VM 1 on the oam_int network
+    {network-role}_v6_subnet_id:
+      type: string
+      description: Neutron IPv6 subnet UUID for the {network-role} network
 
-    db_oam_int_v6_ip_0:
-       type: string
-       description: Fixed IPv6 assignment for db VM 0 on the oam_int network
 
-    db_oam_int_v6_ip_1:
-       type: string
-       description: Fixed IPv6 assignment for db VM 1 on the oam_int network
+*Example: One Cloud Assigned IPv4 Address (DHCP) assigned to a network
+that has two or more IPv4 subnets*
 
- resources:
-    db_0_port_0:
-       type: OS::Neutron::Port
-       properties:
-          network: { get_param: int_oam_int_net_id }
-          fixed_ips: [ { “ip_address”: {get_param: db_oam_int_ip_0}}, {“ip_address”: {get_param: db_oam_int_v6_ip_0 ]}}]
+In this example, the '{network-role}' has been defined as 'oam' to represent
+an oam network and the '{vm-type}' has been defined as 'lb' for load
+balancer. The Cloud Assigned IP Address uses the OpenStack DHCP service
+to assign IP addresses.
 
-    db_1_port_0:
-       type: OS::Neutron::Port
-       properties:
-          network: { get_param: int_oam_int_net_id }
+.. code-block:: python
+
+  parameters:
+    oam_net_id:
+      type: string
+      description: Neutron UUID for the oam network
+    oam_subnet_id:
+      type: string
+      description: Neutron IPv4 subnet UUID for the oam network
+  resources:
+    lb_0_oam_port_0:
+      type: OS::Neutron::Port
+        parameters:
+          network: { get_param: oam_net_id }
           fixed_ips:
-             - “ip_address”: {get_param: db_oam_int_ip_1}}]
-             - “ip_address”: {get_param: db_oam_int_v6_ip_1}}]
+            - subnet_id: { get_param: oam_subnet_id }
+
+*Example: One Cloud Assigned IPv4 address and one Cloud Assigned IPv6
+address assigned to a network that has at least one IPv4 subnet and one
+IPv6 subnet*
+
+In this example, the '{network-role}' has been defined as 'oam' to represent
+an oam network and the '{vm-type}' has been defined as 'lb' for load
+balancer.
+
+.. code-block:: python
+
+  parameters:
+    oam_net_id:
+      type: string
+      description: Neutron UUID for the oam network
+    oam_subnet_id:
+      type: string
+      description: Neutron IPv4 subnet UUID for the oam network
+    oam_v6_subnet_id:
+      type: string
+      description: Neutron IPv6 subnet UUID for the oam network
+  resources:
+    lb_0_oam_port_0:
+      type: OS::Neutron::Port
+      properties:
+        network: { get_param: oam_net_id }
+        fixed_ips:
+          - subnet_id: { get_param: oam_subnet_id }
+          - subnet_id: { get_param: oam_v6_subnet_id }
+
+R-84123 When
+
+- the VNF’s Heat Orchestration Template’s resource ‘OS::Neutron::Port’
+  in an Incremental Module is attaching to an internal network
+  that is created in the Base Module, AND
+- an IPv4 address is being Cloud Assigned by OpenStack’s DHCP Service AND
+- the internal network IPv4 subnet is to be specified using the
+  property ‘fixed_ips’ map property ‘subnet’/’subnet_id’,
+
+the parameter **MUST** follow the naming convention
+‘int\_{network-role}_subnet_id’, where ‘{network-role}’ is the
+network role of the internal network
+
+- Note that the parameter **MUST** be defined as an ‘output’ parameter in
+  the base module.
+
+R-69634 The VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ property ‘fixed_ips’ map property
+subnet’/’subnet_id’ parameter ‘int\_{network-role}_subnet_id’
+**MUST NOT** be enumerated in the VNF’s Heat Orchestration Template’s
+Environment File.
+
+The assumption is that internal networks are created in the base module.
+The Neutron subnet network ID will be passed as an output parameter
+(e.g., ECOMP Base Module Output Parameter) to the incremental modules.
+In the incremental modules, the output parameter name will be defined as
+input parameter.
+
+*Example Parameter Definition*
+
+.. code-block:: python
+
+  parameters:
+
+    int_{network-role}_subnet_id:
+      type: string
+      description: Neutron IPv4 subnet UUID for the int_{network-role} network
+
+R-76160 When
+
+- the VNF’s Heat Orchestration Template’s resource
+  ‘OS::Neutron::Port’ in an Incremental Module is attaching to an
+  internal network that is created in the Base Module, AND
+- an IPv6 address is being Cloud Assigned by OpenStack’s DHCP Service AND
+- the internal network IPv6 subnet is to be specified using the property
+  ‘fixed_ips’ map property ‘subnet’/’subnet_id’,
+
+the parameter **MUST** follow the naming convention
+‘int\_{network-role}_v6_subnet_id’, where ‘{network-role}’
+is the network role of the internal network
+
+- Note that the parameter **MUST** be defined as an ‘output’ parameter in
+  the base module.
+
+R-22288 The VNF’s Heat Orchestration Template’s Resource
+‘OS::Neutron::Port’ property ‘fixed_ips’ map property
+‘subnet’/’subnet_id’ parameter ‘int\_{network-role}_v6_subnet_id’
+**MUST NOT** be enumerated in the VNF’s Heat Orchestration Template’s
+Environment File.
+
+*Example Parameter Definition*
+
+.. code-block:: python
+
+  parameters:
+
+    int_{network-role}_v6_subnet_id:
+      type: string
+      description: Neutron subnet UUID for the int_{network-role} network
+
 
 Property: allowed\_address\_pairs, Map Property: ip\_address
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -3916,9 +4143,10 @@ an oam network and the {vm-type} has been defined as db for database.
 Internal Networks
 _________________
 
-R-16805 The VNF Heat Orchestration Template **MUST** adhere to the following naming convention
-for the property allowed\_address\_pairs and Map Property ip\_address
-parameter when the parameter is referencing an “internal” network.
+R-16805 The VNF Heat Orchestration Template **MUST** adhere to the
+following naming convention for the property allowed\_address\_pairs
+and Map Property ip\_address parameter when the parameter is
+referencing an “internal” network.
 
 -  {vm-type}\_int\_{network-role}\_floating\_ip for an IPv4 address
 
@@ -3943,7 +4171,7 @@ The parameter must be enumerated in the Heat environment file.
        description: VIP for {vm-type} VMs on the int_{network-role} network
 
 Multiple allowed\_address\_pairs for a {vm-type} / {network-role} combination
-__________________________________________________________________
+______________________________________________________________________________
 
 The parameter {vm-type}\_{network-role}\_floating\_ip provides only one
 allowed address pair IPv4 address per {vm-type} and {network-role} pair.
@@ -4061,11 +4289,11 @@ OS::Nova::Server resources must be defined when the property is used.
 Not all resources require the property name (e.g., it is optional) and
 some resources do not support the property.
 
-R-85734 The VNF Heat Orchestration Template **MUST** use the intrinsic function str\_replace
-in conjunction with the ONAP supplied metadata parameter
-vnf\_name to generate a unique value,
-when the property name for a non OS::Nova::Server resources is defined
-in a Heat Orchestration Template.
+R-85734 The VNF Heat Orchestration Template **MUST** use the
+intrinsic function str\_replace in conjunction with the ONAP
+supplied metadata parameter vnf\_name to generate a unique
+value, when the property name for a non OS::Nova::Server
+resources is defined in a Heat Orchestration Template.
 
 This prevents the enumeration of a
 unique value for the property name in a per instance environment file.
@@ -4337,7 +4565,7 @@ virtual\_network\_refs references a contrail network FQDN.
        - get_param: fw_sec_grp_id
 
 Interface Route Table Prefixes for Contrail InterfaceRoute Table
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 The parameter associated with the resource
 OS::ContrailV2::InterfaceRouteTable property
@@ -4465,8 +4693,9 @@ module. Use of separate volume modules is optional. A Cinder volume may
 be embedded within the Base Module or Incremental Module if persistence
 is not required.
 
-R-47788 The VNF Heat Orchestration Template **MUST** have a 1:1 scope of a cinder volume module,
-when it exists, with the Base Module or Incremental Module
+R-47788 The VNF Heat Orchestration Template **MUST** have a 1:1
+scope of a cinder volume module, when it exists, with the
+Base Module or Incremental Module
 
 A single volume module must create only the volumes
 required by a single Incremental module or Base module.
@@ -4479,9 +4708,10 @@ The following rules apply to independent volume Heat templates:
 -  A single Cinder volume module must include all Cinder volumes
    needed by the Base/Incremental module.
 
--  R-79531 The VNF Heat Orchestration Template **MUST** define “outputs” in the volume
-   template for each Cinder volume resource universally unique
-   identifier (UUID) (i.e. ONAP Volume Template Output Parameters).
+-  R-79531 The VNF Heat Orchestration Template **MUST** define
+   “outputs” in the volume template for each Cinder volume
+   resource universally unique identifier (UUID) (i.e. ONAP
+   Volume Template Output Parameters).
 
 -  The VNF Incremental Module or Base Module must define input
    parameters that match each Volume output parameter (i.e., ONAP Volume
@@ -4578,8 +4808,8 @@ environment file for a Base Module.
 R-35727 The VNF Heat Orchestration Template **MUST** have a
 corresponding environment file for an Incremental module.
 
-R-22656 The VNF Heat Orchestration Template **MUST** have a corresponding environment file
-for a Cinder Volume Module.
+R-22656 The VNF Heat Orchestration Template **MUST** have a
+corresponding environment file for a Cinder Volume Module.
 
 A nested heat template must not have an environment file; OpenStack does
 not support it.
@@ -4658,12 +4888,12 @@ Nested heat templates must be referenced by file name. The use of
 resource\_registry in the environment file is not supported and must not
 be used.
 
-R-89868 The VNF Heat Orchestration Template **MUST** have unique file names within the scope
-of the VNF for a nested heat yaml file.
+R-89868 The VNF Heat Orchestration Template **MUST** have unique
+file names within the scope of the VNF for a nested heat yaml file.
 
-R-52530 The VNF Heat Orchestration Template **MUST NOT** use a directory hierarchy for
-nested templates. All templates must be in a single, flat directory
-(per VNF).
+R-52530 The VNF Heat Orchestration Template **MUST NOT** use a
+directory hierarchy for nested templates. All templates must
+be in a single, flat directory (per VNF).
 
 A nested heat template may be used by any module within a given VNF.
 
@@ -4672,12 +4902,13 @@ Note that:
 -  Constrains must not be defined for any parameter enumerated in a
    nested heat template.
 
--  R-11041 The VNF Heat Orchestration Template **MUST** have the resource calling the
-   nested yaml file pass in as properties all parameters defined
-   in nested yaml file.
+-  R-11041 The VNF Heat Orchestration Template **MUST** have the
+   resource calling the nested yaml file pass in as properties
+   all parameters defined in nested yaml file.
 
--  R-61183 The VNF Heat Orchestration Template **MUST NOT** change the parameter names, when OS::Nova::Server metadata parameters are past into a nested heat
-   template.
+-  R-61183 The VNF Heat Orchestration Template **MUST NOT**
+   change the parameter names, when OS::Nova::Server metadata
+   parameters are past into a nested heat template.
 
 -  With nested templates, outputs are required to expose any resource
    properties of the child templates to the parent template. Those would
@@ -4902,17 +5133,19 @@ a VM on startup via the “personality” property.
 
 Support for Heat Files is subject to the following limitations:
 
-R-76718 The VNF Heat Orchestration Template **MUST** reference the get\_files targets in
-Heat templates by file name, and the corresponding files should be
-delivered to ONAP along with the Heat templates.
+R-76718 The VNF Heat Orchestration Template **MUST** reference
+the get\_files targets in Heat templates by file name, and the
+corresponding files should be delivered to ONAP along with the
+Heat templates.
 
 R-41888 The VNE Heat **MUST NOT** use URL-based file retrieval.
 
-R-62177 The VNF Heat Orchestration Template **MUST** have unique file names for the included
-files within the scope of the VNF.
+R-62177 The VNF Heat Orchestration Template **MUST** have unique
+file names for the included files within the scope of the VNF.
 
-R-87848 The VNF Heat Orchestration Template **MUST** have all included files in a single, flat
-directory per VNF. ONAP does not support a directory hierarchy.
+R-87848 The VNF Heat Orchestration Template **MUST** have all
+included files in a single, flat directory per VNF. ONAP does
+not support a directory hierarchy.
 
 -  Included files may be used by all Modules within a given VNF.