Skip to content

Commit 0d0d6bd

Browse files
committed
Refactor mDNS response planning and harden link handling
Plan mDNS responses from the active link inventory before applying known-answer suppression and packet writing. Keep broken per-link socket failures scoped to that link/family, preserve IPv4-only watchdog checks, and rebuild the affected NetBSD artifacts.
1 parent af9c820 commit 0d0d6bd

11 files changed

Lines changed: 1546 additions & 753 deletions

File tree

bin/mdns-netbsd4be/mdns-advertiser

2.81 KB
Binary file not shown.

bin/mdns-netbsd4le/mdns-advertiser

2.73 KB
Binary file not shown.

bin/mdns/mdns-advertiser

1.59 KB
Binary file not shown.

bin/nbns-netbsd4le/nbns-advertiser

0 Bytes
Binary file not shown.

build/auto-ip-common.inc

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ struct link_context {
4848
char name[IFNAMSIZ];
4949
int flags;
5050
unsigned int ifindex;
51+
int mdns_ipv4_transport;
52+
uint32_t mdns_ipv4_transport_addr;
5153
int mdns_ipv6_transport;
5254
struct link_ipv4_addr ipv4[MAX_LINK_IPV4_ADDRS];
5355
size_t ipv4_count;
@@ -792,6 +794,7 @@ static int TC_AUTO_IP_UNUSED append_link_ipv4(struct link_context_set *out,
792794
pos = ctx->ipv4_count++;
793795
ctx->ipv4[pos].addr = ipv4_addr;
794796
ctx->ipv4[pos].netmask = netmask;
797+
ctx->mdns_ipv4_transport = 1;
795798
if (ctx->ipv4_count == 1) {
796799
ctx->flags = flags;
797800
}
@@ -880,6 +883,19 @@ static int TC_AUTO_IP_UNUSED link_context_has_advertisable_address(const struct
880883
link_context_has_advertisable_ipv6(ctx);
881884
}
882885

886+
static int TC_AUTO_IP_UNUSED link_context_has_mdns_ipv4_transport(const struct link_context *ctx) {
887+
return ctx->mdns_ipv4_transport && ctx->ipv4_count > 0;
888+
}
889+
890+
static void TC_AUTO_IP_UNUSED disable_link_contexts_mdns_ipv4_transport(struct link_context_set *set) {
891+
size_t i;
892+
893+
for (i = 0; i < set->count; i++) {
894+
set->links[i].mdns_ipv4_transport = 0;
895+
set->links[i].mdns_ipv4_transport_addr = 0;
896+
}
897+
}
898+
883899
static int TC_AUTO_IP_UNUSED link_context_has_mdns_ipv6_transport(const struct link_context *ctx) {
884900
return ctx->mdns_ipv6_transport && ctx->ifindex != 0 && ctx->ipv6_count > 0;
885901
}
@@ -921,6 +937,7 @@ static int TC_AUTO_IP_UNUSED link_context_identity_equal(const struct link_conte
921937
if (strcmp(a->name, b->name) != 0 ||
922938
a->flags != b->flags ||
923939
a->ifindex != b->ifindex ||
940+
a->mdns_ipv4_transport != b->mdns_ipv4_transport ||
924941
a->mdns_ipv6_transport != b->mdns_ipv6_transport ||
925942
a->ipv4_count != b->ipv4_count ||
926943
a->ipv6_count != b->ipv6_count) {
@@ -1209,13 +1226,16 @@ static void TC_AUTO_IP_UNUSED log_link_contexts(const char *prefix, const struct
12091226
fprintf(stderr, "%s: links=%lu\n", prefix, (unsigned long)set->count);
12101227
for (i = 0; i < set->count; i++) {
12111228
size_t j;
1229+
char transport_ip_buf[INET_ADDRSTRLEN];
12121230
const struct link_context *ctx = &set->links[i];
1213-
fprintf(stderr, "%s: link[%lu] iface=%s flags=0x%x ifindex=%u mdns_ipv6=%d score=%d ipv4=%lu ipv6=%lu\n",
1231+
fprintf(stderr, "%s: link[%lu] iface=%s flags=0x%x ifindex=%u mdns_ipv4=%d mdns_ipv4_addr=%s mdns_ipv6=%d score=%d ipv4=%lu ipv6=%lu\n",
12141232
prefix,
12151233
(unsigned long)i,
12161234
ctx->name,
12171235
(unsigned int)ctx->flags,
12181236
ctx->ifindex,
1237+
ctx->mdns_ipv4_transport,
1238+
ctx->mdns_ipv4_transport_addr != 0 ? ipv4_to_string(ctx->mdns_ipv4_transport_addr, transport_ip_buf, sizeof(transport_ip_buf)) : "(auto)",
12191239
ctx->mdns_ipv6_transport,
12201240
link_context_priority_score(ctx),
12211241
(unsigned long)ctx->ipv4_count,

0 commit comments

Comments
 (0)