Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Background

Main purpose of this feature to place VNFCs in sites with SRIOV-NIC enabled compute nodes.

If there are no sites with available SRIOV-NIC compute nodes, OOF can choose next best compute node flavors.  Next best compute nodes may not SRIOV-NICs.  Of course VNFCs, in this case, assumed to be tested with and without SRIOV-NIC by vendors.

The parameters to instantiate VNFs differ whether SRIOV-NIC based switching or normal vSwitch based switching at the NFVI.

...

Background

Main purpose of this feature to place VNFCs in sites with SRIOV-NIC enabled compute nodes.

If there are no sites with available SRIOV-NIC compute nodes, OOF can choose next best compute node flavors.  Next best compute nodes may not SRIOV-NICs.  Of course VNFCs, in this case, assumed to be tested with and without SRIOV-NIC by vendors.

The parameters to instantiate VNFs differ whether SRIOV-NIC based switching or normal vSwitch based switching at the NFVI.

In case of Openstack based cloud-regions, port is expected to be created explicitly with binding:vnic_type as direct. In case of vSwitch based switching, there is no need for explicit creation of port, but port can be created with binding:vnic_type as normal. So, based on flavor, appropriate value is expected to be passed when talking to Openstack.

...

parameters:
  oof_returned_vnic_type_for_firewall:
  type:string
  description:This parameter value is determined by OOF. If OOF selects the region and flavor that support SRIOV-NICs, then OOF returns 'direct'. If not, it returns 'normal'

VF-C will get pciVendorId, pciDeviceId and interfaceType from CSAR file, then call to OOF. OOF will response homing information to VF-C.

VF-C get OOF response, It will create network of SRIOV-NIC using physical network.
Then, It will create port based on network using interface type.

1.5 OOF Response

OOF just check /cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/flavors/flavor/{flavor-id}/hpa-capabilities

OOF will match the SRIOV information along with the constraint provided by Policy and add extra attributes inside the assignmentInfo data block when returning the response to SO and VF-C.

Sample looks like below.

"assignmentInfo": [ 
    { "key":"locationId",
      "value":"DLLSTX1A" },
    { "key":"locationType",
      "value":"openstack-cloud" },
    { "key":"vimId",
      "value":"rackspace_DLLSTX1A" },
    { "key":"oofDirectives",
      "value":{
        "directives":[
{ "vnfc_directives":[
               {
                  "vnfc_id":"<ID of VNFC>",
                  "directives":[
                     {
                        "directive_name":"<Name of directive,example flavor_directive>",
                        "attributes":[
                           {
                              


resources:
  network_protected:
    type: OS::Neutron::Net
    properties:
      name: mynetwork_protected
      network_type: vlan
      physical_network: physnet1
      segmentation_id: 100
  network_unprotected:
    properties:
      name: mynetwork_unprotected
      network_type: vlan
      physical_network: physnet2
      segmentation_id: 200
/** Subnet details are not provided for brevity**/
  protected_interface:
     type: OS::Neutron::Port
     properties:
       name: protected_port
       network_id : { get_resource: network_protected }
       binding:vnic_type: {get_param: oof_returned_vnic_type_for_firewall}
  unprotected_interface:
     type: OS::Neutron::Port
     properties:
       name: unprotected_port
       network_id : { get_resource: network_unprotected }
       binding:vnic_type: {get_param: oof_returned_vnic_type_for_firewall}
 
  virtual_firewall_appliance:
     type: OS::Nova::Server
     image: ....
     networks:
        - port: {get_resource: protected_interface}
        - port: {get_resource: unprotected_interface}

...

::Server
     image: ....
     networks:
        - port: {get_resource: protected_interface}
        - port: {get_resource: unprotected_interface}


1.4 VF-C call OOF

VF-C will get pciVendorId, pciDeviceId and interfaceType from CSAR file, then call to OOF. OOF will response homing information to VF-C.

VF-C get OOF response, It will create network of SRIOV-NIC using physical network.
Then, It will create port based on network using interface type.

1.5 OOF Response

OOF just check /cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/flavors/flavor/{flavor-id}/hpa-capabilities

OOF will match the SRIOV information along with the constraint provided by Policy and add extra attributes inside the assignmentInfo data block when returning the response to SO and VF-C.

Sample looks like below.

"assignmentInfo": [ 
    { "key":"locationId",
      "value":"DLLSTX1A" },
    { "key":"locationType",
      "value":"openstack-cloud" },
    { "key":"vimId",
      "value":"rackspace_DLLSTX1A" },
    { "key":"oofDirectives",
      "value":{
        "directives":[
          { "vnfc_directives":[
               {
                  "vnfc_id":"<ID of VNFC>",
                  "directives":[
                     {
                        "directive_name":"<Name of directive,example flavor_directive>",
                        "attributes":[
                           {
                              "attribute_name":"<name of attribute, such as flavor label>",
                              "attribute_value":"<value such as cloud specific flavor>"
                           }
                        ]
                     },
                     {
                        "directive_name":"<Name of directive,example vnic-info>",
                        "attributes":[
                           {
                              "attribute_name":"<name of attribute, such as vnic-type>",
                              "attribute_value":"<value such as direct/normal>"
                           },
                           {
                              "attribute_name":"<name of attribute, such as provider netweork>",
                              "attribute_value":"<value such as physnet>"
                           }
                        ]
                     }
                  ]
               }
            ]
         },
         {
            "vnf_directives":{
               "directives":[
                  {
                     "directive_name":"<Name of directive>",
                     "attributes":[
                        {
                           "attribute_name":"<name of attribute, such as flavor label>attribute>",
                                                         "attribute_value":"<value such as cloud specific flavor><value>"
                                                   }
                                             ]
                                       },
                                       {
                                             "directive_name":"<Name of directive,example vnic-info>directive>",
                                             "attributes":[
                                                   {
                                                         "attribute_name":"<name of attribute, such as vnic-type>"<name of attribute>",
                                                         "attribute_value":"<value such as direct/normal><value >"
                                                   },
                                                   {
                                                         "attribute_name":"<name of attribute, such as provider netweork>attribute>",
                                                         "attribute_value":"<value such as physnet>"
                           }
                        ]
                     }
                  ]
               }
            ]
         },
         {
            "vnf_directives":{
               <value >"
                        }
                     ]
                  }
               ]
            }
         }
      ]
   }
}
]    


For the newly added oofDirectives, we only return the vnfc part. For example: 

"vnfc_directives": [
   {   "vnfc_id":"",
       "directives":[                  {
                     
           {  "directive_name":"<Name of directive> "flavor_directive",                     
              "attributes": [
                        {
                                            {"attribute_name":"<name of attribute> "flavor_label_1",
                            "attribute_value":"<value>"
                        }
                     ]
                  },
                  {
                     HPA.flavor"}
                           ]
           },
          { "directive_name":"<Name of directive> "vnic-info1",
                                    "attributes":[
                        {
                           "attribute_name":"<name of attribute>",
                           "attribute_value":"<value >"
                        },
                        {
                            [
                    {"attribute_name":"<name of attribute> "vnic-type",
                            "attribute_value":"<value >direct"
                        }
                     ]
                  }
               ]
            }
         }
      ]
   }
}
]    

For the newly added oofDirectives, we only return the vnfc part. For example: 

"vnfc_directives": [
   ,
                    {"attribute_name": "provider_network", "attribute_value":"physnet1"}
                ]
          },
          {   "vnfcdirective_idname": "vnic-info2",
               "directivesattributes": [
{ "directive                    {"attribute_name": "flavor_directivevnic-type",              "attributes": [
                  "attribute_value":"direct"},
                    {"attribute_name":  "flavorprovider_label_1network", "attribute_value":"HPA.flavor"physnet2"}
                ]
          }
       ]
}       
]
It is worth noting that 

...

           },
          { "directive_name": "vnic-info1",
               "attributes": [
                    {"attribute_name": "vnic-type", "attribute_value":"direct"},
                    {"attribute_name": "provider_network", "attribute_value":"physnet1"}
                ]
          },
          {   "directive_name": "vnic-info2",
               "attributes": [
                    {"attribute_name": "vnic-type", "attribute_value":"direct"},
                    {"attribute_name": "provider_network", "attribute_value":"physnet2"}
                ]
          }
       ]
}       
]
It is worth noting that the vnic-type is converted from interfaceType in OOF.

If interfaceType is SRIOV-NIC, then OOF returns 'vnic-type' as 'direct', If interfaceType is not SRIOV-NIC, OOF return 'vnic-type' as 'normal'.

1.6 Policy Data

"flavorLabel": "flavor_label_1",

"sriovNICLabel": "oof_returned_vnic_type_1

...

the vnic-type is converted from interfaceType in OOF.

If interfaceType is SRIOV-NIC, then OOF returns 'vnic-type' as 'direct', If interfaceType is not SRIOV-NIC, OOF return 'vnic-type' as 'normal'.


1.6 Policy Data

{
"service": "hpaPolicy",
"policyName": "oofCasablanca.hpaPolicy_vFW",
"description": "HPA policy for vFW",
"templateVersion": "0.0.1",
"version": "1.0",
"priority": "3",
"riskType": "test",
"riskLevel": "2",
"guard": "False",
"content": {
"resources": "vFW",
"identity": "hpaPolicy_vFW",
"policyScope": ["vFW", "US", "INTERNATIONAL", “ip", "vFW"],
"policyType": "hpaPolicy",
"flavorFeatures": [
   {

         "hpa-feature" : "pciePassthrough",

         "mandatory" : "True",

         "architecture": "generic",

         "hpa-feature-attributes": [

             {"hpa-attribute-key":"pciVendorId", "hpa-attribute-value": "1234","operator": "=", "unit": ""},

             {"hpa-attribute-key":"pciDeviceId", "hpa-attribute-value": "5678","operator": "=", "unit": ""},

             {"hpa-attribute-key":"pciCount", "hpa-attribute-value": "1","operator": "=", "unit": ""},

             {"hpa-attribute-key":"cardType "hpa-attribute-value": "sriov-nic","operator": "=", "unit": ""},

...

“vduName” : “<vdu.Name>”,
"type":"vnfc/tocsa.nodes.nfv.Vdu.Compute",
"directives":[
{
"directive_name":"flavor",
"attributes":[
{
"attribute_name":" oof_returned_flavor_for_firewall ", //Admin needs to ensure that this value is same as flavor parameter in HOT
"attribute_value": "<Blank>”
}
]
}
]
"flavorProperties": [
{
"hpa-feature": "pciePassthrough",
"mandatory": "True",
"architecture": "generic",
"directives" : [
{
"directive_name": “pciePassthrough_directive”?
“attributes”: [
{ “attribute_name”: “oof_returned_vnic_type_for_firewall_protected”,
“attribute_value”: "direct"
},
{ “attribute_name”: “oof_returned_provider_network_for_firewall_protected”,
“attribute_value”: "physnet1"
}
]
}
],
"hpa-feature-attributes": [
{ "hpa-attribute-key": "pciVendorId"

...

, "hpa-attribute-value":

...

"

...

1234", "operator":

...

"=",

...

"unit":

...

""

...

         ]

...

},

...

{

...

"hpa-attribute-

...

key"

...

:

...

"

...

pciDeviceId",

...

         "mandatory" : "True",

         "architecture": "generic",

         "hpa-feature-attributes": [

...

"hpa-attribute-value": "5678", "operator": "=", "unit": "" },
{ "hpa-attribute-key": "

...

pciCount",

...

"hpa-attribute-value":

...

"

...

1", "operator":

...

">=

...

             {"hpa-attribute-key":"pciDeviceId", "hpa-attribute-value": "6789","operator": "=", "unit": ""},

...

", "unit": "" }
]
},
{
"hpa-feature": "pciePassthrough",
"mandatory": "True",
"architecture": "generic",
"directives" : [
{
"directive_name": “pciePassthrough_directive”?
“attributes”: [
{ “attribute_name”: “oof_returned_vnic_type_for_firewall_unprotected”,
“attribute_value”: "direct"
}
{ “attribute_name”: “oof_returned_provider_for_firewall_unprotected”,
“attribute_value”: "physnet2"
}
]
}
],
"hpa-feature-attributes": [
{ "hpa-attribute-key": "

...

pciVendorId",

...

"hpa-attribute-value":

...

"

...

3333", "operator":

...

"=",

...

"unit":

...

"" },

...

{ "hpa-attribute-key": "pciDeviceId"

...

, "hpa-attribute-value":

...

"

...

7777", "operator":

...

"=",

...

"unit":

...

"" },

...

{ "hpa-attribute-key": "pciCount"

...

, "hpa-attribute-value":

...

"

...

1", "operator":

...

">=",

...

"unit":

...

"" }
]
}

...


...

]

...

}

...


]
}
}

2. ONAP Module Modify 

Module NameModificationstatusownercomments
SDCAdd SR-IOV NIC attributes.Completed

Alex

Lianhao


PolicyAdd SR-IOV NIC attributes.In ProgressLibo
VF-CAdd create port process.In ProgressHaibin
SOAdd create port process.In ProgressMarcus
OOFAdd the process for cloud region HPA capabilitiesIn ProgessRuoyu
AAINothing, we just add one hpa-attribute-key and hpa-attribute-valueCompleted-
ESRAdd SR-IOV NIC info to cloud extra info.In ProgressHaibin
Multi-cloudRegister SR-IOV info to AAI.In ProgressHaibin
VIMConfig SR-IOV NIC and create network with SR-IOV NIC.In ProgressHaibin

...