mdns_lite v0.6.4 MdnsLite View Source
A simple implementation of an mDNS (multicast DNS (Domain Name Server))
server. mDNS uses multicast UDP rather than TCP. Its primary use is to
provide DNS support for the local
domain. MdnsLite
listens on a
well-known ip address/port. If a request arrives that it recognizes, it
constructs the appropriate DNS response.
MdnsLite
responds to a limited number of DNS requests; they are all handled
in the MdnsLite.Query
module. Of particular note is the SRV request. The
response will be a list of known services and how to contact them (domain and
port) as described in the configuration file.
MdnsLite
uses a "network monitor", a module that listens for changes in a
network. Its purpose is to ensure that the network interfaces are up to
date. The current version of MdnsLite
has an MdnsLite.InetMonitor
which
periodically checks, via inet:getifaddrs()
, for changes in the network. For
example, a change could be the re-assignment of IP addresses.
This module is initialized, at runtime, with host information and service
descriptions found in the config.exs
file. The descriptions will be used
by MdnsLite
to construct a response to a query.
Please refer to the README.md
for further information.
Link to this section Summary
Link to this section Functions
Add services for mdns_lite to advertise
The services
section lists the services that the host offers, such as
providing an HTTP server. You must supply the protocol
, transport
and
port
values for each service. You may also specify weight
and/or host
.
They each default to a zero value. Please consult the RFC for an explanation
of these values. Services can be configured in config.exs
as shown above,
or at runtime:
iex> services = [
# service type: _http._tcp.local - used in match
%{
name: "Web Server",
protocol: "http",
transport: "tcp",
port: 80,
},
# service_type: _ssh._tcp.local - used in match
%{
name: "Secure Socket",
protocol: "ssh",
transport: "tcp",
port: 22,
}
]
iex> MdnsLite.add_mds_services(services)
:ok
Remove services
Services can also be removed at runtime via remove_mdns_services/1
with the
service name to remove:
iex> service_names = ["Web Server", "Secure Socket"]
iex> MdnsLite.remove_mdns_services(services)
:ok
# Remove just a single service
iex> MdnsLite.remove_mdns_services("Secure Socket")
:ok
Set the list of host names
host
can have the value of :hostname
in which case the value will be
replaced with the value of :inet.gethostname()
, otherwise you can provide a
string value. You can specify an alias hostname in which case host
will be
["hostname", "alias-example"]
. The second value must be a string. When you
use an alias, an "A" query can be made to alias-example.local
as well as
to hostname.local
. This can also be configured at runtime via
MdnsLite.set_host/1
:
iex> MdnsLite.set_host([:hostname, "nerves"])
:ok