def _create_port_profile(self, handle, profile_name, vlan_id,
                             vnic_type, ucsm_ip, trunk_vlans, qos_policy):
        """Creates a Port Profile on the UCS Manager.

        Significant parameters set in the port profile are:
        1. Port profile name - Should match what was set in vif_details
        2. High performance mode - For VM-FEX to be enabled/configured on
        the port using this port profile, this mode should be enabled.
        3. Vlan id - Vlan id used by traffic to and from the port.
        """
        port_profile_dest = (const.PORT_PROFILESETDN + const.VNIC_PATH_PREFIX +
                             profile_name)

        vlan_name = self.make_vlan_name(vlan_id)
        vlan_associate_path = (const.PORT_PROFILESETDN +
                               const.VNIC_PATH_PREFIX + profile_name +
                               const.VLAN_PATH_PREFIX + vlan_name)
        cl_profile_name = const.CLIENT_PROFILE_NAME_PREFIX + str(vlan_id)
        cl_profile_dest = (const.PORT_PROFILESETDN + const.VNIC_PATH_PREFIX +
                           profile_name + const.CLIENT_PROFILE_PATH_PREFIX +
                           cl_profile_name)

        # Remove this Port Profile from the delete DB table if it was
        # addded there due to a previous delete.
        self.ucsm_db.remove_port_profile_to_delete(profile_name, ucsm_ip)

        # Check if direct or macvtap mode
        if vnic_type == bc.portbindings.VNIC_DIRECT:
            port_mode = const.HIGH_PERF
        else:
            port_mode = const.NONE

        try:
            handle.StartTransaction()
            port_profile = handle.GetManagedObject(
                None,
                self.ucsmsdk.VnicProfileSet.ClassId(),
                {self.ucsmsdk.VnicProfileSet.DN: const.PORT_PROFILESETDN})

            if not port_profile:
                LOG.warning('UCS Manager network driver Port Profile '
                            'path at %s missing',
                    const.PORT_PROFILESETDN)
                return False

            # Create a port profile on the UCS Manager
            p_profile = handle.AddManagedObject(
                port_profile,
                self.ucsmsdk.VnicProfile.ClassId(),
                {self.ucsmsdk.VnicProfile.NAME: profile_name,
                 self.ucsmsdk.VnicProfile.POLICY_OWNER: "local",
                 self.ucsmsdk.VnicProfile.NW_CTRL_POLICY_NAME: "",
                 self.ucsmsdk.VnicProfile.PIN_TO_GROUP_NAME: "",
                 self.ucsmsdk.VnicProfile.DN: port_profile_dest,
                 self.ucsmsdk.VnicProfile.DESCR: const.DESCR,
                 self.ucsmsdk.VnicProfile.QOS_POLICY_NAME: qos_policy,
                 self.ucsmsdk.VnicProfile.HOST_NW_IOPERF: port_mode,
                 self.ucsmsdk.VnicProfile.MAX_PORTS: const.MAX_PORTS})
            if not p_profile:
                LOG.warning('UCS Manager network driver could not '
                            'create Port Profile %s.', profile_name)
                return False

            LOG.debug('UCS Manager network driver associating Vlan '
                      'Profile with Port Profile at %s',
                vlan_associate_path)
            # Associate port profile with vlan profile
            mo = handle.AddManagedObject(
                p_profile,
                self.ucsmsdk.VnicEtherIf.ClassId(),
                {self.ucsmsdk.VnicEtherIf.DN: vlan_associate_path,
                 self.ucsmsdk.VnicEtherIf.NAME: vlan_name,
                 self.ucsmsdk.VnicEtherIf.DEFAULT_NET: "yes"}, True)
            if not mo:
                LOG.warning('UCS Manager network driver cannot '
                            'associate Vlan Profile to Port '
                            'Profile %s', profile_name)
                return False
            LOG.debug('UCS Manager network driver created Port Profile %s '
                      'at %s', profile_name, port_profile_dest)

            # For Multi VLAN trunk support
            if trunk_vlans:
                for vlan in trunk_vlans:
                    vlan_name = self.make_vlan_name(vlan)
                    vlan_associate_path = (const.PORT_PROFILESETDN +
                        const.VNIC_PATH_PREFIX + profile_name +
                        const.VLAN_PATH_PREFIX + vlan_name)
                    # Associate port profile with vlan profile
                    # for the trunk vlans
                    mo = handle.AddManagedObject(
                        p_profile,
                        self.ucsmsdk.VnicEtherIf.ClassId(),
                        {self.ucsmsdk.VnicEtherIf.DN: vlan_associate_path,
                        self.ucsmsdk.VnicEtherIf.NAME: vlan_name,
                        self.ucsmsdk.VnicEtherIf.DEFAULT_NET: "no"}, True)
                    if not mo:
                        LOG.warning('UCS Manager network driver cannot '
                                    'associate Vlan %(vlan)d to Port '
                                    'Profile %(profile)s',
                                    {'vlan': vlan, 'profile': profile_name})

            cl_profile = handle.AddManagedObject(
                p_profile,
                self.ucsmsdk.VmVnicProfCl.ClassId(),
                {self.ucsmsdk.VmVnicProfCl.ORG_PATH: ".*",
                 self.ucsmsdk.VmVnicProfCl.DN: cl_profile_dest,
                 self.ucsmsdk.VmVnicProfCl.NAME: cl_profile_name,
                 self.ucsmsdk.VmVnicProfCl.POLICY_OWNER: "local",
                 self.ucsmsdk.VmVnicProfCl.SW_NAME: ".*",
                 self.ucsmsdk.VmVnicProfCl.DC_NAME: ".*",
                 self.ucsmsdk.VmVnicProfCl.DESCR: const.DESCR})
            handle.CompleteTransaction()

            if not cl_profile:
                LOG.warning('UCS Manager network driver could not '
                            'create Client Profile %s.',
                            cl_profile_name)
                return False

            LOG.debug('UCS Manager network driver created Client Profile '
                      '%s at %s', cl_profile_name, cl_profile_dest)
            return True

        except Exception as e:
            return self._handle_ucsm_exception(e, 'Port Profile',
                                               profile_name, ucsm_ip)