docs: def _get_nics(dom):
      '''
      Get domain network interfaces from a libvirt domain object.
      '''
      nics = {}
      doc = ElementTree.fromstring(dom.XMLDesc(0))
      for iface_node in doc.findall('devices/interface'):
          nic = {}
          nic['type'] = iface_node.get('type')
          for v_node in iface_node:
              if v_node.tag == 'mac':
                  nic['mac'] = v_node.get('address')
              if v_node.tag == 'model':
                  nic['model'] = v_node.get('type')
              if v_node.tag == 'target':
                  nic['target'] = v_node.get('dev')
              # driver, source, and match can all have optional attributes
              if re.match('(driver|source|address)', v_node.tag):
                  temp = {}
                  for key, value in six.iteritems(v_node.attrib):
                      temp[key] = value
                  nic[v_node.tag] = temp
              # virtualport needs to be handled separately, to pick up the
              # type attribute of the virtualport itself
              if v_node.tag == 'virtualport':
                  temp = {}
                  temp['type'] = v_node.get('type')
                  for key, value in six.iteritems(v_node.attrib):
                      temp[key] = value
                  nic['virtualport'] = temp
          if 'mac' not in nic:
              continue
          nics[nic['mac']] = nic
      return nics