# `MdnsLite.Options`
[🔗](https://github.com/nerves-networking/mdns_lite/blob/v0.9.1/lib/mdns_lite/options.ex#L7)

MdnsLite options

MdnsLite is usually configured in a project's application environment
(`config.exs`) as follows:

```elixir
config :mdns_lite,
  hosts: [:hostname, "nerves"],
  ttl: 120,

  instance_name: "mDNS Lite Device",

  services: [
    %{
      id: :web_server,
      protocol: "http",
      transport: "tcp",
      port: 80,
      txt_payload: ["key=value"]
    },
    %{
      id: :ssh_daemon,
      instance_name: "More particular mDNS Lite Device",
      protocol: "ssh",
      transport: "tcp",
      port: 22
    }
  ]
```

The configurable keys are:

* `:hosts` - A list of hostnames to respond to. Normally this would be set to
  `:hostname` and `mdns_lite` will advertise the actual hostname with `.local`
  appended.
* `:ttl` - The default mDNS record time-to-live. The default of 120
  seconds is probably fine for most use. See [RFC 6762 - Multicast
  DNS](https://tools.ietf.org/html/rfc6762) for considerations.
* `instance_name` - A user friendly name that will be used as the name for this
  device's advertised service(s). Per RFC6763 Appendix C, this should describe
   the user-facing purpose or description of the device, and should not be
   considered a unique identifier. For example, 'Nerves Device' and 'MatCo
   Laser Printer Model CRM-114' are good choices here.  If instance_name is not
   defined it defaults to the first entry in the `hosts` list
* `:excluded_ifnames` - A list of network interfaces names to ignore. By
  default, `mdns_lite` will ignore loopback and cellular network interfaces.
* `:ipv4_only` - Set to `true` to only respond on IPv4 interfaces. Since IPv6
  isn't fully supported yet, this is the default. Note that it's still
  possible to get AAAA records when using IPv4.
* `:if_monitor` - Set to `MdnsLite.VintageNetMonitor` when using Nerves or
  `MdnsLite.InetMonitor` elsewhere.  The default is
  `MdnsLite.VintageNetMonitor`.
* `:dns_bridge_enabled` - Set to `true` to start a DNS server running that
  will bridge DNS to mDNS.
* `:dns_bridge_ip` - The IP address for the DNS server. Defaults to
  127.0.0.53.
* `:dns_bridge_port` - The UDP port for the DNS server. Defaults to 53.
* `:dns_bridge_recursive` - If a regular DNS request comes on the DNS bridge,
  forward it to a DNS server rather than returning an error. This is the
  default since there's an issue on Linux and Nerves that prevents Erlang's
  DNS resolver from checking the next one.
* `:services` - A list of services to advertise. See `MdnsLite.service` for
  details.

Some options are modifiable at runtime. Functions for modifying these are in
the `MdnsLite` module.

# `normalize_service`

```elixir
@spec normalize_service(MdnsLite.service()) ::
  {:ok, MdnsLite.service()} | {:error, String.t()}
```

Normalize a service description

All service descriptions are normalized before use. Call this function if
you're unsure how the service description will be transformed for use.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
