Lines Matching +full:ipv4 +full:- +full:multi +full:- +full:target
8 * RFC 6762 - Multicast DNS\n
9 * RFC 6763 - DNS-Based Service Discovery\n
14 * -------------------------
16 * - Tiebreaking for simultaneous probing
17 * - Sending goodbye messages (zero ttl) - shutdown, DHCP lease about to expire, DHCP turned off...
18 * - Checking that source address of unicast requests are on the same network
19 * - Limiting multicast responses to 1 per second per resource record
20 * - Fragmenting replies if required
21 * - Handling multi-packet known answers
22 * - Individual known answer detection for all local IPv6 addresses
23 * - Dynamic size of outgoing packet
73 #error "If you want to use MDNS with IPv4, you have to define LWIP_IGMP=1 in your lwipopts.h"
84 /* IPv4 multicast group 224.0.0.251 */
115 #define REVERSE_PTR_V4_DOMAIN "in-addr"
124 /* Lookup from hostname -> IPv4 */
126 /* Lookup from IPv4/v6 -> hostname */
128 /* Lookup from hostname -> IPv6 */
130 /* Lookup from hostname -> IPv6 */
145 /* first probe timeout SHOULD be random 0-250 ms*/
296 if (len > 0 && (1 + len + domain->length >= MDNS_DOMAIN_MAXLEN)) { in mdns_domain_add_label_base()
300 if (len == 0 && (1 + domain->length > MDNS_DOMAIN_MAXLEN)) { in mdns_domain_add_label_base()
303 domain->name[domain->length] = len; in mdns_domain_add_label_base()
304 domain->length++; in mdns_domain_add_label_base()
323 MEMCPY(&domain->name[domain->length], label, len); in mdns_domain_add_label()
324 domain->length += len; in mdns_domain_add_label()
340 if (pbuf_copy_partial(p, &domain->name[domain->length], len, offset) != len) { in mdns_domain_add_label_pbuf()
342 domain->length--; in mdns_domain_add_label_pbuf()
345 domain->length += len; in mdns_domain_add_label_pbuf()
371 if (offset >= p->tot_len) { in mdns_readname_loop()
377 if (jumpaddr >= SIZEOF_DNS_HDR && jumpaddr < p->tot_len) { in mdns_readname_loop()
395 if (c + domain->length >= MDNS_DOMAIN_MAXLEN) { in mdns_readname_loop()
434 u8_t *src = domain->name; in mdns_domain_debug_print()
449 * Return 1 if contents of domains match (case-insensitive)
461 if (a->length != b->length) { in mdns_domain_eq()
465 ptra = a->name; in mdns_domain_eq()
466 ptrb = b->name; in mdns_domain_eq()
467 while (*ptra && *ptrb && ptra < &a->name[a->length]) { in mdns_domain_eq()
481 if (*ptra != *ptrb && ptra < &a->name[a->length]) { in mdns_domain_eq()
494 memset(&service->txtdata, 0, sizeof(struct mdns_domain)); in mdns_prepare_txtdata()
495 if (service->txt_fn) { in mdns_prepare_txtdata()
496 service->txt_fn(service, service->txt_userdata); in mdns_prepare_txtdata()
502 * Build domain for reverse lookup of IPv4 address
503 * like 12.0.168.192.in-addr.arpa. for 192.168.0.12
505 * @param addr Pointer to an IPv4 address to encode
521 for (i = sizeof(ip4_addr_t) - 1; i >= 0; i--) { in mdns_build_reverse_v4_domain()
529 …res = mdns_domain_add_label(domain, REVERSE_PTR_V4_DOMAIN, (u8_t)(sizeof(REVERSE_PTR_V4_DOMAIN) - … in mdns_build_reverse_v4_domain()
531 …res = mdns_domain_add_label(domain, REVERSE_PTR_TOPDOMAIN, (u8_t)(sizeof(REVERSE_PTR_TOPDOMAIN) - … in mdns_build_reverse_v4_domain()
560 for (i = sizeof(ip6_addr_p_t) - 1; i >= 0; i--) { in mdns_build_reverse_v6_domain()
568 buf = 'a' + (byte & 0x0F) - 0xA; in mdns_build_reverse_v6_domain()
575 …res = mdns_domain_add_label(domain, REVERSE_PTR_V6_DOMAIN, (u8_t)(sizeof(REVERSE_PTR_V6_DOMAIN) - … in mdns_build_reverse_v6_domain()
577 …res = mdns_domain_add_label(domain, REVERSE_PTR_TOPDOMAIN, (u8_t)(sizeof(REVERSE_PTR_TOPDOMAIN) - … in mdns_build_reverse_v6_domain()
590 err_t res = mdns_domain_add_label(domain, TOPDOMAIN_LOCAL, (u8_t)(sizeof(TOPDOMAIN_LOCAL) - 1)); in mdns_add_dotlocal()
609 res = mdns_domain_add_label(domain, mdns->name, (u8_t)strlen(mdns->name)); in mdns_build_host_domain()
615 * Build the lookup-all-services special DNS-SD domain name
617 * @return ERR_OK if domain _services._dns-sd._udp.local. was written, an err_t otherwise
625 res = mdns_domain_add_label(domain, "_services", (u8_t)(sizeof("_services") - 1)); in mdns_build_dnssd_domain()
627 res = mdns_domain_add_label(domain, "_dns-sd", (u8_t)(sizeof("_dns-sd") - 1)); in mdns_build_dnssd_domain()
650 res = mdns_domain_add_label(domain, service->name, (u8_t)strlen(service->name)); in mdns_build_service_domain()
653 res = mdns_domain_add_label(domain, service->service, (u8_t)strlen(service->service)); in mdns_build_service_domain()
655 …s = mdns_domain_add_label(domain, dnssd_protos[service->proto], (u8_t)strlen(dnssd_protos[service-… in mdns_build_service_domain()
677 if (rr->klass != DNS_RRCLASS_IN && rr->klass != DNS_RRCLASS_ANY) { in check_host()
683 if (rr->type == DNS_RRTYPE_PTR || rr->type == DNS_RRTYPE_ANY) { in check_host()
689 if (res == ERR_OK && mdns_domain_eq(&rr->domain, &mydomain)) { in check_host()
702 if (res == ERR_OK && mdns_domain_eq(&rr->domain, &mydomain)) { in check_host()
711 if (res == ERR_OK && mdns_domain_eq(&rr->domain, &mydomain)) { in check_host()
715 && (rr->type == DNS_RRTYPE_A || rr->type == DNS_RRTYPE_ANY)) { in check_host()
720 if (rr->type == DNS_RRTYPE_AAAA || rr->type == DNS_RRTYPE_ANY) { in check_host()
742 if (rr->klass != DNS_RRCLASS_IN && rr->klass != DNS_RRCLASS_ANY) { in check_service()
748 if (res == ERR_OK && mdns_domain_eq(&rr->domain, &mydomain) && in check_service()
749 (rr->type == DNS_RRTYPE_PTR || rr->type == DNS_RRTYPE_ANY)) { in check_service()
755 if (res == ERR_OK && mdns_domain_eq(&rr->domain, &mydomain) && in check_service()
756 (rr->type == DNS_RRTYPE_PTR || rr->type == DNS_RRTYPE_ANY)) { in check_service()
762 if (res == ERR_OK && mdns_domain_eq(&rr->domain, &mydomain)) { in check_service()
764 if (rr->type == DNS_RRTYPE_SRV || rr->type == DNS_RRTYPE_ANY) { in check_service()
767 if (rr->type == DNS_RRTYPE_TXT || rr->type == DNS_RRTYPE_ANY) { in check_service()
790 struct mdns_domain target; in mdns_compress_domain() local
796 return domain->length; in mdns_compress_domain()
798 target_end = mdns_readname(pbuf, *offset, &target); in mdns_compress_domain()
800 return domain->length; in mdns_compress_domain()
802 target_len = (u8_t)(target_end - *offset); in mdns_compress_domain()
803 ptr = domain->name; in mdns_compress_domain()
804 while (writelen < domain->length) { in mdns_compress_domain()
805 u8_t domainlen = (u8_t)(domain->length - writelen); in mdns_compress_domain()
807 if (domainlen <= target.length && domainlen > DOMAIN_JUMP_SIZE) { in mdns_compress_domain()
808 /* Compare domains if target is long enough, and we have enough left of the domain */ in mdns_compress_domain()
809 u8_t targetpos = (u8_t)(target.length - domainlen); in mdns_compress_domain()
814 if (target.length >= domainlen && in mdns_compress_domain()
815 memcmp(&domain->name[writelen], &target.name[targetpos], domainlen) == 0) { in mdns_compress_domain()
826 return domain->length; in mdns_compress_domain()
831 * unless domain->skip_compression is set.
841 u16_t writelen = domain->length; in mdns_write_domain()
845 if (!domain->skip_compression) { in mdns_write_domain()
847 u16_t offset = outpkt->domain_offsets[i]; in mdns_write_domain()
849 u16_t len = mdns_compress_domain(outpkt->pbuf, &offset, domain); in mdns_write_domain()
860 res = pbuf_take_at(outpkt->pbuf, domain->name, writelen, outpkt->write_offset); in mdns_write_domain()
867 if (outpkt->domain_offsets[i] == 0) { in mdns_write_domain()
868 outpkt->domain_offsets[i] = outpkt->write_offset; in mdns_write_domain()
873 outpkt->write_offset += writelen; in mdns_write_domain()
878 res = pbuf_take_at(outpkt->pbuf, &jump, DOMAIN_JUMP_SIZE, outpkt->write_offset); in mdns_write_domain()
882 outpkt->write_offset += DOMAIN_JUMP_SIZE; in mdns_write_domain()
906 if (!outpkt->pbuf) { in mdns_add_question()
908 outpkt->pbuf = pbuf_alloc(PBUF_TRANSPORT, OUTPACKET_SIZE, PBUF_RAM); in mdns_add_question()
909 if (!outpkt->pbuf) { in mdns_add_question()
912 outpkt->write_offset = SIZEOF_DNS_HDR; in mdns_add_question()
916 question_len = domain->length + sizeof(type) + sizeof(klass); in mdns_add_question()
917 if (outpkt->write_offset + question_len > outpkt->pbuf->tot_len) { in mdns_add_question()
930 res = pbuf_take_at(outpkt->pbuf, &field16, sizeof(field16), outpkt->write_offset); in mdns_add_question()
934 outpkt->write_offset += sizeof(field16); in mdns_add_question()
941 res = pbuf_take_at(outpkt->pbuf, &field16, sizeof(field16), outpkt->write_offset); in mdns_add_question()
945 outpkt->write_offset += sizeof(field16); in mdns_add_question()
978 if (!reply->pbuf) { in mdns_add_answer()
980 reply->pbuf = pbuf_alloc(PBUF_TRANSPORT, OUTPACKET_SIZE, PBUF_RAM); in mdns_add_answer()
981 if (!reply->pbuf) { in mdns_add_answer()
984 reply->write_offset = SIZEOF_DNS_HDR; in mdns_add_answer()
988 …answer_len = domain->length + sizeof(type) + sizeof(klass) + sizeof(ttl) + sizeof(field16)/*rd_len… in mdns_add_answer()
993 answer_len += answer_domain->length; in mdns_add_answer()
995 if (reply->write_offset + answer_len > reply->pbuf->tot_len) { in mdns_add_answer()
1005 res = pbuf_take_at(reply->pbuf, &field32, sizeof(field32), reply->write_offset); in mdns_add_answer()
1009 reply->write_offset += sizeof(field32); in mdns_add_answer()
1012 rdlen_offset = reply->write_offset; in mdns_add_answer()
1013 reply->write_offset += sizeof(field16); in mdns_add_answer()
1014 answer_offset = reply->write_offset; in mdns_add_answer()
1018 res = pbuf_take_at(reply->pbuf, buf, (u16_t)buf_length, reply->write_offset); in mdns_add_answer()
1022 reply->write_offset += (u16_t)buf_length; in mdns_add_answer()
1034 field16 = lwip_htons(reply->write_offset - answer_offset); in mdns_add_answer()
1035 res = pbuf_take_at(reply->pbuf, &field16, sizeof(field16), rdlen_offset); in mdns_add_answer()
1052 pkt->parse_offset = mdns_readname(pkt->pbuf, pkt->parse_offset, &info->domain); in mdns_read_rr_info()
1053 if (pkt->parse_offset == MDNS_READNAME_ERROR) { in mdns_read_rr_info()
1057 copied = pbuf_copy_partial(pkt->pbuf, &field16, sizeof(field16), pkt->parse_offset); in mdns_read_rr_info()
1061 pkt->parse_offset += copied; in mdns_read_rr_info()
1062 info->type = lwip_ntohs(field16); in mdns_read_rr_info()
1064 copied = pbuf_copy_partial(pkt->pbuf, &field16, sizeof(field16), pkt->parse_offset); in mdns_read_rr_info()
1068 pkt->parse_offset += copied; in mdns_read_rr_info()
1069 info->klass = lwip_ntohs(field16); in mdns_read_rr_info()
1086 if (pkt->pbuf->tot_len < pkt->parse_offset) { in mdns_read_question()
1090 if (pkt->questions_left) { in mdns_read_question()
1092 pkt->questions_left--; in mdns_read_question()
1095 res = mdns_read_rr_info(pkt, &question->info); in mdns_read_question()
1101 question->unicast = question->info.klass & 0x8000; in mdns_read_question()
1102 question->info.klass &= 0x7FFF; in mdns_read_question()
1121 if (pkt->questions_left) { in mdns_read_answer()
1126 if (pkt->pbuf->tot_len < pkt->parse_offset) { in mdns_read_answer()
1130 if (pkt->answers_left) { in mdns_read_answer()
1134 pkt->answers_left--; in mdns_read_answer()
1137 res = mdns_read_rr_info(pkt, &answer->info); in mdns_read_answer()
1143 answer->cache_flush = answer->info.klass & 0x8000; in mdns_read_answer()
1144 answer->info.klass &= 0x7FFF; in mdns_read_answer()
1146 copied = pbuf_copy_partial(pkt->pbuf, &ttl, sizeof(ttl), pkt->parse_offset); in mdns_read_answer()
1150 pkt->parse_offset += copied; in mdns_read_answer()
1151 answer->ttl = lwip_ntohl(ttl); in mdns_read_answer()
1153 copied = pbuf_copy_partial(pkt->pbuf, &field16, sizeof(field16), pkt->parse_offset); in mdns_read_answer()
1157 pkt->parse_offset += copied; in mdns_read_answer()
1158 answer->rd_length = lwip_ntohs(field16); in mdns_read_answer()
1160 answer->rd_offset = pkt->parse_offset; in mdns_read_answer()
1161 pkt->parse_offset += answer->rd_length; in mdns_read_answer()
1169 /** Write an IPv4 address (A) RR to outpacket */
1176 …ly, &host, DNS_RRTYPE_A, DNS_RRCLASS_IN, cache_flush, (NETIF_TO_HOST(netif))->dns_ttl, (const u8_t… in mdns_add_a_answer()
1179 /** Write a 4.3.2.1.in-addr.arpa -> hostname.local PTR RR to outpacket */
1187 …revhost, DNS_RRTYPE_PTR, DNS_RRCLASS_IN, cache_flush, (NETIF_TO_HOST(netif))->dns_ttl, NULL, 0, &h… in mdns_add_hostv4_ptr_answer()
1199 … &host, DNS_RRTYPE_AAAA, DNS_RRCLASS_IN, cache_flush, (NETIF_TO_HOST(netif))->dns_ttl, (const u8_t… in mdns_add_aaaa_answer()
1202 /** Write a x.y.z.ip6.arpa -> hostname.local PTR RR to outpacket */
1210 …revhost, DNS_RRTYPE_PTR, DNS_RRCLASS_IN, cache_flush, (NETIF_TO_HOST(netif))->dns_ttl, NULL, 0, &h… in mdns_add_hostv6_ptr_answer()
1214 /** Write an all-services -> servicetype PTR RR to outpacket */
1222 …return mdns_add_answer(reply, &service_dnssd, DNS_RRTYPE_PTR, DNS_RRCLASS_IN, 0, service->dns_ttl,… in mdns_add_servicetype_ptr_answer()
1225 /** Write a servicetype -> servicename PTR RR to outpacket */
1233 …return mdns_add_answer(reply, &service_type, DNS_RRTYPE_PTR, DNS_RRCLASS_IN, 0, service->dns_ttl, … in mdns_add_servicename_ptr_answer()
1244 if (reply->legacy_query) { in mdns_add_srv_answer()
1253 srvdata[2] = lwip_htons(service->port); in mdns_add_srv_answer()
1255 …add_answer(reply, &service_instance, DNS_RRTYPE_SRV, DNS_RRCLASS_IN, cache_flush, service->dns_ttl, in mdns_add_srv_answer()
1267 …add_answer(reply, &service_instance, DNS_RRTYPE_TXT, DNS_RRCLASS_IN, cache_flush, service->dns_ttl, in mdns_add_txt_answer()
1268 (u8_t *) &service->txtdata.name, service->txtdata.length, NULL); in mdns_add_txt_answer()
1278 out->cache_flush = 1; in mdns_init_outpacket()
1279 out->netif = in->netif; in mdns_init_outpacket()
1282 * which pcb to use for multicast (IPv4/IPv6) in mdns_init_outpacket()
1284 SMEMCPY(&out->dest_addr, &in->source_addr, sizeof(ip_addr_t)); in mdns_init_outpacket()
1285 out->dest_port = in->source_port; in mdns_init_outpacket()
1287 if (in->source_port != LWIP_IANA_PORT_MDNS) { in mdns_init_outpacket()
1288 out->unicast_reply = 1; in mdns_init_outpacket()
1289 out->cache_flush = 0; in mdns_init_outpacket()
1290 if (in->questions == 1) { in mdns_init_outpacket()
1291 out->legacy_query = 1; in mdns_init_outpacket()
1292 out->tx_id = in->tx_id; in mdns_init_outpacket()
1296 if (in->recv_unicast) { in mdns_init_outpacket()
1297 out->unicast_reply = 1; in mdns_init_outpacket()
1314 struct mdns_host *mdns = NETIF_TO_HOST(outpkt->netif); in mdns_send_outpacket()
1319 if (outpkt->host_replies & REPLY_HOST_A) { in mdns_send_outpacket()
1320 res = mdns_add_a_answer(outpkt, outpkt->cache_flush, outpkt->netif); in mdns_send_outpacket()
1326 if (outpkt->host_replies & REPLY_HOST_PTR_V4) { in mdns_send_outpacket()
1327 res = mdns_add_hostv4_ptr_answer(outpkt, outpkt->cache_flush, outpkt->netif); in mdns_send_outpacket()
1335 if (outpkt->host_replies & REPLY_HOST_AAAA) { in mdns_send_outpacket()
1338 if (ip6_addr_isvalid(netif_ip6_addr_state(outpkt->netif, addrindex))) { in mdns_send_outpacket()
1339 res = mdns_add_aaaa_answer(outpkt, outpkt->cache_flush, outpkt->netif, addrindex); in mdns_send_outpacket()
1347 if (outpkt->host_replies & REPLY_HOST_PTR_V6) { in mdns_send_outpacket()
1348 u8_t rev_addrs = outpkt->host_reverse_v6_replies; in mdns_send_outpacket()
1352 res = mdns_add_hostv6_ptr_answer(outpkt, outpkt->cache_flush, outpkt->netif, addrindex); in mdns_send_outpacket()
1366 service = mdns->services[i]; in mdns_send_outpacket()
1371 if (outpkt->serv_replies[i] & REPLY_SERVICE_TYPE_PTR) { in mdns_send_outpacket()
1379 if (outpkt->serv_replies[i] & REPLY_SERVICE_NAME_PTR) { in mdns_send_outpacket()
1387 if (outpkt->serv_replies[i] & REPLY_SERVICE_SRV) { in mdns_send_outpacket()
1388 res = mdns_add_srv_answer(outpkt, outpkt->cache_flush, mdns, service); in mdns_send_outpacket()
1395 if (outpkt->serv_replies[i] & REPLY_SERVICE_TXT) { in mdns_send_outpacket()
1396 res = mdns_add_txt_answer(outpkt, outpkt->cache_flush, service); in mdns_send_outpacket()
1406 outpkt->answers += answers; in mdns_send_outpacket()
1408 outpkt->authoritative += answers; in mdns_send_outpacket()
1413 service = mdns->services[i]; in mdns_send_outpacket()
1418 if (outpkt->serv_replies[i] & REPLY_SERVICE_NAME_PTR) { in mdns_send_outpacket()
1421 if (!(outpkt->serv_replies[i] & REPLY_SERVICE_SRV)) { in mdns_send_outpacket()
1422 res = mdns_add_srv_answer(outpkt, outpkt->cache_flush, mdns, service); in mdns_send_outpacket()
1426 outpkt->additional++; in mdns_send_outpacket()
1429 if (!(outpkt->serv_replies[i] & REPLY_SERVICE_TXT)) { in mdns_send_outpacket()
1430 res = mdns_add_txt_answer(outpkt, outpkt->cache_flush, service); in mdns_send_outpacket()
1434 outpkt->additional++; in mdns_send_outpacket()
1441 if ((outpkt->serv_replies[i] & (REPLY_SERVICE_NAME_PTR | REPLY_SERVICE_SRV)) || in mdns_send_outpacket()
1442 (outpkt->host_replies & (REPLY_HOST_A | REPLY_HOST_AAAA))) { in mdns_send_outpacket()
1444 if (!(outpkt->host_replies & REPLY_HOST_AAAA)) { in mdns_send_outpacket()
1447 if (ip6_addr_isvalid(netif_ip6_addr_state(outpkt->netif, addrindex))) { in mdns_send_outpacket()
1448 res = mdns_add_aaaa_answer(outpkt, outpkt->cache_flush, outpkt->netif, addrindex); in mdns_send_outpacket()
1452 outpkt->additional++; in mdns_send_outpacket()
1458 if (!(outpkt->host_replies & REPLY_HOST_A) && in mdns_send_outpacket()
1459 !ip4_addr_isany_val(*netif_ip4_addr(outpkt->netif))) { in mdns_send_outpacket()
1460 res = mdns_add_a_answer(outpkt, outpkt->cache_flush, outpkt->netif); in mdns_send_outpacket()
1464 outpkt->additional++; in mdns_send_outpacket()
1470 if (outpkt->pbuf) { in mdns_send_outpacket()
1477 hdr.numquestions = lwip_htons(outpkt->questions); in mdns_send_outpacket()
1478 hdr.numanswers = lwip_htons(outpkt->answers); in mdns_send_outpacket()
1479 hdr.numauthrr = lwip_htons(outpkt->authoritative); in mdns_send_outpacket()
1480 hdr.numextrarr = lwip_htons(outpkt->additional); in mdns_send_outpacket()
1481 hdr.id = lwip_htons(outpkt->tx_id); in mdns_send_outpacket()
1482 pbuf_take(outpkt->pbuf, &hdr, sizeof(hdr)); in mdns_send_outpacket()
1485 pbuf_realloc(outpkt->pbuf, outpkt->write_offset); in mdns_send_outpacket()
1487 if (IP_IS_V6_VAL(outpkt->dest_addr)) { in mdns_send_outpacket()
1497 …MDNS_DEBUG, ("MDNS: Sending packet, len=%d, unicast=%d\n", outpkt->write_offset, outpkt->unicast_r… in mdns_send_outpacket()
1498 if (outpkt->unicast_reply) { in mdns_send_outpacket()
1499 … res = udp_sendto_if(mdns_pcb, outpkt->pbuf, &outpkt->dest_addr, outpkt->dest_port, outpkt->netif); in mdns_send_outpacket()
1501 … res = udp_sendto_if(mdns_pcb, outpkt->pbuf, mcast_destaddr, LWIP_IANA_PORT_MDNS, outpkt->netif); in mdns_send_outpacket()
1506 if (outpkt->pbuf) { in mdns_send_outpacket()
1507 pbuf_free(outpkt->pbuf); in mdns_send_outpacket()
1508 outpkt->pbuf = NULL; in mdns_send_outpacket()
1516 * @param destination The target address to send to (usually multicast address)
1543 struct mdns_service *serv = mdns->services[i]; in mdns_announce()
1569 struct mdns_host *mdns = NETIF_TO_HOST(pkt->netif); in mdns_handle_question()
1571 if (mdns->probing_state != MDNS_PROBING_COMPLETE) { in mdns_handle_question()
1579 while (pkt->questions_left) { in mdns_handle_question()
1597 reply.host_replies |= check_host(pkt->netif, &q.info, &reply.host_reverse_v6_replies); in mdns_handle_question()
1601 service = mdns->services[i]; in mdns_handle_question()
1620 while (pkt->answers_left) { in mdns_handle_question()
1642 match = reply.host_replies & check_host(pkt->netif, &ans.info, &rev_v6); in mdns_handle_question()
1643 if (match && (ans.ttl > (mdns->dns_ttl / 2))) { in mdns_handle_question()
1652 len = mdns_readname(pkt->pbuf, ans.rd_offset, &known_ans); in mdns_handle_question()
1674 pbuf_memcmp(pkt->pbuf, ans.rd_offset, netif_ip4_addr(pkt->netif), ans.rd_length) == 0) { in mdns_handle_question()
1683 … pbuf_memcmp(pkt->pbuf, ans.rd_offset, netif_ip6_addr(pkt->netif, 0), ans.rd_length) == 0) { in mdns_handle_question()
1692 service = mdns->services[i]; in mdns_handle_question()
1697 if (match && (ans.ttl > (service->dns_ttl / 2))) { in mdns_handle_question()
1706 len = mdns_readname(pkt->pbuf, ans.rd_offset, &known_ans); in mdns_handle_question()
1730 len = pbuf_copy_partial(pkt->pbuf, &field16, sizeof(field16), read_pos); in mdns_handle_question()
1736 len = pbuf_copy_partial(pkt->pbuf, &field16, sizeof(field16), read_pos); in mdns_handle_question()
1742 len = pbuf_copy_partial(pkt->pbuf, &field16, sizeof(field16), read_pos); in mdns_handle_question()
1743 if (len != sizeof(field16) || lwip_ntohs(field16) != service->port) { in mdns_handle_question()
1748 len = mdns_readname(pkt->pbuf, read_pos, &known_ans); in mdns_handle_question()
1758 if (service->txtdata.length == ans.rd_length && in mdns_handle_question()
1759 pbuf_memcmp(pkt->pbuf, ans.rd_offset, service->txtdata.name, ans.rd_length) == 0) { in mdns_handle_question()
1785 struct mdns_host* mdns = NETIF_TO_HOST(pkt->netif); in mdns_handle_response()
1788 while (pkt->questions_left) { in mdns_handle_response()
1799 while (pkt->answers_left) { in mdns_handle_response()
1815 if ((mdns->probing_state == MDNS_PROBING_ONGOING) && (mdns->probes_sent > 0)) { in mdns_handle_response()
1827 struct mdns_service* service = mdns->services[i]; in mdns_handle_response()
1839 sys_untimeout(mdns_probe, pkt->netif); in mdns_handle_response()
1841 mdns_name_result_cb(pkt->netif, MDNS_PROBING_CONFLICT); in mdns_handle_response()
1850 * Handles both IPv4 and IPv6 UDP pcbs.
1863 …LWIP_DEBUGF(MDNS_DEBUG, ("MDNS: Received IPv%d MDNS packet, len %d\n", IP_IS_V6(addr) ? 6 : 4, p->… in mdns_recv()
1877 /* Ignore non-standard queries in multicast packets (RFC 6762, section 18.3) */ in mdns_recv()
1929 if (args->status_changed.state != 0) { in mdns_netif_ext_status_callback()
1935 if (args->link_changed.state != 0) { in mdns_netif_ext_status_callback()
1969 struct mdns_service* service = mdns->services[i]; in mdns_send_probe()
1996 struct mdns_service *serv = mdns->services[i]; in mdns_send_probe()
2024 if(mdns->probes_sent >= MDNS_PROBE_COUNT) { in mdns_probe()
2026 mdns->probing_state = MDNS_PROBING_COMPLETE; in mdns_probe()
2033 /*if ipv4 wait with probing until address is set*/ in mdns_probe()
2042 mdns->probes_sent++; in mdns_probe()
2075 MEMCPY(&mdns->name, hostname, LWIP_MIN(MDNS_LABEL_MAXLEN, strlen(hostname))); in mdns_resp_add_netif()
2076 mdns->dns_ttl = dns_ttl; in mdns_resp_add_netif()
2077 mdns->probes_sent = 0; in mdns_resp_add_netif()
2078 mdns->probing_state = MDNS_PROBING_NOT_STARTED; in mdns_resp_add_netif()
2122 if (mdns->probing_state == MDNS_PROBING_ONGOING) { in mdns_resp_remove_netif()
2127 struct mdns_service *service = mdns->services[i]; in mdns_resp_remove_netif()
2168 MEMCPY(&mdns->name, hostname, LWIP_MIN(MDNS_LABEL_MAXLEN, len)); in mdns_resp_rename_netif()
2169 mdns->name[len] = '\0'; /* null termination in case new name is shorter than previous */ in mdns_resp_rename_netif()
2195 s8_t slot = -1; in mdns_resp_add_service()
2209 if (mdns->services[i] == NULL) { in mdns_resp_add_service()
2219 MEMCPY(&srv->name, name, LWIP_MIN(MDNS_LABEL_MAXLEN, strlen(name))); in mdns_resp_add_service()
2220 MEMCPY(&srv->service, service, LWIP_MIN(MDNS_LABEL_MAXLEN, strlen(service))); in mdns_resp_add_service()
2221 srv->txt_fn = txt_fn; in mdns_resp_add_service()
2222 srv->txt_userdata = txt_data; in mdns_resp_add_service()
2223 srv->proto = (u16_t)proto; in mdns_resp_add_service()
2224 srv->port = port; in mdns_resp_add_service()
2225 srv->dns_ttl = dns_ttl; in mdns_resp_add_service()
2227 mdns->services[slot] = srv; in mdns_resp_add_service()
2250 …LWIP_ERROR("mdns_resp_del_service: Invalid Service ID", (mdns->services[slot] != NULL), return ERR… in mdns_resp_del_service()
2252 srv = mdns->services[slot]; in mdns_resp_del_service()
2253 mdns->services[slot] = NULL; in mdns_resp_del_service()
2280 …LWIP_ERROR("mdns_resp_rename_service: Invalid Service ID", (mdns->services[slot] != NULL), return … in mdns_resp_rename_service()
2282 srv = mdns->services[slot]; in mdns_resp_rename_service()
2284 MEMCPY(&srv->name, name, LWIP_MIN(MDNS_LABEL_MAXLEN, len)); in mdns_resp_rename_service()
2285 srv->name[len] = '\0'; /* null termination in case new name is shorter than previous */ in mdns_resp_rename_service()
2308 return mdns_domain_add_label(&service->txtdata, txt, txt_len); in mdns_resp_add_service_txtitem()
2328 if (mdns->probing_state == MDNS_PROBING_COMPLETE) { in mdns_resp_announce()
2329 /* Announce on IPv6 and IPv4 */ in mdns_resp_announce()
2367 if (mdns->probing_state == MDNS_PROBING_ONGOING) { in mdns_resp_restart()
2371 mdns->probes_sent = 0; in mdns_resp_restart()
2372 mdns->probing_state = MDNS_PROBING_ONGOING; in mdns_resp_restart()
2392 mdns_pcb->ttl = MDNS_TTL; in mdns_resp_init()