0conf is a pure Common Lisp implementation of mDNS (RFC 6762) and DNS-SD
(RFC 6763) — "zeroconf" service advertisement and discovery on the local link.
It is what you would use to advertise a service so that Bonjour/Avahi clients
find it, or to discover printers, Chromecasts, HomeKit accessories, and the like
from Lisp, without shelling out to dns-sd/avahi-browse or binding to
mDNSResponder over C.
It is not an FFI wrapper: the DNS wire codec (with name compression), the record
cache with mDNS cache-flush/goodbye semantics, DNS-SD service expansion and
reassembly, probing with conflict renaming, known-answer suppression, NSEC
negative responses, and legacy-unicast handling are all implemented in Lisp.
The only non-portable part is the multicast socket layer, which uses
sb-bsd-sockets plus sb-alien for setsockopt/getifaddrs — so the system
is SBCL only, and declares sb-bsd-sockets as a dependency the way usocket
does.
- Repository: https://github.com/lispnik/0conf
- Source: git, master branch
- License: MIT
- Systems:
0conf (the library), 0conf/cli (a standalone dns-sd-like
command-line tool), 0conf/test (FiveAM suite)
- Dependencies: alexandria, nibbles, bordeaux-threads, sb-bsd-sockets
(fiveam for the test system)
:description, :author and :license are set on every system, there is a
README describing the project and its API, and CI runs the test suite (97 tests
/ 250 checks) on Linux and macOS on every push.
0conf is a pure Common Lisp implementation of mDNS (RFC 6762) and DNS-SD
(RFC 6763) — "zeroconf" service advertisement and discovery on the local link.
It is what you would use to advertise a service so that Bonjour/Avahi clients
find it, or to discover printers, Chromecasts, HomeKit accessories, and the like
from Lisp, without shelling out to
dns-sd/avahi-browseor binding tomDNSResponder over C.
It is not an FFI wrapper: the DNS wire codec (with name compression), the record
cache with mDNS cache-flush/goodbye semantics, DNS-SD service expansion and
reassembly, probing with conflict renaming, known-answer suppression, NSEC
negative responses, and legacy-unicast handling are all implemented in Lisp.
The only non-portable part is the multicast socket layer, which uses
sb-bsd-socketsplussb-alienforsetsockopt/getifaddrs— so the systemis SBCL only, and declares
sb-bsd-socketsas a dependency the way usocketdoes.
0conf(the library),0conf/cli(a standalonedns-sd-likecommand-line tool),
0conf/test(FiveAM suite)(fiveam for the test system)
:description,:authorand:licenseare set on every system, there is aREADME describing the project and its API, and CI runs the test suite (97 tests
/ 250 checks) on Linux and macOS on every push.