@@ -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+
883899static 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