Skip to content

0conf — pure Common Lisp mDNS (RFC 6762) and DNS-SD (RFC 6763) #2611

Description

@lispnik

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions