Jeremie Miller's original mDNS/mDNS-SD library daemon.
Download a versioned relased tarball (not a GitHub zip) to unlock a fully supported version. Hardcore devs. can proceed to clone the GIT repository, see below for help.
mdnsd by default reads service definitions from /etc/mdns.d/*
, but a
different path can be given, which may be a directory or a single file.
Usage: mdnsd [-hnpsv] [-i IFACE] [-l LEVEL] [-t TTL] [PATH]
-h This help text
-i IFACE Announce services only on this interface, default: all
-l LEVEL Set log level: none, err, notice (default), info, debug
-n Run in foreground, do not detach from controlling terminal
-s Use syslog even if running in foreground
-t TTL Set TTL of mDNS packets, default: 1 (link-local only)
-v Show program version
Bug report address: https://github.com/troglobit/mdnsd/issues
By default mdnsd daemonizes, detaches from the controlling terminal and
continues running in the background, logging errors (or debug messages
if enabled) to the systmem log. There is no output to be expected. On
GNU/Linux, use mdns-scan
, the bundled mquery
tool, or Wireshark to
verify your setup. Other operating systems have their own set of tools
for mDNS-SD and mdnsd may not even have a place there.
mdnsd runs on all multicast enabled system interfaces. It can be limted
to run on only one using the -i IFACE
command line option. Starting
mdnsd early in the boot process, when the interface may not yet have
acquired an IP address, or the interface itself may not even exist yet,
mdnsd handles this by periodically probing for interface changes.
See the file API.md for pointers on how to use the mDNS library.
This section provides a couple of service record examples. The syntax
of the files is fairly free form. Optional directives: name
, txt
,
target
, and cname
.
Note: you need at least one service record for
mdnsd
to respond to queries from, e.g.,mdns-scan
.
FTP service example:
# /etc/mdns.d/ftp.service -- mDNS-SD advertisement of FTP service
name Troglobit FTP Server
type _ftp._tcp
port 21
txt server=uftpd
txt version=2.6
target ftp.luthien.local
cname ftp.local
HTTP service example:
# /etc/mdns.d/http.service -- mDNS-SD advertisement of HTTP service
name Troglobit HTTP Server
type _http._tcp
port 80
txt server=merecat
txt version=2.31
target www.luthien.local
cname home.local
SSH service example:
# /etc/mdns.d/http.service -- mDNS-SD advertisement of SSH service
name Dropbear SSH Server
type _ssh._tcp
port 22
This project is built for and developed on GNU/Linux systems, but should work on any UNIX1 like system. Use the standard GNU configure script to create a Makefile for your system and then call make.
./configure
make all
make install
Users who checked out the source from GitHub must run ./autogen.sh
first to create the configure script. This requires GNU autotools and
pkg-config
to be installed on the build system. For the test suite
you also need libcmocka-dev
.
If you install to the default location used by the configure script,
the library is installed in /usr/local/lib
, which may not be in
the default search path for your system. Depending on the C library
used, the file /etc/ld.so.conf
may exist (there may also be a
sub-directory). If /usr/local/lib
is already listed there, you
may need to update the cache:
ldconfig -v |grep mdnsd
If you don't get any output from the above command, the ld.so.conf needs updating, or you may not be using the GNU C library.
This mDNS-SD implementation was developed by Jeremie Miller in 2003, originally announced on the rendezvous-dev mailing list. The original name was 'mhttp'. It has many forks and has been used by many other applications over the years.
The GitHub project is an attempt by Joachim Wiberg to clean
up the original code base, develop it further, and maintain it for the
long haul under the name mdnsd
.
Footnotes
-
Builds and runs fine on: FreeBSD, NetBSD, OpenBSD, DragonFly BSD, and Illumos/SmartOS. ↩