docs: def _complete_nics(interfaces, hypervisor, dmac=None):
      '''
      Complete missing data for network interfaces.
      '''
  
      vmware_overlay = {'type': 'bridge', 'source': 'DEFAULT', 'model': 'e1000'}
      kvm_overlay = {'type': 'bridge', 'source': 'br0', 'model': 'virtio'}
      bhyve_overlay = {'type': 'bridge', 'source': 'bridge0', 'model': 'virtio'}
      xen_overlay = {'type': 'bridge', 'source': 'br0', 'model': None}
      overlays = {
              'xen': xen_overlay,
              'kvm': kvm_overlay,
              'qemu': kvm_overlay,
              'vmware': vmware_overlay,
              'bhyve': bhyve_overlay,
              }
  
      def _normalize_net_types(attributes):
          '''
          Guess which style of definition:
  
              bridge: br0
  
               or
  
              network: net0
  
               or
  
              type: network
              source: net0
          '''
          for type_ in ['bridge', 'network']:
              if type_ in attributes:
                  attributes['type'] = type_
                  # we want to discard the original key
                  attributes['source'] = attributes.pop(type_)
  
          attributes['type'] = attributes.get('type', None)
          attributes['source'] = attributes.get('source', None)
  
      def _apply_default_overlay(attributes):
          '''
          Apply the default overlay to attributes
          '''
          for key, value in six.iteritems(overlays[hypervisor]):
              if key not in attributes or not attributes[key]:
                  attributes[key] = value
  
      def _assign_mac(attributes, hypervisor):
          '''
          Compute mac address for NIC depending on hypervisor
          '''
          if dmac is not None:
              log.debug('Default MAC address is %s', dmac)
              if salt.utils.validate.net.mac(dmac):
                  attributes['mac'] = dmac
              else:
                  msg = 'Malformed MAC address: {0}'.format(dmac)
                  raise CommandExecutionError(msg)
          else:
              if hypervisor in ['qemu', 'kvm']:
                  attributes['mac'] = salt.utils.network.gen_mac(
                      prefix='52:54:00')
              else:
                  attributes['mac'] = salt.utils.network.gen_mac()
  
      for interface in interfaces:
          _normalize_net_types(interface)
          if interface.get('mac', None) is None:
              _assign_mac(interface, hypervisor)
          if hypervisor in overlays:
              _apply_default_overlay(interface)
  
      return interfaces