<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def provision_vdp_overlay_networks(self, port_uuid, mac, net_uuid, segmentation_id, lvid, oui):
 """Provisions a overlay type network configured using VDP. :param port_uuid: the uuid of the VM port. :param mac: the MAC address of the VM. :param net_uuid: the uuid of the network associated with this vlan. :param segmentation_id: the VID for 'vlan' or tunnel ID for 'tunnel' :lvid: Local VLAN ID :oui: OUI Parameters """

        lldpad_port = self.lldpad_info
        if lldpad_port:
            ovs_cb_data = {'obj': self, 'port_uuid': port_uuid, 'mac': mac,
                           'net_uuid': net_uuid}
            vdp_vlan, fail_reason = lldpad_port.send_vdp_vnic_up(
                port_uuid=port_uuid, vsiid=port_uuid, gid=segmentation_id,
                mac=mac, new_network=True, oui=oui,
                vsw_cb_fn=self.vdp_vlan_change, vsw_cb_data=ovs_cb_data)
        else:
            fail_reason = "There is no LLDPad port available."
            LOG.error("%s", fail_reason)
            return {'result': False, 'vdp_vlan': cconstants.INVALID_VLAN,
                    'fail_reason': fail_reason}
        # check validity
        if not ovs_lib.is_valid_vlan_tag(vdp_vlan):
            LOG.error("Cannot provision VDP Overlay network for"
                      " net-id=%(net_uuid)s - Invalid ",
                      {'net_uuid': net_uuid})
            return {'result': True, 'vdp_vlan': cconstants.INVALID_VLAN,
                    'fail_reason': fail_reason}

        LOG.info('provision_vdp_overlay_networks: add_flow for '
                 'Local Vlan %(local_vlan)s VDP VLAN %(vdp_vlan)s',
                 {'local_vlan': lvid, 'vdp_vlan': vdp_vlan})
        self.program_vm_ovs_flows(lvid, 0, vdp_vlan)
        return {'result': True, 'vdp_vlan': vdp_vlan, 'fail_reason': None}