Vendor the pinned mdns-sd 0.21.1 source so response records retain their observed source IP. Bound unauthenticated cache records to 1024 globally and 128 per source, deduplicate and cap timers at 4096, and poll at least once per second for expiry cleanup. Expose packet provenance through lanspread-mdns, drop originless resolutions, and add a dedicated vendor test recipe while keeping third-party sources outside workspace formatting and Clippy. Test Plan: - just mdns-vendor-test (106 tests passed with socket access) - just test - just fmt - just clippy - cache/per-source, exact-refresh, timer-cap, and serde tests - git diff --check
37 KiB
Version 0.21.1 (2026-08-30)
This is a bugfix release.
Bug fixes / improvements
- Send goodbye (TTL=0) packets under conflict-resolved names. When probing renames a
record due to a name conflict (RFC 6762 section 9), now the goodbye carries the updated
names peers actually observed. (#495, commit
fe525a6) - Harden DNS name parsing (
read_name) and name compression handling: skip only the malformed record instead of the whole packet. (#492, commit5bf6b7c)
All changes
5bf6b7c 2026-08-30refactoring: read_name and name compression (#492) (keepsimple1)fe525a6 2026-08-26fix: send goodbye packets under conflict-resolved names (#495) (dhavli)
Thanks and welcome our new contributor @dhavli !
Version 0.21.0 (2026-08-10)
Breaking changes
- The max outgoing packet size is now 1452 bytes (Ethernet MTU), down from 8972 bytes,
per RFC 6762 section 17.
A record too big for one packet is still sent alone, in a packet of up to the RFC's
9000-byte ceiling, so no record is dropped. Users that need to change the limit
can call the new
ServiceDaemon::set_max_packet_size().
New features
- Add
ServiceDaemon::set_max_packet_size()to change the max byte size of outgoing packets on the interfaces matching a givenIfKind, and export the new default asMAX_PKT_DEFAULT. (#487, commit82711a8) - Re-export the receiver-side error types
RecvError,RecvTimeoutErrorandTryRecvErrorfromflume, so that a caller can name them without addingflumeas a direct dependency. (#488, commit20c0eac)
Bug fixes / improvements
- On the receive side, the IPv4 and IPv6 max packet sizes are now tracked separately
(8972 and 8952 bytes) so that each stays within the RFC's 9000-byte limit including
its own IP header. (#487, commit
82711a8)
All changes
6bf2bdb 2026-08-09refactor: extract the code that does cache flush (#490) (keepsimple1)20c0eac 2026-08-08feat: re-export Receiver error types (#488) (#489) (keepsimple1)82711a8 2026-08-07feat: limit generated packet size per RFC 6762 section 17 (#487) (keepsimple1)
Version 0.20.3 (2026-07-26)
This is a small bugfix release.
Bug fixes / improvements
- Fix a panic when encoding a name that contains a label longer than 63 bytes. The packet write path now reports an error and skips the offending question or record, instead of asserting. (#484, commit
08362e3)
All changes
a574e93 2026-07-24docs: add RFC 6762 compliance rows for v0.20.2 features (keepsimple1)08362e3 2026-07-24fix: Panic in write_utf8 (assert s.len() < 64) (#484) (keepsimple1)
Version 0.20.2 (2026-07-16)
This is a feature and bugfix release focused on improved RFC 6762 compliance.
New features
- Implement RFC 6762 section 6 multicast rate limiting: responses to the same record are rate-limited to no more than once per second on a given interface. (#476, commit
76f42bd) - Delay responses to PTR queries per RFC 6762 section 6, spreading responses over a random 10-50ms (instead of 20-120ms) window to reduce collisions. (#479, commit
a37e959) - Add a random jitter 10-50ms (instead of 20-120ms) before sending the initial query per RFC 6762 section 5.2. (#480, commit
7c55c75)
Bug fixes / improvements
- Space announcement retransmissions wider than the rate-limit window so that repeated announcements are not dropped. (#477, commit
6f39a46) - Avoid leaking empty cache entries for records that are not for us. (#481, commit
5cfa13a)
All changes
5cfa13a 2026-07-15fix: avoid leaking empty cache entries for records not for us (#481) (keepsimple1)7c55c75 2026-07-14feat: add a jitter for initial query per RFC 6762 section 5.2 (#480) (keepsimple1)a37e959 2026-07-12feat: delay PTR query responses per RFC 6762 section 6 (#479) (keepsimple1)6f39a46 2026-07-08fix: space announcement retransmissions wider than the rate-limit window (#477) (keepsimple1)76f42bd 2026-07-07feat: Implement RFC 6762 section 6 multicast rate limiting (#476) (keepsimple1)
Version 0.20.1 (2026-06-28)
This is a small feature and maintenance release.
New features
- Add
IfKind::Predicateand a newIfPredicatetype, allowing interfaces to be selected with a custom predicate function (e.g. matching by interface name pattern). (#474, commitfd72146)
Other changes
- chore(deps): update dependencies. (#454, commit
06bdad1)
All changes
fd72146 2026-06-22AddIfPredicatefor more flexible interface filtering (#474) (MAlba124)06bdad1 2026-06-16chore(deps): update (#454) (CosminPerRam)
Thanks and welcome our new contributor @MAlba124 !
Version 0.20.0 (2026-05-24)
This release contains a small breaking change in the optional serde feature, hence the minor version bump.
Breaking changes
- Remove
#[serde(untagged)]fromScopedIp. The serialized form ofScopedIpnow includes its enum variant tag (V4/V6), which improves compatibility with binary serde formats (e.g. MessagePack). Only affects users of the optionalserdefeature. (#472, commit5fa4b92)
Other changes
- tests: remove explicit random port assignments.
- chore: remove an unused dev-dependency.
All changes
fee8ab7 2026-05-24remove unused dev-dependency (keepsimple1)e745a2f 2026-05-23tests: remove explicit port random assignments (#455) (CosminPerRam)5fa4b92 2026-05-22Remove untagged attribute from ScopedIp (#472) (Rascal)
Version 0.19.2 (2026-05-17)
This is a bugfix and small-feature release.
New features
- Support RFC 6762 legacy unicast responses: when a query arrives from a source port other than
5353, the daemon now replies directly to the querier's address/port instead of multicasting. This enables interoperability with one-shot / legacy mDNS queriers. (#469, commit933bdbe) - Added a new
Error::DaemonShutdownvariant, returned byServiceDaemonmethods after the daemon thread has exited (previously surfaced as a genericError::Msg). TheErrorenum is#[non_exhaustive], so this is additive. (commita457193)
Bug fixes / improvements
- Optimize outgoing DNS serialization to reduce allocations on the send path. (#467, commit
fb26d7f) - Replace a stray
println!inDnsHostInfo::writewithdebug!, so the library no longer writes to stdout. (#465, commit96008a4) - Expanded
# Errorsdoc sections on the majorServiceDaemonAPIs (new,new_with_port,browse,stop_browse,resolve_hostname,stop_resolve_hostname,register,unregister), documenting whenError::Againvs.Error::DaemonShutdownis returned. (#464, commita457193)
All changes
933bdbe 2026-05-15Add support for RFC 6762 legacy unicast responses (#469) (Luqmaan)fb26d7f 2026-04-30Optimize dns outgoing serialization (#467) (Alexander)a457193 2026-04-28docs: add doc comments for error handling on major APIs (#464) (keepsimple1)96008a4 2026-04-28Replace println with debug log (#465) (Alexander)
Thanks and welcome our new contributors @luqs1 and @anti-social !
Version 0.19.1 (2026-04-19)
This is a bugfix release.
Bug fixes
- When responding to a query, pick a source IP that matches the querier's subnet, so responses are reachable on multi-homed hosts. (#460, commit
d210372) - Validate TXT property length in the
ServiceInfoconstructor, catching oversized properties at registration time instead of at send time. (#458, commitcc81eec)
All changes
d210372 2026-04-18fix: use a source IP matching the querier's subnet when responding (#460) (keepsimple1)cc81eec 2026-04-12fix: check TXT property length in ServiceInfo constructor (#458) (keepsimple1)
Version 0.19.0 (2026-04-04)
Breaking changes
ScopedIpV4now carriesinterface_idstracking which network interfaces discovered the address. The derivedEq/Hashnow includesinterface_ids, so twoScopedIpV4values with the same IP but different interface lists are no longer equal. (commits43bd8f3,0661bf1,247447b)
New features
- New optional
serdefeature: addsSerialize/DeserializeonInterfaceId,ScopedIpV4,ScopedIpV6,ScopedIp,TxtProperties,TxtProperty, andResolvedService. (commitc2c2f75) - New public APIs:
ScopedIpV4::new(),ScopedIpV4::interface_ids(),InterfaceId::get_addrs().
Bug fixes
- Avoid known-answer suppression when querying on a new interface, so address records are discovered promptly. (commit
468c5ee) - Track modified instances when removing records from an interface, so
ServiceResolvedevents reflect updated addresses. (commit7daa1d4)
All changes
3903f09 2026-04-04refactoring: simplify handle_query (#452) (keepsimple1)b6ddc18 2026-04-04refactoring: move add_answer_with_additionals into struct DnsOutgoing (#451) (keepsimple1)468c5ee 2026-04-03fix: avoid known-answer suppression when querying on a new interface (#450) (keepsimple1)7daa1d4 2026-04-01fix: track modified_instances when removing records from an interface (#448) (keepsimple1)247447b 2026-03-26fix: ScopedIp considered Eq when interface_ids change (#446) (keepsimple1)0661bf1 2026-03-24refactoring: ScopedIpV4 to use multiple InterfaceIds (#444) (keepsimple1)c2c2f75 2026-03-15Serde Deserialize+Serialize implementation (#440) (Rascal)43bd8f3 2026-03-13add interface_id in ScopedIpV4 (#439) (keepsimple1)
Thanks and welcome our new contributor @Rascal !
Verison 0.18.2 (2026-03-10)
- A bugfix: refresh of address records didn't work when hostname is not lowercase.
All changes
ec1e733 2026-03-11fix: Refresh of A and AAAA records (#441) (hrzlgnm)
Version 0.18.1 (2026-02-28)
- A bugfix for
disable_interfacewith an IPv4 address: clarified that the semantics is to disable IPv4 on the interface identified by the IPv4 address. - Added new variants for
IfKindenum:IndexIPV4(u32)andIndexIPV6(u32).
All changes
7e04122 2026-02-28fix(test): use all IPv4 interfaces in test_disable_interface_cache (#435) (keepsimple1)
Version 0.18.0 (2026-02-15)
A few new features, documentation enhancements and breaking changes.
Breaking changes
- Removed one default feature:
reuseport. It is handled transparently now. (see commit58bc8c5) - New feature: support
.and\in instance names (see commit3481b94) - New internal fix: proper cleanup on daemon shutdown (see commit
8d24304) - New internal fix: exclude point-to-point interfaces by default (e.g. tunnel interface) (see commit
85b6cd9)
All changes
b694333 2026-02-12Added documentation about service name length (FelixSelter)85b6cd9 2026-02-10fix for macOS: exclude IFF_POINTTOPOINT interfaces and exclude Apple P2P interfaces by default (#425) (keepsimple1)58bc8c5 2026-02-09fix: invert reuseport feature (#430) (keepsimple1)8d24304 2026-02-07feat: add proper cleanup on daemon shutdown (#421) (Thibaut M.)69418d6 2026-02-05chore: update some comments (#429) (keepsimple1)3481b94 2026-02-06feat: implement RFC 6763 Section 4.3 escaping for instance names (#420) (Thibaut M.)58c15b4 2026-01-27fix: only add a scope in Display to unicast link local v6 addresses (#424) (hrzlgnm)3f34136 2026-01-24Return errors from send_dns_outgoing (#419) (keepsimple1)0e323f6 2026-01-21ci: update github action checkout (#422) (Thibaut M.)
Thanks and welcome new contributors: @thibaut-pascal, @FelixSelter
Version 0.17.2 (2026-01-16)
New features (non-breaking)
A new 'feature' literally: a default feature reuseport to control if SO_REUSEPORT should be used. Useful for old Linux kernels (before 3.9).
All changes
466d373 2026-01-15feat: addreuseportfeature (#414) (Hanssen)1770d01 2025-12-31exmaples: add --verify option in the query example (#412) (keepsimple1)
Thanks and welcome our new contributor @Hanssen0 !
Version 0.17.1 (2025-12-05)
New features (non-breaking)
ServiceDaemon::new_with_port(port: u16) allows using a custom port for mainly development / testing purposes.
All changes
9088f8b 2025-12-04feat: use Self on impl return of itself for RRType (#409) (CosminPerRam)91b3e66 2025-12-02Add a custom port option (#408) (Kaido Kert)3e7a582 2025-11-30handle empty return from send_dns_outgoing (#407) (keepsimple1)
Thanks and welcome our new contributor @kaidokert !
Version 0.17.0 (2025-11-06)
Breaking changes
Loopback interfaces are enabled by default now. The main reason is that some user reported a failure of publishing services locally. I think this change probably only impacts very few.
New features
A couple of new APIs are added for ServiceInfo: set_interfaces and set_link_local_only based on some real world use cases.
All changes
6752eaf 2025-11-04feat: service registration with granular iface/ip conditions (#398) (twizansk)7293e7c 2025-11-02Enable loopback interfaces by default (#397) (keepsimple1)505bd71 2025-11-02Fix clippy for tests and remove unnecessary tests (#403) (keepsimple1)
Version 0.16.0 (2025-10-29)
A bugfix release. But we also bumped up rustc MSRV to 1.71.0, hence bumping our own minor version.
All changes
6c01cf6 2025-10-27Handle IPv6 disabled in kernel (#396) (keepsimple1)b15c4c3 2025-10-23log the interface name when joining multicast group (#394) (keepsimple1)382521c 2025-10-15refactoring only: make resolve_updated_instances easier to understand (#393) (keepsimple1)
Version 0.15.1 (2025-09-06)
New feature: cache only browsing. Check out the new methods browse_cache and accept_unsolicited.
All changes
3f6d6e9 2025-09-04feat: support cache only browsing (#388) (twizansk)
Thanks and welcome our new contributor @twizansk !
Version 0.15.0 (2025-08-31)
Breaking changes
ServiceEvent::ServiceDatais merged back withServiceResolved(i.e. replacing it). The end result is: we have a singleServiceEvent::ServiceResolved(ResolvedService)going forward.
Hence, a service is respresented by ResolvedService on the client side, and by ServiceInfo on the server side.
And user_service_data() is no longer needed and removed.
Sorry about the confusions but I think this helps for the long term. I think / hope the required code changes are minimal for most users.
All changes
221e0be 2025-08-29feat: impl AsIpAddrs for Box (#387) (Jean-Gab)f88fae1 2025-08-27merge ServiceData with ServiceResolved (#386) (keepsimple1)
Thanks our new contributor @Jean-Gab, welcome!
Version 0.14.1 (2025-8-19)
This is a bugfix release with only a doc comments change.
ec4fb9a 2025-08-18doc: add a missing line in doc code example (#384) (keepsimple1)
Version 0.14.0 (2025-8-10)
Breaking changes
ServiceEvent::ServiceDatato support IPv6 with scope_id. It will deprecateServiceEvent::ServiceResolved.
Users must call ServiceDaemon.use_service_data to use ServiceData instead of ServiceResolved event.
HostnameResolutionEvent::AddressesFounduses the newScopedIpinstead ofIpAddr.ServiceEventisnon_exhaustivenow.
Other hightlights
- Internal: define
MyUdpSocketthat uses PKTINFO. It also prepares for supporting unicast. - Internal: define
MyIntfto better handle multiple addresses on an interface. - A few bugfixes.
123ecba 2025-08-08rename HostIp to ScopedIp (#382) (keepsimple1)0c9395f 2025-08-07rename ServiceDetailed to ServiceData (#381) (keepsimple1)52cc67c 2025-08-06refactoring: define our own interface struct to allow multiple addresses (#380) (keepsimple1)1b194de 2025-08-01feat: Remove unneeded multicast send tracking (#377) (hrzlgnm)8cb1a59 2025-07-30refactoring only: move run into ZeroConf (#376) (keepsimple1)2eddad3 2025-07-30ServiceEvent: add non_exhaustive and fix clippy (#375) (keepsimple1)0d6ba35 2025-07-28bugfix: remove duplicated address record for IPv6 on a wrong interface (#373) (keepsimple1)45b3cdd 2025-07-16fix repetitive ServiceRemoved and Resolve again after interface up (#371) (keepsimple1)eb90591 2025-07-13Exclude interfaces that are operational down (#369) (keepsimple1)1103ab2 2025-07-08feat: new API to use ResolvedService instead of ServiceInfo for resolved service event (#362) (keepsimple1)
Version 0.13.11 (2025-7-7)
This is a small bugfix release before we add potential breaking changes.
8b221d2 2025-06-22deriveCloneforServiceEventandHostnameResolutionEvent(#366) (Shadowcat650)
Welcome our new contributor @Shadowcat650 !
Version 0.13.10 (2025-6-21)
This is a bugfix release.
14841ac 2025-06-21add comments for setting TTL (#364) (keepsimple1)3db5e1b 2025-06-17bugfix: set multicast TTL to 255 (#361) (Sameer Puri)22a2688 2025-05-20doc: add a section for Conflict resolution (#359) (keepsimple1)60888b7 2025-05-13Refactoring only: extract parts of probing_handler into functions (#357) (keepsimple1)db2f484 2025-05-11bugfix: not to resolve records that expires soon (#353) (keepsimple1)
Welcome our new contributor @sameer !
Version 0.13.9 (2025-04-22)
This is a bugfix release.
a734dd2 2025-05-02bugfix: refresh TXT when needed (#354) (keepsimple1)51c03c3 2025-05-01bugfix: TXT records should use OTHER_TTL same as PTR (#355) (keepsimple1)07750cb 2025-04-25bugfix: only remove a service instance if all its SRV are gone (#350) (keepsimple1)
Version 0.13.8 (2025-04-22)
This is a bugfix release that also prepares for adding InterfaceId in resolved service info.
2d49195 2025-04-22bugfix: should keep A records for hostname queriers (#348) (keepsimple1)fe08df1 2025-04-22bump up version to 0.13.8 (#347) (keepsimple1)f6c7e80 2025-04-22feat: extendDnsAddresswith anInterfaceId(#342) (hrzlgnm)513372d 2025-04-20remove address filter for multicast loopback (#346) (keepsimple1)
Version 0.13.7 (2025-04-15)
This is a bugfix release that further reduces the memory footprint of DNS cache.
a6a0961 2025-04-15optimization: remove cache entries when stop_browse (#344) (keepsimple1)
Version 0.13.6 (2025-04-07)
This is a bugfix release that reduces / limits the memory footprint of the cached records and timers.
5fa1b31 2025-04-07optimization: remove expired timers and skip DNS datagrams that are not for us (#338) (keepsimple1)3e3aec9 2025-03-29refactoring: make tiebreaking more modular (#336) (keepsimple1)
Version 0.13.5 (2025-03-25)
This is a patch fix release as the previous release (0.13.4) was broken in service resolution.
e65757f 2025-03-26bugfix: makeget_addrmethod use lowercase hostname (#332) (Justus K)
Thanks @Stupremee for the fix and welcome!
Version 0.13.4 (2025-03-24)
Highlights
- New API for host IP check:
ServiceDaemon::set_ip_check_intervalandServiceDaemon::get_ip_check_interval. - Bugfixes.
All changes
e64c0d4 2025-03-24bugfix: hostname resolution should be case insensitive (#330) (keepsimple1)5e4df27 2025-03-19bugfix: when now equals next_ip_check (#328) (keepsimple1)9538120 2025-03-12examples: support logfile in the register example (#326) (keepsimple1)8422690 2025-03-13chore(deps): update fastrand and socket2 (#324) (CosminPerRam)dd2d868 2025-03-07feat: add boxed in DnsRecordExt to reduce Box::new usage (#323) (CosminPerRam)3ea6cf1 2025-03-05Detect IP changes: reduce the interval (#313) (keepsimple1)7feabc9 2025-03-04feat: handle DnsIncoming IPv4, 6 and String read parsing errors (#309) (CosminPerRam)
Version 0.13.3 (2025-03-01)
Highlights
TxtProperties: Supportinto_property_map_str.- For querier: a new struct
ResolvedServicethat can be created fromServiceInfo. - Support a service to publish using loopback interfaces via
enable_interface. - Bugfixes.
All changes
3e6842f 2025-02-28enable_interface: support loopback interface (#317) (keepsimple1)7e77a5e 2025-02-26fix: remove related addresses in the cache when disabling an interface (#316) (keepsimple1)735fb22 2025-02-22refactoring: move handle_poller_events into Zeroconf impl (#315) (keepsimple1)e886787 2025-02-20ci: add doc check and fail if there are any warnings (#310) (CosminPerRam)9d92545 2025-02-18refactoring: make e_fmt! available within the crate (#311) (keepsimple1)4b671d4 2025-02-14ResolvedService: a new plain struct for attributes of a service (#302) (keepsimple1)349de66 2025-02-13fix: include loopback addresses in filtering criteria (#306) (Minetake)026a745 2025-02-09refactoring: property length check (#305) (keepsimple1)818f37c 2025-02-10TXT record: docs to remind users of the maximum length of the attribute. (#304) (Lazy Panda)fba8025 2025-02-09TxtProperties: new method to get a HashMap of properties (#303) (keepsimple1)
Version 0.13.2 (2025-02-02)
This is a bugfix release.
All changes
- 4288190 check any match for address records in conflict handler (#294) (keepsimple1)
- b51f67d unit test: fix a timing issue (#292) (keepsimple1)
- 7afed98 bugfix: check data len for NSEC record (#291) (keepsimple1)
Version 0.13.1 (2024-12-16)
This is a bugfix release. Fixed a bug where upper case service names failed to publish.
All changes
- 71647a1 test: cover upper case in service name (#288) (keepsimple1)
- 6ff9b52 fix: service keys must be lowercase (#286) (Jesper L. Nielsen)
Version 0.13.0 (2024-12-15)
There are no breaking changes in API. Bump the minor version due to the change of rustc version to Rust 1.70.0.
Highlights
- Use
mioinstead ofpollingto poll sockets. - New API
set_multicast_loop_v4andset_multicast_loop_v6ofServiceDaemon. - All logging are updated to be
debugortracelevels only.
All changes
- 489ef5a test: fix a flaky test (#283) (keepsimple1)
- 1ddae63 feat: new API to set multicast loop for ServiceDaemon (#281) (keepsimple1)
- fcd31f3 dependency: use mio to replace polling (#280) (keepsimple1)
- 99483b7 reduce logging levels (#277) (keepsimple1)
Version 0.12.0 (2024-11-24)
There are no breaking changes in API. Bump the minor version due to new features and the change of rustc version.
Highlights
- Support name probing and conflict resolution RFC 6762
- Support service liveness checking via
verifyAPI. RFC 6762 - rustc version changed to 1.65.0
- performance improvements and doc updates.
All changes
- 7f6c5e9 perf: avoid cloning in filtering ptr (#272) (CosminPerRam)
- e185d6f refactoring: define an enum for DNS resource record types (#274) (keepsimple1)
- d117f4f refactoring: move exec_command into Zeroconf (#273) (keepsimple1)
- 39acd80 feat: replace remaining Box with type (#271) (CosminPerRam)
- b50fe8c perf: optimize u8_slice_to_hex by replacing Vec with String (#270) (CosminPerRam)
- db545b1 doc: some spelling fixes (#269) (CosminPerRam)
- 7328f45 doc: add a table of RFC compliance details (#268) (keepsimple1)
- 1ade666 feat: verify to support Cache Flush on Failure Indication (#267) (keepsimple1)
- 8b63fd7 feat: support name probing and conflict resolution (#265) (keepsimple1)
- 429ecde dev-test: enhance test case for ipv4 only auto addr (#263) (keepsimple1)
- f902cf2 register service: apply interface selection for auto IP addr (#262) (keepsimple1)
- 0381e30 dns_cache: address record should only flush on the same network (#261) (keepsimple1)
Version 0.11.5 (2024-09-28)
This is a bugfix release.
All changes
- 2829d8e tests: fix remove addr test (#258) (keepsimple1)
- 4f58e2f dns_parser: check against potential name compression loop (#257) (keepsimple1)
Version 0.11.4 (2024-09-10)
Bugfixes. Added checks for corrupted RR data to prevent unnecessary panics. Thanks for new contributor @rise0chen !
Sorry that this release has a few merged small commits as I didn't know how to properly
merge in a PR that targets a fetaure branch used in another PR, instead of main branch.
All changes
- e54485e add --verbose in CI test run (#254) (keepsimple1)
- f0c4c27 remove fastrand dependency from dev-test (#252) (keepsimple1)
- dff1596 Merge pull request #250 from keepsimple1/rdata-check (keepsimple1)
- 659e684 fix cargo clippy warning (keepsimple1)
- 90a2f12 Merge pull request #251 from rise0chen/rdata-check (keepsimple1)
- 6d51f55 Merge branch 'rdata-check' into rdata-check (keepsimple1)
- 1b2cf40 add a check for rr data len (keepsimple1)
- a5de799 feat: test random data (rise0chen)
- 40698a3 add test case and simplify DnsTxt::new (keepsimple1)
- fc489bd refactoring error log (keepsimple1)
- a3fad8e add a check for rr data len (keepsimple1)
Version 0.11.3 (2024-08-23)
A release of bugfixes and refactorings.
All changes
- 3292110 DnsTxt debug print: make its text field human-readable (#247) (keepsimple1) (2024-08-21)
- 5567c1f Send SearchStarted events with addrs as
ip (intf-name)(#245) (hrzlgnm) (2024-08-22) - 9a91a53 cache flush: add the missing timer for updated expires (#244) (keepsimple1) (2024-08-19)
- c1d7efa Change intf_socks to a map of (Interface, Socket) (#242) (keepsimple1) (2024-08-18)
- 404100d refactor out a common method for DnsRecordExt (#241) (keepsimple1) (2024-08-18)
- f055c78 Refresh A and AAAA records of active
.browsequeriers (#240) (hrzlgnm) (2024-08-17) - 0453030 Avoid redundant query, announcement and unregistration overhaul (#239) (hrzlgnm) (2024-08-16)
Version 0.11.2 (2024-08-06)
Mostly a bugfix and refactoring release, with limited support added for:
- Known Answer Suppression (RFC 6762 section 7.1 and 7.2):
- single packet for querier and responder,
- multi-packet for querier.
All changes
- 92eae74 add support for Known Answer Suppression part 2: multi-packet: querier side (#232) (keepsimple1)
- ada3486 fix test integration_success: respond count or known answer suppression count (#237) (keepsimple1)
- 8106d07 Skip link local addresses while checking for redundant announcements or query packets (#235) (hrzlgnm)
- b1a173a check data length in read_u16 (#234) (keepsimple1)
- d1c9157 Add sanity check for service type domain suffix in browse (#231) (keepsimple1)
- 736bec6 enable DEBUG logging for a failed test in CI (#229) (keepsimple1)
- fd00210 add logs in test to debug CI failure (#228) (keepsimple1)
- 5e0f1d3 add support for Known Answer Suppression part 1 (#227) (keepsimple1)
- 5ae18a6 refactoring: remove Send for DnsRecordBox (#226) (keepsimple1)
- d7d4867 fix integration_success test (#223) (keepsimple1)
- 6f34f1c move DnsCache into its own module (#221) (keepsimple1)
- bcdc2f9 add welcome to our new contributor (#220) (keepsimple1)
Version 0.11.1 (2024-05-13)
Highlights
- Start to honor cache flush bit.
- Improved cache refresh logic.
- Code refactorings.
- And a few bugfixes.
All changes
- 098f2df move unit tests into integration test (#218)
- 80291ba refresh PTR records (#217)
- 5eb74b5 refactoring: extract details from exec_command into own functions (#215)
- 551ed4d Bugfix: AddressesRemoved missing actual addrs (#210)
- 3c924f4 Bugfix: cache flush properly (#211)
- ccdae2d Bugfix: logging feature cannot be disabled (#212)
- 626f9fa refresh SRV records and send out ServiceRemoved for expired SRV (#180)
- 06e2cf7 feat: merge match same arms (#209)
- bf5cea3 perf: in adding answers, use static dispatch instead of dynamic dispatch (#207)
- 19d2161 feat: extract match addr to type as a function (#205)
- 5bdcdd6 feat: remove clone derive from counter (#208)
- e7fc0e0 feat: replace box dns with declared type (#206)
- 5732665 feat: apply nursery lints (#202)
- 16cb5cd feat: honor cache flush (#201)
Welcome our new contributor: @lyager ! Thanks!
Version 0.11.0 (2024-04-21)
Breaking changes
- Now
ServiceDaemon::register()requireshostnameto end with ".local."
New features
- Support resolving hostnames directly:
ServiceDaemon::resolve_hostname()
All changes
- example code: refactor the query output prints and the register hostname (#189)
- support multiple questions in send_query_vec (#194)
- CI: fix a test waiting for IPv6 addr (#195)
- Add support for resolving non-service hostnames (#192)
- zeroconf: use min heap for timers (#196)
- Fix flaky test (#198)
- enable logging for examples and add doc for logging (#199)
Welcome our new contributor: @oysteintveit-nordicsemi ! Thanks!
Version 0.10.5 (2024-03-24)
Notes
- Port 0 is now considered valid in ServiceInfo (#181)
Changes
- reduce SearchStopped notification send error to warn (#178)
- refactoring: extract handle_poller_events() (#177)
- Do not consider port 0 as a missing info (#181)
- query TYPE_A and TYPE_AAAA via Command::Resolve (#185)
- bump socket2 version (#174)
- add NSEC record to debug resolve issue (#183)
Welcome our new contributors: @hrzlgnm and @irvingoujAtDevolution ! Thanks!
Version 0.10.4 (2024-02-10)
This is a bug fix release.
Changes
- Add sanity checks in DNS message decoding (#169)
- fine-tune MAX_MSG_ABSOLUTE (#170)
Version 0.10.3 (2024-01-14)
This is a bug fix release.
Changes
- netmask -> subnet (#164)
Welcome our new contributor @amfaber ! Thanks!
Version 0.10.2 (2023-12-28)
This is a bug fix release.
Changes
- use human-readable address in error log of send_packet (#155)
- query for unresolved instances only when needed (#157)
- Fix panic due to range out of bounds in txt record parsing (#159)
- Sanity check for empty service type name (#160)
- Added comment for updating service info by re-registering.
Welcome our new contributor @Raphiiko ! Thanks!
Happy new year 2024!
Version 0.10.1 (2023-12-2)
This is a bug fix release.
Changes
- update flume to 0.11 (#152)
- bugfix: signal event key is possible to overlap with socket poll ids (#153)
Version 0.10.0 (2023-11-28)
Breaking changes
ServiceDaemon::shutdown()return type changed fromResult<()>toResult<Receiver<DaemonStatus>>(#149)
Other changes
- Related to the breaking change, a client can receive
DaemonStatusto be sure the daemon is shutdown. - A new enum
DaemonStatusand a new APIServiceDaemon::status()are introduced. - Updated CI in GitHub Actions: replace
actions-rswithdtolnay/rust-toolchain.
Version 0.9.3
This is a bugfix release.
- apply interface selections when IP addresses change (#142)
- Remove un-necessary panic (#144)
- Always include subtype info if exists (#146)
p.s. Happy Halloween!
Version 0.9.2
The release includes a bugfix, thanks to @Mornix !
- fix PTR expiration from preventing later service resolution (#140)
- updated doc comments for
DnsCache::add_or_update.
Version 0.9.1
There are no breaking changes.
- support interface selection (#137)
Added two new methods for ServiceDaemon: enable_interface and disable_interface, and some refactoring.
Version 0.9.0
- Ssupports IPv6 (#130) (Thanks to @izissise)
- ServiceInfo: support get_addresses_v4 (#132)
- bugfix: set address type correctly (#134)
This is a breaking change, including:
- Trait
AsIpv4Addrschanges toAsIpAddrsto support both IPv4 and IPv6. ServiceInfo::new()uses the newAsIpAddrstrait.ServiceInfo::get_addresses()returns both IPv4 and IPv6 addresses, while a new convenience methodget_addresses_v4returns IPv4 only.
But in general, because the trait hides away details, the user code is likely keeping working without code changes.
Improvements:
- avoid redundant annoucement or query packets (#135)
Version 0.8.1
- Remove env_logger in dev-dependencies and lower MSRV to 1.60.0. (#128)
Version 0.8.0
No breaking changes in API. This release brings two potential user-visible changes:
- use UDP socket to signal the daemon for commands. (#125)
This change reduces CPU utilization of the daemon thread as well as its latency to the user commands. Internally it uses local UDP sockets to signal the daemon.
- Added the link-local feature to if_addrs in Cargo.toml to enable link-local interfaces in Windows. (#126)
This change makes link-local interfaces visible to users in Windows where they didn't show up previously.
Version 0.7.5
- Revert the changes in v0.7.4 and support link-local addrs alongside routable addrs. (#122)
Version 0.7.4 (deprecated)
- Not to use link-local addrs if routable addrs exist (#117)
Version 0.7.3
Highlights
-
Internal refactoring: always use DnsCache to resolve Servive Instances. When processing incoming packets, we used to update the cache one record at a time and also build separate service info structs to resolve. Now we finish the cache updates first, and then resolve instances from the cache.
-
Added env_logger for the examples code and enhanced the examples as well.
What's Changed
- Support updating instances after they are resolved by @keepsimple1 in https://github.com/keepsimple1/mdns-sd/pull/104
- add optional "unregister" in example code by @keepsimple1 in https://github.com/keepsimple1/mdns-sd/pull/107
- Returns an error with logging for read_name invalid offset by @keepsimple1 in https://github.com/keepsimple1/mdns-sd/pull/109
- register example should keep running by @keepsimple1 in https://github.com/keepsimple1/mdns-sd/pull/110
- Refactoring DnsCache and how to resolve Service Instance by @keepsimple1 in https://github.com/keepsimple1/mdns-sd/pull/108
- add sanity check in reading a record data RDATA by @keepsimple1 in https://github.com/keepsimple1/mdns-sd/pull/111
- Enable logging for the examples by @keepsimple1 in https://github.com/keepsimple1/mdns-sd/pull/112
- register example: a simpler input for the service type by @keepsimple1 in https://github.com/keepsimple1/mdns-sd/pull/113
Version 0.7.2
Highlights:
-
Implemented
Displaytrait forTxtProperty: print usingkey=valueformat, wherevalueis same as.get_property_val_str(). -
Implemented
Debugtrait forTxtProperty: print using a struct format, wherevalueprints as a string if it is UTF-8, or prints as hex if it is not UTF-8.
Version 0.7.1
Highlights:
- A bug fix: remove duplicated keys in TXT records received.
Version 0.7.0
Breaking Changes:
-
Allow non-standard max length for a service name. The check for the length of a service name is moved to the daemon. If a service name is too long, there will be an error log and an error event sent to the monitors.
-
ServiceInfo.get_property_val()returnsOption<Option<&[u8]>>instead ofOption<&str>. Now a newServiceInfo.get_property_val_str()returnsOption<&str>.
In other words, migrate to get_property_val_str() if you don't
want to worry about non-UTF8 values.
Highlights:
- Allow non-standard max length for a service name: A new method
ServiceDaemon.set_service_name_len_max()is added to support that. Only use it when you really need to. - Support non-UTF-8 value for TXT properties.
- Support
no valuefor a TXT property, i.e. boolean keys. - Added checks for ASCII keys in a TXT property.
Version 0.6.1
Highlights:
- Fixs a bug: missing TXT records in received responses.
Version 0.6.0
Breaking Changes:
ServiceInfo::new()takesIntoTxtPropertiestrait instead of aHashMapof properties. It is also backward-compatiable: the trait is implemented forHashMapandOption<HashMap>.ServiceInfo::get_properties()returns&TxtPropertiesinstead of aHashMapof properties. It is also mostly backward-compatiable: supportiter(),get()methods.
Highlights:
- TXT properties' names are now case insensitive. And the original user input order is kept.
- A new method
ServiceInfo::enable_addr_auto(): automatically fill in IP addresses for published services. - Detect IP changes.
- A new
ServiceDaemon::monitor()method to return aReceiverhandle to monitor the daemon events, such as IP changes.
Version 0.5.10
- skip interfaces that failed to bind (#79) (re-apply fix in v0.5.6)
Version 0.5.9
- Ignore duplicate keys (#74)
- update error msg for send_packet (#69)
Version 0.5.8
- call check_service_name before sending the cmd to the daemon. (#60)
- Changed dependency on 'log' crate to be optional (#64)
- configure mDNS daemon thread a name (#66)
- log an error if socket read returns 0 and reset the socket (#67)
Version 0.5.7
- Allow service names with trailing '.' (#56)
- query unresolved instances (#58)
Verison 0.5.6
- handle join_multicast_v4 error gracefully (#53)
Version 0.5.5
- track IPv4 interfaces with sockets to support multiple LANs (#48)
Version 0.5.4
- Fix a bug in resolving multiple IPs for a host.
- Code reorg: separate modules out of lib.rs.
- Listening socket joins multicast on all interfaces.
Version 0.5.3
- Support subtypes.
- Bind every valid IPv4 interface for outgoing sockets.
- Include Windows and macOS in GitHub Actions.
Version 0.5.2
- Add support for Windows platform.
Version 0.5.1
- Fix missing info in the license files.
- Add docs.rs badge.
- Make Error implement std::error::Error.
Version 0.5.0
- Allow multiple formats for host_ipv4 to create ServiceInfo.
- A breaking change: change
ServiceInfo::new()to return aResult<>. - Update
nixdependency to version 0.24.1.
Version 0.4.3
- Fix a bug in stop-browse
Version 0.4.2
- New feature: support meta-query
_services._dns-sd._udpper RFC 6763.
Version 0.4.1
- Update docs.
Version 0.4.0
- Replace
crossbeam-channelwithflume.
Version 0.3.0
- Add "get_metrics" in API.
- Fixed a bug in cache refresh.
- Fixed a bug in retransmission.
Version 0.2.2
- Add the first example code. Thanks @lu-zero! (#5)
Version 0.2.1
- mDNS daemon respond socket to be blocking for simpler send.
Version 0.2.0
- Public API internally to use the unblocking try_send() to replace send().
- Add
Againin Error type to support retry.
Version 0.1.0
- Initial version