code: def in6_getifaddr():
      
  
      # List all network interfaces
      if OPENBSD:
          try:
              f = os.popen("%s" % conf.prog.ifconfig)
          except OSError:
              log_interactive.warning("Failed to execute ifconfig.")
              return []
  
          # Get the list of network interfaces
          splitted_line = []
          for l in f:
              if "flags" in l:
                  iface = l.split()[0].rstrip(':')
                  splitted_line.append(iface)
  
      else:  # FreeBSD, NetBSD or Darwin
          try:
              f = os.popen("%s -l" % conf.prog.ifconfig)
          except OSError:
              log_interactive.warning("Failed to execute ifconfig.")
              return []
  
          # Get the list of network interfaces
          splitted_line = f.readline().rstrip().split()
  
      ret = []
      for i in splitted_line:
          ret += _in6_getifaddr(i)
      return ret
docs: Returns a list of 3-tuples of the form (addr, scope, iface) where
      'addr' is the address of scope 'scope' associated to the interface
      'iface'.
  
      This is the list of all addresses of all interfaces available on
      the system.