code: def list_nics(nic_type=None):
      
      if isinstance(nic_type, six.string_types):
          int_types = [nic_type]
      else:
          int_types = nic_type
  
      interfaces = []
      if nic_type:
          for int_type in int_types:
              cmd = ['ip', 'addr', 'show', 'label', int_type + '*']
              ip_output = subprocess.check_output(cmd).decode('UTF-8')
              ip_output = ip_output.split('\n')
              ip_output = (line for line in ip_output if line)
              for line in ip_output:
                  if line.split()[1].startswith(int_type):
                      matched = re.search('.*: (' + int_type +
                                          r'[0-9]+\.[0-9]+)@.*', line)
                      if matched:
                          iface = matched.groups()[0]
                      else:
                          iface = line.split()[1].replace(":", "")
  
                      if iface not in interfaces:
                          interfaces.append(iface)
      else:
          cmd = ['ip', 'a']
          ip_output = subprocess.check_output(cmd).decode('UTF-8').split('\n')
          ip_output = (line.strip() for line in ip_output if line)
  
          key = re.compile(r'^[0-9]+:\s+(.+):')
          for line in ip_output:
              matched = re.search(key, line)
              if matched:
                  iface = matched.group(1)
                  iface = iface.partition("@")[0]
                  if iface not in interfaces:
                      interfaces.append(iface)
  
      return interfaces
docs: Return a list of nics of given type(s)