Home | History | Annotate | Download | only in mDNSCore

Lines Matching defs:InterfaceID

77 mDNSlocal void SendWakeup(mDNS *const m, mDNSInterfaceID InterfaceID, mDNSEthAddr *EthAddr, mDNSOpaque48 *password);
336 mDNSexport mDNSBool mDNS_AddressIsLocalSubnet(mDNS *const m, const mDNSInterfaceID InterfaceID, const mDNSAddr *addr)
345 if (intf->ip.type == addr->type && intf->InterfaceID == InterfaceID && intf->McastTxRx)
354 if (intf->ip.type == addr->type && intf->InterfaceID == InterfaceID && intf->McastTxRx)
365 mDNSlocal NetworkInterfaceInfo *FirstInterfaceForID(mDNS *const m, const mDNSInterfaceID InterfaceID)
368 while (intf && intf->InterfaceID != InterfaceID) intf = intf->next;
372 mDNSexport char *InterfaceNameForID(mDNS *const m, const mDNSInterfaceID InterfaceID)
374 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, InterfaceID);
431 q->InterfaceID = mDNSInterface_Unicast;
569 ((RR)->resrec.InterfaceID == mDNSInterface_Any || (RR)->resrec.InterfaceID == (INTID)))
619 if (r1->resrec.InterfaceID &&
620 r2->resrec.InterfaceID &&
621 r1->resrec.InterfaceID != r2->resrec.InterfaceID) return(mDNSfalse);
640 if (pktrr->resrec.InterfaceID &&
641 authrr->resrec.InterfaceID &&
642 pktrr->resrec.InterfaceID != authrr->resrec.InterfaceID) return(mDNSfalse);
949 ((A)->resrec.InterfaceID == (B)->resrec.InterfaceID && RecordLDT((A),(B)) && IdenticalResourceRecord(&(A)->resrec, &(B)->resrec))
1042 mDNSInterfaceID previousID = rr->resrec.InterfaceID;
1043 if (rr->resrec.InterfaceID == mDNSInterface_Any || rr->resrec.InterfaceID == mDNSInterface_P2P)
1045 rr->resrec.InterfaceID = mDNSInterface_LocalOnly;
1048 if (rr->resrec.InterfaceID != mDNSInterface_LocalOnly)
1050 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID);
1051 if (intf && !intf->Advertise){ rr->resrec.InterfaceID = mDNSInterface_LocalOnly; rr->ARType = AuthRecordLocalOnly; }
1053 if (rr->resrec.InterfaceID != previousID)
1106 if (rr->resrec.InterfaceID && rr->ARType != AuthRecordLocalOnly && rr->ARType != AuthRecordP2P)
1108 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID);
1111 debugf("mDNS_Register_internal: Bogus InterfaceID %p in resource record", rr->resrec.InterfaceID);
1240 LogInfo("mDNS_Register_internal: Name conflict %s (%p), InterfaceID %p", ARDisplayString(m, rr), rr, rr->resrec.InterfaceID);
1620 mDNSlocal void AddAdditionalsToResponseList(mDNS *const m, AuthRecord *ResponseRecords, AuthRecord ***nrpp, const mDNSInterfaceID InterfaceID)
1627 if (rr->Additional1 && ResourceRecordIsValidInterfaceAnswer(rr->Additional1, InterfaceID))
1630 if (rr->Additional2 && ResourceRecordIsValidInterfaceAnswer(rr->Additional2, InterfaceID))
1638 ResourceRecordIsValidInterfaceAnswer(rr2, InterfaceID) && // ... which are valid for answer ...
1647 ResourceRecordIsValidInterfaceAnswer(rr2, InterfaceID) && // ... which are valid for answer ...
1654 if (ResourceRecordIsValidInterfaceAnswer(&m->DeviceInfo, InterfaceID) &&
1661 mDNSlocal void SendDelayedUnicastResponse(mDNS *const m, const mDNSAddr *const dest, const mDNSInterfaceID InterfaceID)
1666 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, InterfaceID);
1677 if (rr->ImmedUnicast && rr->ImmedAnswer == InterfaceID)
1690 LogInfo("SendDelayedUnicastResponse: Not sending %s, on %s", ARDisplayString(m, rr), InterfaceNameForID(m, InterfaceID));
1700 AddAdditionalsToResponseList(m, ResponseRecords, &nrp, InterfaceID);
1744 mDNSSendDNSMessage(m, &m->omsg, responseptr, InterfaceID, mDNSNULL, dest, MulticastDNSPort, mDNSNULL, mDNSNULL);
1857 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID);
1858 if (!intf) { LogMsg("SendARP: No interface with InterfaceID %p found %s", rr->resrec.InterfaceID, ARDisplayString(m,rr)); return; }
1889 mDNSPlatformSendRawPacket(m->omsg.data, ptr, rr->resrec.InterfaceID);
1928 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID);
1929 if (!intf) { LogMsg("SendNDP: No interface with InterfaceID %p found %s", rr->resrec.InterfaceID, ARDisplayString(m,rr)); return; }
2002 mDNSPlatformSendRawPacket(m->omsg.data, ptr, rr->resrec.InterfaceID);
2087 SendWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.IMAC, &rr->WakeUp.password);
2089 if (r2->AnnounceCount && r2->resrec.InterfaceID == rr->resrec.InterfaceID && mDNSSameEthAddress(&r2->WakeUp.IMAC, &rr->WakeUp.IMAC))
2139 if ((rr->resrec.InterfaceID && rr->ImmedAnswer) ||
2147 // Note: Currently all address records are interface-specific, so it's safe to set ImmedAdditional to their InterfaceID,
2159 (rr->ImmedAnswer == mDNSInterfaceMark || rr->ImmedAnswer == r2->resrec.InterfaceID))
2160 r2->ImmedAdditional = r2->resrec.InterfaceID; // ... then mark this address record for sending too
2203 rr->SendRNow = !intf ? mDNSNULL : (rr->resrec.InterfaceID) ? rr->resrec.InterfaceID : intf->InterfaceID;
2249 // Skip this interface if the record InterfaceID is *Any and the record is not
2251 if ((rr->SendRNow == intf->InterfaceID) &&
2252 ((rr->resrec.InterfaceID == mDNSInterface_Any) && !mDNSPlatformValidRecordForInterface(rr, intf)))
2257 else if (rr->SendRNow == intf->InterfaceID)
2300 if (rr->ImmedAnswer == mDNSInterfaceMark && rr->resrec.InterfaceID == mDNSInterface_Any)
2311 if (rr->ImmedAdditional == intf->InterfaceID)
2325 a->LastMCInterface == intf->InterfaceID &&
2351 rr->LastMCInterface = intf->InterfaceID;
2358 // (recognized by rr->SendNSECNow == intf->InterfaceID) we should really put the NSEC in the Answer Section,
2361 if (rr->SendNSECNow == mDNSInterfaceMark || rr->SendNSECNow == intf->InterfaceID)
2389 if (r2->SendNSECNow == mDNSInterfaceMark || r2->SendNSECNow == intf->InterfaceID)
2420 m->omsg.h.numAdditionals, m->omsg.h.numAdditionals == 1 ? "" : "s", intf->InterfaceID);
2422 if (intf->IPv4Available) mDNSSendDNSMessage(m, &m->omsg, responseptr, intf->InterfaceID, mDNSNULL, &AllDNSLinkGroup_v4, MulticastDNSPort, mDNSNULL, mDNSNULL);
2423 if (intf->IPv6Available) mDNSSendDNSMessage(m, &m->omsg, responseptr, intf->InterfaceID, mDNSNULL, &AllDNSLinkGroup_v6, MulticastDNSPort, mDNSNULL, mDNSNULL);
2455 InterfaceID, rr->resrec.RecordType, ARDisplayString(m, rr));
2585 if (rr->resrec.InterfaceID == q->SendQNow && // received on this interface
2623 if (rr->resrec.InterfaceID == q->SendQNow && // received on this interface
2707 for (i=0; i<DupSuppressInfoSize; i++) if (ds[i].Time - time < 0) ds[i].InterfaceID = mDNSNULL;
2710 mDNSlocal void ExpireDupSuppressInfoOnInterface(DupSuppressInfo ds[DupSuppressInfoSize], mDNSs32 time, mDNSInterfaceID InterfaceID)
2713 for (i=0; i<DupSuppressInfoSize; i++) if (ds[i].InterfaceID == InterfaceID && ds[i].Time - time < 0) ds[i].InterfaceID = mDNSNULL;
2722 if (ds[i].InterfaceID == intf->InterfaceID)
2731 mDNSlocal int RecordDupSuppressInfo(DupSuppressInfo ds[DupSuppressInfoSize], mDNSs32 Time, mDNSInterfaceID InterfaceID, mDNSs32 Type)
2736 for (i=0; i<DupSuppressInfoSize; i++) if (ds[i].InterfaceID == InterfaceID && ds[i].Type == Type) break;
2742 for (j=1; j<DupSuppressInfoSize && ds[i].InterfaceID; j++)
2743 if (!ds[j].InterfaceID || ds[j].Time - ds[i].Time < 0)
2749 ds[i].InterfaceID = InterfaceID;
2758 mDNSInterfaceID InterfaceID = q->InterfaceID;
2762 if (InterfaceID == mDNSInterface_Any || InterfaceID == mDNSInterface_LocalOnly || InterfaceID == mDNSInterface_P2P)
2764 LogMsg("mDNSSendWakeOnResolve: ERROR!! Invalid InterfaceID %p for question %##s", InterfaceID, q->qname.c);
2797 mDNSPlatformSendWakeupPacket(m, InterfaceID, EthAddr, IPAddr, InitialWakeOnResolveCount - q->WakeOnResolveCount);
2872 ExpireDupSuppressInfoOnInterface(q->DupSuppress, m->timenow - TicksTTL(cr)/20, cr->resrec.InterfaceID);
2877 else if (q->SendQNow == mDNSNULL) q->SendQNow = cr->resrec.InterfaceID;
2878 else if (q->SendQNow != cr->resrec.InterfaceID) q->SendQNow = mDNSInterfaceMark;
2975 q->SendQNow = !intf ? mDNSNULL : (q->InterfaceID) ? q->InterfaceID : intf->InterfaceID;
3015 LogSPS("SendQueries ARP Probe %d %s %s", ar->ProbeCount, InterfaceNameForID(m, ar->resrec.InterfaceID), ARDisplayString(m,ar));
3020 LogSPS("SendQueries NDP Probe %d %s %s", ar->ProbeCount, InterfaceNameForID(m, ar->resrec.InterfaceID), ARDisplayString(m,ar));
3028 ar->SendRNow = (!intf || ar->WakeUp.HMAC.l[0]) ? mDNSNULL : ar->resrec.InterfaceID ? ar->resrec.InterfaceID : intf->InterfaceID;
3093 if (mDNSOpaque16IsZero(q->TargetQID) && (q->SendQNow == intf->InterfaceID))
3103 q->SendQNow = (q->InterfaceID || !q->SendOnAll) ? mDNSNULL : GetNextActiveInterfaceID(intf);
3115 if (ar->SendRNow == intf->InterfaceID)
3127 ar->SendRNow = (ar->resrec.InterfaceID) ? mDNSNULL : GetNextActiveInterfaceID(intf);
3198 m->omsg.h.numAuthorities, m->omsg.h.numAuthorities == 1 ? "" : "s", intf->InterfaceID);
3199 if (intf->IPv4Available) mDNSSendDNSMessage(m, &m->omsg, queryptr, intf->InterfaceID, mDNSNULL, &AllDNSLinkGroup_v4, MulticastDNSPort, mDNSNULL, mDNSNULL);
3200 if (intf->IPv6Available) mDNSSendDNSMessage(m, &m->omsg, queryptr, intf->InterfaceID, mDNSNULL, &AllDNSLinkGroup_v6, MulticastDNSPort, mDNSNULL, mDNSNULL);
3225 LogMsg("SendQueries: No active interface %p to send probe: %p %s", ar->SendRNow, ar->resrec.InterfaceID, ARDisplayString(m, ar));
3251 LogMsg("SendQueries: No active interface %p to send %s question: %p %##s (%s)", q->SendQNow, x ? "new" : "old", q->InterfaceID, q->qname.c, DNSTypeName(q->qtype));
3256 mDNSlocal void SendWakeup(mDNS *const m, mDNSInterfaceID InterfaceID, mDNSEthAddr *EthAddr, mDNSOpaque48 *password)
3260 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, InterfaceID);
3261 if (!intf) { LogMsg("SendARP: No interface with InterfaceID %p found", InterfaceID); return; }
3282 mDNSPlatformSendRawPacket(m->omsg.data, ptr, InterfaceID);
3290 mDNSPlatformSendRawPacket(m->omsg.data, ptr, InterfaceID);
3378 MakeNegativeCacheRecord(m, &neg, &q->qname, q->qnamehash, q->qtype, q->qclass, 1, rr->resrec.InterfaceID, q->qDNSServer);
3858 if (rr->ARType == AuthRecordLocalOnly || (rr->ARType == AuthRecordP2P && q->InterfaceID == mDNSInterface_Any))
4220 SetSPSProxyListChanged(rr->resrec.InterfaceID);
4845 if (rr->resrec.InterfaceID == intf->InterfaceID || (!rr->resrec.InterfaceID && (rr->ForceMCast || IsLocalDomain(rr->resrec.name))))
4913 err = mDNSSendDNSMessage(m, &m->omsg, p, intf->InterfaceID, mDNSNULL, &intf->SPSAddr[sps], intf->SPSPort[sps], mDNSNULL, mDNSNULL);
4972 if (!rr->resrec.InterfaceID || rr->resrec.InterfaceID == intf->InterfaceID)
5114 mDNS_SetupQuestion(&intf->NetWakeResolve[i], intf->InterfaceID, &sps[i]->resrec.rdata->u.name, kDNSType_SRV, NetWakeResolve, intf);
5418 const mDNSInterfaceID InterfaceID, mDNSBool LegacyQuery, DNSMessage *const response, AuthRecord *ResponseRecords)
5439 ptr = getQuestion(query, ptr, end, InterfaceID, &q); // get the question...
5605 ptr = GetLargeResourceRecord(m, query, ptr, end, q->InterfaceID, kDNSRecordTypePacketAuth, &m->rec);
5618 LogMsg("ResolveSimultaneousProbe: %p Pkt Record: %08lX %s", q->InterfaceID, m->rec.r.resrec.rdatahash, CRDisplayString(m, &m->rec.r));
5619 LogMsg("ResolveSimultaneousProbe: %p Our Record %d %s %08lX %s", our->resrec.InterfaceID, our->ProbeCount, msg, our->resrec.rdatahash, ARDisplayString(m, our));
5636 LogMsg("ResolveSimultaneousProbe: %p Pkt Record: %08lX %s", q->InterfaceID, m->rec.r.resrec.rdatahash, CRDisplayString(m, &m->rec.r));
5637 LogMsg("ResolveSimultaneousProbe: %p Our Record %d ign: %08lX %s", our->resrec.InterfaceID, our->ProbeCount, our->resrec.rdatahash, ARDisplayString(m, our));
5657 match = !pktrr->InterfaceID ? pktrr->rDNSServer == rr->resrec.rDNSServer : pktrr->InterfaceID == rr->resrec.InterfaceID;
5673 if (m->rec.r.resrec.InterfaceID == rr->resrec.InterfaceID && mDNSSameEthAddress(&owner->HMAC, &rr->WakeUp.HMAC))
5681 SetSPSProxyListChanged(m->rec.r.resrec.InterfaceID);
5699 if (m->rec.r.resrec.InterfaceID == rr->resrec.InterfaceID && mDNSSameEthAddress(&owner->HMAC, &rr->WakeUp.HMAC))
5720 SetSPSProxyListChanged(m->rec.r.resrec.InterfaceID);
5731 const mDNSAddr *srcaddr, const mDNSInterfaceID InterfaceID, mDNSBool LegacyQuery, mDNSBool QueryWasMulticast,
5734 mDNSBool FromLocalSubnet = srcaddr && mDNS_AddressIsLocalSubnet(m, InterfaceID, srcaddr);
5754 ptr = GetLargeResourceRecord(m, query, ptr, end, InterfaceID, kDNSRecordTypePacketAdd, &m->rec);
5781 ptr = getQuestion(query, ptr, end, InterfaceID, &pktq); // get the question...
5834 (rr->LastMCInterface != mDNSInterfaceMark && rr->LastMCInterface != InterfaceID))
5852 NSECAnswer->SendNSECNow = InterfaceID;
5908 if (!q->InterfaceID || q->InterfaceID == InterfaceID)
5927 AddAdditionalsToResponseList(m, ResponseRecords, &nrp, InterfaceID);
5936 ptr = GetLargeResourceRecord(m, query, ptr, end, InterfaceID, kDNSRecordTypePacketAns, &m->rec);
5949 if (rr->ImmedAnswer == InterfaceID && ShouldSuppressKnownAnswer(&m->rec.r, rr))
5988 if (cr->resrec.InterfaceID == InterfaceID && IdenticalResourceRecord(&m->rec.r.resrec, &cr->resrec))
6048 if (rr->ImmedAnswer && rr->ImmedAnswer != InterfaceID)
6052 rr->ImmedAnswer = InterfaceID; // Record interface to send it on
6078 rr->ImmedAdditional = InterfaceID;
6119 responseptr = GenerateUnicastResponse(query, end, InterfaceID, LegacyQuery, response, ResponseRecords);
6208 i = RecordDupSuppressInfo(q->DupSuppress, m->timenow, InterfaceID, srcaddr->type);
6209 debugf("ProcessQuery: Recorded DSI for %##s (%s) on %p/%s %d", q->qname.c, DNSTypeName(q->qtype), InterfaceID,
6218 InterfaceID)
6222 !mDNSAddrIsDNSMulticast(dstaddr) && mDNS_AddressIsLocalSubnet(m, InterfaceID, srcaddr);
6224 if (!InterfaceID && dstaddr && mDNSAddrIsDNSMulticast(dstaddr))
6227 "%2d Question%s %2d Answer%s %2d Authorit%s %2d Additional%s %d bytes (Multicast, but no InterfaceID)",
6228 srcaddr, mDNSVal16(srcport), dstaddr, mDNSVal16(dstport), InterfaceID,
6238 srcaddr, mDNSVal16(srcport), dstaddr, mDNSVal16(dstport), InterfaceID,
6244 responseend = ProcessQuery(m, msg, end, srcaddr, InterfaceID,
6253 srcaddr, mDNSVal16(srcport), InterfaceID, srcaddr->type);
6254 mDNSSendDNSMessage(m, &m->omsg, responseend, InterfaceID, mDNSNULL, srcaddr, srcport, mDNSNULL, mDNSNULL);
6293 // DNS server or a response to the QU query. Hence, the cache record's InterfaceId can be both NULL or non-NULL (QU case)
6361 if (!m->rec.r.resrec.InterfaceID) debugf("CreateNewCacheEntry %s", CRDisplayString(m, &m->rec.r));
6466 // InterfaceID non-NULL tells us the interface this multicast response was received on
6467 // InterfaceID NULL tells us this was a unicast response
6472 const mDNSInterfaceID InterfaceID)
6476 mDNSBool ResponseSrcLocal = !srcaddr || mDNS_AddressIsLocalSubnet(m, InterfaceID, srcaddr);
6497 srcaddr, dstaddr, InterfaceID,
6516 if (!InterfaceID && (response->h.flags.b[0] & kDNSFlag0_TC)) return;
6544 ptr = getQuestion(response, ptr, end, InterfaceID, &q);
6555 debugf("uDNS marking %p %##s (%s) %p %s", q.InterfaceID, q.qname.c, DNSTypeName(q.qtype),
6556 rr->resrec.InterfaceID, CRDisplayString(m, rr));
6596 ptr = GetLargeResourceRecord(m, response, ptr, end, InterfaceID, RecordType, &m->rec);
6667 if (!InterfaceID)
6669 debugf("mDNSCoreReceiveResponse: InterfaceID %p %##s (%s)", q->InterfaceID, q->qname.c, DNSTypeName(q->qtype));
6677 if (!InterfaceID)
6710 if (rr->ImmedAnswer == InterfaceID) { rr->ImmedAnswer = mDNSNULL; rr->ImmedUnicast = mDNSfalse; }
6714 if (rr->ImmedAnswer == mDNSNULL) { rr->ImmedAnswer = InterfaceID; m->NextScheduledResponse = m->timenow; }
6715 else if (rr->ImmedAnswer != InterfaceID) { rr->ImmedAnswer = mDNSInterfaceMark; m->NextScheduledResponse = m->timenow; }
6820 mDNSBool match = !InterfaceID ? m->rec.r.resrec.rDNSServer == rr->resrec.rDNSServer : rr->resrec.InterfaceID == InterfaceID;
6826 m->rec.r.resrec.rdlength, InterfaceID, CRDisplayString(m, &m->rec.r));
6965 // For Unicast (null InterfaceID) the DNSservers should also match
6966 if ((r1->resrec.InterfaceID == r2->resrec.InterfaceID) &&
6967 (r1->resrec.InterfaceID || (r1->resrec.rDNSServer == r2->resrec.rDNSServer)) &&
7053 ptr = getQuestion(response, ptr, end, InterfaceID, &q);
7077 if (!InterfaceID && q.qtype != kDNSType_SOA && IsLocalDomain(&q.qname))
7112 ptr = GetLargeResourceRecord(m, response, ptr, end, InterfaceID, kDNSRecordTypePacketAuth, &m->rec);
7187 mDNSlocal void ScheduleWakeupForList(mDNS *const m, mDNSInterfaceID InterfaceID, mDNSEthAddr *e, AuthRecord *const thelist)
7194 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering && mDNSSameEthAddress(&rr->WakeUp.HMAC, e))
7201 mDNSlocal void ScheduleWakeup(mDNS *const m, mDNSInterfaceID InterfaceID, mDNSEthAddr *e)
7204 ScheduleWakeupForList(m, InterfaceID, e, m->DuplicateRecords);
7205 ScheduleWakeupForList(m, InterfaceID, e, m->ResourceRecords);
7216 LogMsg("%-7s Conflicting mDNS -- waking %.6a %s", InterfaceNameForID(m, ar->resrec.InterfaceID), &ar->WakeUp.HMAC, ARDisplayString(m, ar));
7219 SendWakeup(m, ar->resrec.InterfaceID, &ar->WakeUp.IMAC, &ar->WakeUp.password); // Send one wakeup magic packet
7220 ScheduleWakeup(m, ar->resrec.InterfaceID, &ar->WakeUp.HMAC); // Schedule all other records with the same owner to be woken
7236 const mDNSInterfaceID InterfaceID)
7247 srcaddr, mDNSVal16(srcport), dstaddr, mDNSVal16(dstport), InterfaceID,
7253 if (!InterfaceID || !m->SPSSocket || !mDNSSameIPPort(dstport, m->SPSSocket->port)) return;
7312 ptr = GetLargeResourceRecord(m, msg, ptr, end, InterfaceID, kDNSRecordTypePacketAuth, &m->rec);
7324 mDNS_SetupResourceRecord(ar, mDNSNULL, InterfaceID, m->rec.r.resrec.rrtype, m->rec.r.resrec.rroriginalttl, RecordType, AuthRecordAny, SPSRecordCallback, ar);
7337 if (ar->AddressProxy.type) SetSPSProxyListChanged(InterfaceID);
7377 if (p) mDNSSendDNSMessage(m, &m->omsg, p, InterfaceID, m->SPSSocket, srcaddr, srcport, mDNSNULL, mDNSNULL);
7380 mDNSlocal void mDNSCoreReceiveUpdateR(mDNS *const m, const DNSMessage *const msg, const mDNSu8 *end, const mDNSInterfaceID InterfaceID)
7382 if (InterfaceID)
7409 if (rr->resrec.InterfaceID == InterfaceID || (!rr->resrec.InterfaceID && (rr->ForceMCast || IsLocalDomain(rr->resrec.name))))
7434 InterfaceID, DNSServer *dnsserver)
7446 cr->resrec.InterfaceID = InterfaceID;
7478 const mDNSInterfaceID InterfaceID)
7480 mDNSInterfaceID ifid = InterfaceID;
7498 LNT_ConfigureRouterInfo(m, InterfaceID, pkt, (mDNSu16)(end - (mDNSu8 *)pkt));
7506 uDNS_ReceiveNATPMPPacket(m, InterfaceID, pkt, (mDNSu16)(end - (mDNSu8 *)pkt));
7550 else if (QR_OP == UpdQ) mDNSCoreReceiveUpdate (m, msg, end, srcaddr, srcport, dstaddr, dstport, InterfaceID);
7551 else if (QR_OP == UpdR) mDNSCoreReceiveUpdateR (m, msg, end, InterfaceID);
7555 msg->h.flags.b[0], msg->h.flags.b[1], srcaddr, mDNSVal16(srcport), dstaddr, mDNSVal16(dstport), end - (mDNSu8 *)pkt, InterfaceID);
7616 if (q->InterfaceID == question->InterfaceID && // with the same InterfaceID,
7715 LogInfo("mDNS_AddMcastResolver: Adding %##s, InterfaceID %p, timeout %u", d->c, interface, timeout);
7848 // This happens normally when you unplug the interface where we reset the interfaceID to mDNSInterface_Any for all
7849 // the DNS servers whose scope match the interfaceID. Few seconds later, we also receive the updated DNS configuration.
7860 if ((!curr->scoped && (!question->InterfaceID || (question->InterfaceID == mDNSInterface_Unicast))) || (curr->interface == question->InterfaceID))
7892 mDNSlocal DNSServer *GetBestServer(mDNS *m, const domainname *name, mDNSInterfaceID InterfaceID, mDNSOpaque64 validBits, int *selected, mDNSBool nameMatch)
7926 // Notes on InterfaceID matching:
7928 // 1) A DNSServer entry may have an InterfaceID but the scoped flag may not be set. This
7929 // is the old way of specifying an InterfaceID option for DNSServer. We recoginize these
7933 // zero InterfaceID or non-zero InterfaceID on the question. Specifying an InterfaceID on
7934 // the question will cause an extra check on matching the InterfaceID on the question
7937 // 2) A DNSServer may also have both scoped set and InterfaceID non-NULL. This
7938 // is the new way of specifying an InterfaceID option for DNSServer. These will be considered
7939 // only when the question has non-zero interfaceID.
7941 if ((!curr->scoped && !InterfaceID) || (curr->interface == InterfaceID))
7947 // part and still do some redundant steps e.g., InterfaceID match
7965 // Look up a DNS Server, matching by name and InterfaceID
7966 mDNSexport DNSServer *GetServerForName(mDNS *m, const domainname *name, mDNSInterfaceID InterfaceID)
7972 if ((InterfaceID == mDNSInterface_Unicast) || (InterfaceID == mDNSInterface_LocalOnly))
7973 InterfaceID = mDNSNULL;
7975 if (InterfaceID) ifname = InterfaceNameForID(m, InterfaceID);
7980 curmatch = GetBestServer(m, name, InterfaceID, allValid, mDNSNULL, mDNStrue);
7985 InterfaceID, name);
7987 LogInfo("GetServerForName: no DNS server (Scope %s:%p) found for name %##s", ifname ? ifname : "None", InterfaceID, name);
7997 mDNSInterfaceID InterfaceID = question->InterfaceID;
8001 if ((InterfaceID == mDNSInterface_Unicast) || (InterfaceID == mDNSInterface_LocalOnly))
8002 InterfaceID = mDNSNULL;
8004 if (InterfaceID) ifname = InterfaceNameForID(m, InterfaceID);
8008 curmatch = GetBestServer(m, name, InterfaceID, question->validDNSServers, &currindex, mDNSfalse);
8015 InterfaceID, name, DNSTypeName(question->qtype));
8017 LogInfo("GetServerForQuestion: %p no DNS server (Scope %s:%p) found for name %##s (%s)", question, ifname ? ifname : "None", InterfaceID, name, DNSTypeName(question->qtype));
8042 mDNSlocal mDNSBool ShouldSuppressQuery(mDNS *const m, domainname *qname, mDNSu16 qtype, mDNSInterfaceID InterfaceID)
8055 if (InterfaceID != mDNSInterface_Unicast && IsLocalDomain(qname)) { LogInfo("ShouldSuppressQuery: Query not suppressed for %##s, qtype %s, Local question", qname, DNSTypeName(qtype)); return mDNSfalse; }
8062 // Match on Type, Address and InterfaceID
8070 if (!InterfaceID || (InterfaceID == mDNSInterface_LocalOnly) || (InterfaceID == mDNSInterface_P2P) ||
8071 (InterfaceID == mDNSInterface_Unicast) || (i->InterfaceID == InterfaceID))
8246 q->SuppressQuery = ShouldSuppressQuery(m, &q->qname, q->qtype, q->InterfaceID);
8347 if (question->InterfaceID == mDNSInterface_LocalOnly || question->InterfaceID == mDNSInterface_P2P) q = &m->LocalOnlyQuestions;
8360 if (question->InterfaceID && question->InterfaceID != mDNSInterface_LocalOnly && question->InterfaceID != mDNSInterface_Unicast && question->InterfaceID != mDNSInterface_P2P)
8362 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, question->InterfaceID);
8364 LogMsg("Note: InterfaceID %p for question %##s (%s) not currently found in active interface list",
8365 question->InterfaceID, question->qname.c, DNSTypeName(question->qtype));
8390 question->SuppressQuery = ShouldSuppressQuery(m, &question->qname, question->qtype, question->InterfaceID);
8435 question->DupSuppress[i].InterfaceID = mDNSNULL;
8438 question->qname.c, DNSTypeName(question->qtype), question->InterfaceID, m->timenow,
8447 if (question->InterfaceID == mDNSInterface_LocalOnly || question->InterfaceID == mDNSInterface_P2P)
8548 if (question->InterfaceID == mDNSInterface_LocalOnly || question->InterfaceID == mDNSInterface_P2P) qp = &m->LocalOnlyQuestions;
8744 const mDNSInterfaceID InterfaceID, mDNSBool ForceMCast, mDNSQuestionCallback *Callback, void *Context)
8746 question->InterfaceID = InterfaceID;
8770 const mDNSInterfaceID InterfaceID, mDNSBool ForceMCast, mDNSQuestionCallback *Callback, void *Context)
8774 status = mDNS_StartBrowse_internal(m, question, srv, domain, InterfaceID, ForceMCast, Callback, Context);
8800 query->qAv4.InterfaceID = answer->InterfaceID;
8802 query->qAv6.InterfaceID = answer->InterfaceID;
8809 else if ((query->qAv4.InterfaceID != query->qSRV.InterfaceID && query->qAv4.InterfaceID != answer->InterfaceID) ||
8821 query->qAv4.InterfaceID = query->qSRV.InterfaceID; // Will be mDNSInterface_Any, or a specific interface
8822 query->qAv6.InterfaceID = query->qSRV.InterfaceID;
8826 query->qAv4.InterfaceID = answer->InterfaceID;
8828 query->qAv6.InterfaceID = answer->InterfaceID;
8896 query->info->InterfaceID = answer->InterfaceID;
8913 // On entry, the client must have set the name and InterfaceID fields of the ServiceInfo structure
8914 // If the query is not interface-specific, then InterfaceID may be zero
8916 // In addition, InterfaceID will be updated to give the interface identifier corresponding to that response
8924 query->qSRV.InterfaceID = info->InterfaceID;
8944 query->qTXT.InterfaceID = info->InterfaceID;
8964 query->qAv4.InterfaceID = info->InterfaceID;
8984 query->qAv6.InterfaceID = info->InterfaceID;
9039 const mDNSInterfaceID InterfaceID, mDNSQuestionCallback *Callback, void *Context)
9041 question->InterfaceID = InterfaceID;
9175 mDNS_SetupResourceRecord(&set->RR_A, mDNSNULL, set->InterfaceID, kDNSType_A, kHostNameTTL, kDNSRecordTypeUnique, AuthRecordAny, mDNS_HostNameCallback, set);
9176 mDNS_SetupResourceRecord(&set->RR_PTR, mDNSNULL, set->InterfaceID, kDNSType_PTR, kHostNameTTL, kDNSRecordTypeKnownUnique, AuthRecordAny, mDNSNULL, mDNSNULL);
9177 mDNS_SetupResourceRecord(&set->RR_HINFO, mDNSNULL, set->InterfaceID, kDNSType_HINFO, kHostNameTTL, kDNSRecordTypeUnique, AuthRecordAny, mDNSNULL, mDNSNULL);
9345 if (intf->InterfaceID == active->InterfaceID)
9389 mDNS_StartBrowse_internal(m, &set->NetWakeBrowse, &SleepProxyServiceType, &localdomain, set->InterfaceID, mDNSfalse, m->SPSBrowseCallback, set);
9428 if (!set->InterfaceID)
9429 { LogMsg("mDNS_RegisterInterface: Error! Tried to register a NetworkInterfaceInfo %#a with zero InterfaceID", &set->ip); return(mStatus_Invalid); }
9443 // Scan list to see if this InterfaceID is already represented
9453 if ((*p)->InterfaceID == set->InterfaceID)
9455 // This InterfaceID already represented by a different interface in the list, so mark this instance inactive for now
9471 LogInfo("mDNS_RegisterInterface: InterfaceID %p %s (%#a) %s", set->InterfaceID, set->ifname, &set->ip,
9523 if (!q->InterfaceID || q->InterfaceID == set->InterfaceID) // If non-specific Q, or Q on this specific interface,
9526 mDNSBool dodelay = flapping && (q->FlappingInterface1 == set->InterfaceID || q->FlappingInterface2 == set->InterfaceID);
9545 if (!rr->resrec.InterfaceID || rr->resrec.InterfaceID == set->InterfaceID)
9590 if (intf->InterfaceActive && intf->InterfaceID == set->InterfaceID)
9595 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, set->InterfaceID);
9598 LogInfo("mDNS_DeregisterInterface: Another representative of InterfaceID %p %s (%#a) exists;"
9599 " making it active", set->InterfaceID, set->ifname, &set->ip);
9610 if (intf->InterfaceID == set->InterfaceID && intf->ip.type == set->ip.type)
9622 LogInfo("mDNS_DeregisterInterface: Last representative of InterfaceID %p %s (%#a) deregistered;"
9623 " marking questions etc. dormant", set->InterfaceID, set->ifname, &set->ip);
9632 if (q->InterfaceID == set->InterfaceID) q->ThisQInterval = 0;
9633 if (!q->InterfaceID || q->InterfaceID == set->InterfaceID)
9636 q->FlappingInterface1 = set->InterfaceID; // Keep history of the last two interfaces to go away
9643 if (rr->resrec.InterfaceID == set->InterfaceID)
9661 if (s->interface == set->InterfaceID)
9682 if (rr->resrec.InterfaceID == set->InterfaceID)
9772 mDNSInterfaceID InterfaceID, mDNSServiceCallback Callback, void *Context, mDNSu32 flags)
9788 if (InterfaceID == mDNSInterface_LocalOnly)
9790 else if (InterfaceID == mDNSInterface_P2P)
9792 else if ((InterfaceID == mDNSInterface_Any) && (flags & regFlagIncludeP2P))
9799 mDNS_SetupResourceRecord(&sr->RR_ADV, mDNSNULL, InterfaceID, kDNSType_PTR, kStandardTTL, kDNSRecordTypeAdvisory, artype, ServiceCallback, sr);
9800 mDNS_SetupResourceRecord(&sr->RR_PTR, mDNSNULL, InterfaceID, kDNSType_PTR, kStandardTTL, kDNSRecordTypeShared, artype, ServiceCallback, sr);
9807 mDNS_SetupResourceRecord(&sr->RR_SRV, mDNSNULL, InterfaceID, kDNSType_SRV, hostTTL, recordType, artype, ServiceCallback, sr);
9808 mDNS_SetupResourceRecord(&sr->RR_TXT, mDNSNULL, InterfaceID, kDNSType_TXT, kStandardTTL, kDNSRecordTypeUnique, artype, ServiceCallback, sr);
9812 return(mDNS_RegisterNoSuchService(m, &sr->RR_SRV, name, type, domain, mDNSNULL, InterfaceID, NSSCallback, sr, (flags & regFlagIncludeP2P)));
9847 mDNS_SetupResourceRecord(&sr->SubTypes[i], mDNSNULL, InterfaceID, kDNSType_PTR, kStandardTTL, kDNSRecordTypeShared, artype, ServiceCallback, sr);
9910 mDNSInterfaceID InterfaceID = sr->RR_PTR.resrec.InterfaceID;
9912 if (InterfaceID == mDNSInterface_LocalOnly)
9914 if (InterfaceID == mDNSInterface_P2P)
9916 else if ((InterfaceID == mDNSInterface_Any) && includeP2P)
9922 mDNS_SetupResourceRecord(&extra->r, rdata, sr->RR_PTR.resrec.InterfaceID,
9995 sr->RR_PTR.resrec.InterfaceID, sr->ServiceCallback, sr->ServiceContext, 0);
10081 const mDNSInterfaceID InterfaceID, mDNSRecordCallback Callback, void *Context, mDNSBool includeP2P)
10085 if (InterfaceID == mDNSInterface_LocalOnly)
10087 else if (InterfaceID == mDNSInterface_P2P)
10089 else if ((InterfaceID == mDNSInterface_Any) && includeP2P)
10094 mDNS_SetupResourceRecord(rr, mDNSNULL, InterfaceID, kDNSType_SRV, kHostNameTTL, kDNSRecordTypeUnique, artype, Callback, Context);
10105 mDNS_DomainType DomainType, const mDNSInterfaceID InterfaceID, char *domname)
10109 if (InterfaceID == mDNSInterface_LocalOnly)
10111 else if (InterfaceID == mDNSInterface_P2P)
10115 mDNS_SetupResourceRecord(rr, mDNSNULL, InterfaceID, kDNSType_PTR, kStandardTTL, kDNSRecordTypeShared, artype, mDNSNULL, mDNSNULL);
10189 mDNSlocal void mDNSCoreReceiveRawARP(mDNS *const m, const ARP_EthIP *const arp, const mDNSInterfaceID InterfaceID)
10193 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, InterfaceID);
10209 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
10222 else if (msg == msg3) mDNSPlatformSetLocalAddressCacheEntry(m, &rr->AddressProxy, &rr->WakeUp.IMAC, InterfaceID);
10241 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
10253 ScheduleWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.HMAC);
10278 const IPv6NDP *const ndp, const mDNSu8 *const end, const mDNSInterfaceID InterfaceID)
10281 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, InterfaceID);
10292 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
10310 mDNSPlatformSetLocalAddressCacheEntry(m, &rr->AddressProxy, &rr->WakeUp.IMAC, InterfaceID);
10329 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
10340 ScheduleWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.HMAC);
10349 const mDNSu8 *const p, const TransportLayerPacket *const t, const mDNSu8 *const end, const mDNSInterfaceID InterfaceID, const mDNSu16 len)
10427 if (!checksum) mDNSCoreReceiveRawND(m, sha, &src->ip.v6, &t->ndp, &t->bytes[len], InterfaceID);
10442 if (rr->resrec.InterfaceID == InterfaceID &&
10448 if (r2->resrec.InterfaceID == InterfaceID && mDNSSameEthAddress(&r2->WakeUp.HMAC, &rr->WakeUp.HMAC) &&
10457 InterfaceNameForID(m, rr->resrec.InterfaceID), dst, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m, r2));
10458 ScheduleWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.HMAC);
10462 InterfaceNameForID(m, rr->resrec.InterfaceID), dst, &rr->WakeUp.HMAC, tp, mDNSVal16(port));
10468 mDNSexport void mDNSCoreReceiveRawPacket(mDNS *const m, const mDNSu8 *const p, const mDNSu8 *const end, const mDNSInterfaceID InterfaceID)
10487 mDNSCoreReceiveRawARP(m, &pkt->arp, InterfaceID);
10496 mDNSCoreReceiveRawTransportPacket(m, &eth->src, &src, &dst, pkt->v4.protocol, p, (TransportLayerPacket*)trans, end, InterfaceID, 0);
10506 mDNSCoreReceiveRawTransportPacket(m, &eth->src, &src, &dst, pkt->v6.pro, p, (TransportLayerPacket*)trans, end, InterfaceID,
11090 if (cr->resrec.InterfaceID) continue;
11096 // InterfaceID for looking up the right DNS server
11097 ptr = GetServerForName(m, cr->resrec.name, cr->CRActiveQuestion ? cr->CRActiveQuestion->InterfaceID : mDNSNULL);
11185 if (cr->resrec.InterfaceID) continue;
11250 FORALL_CACHERECORDS(slot, cg, cr) if (!cr->resrec.InterfaceID) { mDNS_PurgeCacheResourceRecord(m, cr); count++; }