mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-07-27 08:31:08 +08:00
mDNSResponder: Update to v765.30.11
The sources can be obtained via: https://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-765.30.11.tar.gz Update #3522.
This commit is contained in:
parent
fc605b3425
commit
7d33d36d73
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
include $(MAKEFILEPATH)/pb_makefiles/platform.make
|
include $(MAKEFILEPATH)/pb_makefiles/platform.make
|
||||||
|
|
||||||
MVERS = "mDNSResponder-765.20.4"
|
MVERS = "mDNSResponder-765.30.11"
|
||||||
|
|
||||||
DDNSWRITECONFIG = "$(DSTROOT)/Library/Application Support/Bonjour/ddnswriteconfig"
|
DDNSWRITECONFIG = "$(DSTROOT)/Library/Application Support/Bonjour/ddnswriteconfig"
|
||||||
VER =
|
VER =
|
||||||
|
@ -195,6 +195,8 @@ mDNSlocal mDNSu8 *AddResourceRecords(mDNS *const m, DNSProxyClient *pc, mDNSu8 *
|
|||||||
CacheRecord *soa = mDNSNULL;
|
CacheRecord *soa = mDNSNULL;
|
||||||
CacheRecord *cname = mDNSNULL;
|
CacheRecord *cname = mDNSNULL;
|
||||||
mDNSu8 *limit;
|
mDNSu8 *limit;
|
||||||
|
domainname tempQName;
|
||||||
|
mDNSu32 tempQNameHash;
|
||||||
|
|
||||||
*error = mStatus_NoError;
|
*error = mStatus_NoError;
|
||||||
*prevptr = mDNSNULL;
|
*prevptr = mDNSNULL;
|
||||||
@ -222,20 +224,17 @@ mDNSlocal mDNSu8 *AddResourceRecords(mDNS *const m, DNSProxyClient *pc, mDNSu8 *
|
|||||||
}
|
}
|
||||||
LogInfo("AddResourceRecords: Limit is %d", limit - m->omsg.data);
|
LogInfo("AddResourceRecords: Limit is %d", limit - m->omsg.data);
|
||||||
|
|
||||||
if (!SameDomainName(&pc->qname, &pc->q.qname))
|
AssignDomainName(&tempQName, &pc->qname);
|
||||||
{
|
tempQNameHash = DomainNameHashValue(&tempQName);
|
||||||
AssignDomainName(&pc->q.qname, &pc->qname);
|
|
||||||
pc->q.qnamehash = DomainNameHashValue(&pc->q.qname);
|
|
||||||
}
|
|
||||||
|
|
||||||
again:
|
again:
|
||||||
nsec = soa = cname = mDNSNULL;
|
nsec = soa = cname = mDNSNULL;
|
||||||
slot = HashSlot(&pc->q.qname);
|
slot = HashSlot(&tempQName);
|
||||||
|
|
||||||
cg = CacheGroupForName(m, slot, pc->q.qnamehash, &pc->q.qname);
|
cg = CacheGroupForName(m, slot, tempQNameHash, &tempQName);
|
||||||
if (!cg)
|
if (!cg)
|
||||||
{
|
{
|
||||||
LogInfo("AddResourceRecords: CacheGroup not found");
|
LogInfo("AddResourceRecords: CacheGroup not found for %##s", tempQName.c);
|
||||||
*error = mStatus_NoSuchRecord;
|
*error = mStatus_NoSuchRecord;
|
||||||
return mDNSNULL;
|
return mDNSNULL;
|
||||||
}
|
}
|
||||||
@ -344,8 +343,8 @@ again:
|
|||||||
}
|
}
|
||||||
if (cname)
|
if (cname)
|
||||||
{
|
{
|
||||||
AssignDomainName(&pc->q.qname, &cname->resrec.rdata->u.name);
|
AssignDomainName(&tempQName, &cname->resrec.rdata->u.name);
|
||||||
pc->q.qnamehash = DomainNameHashValue(&pc->q.qname);
|
tempQNameHash = DomainNameHashValue(&tempQName);
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
if (!ptr)
|
if (!ptr)
|
||||||
|
@ -3376,7 +3376,7 @@ extern mDNSu8 *DNSProxySetAttributes(DNSQuestion *q, DNSMessageHeader *h, DNSMes
|
|||||||
#if APPLE_OSX_mDNSResponder
|
#if APPLE_OSX_mDNSResponder
|
||||||
extern void mDNSPlatformGetDNSRoutePolicy(mDNS *const m, DNSQuestion *q, mDNSBool *isBlocked);
|
extern void mDNSPlatformGetDNSRoutePolicy(mDNS *const m, DNSQuestion *q, mDNSBool *isBlocked);
|
||||||
#endif
|
#endif
|
||||||
extern void mDNSPlatformSetSocktOpt(void *sock, mDNSTransport_Type transType, mDNSAddr_Type addrType, DNSQuestion *q);
|
extern void mDNSPlatformSetSocktOpt(void *sock, mDNSTransport_Type transType, mDNSAddr_Type addrType, const DNSQuestion *q);
|
||||||
extern mDNSs32 mDNSPlatformGetPID(void);
|
extern mDNSs32 mDNSPlatformGetPID(void);
|
||||||
extern mDNSBool mDNSValidKeepAliveRecord(AuthRecord *rr);
|
extern mDNSBool mDNSValidKeepAliveRecord(AuthRecord *rr);
|
||||||
|
|
||||||
|
@ -4737,7 +4737,10 @@ mDNSexport void uDNS_CheckCurrentQuestion(mDNS *const m)
|
|||||||
{
|
{
|
||||||
q->LocalSocket = mDNSPlatformUDPSocket(m, zeroIPPort);
|
q->LocalSocket = mDNSPlatformUDPSocket(m, zeroIPPort);
|
||||||
if (q->LocalSocket)
|
if (q->LocalSocket)
|
||||||
mDNSPlatformSetSocktOpt(q->LocalSocket, mDNSTransport_UDP, q->qDNSServer->addr.type, q);
|
{
|
||||||
|
mDNSPlatformSetSocktOpt(q->LocalSocket, mDNSTransport_UDP, mDNSAddrType_IPv4, q);
|
||||||
|
mDNSPlatformSetSocktOpt(q->LocalSocket, mDNSTransport_UDP, mDNSAddrType_IPv6, q);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!q->LocalSocket) err = mStatus_NoMemoryErr; // If failed to make socket (should be very rare), we'll try again next time
|
if (!q->LocalSocket) err = mStatus_NoMemoryErr; // If failed to make socket (should be very rare), we'll try again next time
|
||||||
else
|
else
|
||||||
|
@ -99,16 +99,14 @@ static const Domain kQueryStatsDomains[] =
|
|||||||
{ "apple.com.", (domainname *)"\x5" "apple" "\x3" "com", 2 },
|
{ "apple.com.", (domainname *)"\x5" "apple" "\x3" "com", 2 },
|
||||||
{ "icloud.com.", (domainname *)"\x6" "icloud" "\x3" "com", 2 },
|
{ "icloud.com.", (domainname *)"\x6" "icloud" "\x3" "com", 2 },
|
||||||
{ "mzstatic.com.", (domainname *)"\x8" "mzstatic" "\x3" "com", 2 },
|
{ "mzstatic.com.", (domainname *)"\x8" "mzstatic" "\x3" "com", 2 },
|
||||||
{ "me.com.", (domainname *)"\x2" "me" "\x3" "com", 2 },
|
|
||||||
{ "google.com.", (domainname *)"\x6" "google" "\x3" "com", 2 },
|
{ "google.com.", (domainname *)"\x6" "google" "\x3" "com", 2 },
|
||||||
{ "youtube.com.", (domainname *)"\x7" "youtube" "\x3" "com", 2 },
|
|
||||||
{ "facebook.com.", (domainname *)"\x8" "facebook" "\x3" "com", 2 },
|
{ "facebook.com.", (domainname *)"\x8" "facebook" "\x3" "com", 2 },
|
||||||
{ "baidu.com.", (domainname *)"\x5" "baidu" "\x3" "com", 2 },
|
{ "baidu.com.", (domainname *)"\x5" "baidu" "\x3" "com", 2 },
|
||||||
{ "yahoo.com.", (domainname *)"\x5" "yahoo" "\x3" "com", 2 },
|
{ "yahoo.com.", (domainname *)"\x5" "yahoo" "\x3" "com", 2 },
|
||||||
{ "qq.com.", (domainname *)"\x2" "qq" "\x3" "com", 2 },
|
{ "qq.com.", (domainname *)"\x2" "qq" "\x3" "com", 2 },
|
||||||
};
|
};
|
||||||
|
|
||||||
check_compile_time(countof(kQueryStatsDomains) == 11);
|
check_compile_time(countof(kQueryStatsDomains) == 9);
|
||||||
|
|
||||||
// DNSHist contains the per domain per network type histogram data that goes in a DNSDomainStats protobuf message. See
|
// DNSHist contains the per domain per network type histogram data that goes in a DNSDomainStats protobuf message. See
|
||||||
// <rdar://problem/23980546> MDNSResponder.proto update.
|
// <rdar://problem/23980546> MDNSResponder.proto update.
|
||||||
@ -168,7 +166,6 @@ check_compile_time(countof_field(DNSHist, negResponseLatencyBins) == (count
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
DNSHist * histAny; // Histogram data for queries of any resource record type.
|
|
||||||
DNSHist * histA; // Histogram data for queries for A resource records.
|
DNSHist * histA; // Histogram data for queries for A resource records.
|
||||||
DNSHist * histAAAA; // Histogram data for queries for AAAA resource records.
|
DNSHist * histAAAA; // Histogram data for queries for AAAA resource records.
|
||||||
|
|
||||||
@ -313,7 +310,7 @@ static AWDServerConnection * gAWDServerConnection = nil;
|
|||||||
mDNSlocal mStatus DNSDomainStatsCreate(const Domain *inDomain, DNSDomainStats **outStats);
|
mDNSlocal mStatus DNSDomainStatsCreate(const Domain *inDomain, DNSDomainStats **outStats);
|
||||||
mDNSlocal void DNSDomainStatsFree(DNSDomainStats *inStats);
|
mDNSlocal void DNSDomainStatsFree(DNSDomainStats *inStats);
|
||||||
mDNSlocal void DNSDomainStatsFreeList(DNSDomainStats *inList);
|
mDNSlocal void DNSDomainStatsFreeList(DNSDomainStats *inList);
|
||||||
mDNSlocal mStatus DNSDomainStatsUpdate(DNSDomainStats *inStats, uint16_t inType, const ResourceRecord *inRR, mDNSu32 inQuerySendCount, mDNSu32 inLatencyMs, mDNSBool inForCell);
|
mDNSlocal mStatus DNSDomainStatsUpdate(DNSDomainStats *inStats, int inType, const ResourceRecord *inRR, mDNSu32 inQuerySendCount, mDNSu32 inLatencyMs, mDNSBool inForCell);
|
||||||
|
|
||||||
mDNSlocal mStatus ResolveStatsDomainCreate(const Domain *inDomain, ResolveStatsDomain **outDomain);
|
mDNSlocal mStatus ResolveStatsDomainCreate(const Domain *inDomain, ResolveStatsDomain **outDomain);
|
||||||
mDNSlocal void ResolveStatsDomainFree(ResolveStatsDomain *inDomain);
|
mDNSlocal void ResolveStatsDomainFree(ResolveStatsDomain *inDomain);
|
||||||
@ -362,18 +359,10 @@ mDNSlocal void ValidateDNSStatsDomains(void);
|
|||||||
|
|
||||||
mStatus MetricsInit(void)
|
mStatus MetricsInit(void)
|
||||||
{
|
{
|
||||||
mStatus err;
|
|
||||||
|
|
||||||
#if (METRICS_VALIDATE_DNS_STATS_DOMAINS)
|
#if (METRICS_VALIDATE_DNS_STATS_DOMAINS)
|
||||||
ValidateDNSStatsDomains();
|
ValidateDNSStatsDomains();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
err = CreateDomainStatsList(&gDomainStatsList);
|
|
||||||
require_noerr_quiet(err, exit);
|
|
||||||
|
|
||||||
err = CreateResolveStatsList(&gResolveStatsList);
|
|
||||||
require_noerr_quiet(err, exit);
|
|
||||||
|
|
||||||
@autoreleasepool
|
@autoreleasepool
|
||||||
{
|
{
|
||||||
gAWDServerConnection = [[AWDServerConnectionSoft alloc]
|
gAWDServerConnection = [[AWDServerConnectionSoft alloc]
|
||||||
@ -408,8 +397,14 @@ mStatus MetricsInit(void)
|
|||||||
LogMsg("MetricsInit: failed to create AWD server connection.");
|
LogMsg("MetricsInit: failed to create AWD server connection.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exit:
|
|
||||||
return (err);
|
if( gAWDServerConnection )
|
||||||
|
{
|
||||||
|
CreateDomainStatsList(&gDomainStatsList);
|
||||||
|
CreateResolveStatsList(&gResolveStatsList);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (mStatus_NoError);
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================================================================
|
//===========================================================================================================================
|
||||||
@ -425,6 +420,9 @@ mDNSexport void MetricsUpdateUDNSQueryStats(const domainname *inQueryName, mDNSu
|
|||||||
int skipCount;
|
int skipCount;
|
||||||
int skipCountLast = -1;
|
int skipCountLast = -1;
|
||||||
|
|
||||||
|
require_quiet(gAWDServerConnection, exit);
|
||||||
|
require_quiet((inType == kDNSType_A) || (inType == kDNSType_AAAA), exit);
|
||||||
|
|
||||||
queryLabelCount = CountLabels(inQueryName);
|
queryLabelCount = CountLabels(inQueryName);
|
||||||
|
|
||||||
for (stats = gDomainStatsList; stats; stats = stats->next)
|
for (stats = gDomainStatsList; stats; stats = stats->next)
|
||||||
@ -455,6 +453,8 @@ mDNSexport void MetricsUpdateUDNSQueryStats(const domainname *inQueryName, mDNSu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================================================================
|
//===========================================================================================================================
|
||||||
@ -473,6 +473,7 @@ mDNSexport void MetricsUpdateUDNSResolveStats(const domainname *inQueryName, con
|
|||||||
const domainname * queryParentDomain;
|
const domainname * queryParentDomain;
|
||||||
Response response;
|
Response response;
|
||||||
|
|
||||||
|
require_quiet(gAWDServerConnection, exit);
|
||||||
require_quiet((inRR->rrtype == kDNSType_A) || (inRR->rrtype == kDNSType_AAAA), exit);
|
require_quiet((inRR->rrtype == kDNSType_A) || (inRR->rrtype == kDNSType_AAAA), exit);
|
||||||
require_quiet(inRR->rDNSServer, exit);
|
require_quiet(inRR->rDNSServer, exit);
|
||||||
|
|
||||||
@ -536,6 +537,7 @@ mDNSexport void LogMetrics(void)
|
|||||||
int hostnameObjCount = 0;
|
int hostnameObjCount = 0;
|
||||||
int addrObjCount = 0;
|
int addrObjCount = 0;
|
||||||
|
|
||||||
|
LogMsgNoIdent("gAWDServerConnection %p", gAWDServerConnection);
|
||||||
LogMsgNoIdent("---- DNS query stats by domain -----");
|
LogMsgNoIdent("---- DNS query stats by domain -----");
|
||||||
|
|
||||||
for (stats = gDomainStatsList; stats; stats = stats->next)
|
for (stats = gDomainStatsList; stats; stats = stats->next)
|
||||||
@ -657,7 +659,6 @@ mDNSlocal void DNSDomainStatsFree(DNSDomainStats *inStats)
|
|||||||
{
|
{
|
||||||
if (inStats->nonCellular)
|
if (inStats->nonCellular)
|
||||||
{
|
{
|
||||||
ForgetMem(&inStats->nonCellular->histAny);
|
|
||||||
ForgetMem(&inStats->nonCellular->histA);
|
ForgetMem(&inStats->nonCellular->histA);
|
||||||
ForgetMem(&inStats->nonCellular->histAAAA);
|
ForgetMem(&inStats->nonCellular->histAAAA);
|
||||||
free(inStats->nonCellular);
|
free(inStats->nonCellular);
|
||||||
@ -665,7 +666,6 @@ mDNSlocal void DNSDomainStatsFree(DNSDomainStats *inStats)
|
|||||||
}
|
}
|
||||||
if (inStats->cellular)
|
if (inStats->cellular)
|
||||||
{
|
{
|
||||||
ForgetMem(&inStats->cellular->histAny);
|
|
||||||
ForgetMem(&inStats->cellular->histA);
|
ForgetMem(&inStats->cellular->histA);
|
||||||
ForgetMem(&inStats->cellular->histAAAA);
|
ForgetMem(&inStats->cellular->histAAAA);
|
||||||
free(inStats->cellular);
|
free(inStats->cellular);
|
||||||
@ -693,51 +693,31 @@ mDNSlocal void DNSDomainStatsFreeList(DNSDomainStats *inList)
|
|||||||
// DNSDomainStatsUpdate
|
// DNSDomainStatsUpdate
|
||||||
//===========================================================================================================================
|
//===========================================================================================================================
|
||||||
|
|
||||||
mDNSlocal mStatus DNSDomainStatsUpdate(DNSDomainStats *inStats, uint16_t inType, const ResourceRecord *inRR, mDNSu32 inQuerySendCount, mDNSu32 inLatencyMs, mDNSBool inForCell)
|
mDNSlocal mStatus DNSDomainStatsUpdate(DNSDomainStats *inStats, int inType, const ResourceRecord *inRR, mDNSu32 inQuerySendCount, mDNSu32 inLatencyMs, mDNSBool inForCell)
|
||||||
{
|
{
|
||||||
mStatus err;
|
mStatus err;
|
||||||
DNSHistSet ** p;
|
|
||||||
DNSHistSet * set;
|
DNSHistSet * set;
|
||||||
DNSHist * histAny;
|
DNSHistSet ** pSet;
|
||||||
DNSHist * hist;
|
DNSHist * hist;
|
||||||
|
DNSHist ** pHist;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
require_action_quiet(inRR || (inQuerySendCount > 0), exit, err = mStatus_NoError);
|
require_action_quiet(inRR || (inQuerySendCount > 0), exit, err = mStatus_NoError);
|
||||||
|
require_action_quiet((inType == kDNSType_A) || (inType == kDNSType_AAAA), exit, err = mStatus_NoError);
|
||||||
|
|
||||||
p = inForCell ? &inStats->cellular : &inStats->nonCellular;
|
pSet = inForCell ? &inStats->cellular : &inStats->nonCellular;
|
||||||
if ((set = *p) == NULL)
|
if ((set = *pSet) == NULL)
|
||||||
{
|
{
|
||||||
set = (DNSHistSet *)calloc(1, sizeof(*set));
|
set = (DNSHistSet *)calloc(1, sizeof(*set));
|
||||||
require_action_quiet(set, exit, err = mStatus_NoMemoryErr);
|
require_action_quiet(set, exit, err = mStatus_NoMemoryErr);
|
||||||
*p = set;
|
*pSet = set;
|
||||||
}
|
}
|
||||||
if ((histAny = set->histAny) == NULL)
|
pHist = (inType == kDNSType_A) ? &set->histA : &set->histAAAA;
|
||||||
{
|
if ((hist = *pHist) == NULL)
|
||||||
histAny = (DNSHist *)calloc(1, sizeof(*histAny));
|
|
||||||
require_action_quiet(histAny, exit, err = mStatus_NoMemoryErr);
|
|
||||||
set->histAny = histAny;
|
|
||||||
}
|
|
||||||
if (inType == kDNSType_A)
|
|
||||||
{
|
|
||||||
if ((hist = set->histA) == NULL)
|
|
||||||
{
|
{
|
||||||
hist = (DNSHist *)calloc(1, sizeof(*hist));
|
hist = (DNSHist *)calloc(1, sizeof(*hist));
|
||||||
require_action_quiet(hist, exit, err = mStatus_NoMemoryErr);
|
require_action_quiet(hist, exit, err = mStatus_NoMemoryErr);
|
||||||
set->histA = hist;
|
*pHist = hist;
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (inType == kDNSType_AAAA)
|
|
||||||
{
|
|
||||||
if ((hist = set->histAAAA) == NULL)
|
|
||||||
{
|
|
||||||
hist = (DNSHist *)calloc(1, sizeof(*hist));
|
|
||||||
require_action_quiet(hist, exit, err = mStatus_NoMemoryErr);
|
|
||||||
set->histAAAA = hist;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
hist = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inRR)
|
if (inRR)
|
||||||
@ -748,35 +728,23 @@ mDNSlocal mStatus DNSDomainStatsUpdate(DNSDomainStats *inStats, uint16_t inType,
|
|||||||
|
|
||||||
i = Min(inQuerySendCount, kQueryStatsMaxQuerySendCount);
|
i = Min(inQuerySendCount, kQueryStatsMaxQuerySendCount);
|
||||||
|
|
||||||
sendCountBins = isNegative ? histAny->negAnsweredQuerySendCountBins : histAny->answeredQuerySendCountBins;
|
|
||||||
increment_saturate(sendCountBins[i], UINT16_MAX);
|
|
||||||
if (hist)
|
|
||||||
{
|
|
||||||
sendCountBins = isNegative ? hist->negAnsweredQuerySendCountBins : hist->answeredQuerySendCountBins;
|
sendCountBins = isNegative ? hist->negAnsweredQuerySendCountBins : hist->answeredQuerySendCountBins;
|
||||||
increment_saturate(sendCountBins[i], UINT16_MAX);
|
increment_saturate(sendCountBins[i], UINT16_MAX);
|
||||||
}
|
|
||||||
|
|
||||||
if (inQuerySendCount > 0)
|
if (inQuerySendCount > 0)
|
||||||
{
|
{
|
||||||
for (i = 0; (i < (int)countof(kResponseLatencyMsLimits)) && (inLatencyMs >= kResponseLatencyMsLimits[i]); ++i) {}
|
for (i = 0; (i < (int)countof(kResponseLatencyMsLimits)) && (inLatencyMs >= kResponseLatencyMsLimits[i]); ++i) {}
|
||||||
latencyBins = isNegative ? histAny->negResponseLatencyBins : histAny->responseLatencyBins;
|
|
||||||
increment_saturate(latencyBins[i], UINT16_MAX);
|
|
||||||
if (hist)
|
|
||||||
{
|
|
||||||
latencyBins = isNegative ? hist->negResponseLatencyBins : hist->responseLatencyBins;
|
latencyBins = isNegative ? hist->negResponseLatencyBins : hist->responseLatencyBins;
|
||||||
increment_saturate(latencyBins[i], UINT16_MAX);
|
increment_saturate(latencyBins[i], UINT16_MAX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
i = Min(inQuerySendCount, kQueryStatsMaxQuerySendCount);
|
i = Min(inQuerySendCount, kQueryStatsMaxQuerySendCount);
|
||||||
increment_saturate(histAny->unansweredQuerySendCountBins[i], UINT16_MAX);
|
increment_saturate(hist->unansweredQuerySendCountBins[i], UINT16_MAX);
|
||||||
if (hist) increment_saturate(hist->unansweredQuerySendCountBins[i], UINT16_MAX);
|
|
||||||
|
|
||||||
for (i = 0; (i < (int)countof(kResponseLatencyMsLimits)) && (inLatencyMs >= kResponseLatencyMsLimits[i]); ++i) {}
|
for (i = 0; (i < (int)countof(kResponseLatencyMsLimits)) && (inLatencyMs >= kResponseLatencyMsLimits[i]); ++i) {}
|
||||||
increment_saturate(histAny->unansweredQueryDurationBins[i], UINT16_MAX);
|
increment_saturate(hist->unansweredQueryDurationBins[i], UINT16_MAX);
|
||||||
if (hist) increment_saturate(hist->unansweredQueryDurationBins[i], UINT16_MAX);
|
|
||||||
}
|
}
|
||||||
err = mStatus_NoError;
|
err = mStatus_NoError;
|
||||||
|
|
||||||
@ -1505,7 +1473,7 @@ mDNSlocal void FreeResolveStatsServerList(ResolveStatsDNSServer *inList)
|
|||||||
|
|
||||||
mDNSlocal mStatus SubmitAWDMetric(UInt32 inMetricID)
|
mDNSlocal mStatus SubmitAWDMetric(UInt32 inMetricID)
|
||||||
{
|
{
|
||||||
mStatus err = mStatus_NoError;
|
mStatus err;
|
||||||
|
|
||||||
switch (inMetricID)
|
switch (inMetricID)
|
||||||
{
|
{
|
||||||
@ -1518,11 +1486,12 @@ mDNSlocal mStatus SubmitAWDMetric(UInt32 inMetricID)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case AWDMetricId_MDNSResponder_ServicesStats:
|
case AWDMetricId_MDNSResponder_ServicesStats:
|
||||||
[AWDMetricManagerSoft postMetricWithId:AWDMetricId_MDNSResponder_ServicesStats integerValue:max_num_regservices];
|
[AWDMetricManagerSoft postMetricWithId:AWDMetricId_MDNSResponder_ServicesStats unsignedIntegerValue:max_num_regservices];
|
||||||
KQueueLock(&mDNSStorage);
|
KQueueLock(&mDNSStorage);
|
||||||
// reset the no of max services since we want to collect the max no of services registered per AWD submission period
|
// reset the no of max services since we want to collect the max no of services registered per AWD submission period
|
||||||
max_num_regservices = curr_num_regservices;
|
max_num_regservices = curr_num_regservices;
|
||||||
KQueueUnlock(&mDNSStorage, "SubmitAWDSimpleMetricServiceStats");
|
KQueueUnlock(&mDNSStorage, "SubmitAWDSimpleMetricServiceStats");
|
||||||
|
err = mStatus_NoError;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -1530,8 +1499,7 @@ mDNSlocal mStatus SubmitAWDMetric(UInt32 inMetricID)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err)
|
if (err) LogMsg("SubmitAWDMetric for metric ID 0x%08X failed with error %d", inMetricID, err);
|
||||||
LogMsg("SubmitAWDMetric for metric ID 0x%08X failed with error %d", inMetricID, err);
|
|
||||||
return (err);
|
return (err);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1552,9 +1520,8 @@ mDNSlocal mStatus SubmitAWDMetricQueryStats(void)
|
|||||||
err = CreateDomainStatsList(&newDomainStatsList);
|
err = CreateDomainStatsList(&newDomainStatsList);
|
||||||
require_noerr_quiet(err, exit);
|
require_noerr_quiet(err, exit);
|
||||||
|
|
||||||
domainStatsList = gDomainStatsList;
|
|
||||||
|
|
||||||
KQueueLock(&mDNSStorage);
|
KQueueLock(&mDNSStorage);
|
||||||
|
domainStatsList = gDomainStatsList;
|
||||||
gDomainStatsList = newDomainStatsList;
|
gDomainStatsList = newDomainStatsList;
|
||||||
KQueueUnlock(&mDNSStorage, "SubmitAWDMetricQueryStats");
|
KQueueUnlock(&mDNSStorage, "SubmitAWDMetricQueryStats");
|
||||||
|
|
||||||
@ -1611,10 +1578,9 @@ mDNSlocal mStatus SubmitAWDMetricResolveStats(void)
|
|||||||
err = CreateResolveStatsList(&newResolveStatsList);
|
err = CreateResolveStatsList(&newResolveStatsList);
|
||||||
require_noerr_quiet(err, exit);
|
require_noerr_quiet(err, exit);
|
||||||
|
|
||||||
|
KQueueLock(&mDNSStorage);
|
||||||
domainList = gResolveStatsList;
|
domainList = gResolveStatsList;
|
||||||
serverList = gResolveStatsServerList;
|
serverList = gResolveStatsServerList;
|
||||||
|
|
||||||
KQueueLock(&mDNSStorage);
|
|
||||||
gResolveStatsList = newResolveStatsList;
|
gResolveStatsList = newResolveStatsList;
|
||||||
gResolveStatsServerList = NULL;
|
gResolveStatsServerList = NULL;
|
||||||
gResolveStatsNextServerID = 0;
|
gResolveStatsNextServerID = 0;
|
||||||
@ -1762,14 +1728,6 @@ mDNSlocal mStatus AddAWDDNSDomainStats(AWDMDNSResponderDNSStatistics *inMetric,
|
|||||||
mStatus err;
|
mStatus err;
|
||||||
AWDDNSDomainStats * awdStats;
|
AWDDNSDomainStats * awdStats;
|
||||||
|
|
||||||
if (inSet->histAny)
|
|
||||||
{
|
|
||||||
err = CreateAWDDNSDomainStats(inSet->histAny, inDomain, inForCell, AWDDNSDomainStats_RecordType_Any, &awdStats);
|
|
||||||
require_noerr_quiet(err, exit);
|
|
||||||
|
|
||||||
[inMetric addStats:awdStats];
|
|
||||||
[awdStats release];
|
|
||||||
}
|
|
||||||
if (inSet->histA)
|
if (inSet->histA)
|
||||||
{
|
{
|
||||||
err = CreateAWDDNSDomainStats(inSet->histA, inDomain, inForCell, AWDDNSDomainStats_RecordType_A, &awdStats);
|
err = CreateAWDDNSDomainStats(inSet->histA, inDomain, inForCell, AWDDNSDomainStats_RecordType_A, &awdStats);
|
||||||
@ -1798,7 +1756,6 @@ exit:
|
|||||||
|
|
||||||
mDNSlocal void LogDNSHistSet(const DNSHistSet *inSet, const char *inDomain, mDNSBool inForCell)
|
mDNSlocal void LogDNSHistSet(const DNSHistSet *inSet, const char *inDomain, mDNSBool inForCell)
|
||||||
{
|
{
|
||||||
if (inSet->histAny) LogDNSHist(inSet->histAny, inDomain, inForCell, "Any");
|
|
||||||
if (inSet->histA) LogDNSHist(inSet->histA, inDomain, inForCell, "A");
|
if (inSet->histA) LogDNSHist(inSet->histA, inDomain, inForCell, "A");
|
||||||
if (inSet->histAAAA) LogDNSHist(inSet->histAAAA, inDomain, inForCell, "AAAA");
|
if (inSet->histAAAA) LogDNSHist(inSet->histAAAA, inDomain, inForCell, "AAAA");
|
||||||
}
|
}
|
||||||
|
@ -1835,7 +1835,7 @@ mDNSlocal int mDNSPlatformGetSocktFd(void *sockCxt, mDNSTransport_Type transType
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mDNSexport void mDNSPlatformSetSocktOpt(void *sockCxt, mDNSTransport_Type transType, mDNSAddr_Type addrType, DNSQuestion *q)
|
mDNSexport void mDNSPlatformSetSocktOpt(void *sockCxt, mDNSTransport_Type transType, mDNSAddr_Type addrType, const DNSQuestion *q)
|
||||||
{
|
{
|
||||||
int sockfd;
|
int sockfd;
|
||||||
char unenc_name[MAX_ESCAPED_DOMAIN_NAME];
|
char unenc_name[MAX_ESCAPED_DOMAIN_NAME];
|
||||||
@ -6966,7 +6966,19 @@ mDNSexport mDNSBool mDNSPlatformSetDNSConfig(mDNS *const m, mDNSBool setservers,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogInfo("mDNSPlatformSetDNSConfig: config->n_resolver = %d, generation %llu, last %llu", config->n_resolver, config->generation, m->p->LastConfigGeneration);
|
LogInfo("mDNSPlatformSetDNSConfig: config->n_resolver = %d, generation %llu, last %llu", config->n_resolver, config->generation, m->p->LastConfigGeneration);
|
||||||
if (m->p->LastConfigGeneration == config->generation)
|
|
||||||
|
// For every network change, the search domain list is updated.
|
||||||
|
// This update is done without regard for generation number because it is
|
||||||
|
// not an expensive update and it keeps the search domain list in sync (even when
|
||||||
|
// a network change occurs, while currently processing a network
|
||||||
|
// change).
|
||||||
|
//
|
||||||
|
// For every DNS configuration change, the DNS server list is updated.
|
||||||
|
// This update is NOT done every network change because it may involve
|
||||||
|
// updating cache entries which worst-case is expensive. Setting the generation
|
||||||
|
// per DNS server list change keeps the list in sync with configd.
|
||||||
|
|
||||||
|
if (setservers && m->p->LastConfigGeneration == config->generation)
|
||||||
{
|
{
|
||||||
LogInfo("mDNSPlatformSetDNSConfig: generation number %llu same, not processing", config->generation);
|
LogInfo("mDNSPlatformSetDNSConfig: generation number %llu same, not processing", config->generation);
|
||||||
dns_configuration_free(config);
|
dns_configuration_free(config);
|
||||||
@ -6992,21 +7004,13 @@ mDNSexport mDNSBool mDNSPlatformSetDNSConfig(mDNS *const m, mDNSBool setservers,
|
|||||||
|
|
||||||
ConfigResolvers(m, config, kScopeServiceID, setsearch, setservers, &sdc, resolverGroupID);
|
ConfigResolvers(m, config, kScopeServiceID, setsearch, setservers, &sdc, resolverGroupID);
|
||||||
|
|
||||||
// Acking provides a hint that we processed this current configuration and
|
// Acking provides a hint to other processes that the current DNS configuration has completed
|
||||||
// we will use that from now on, assuming we don't get another one immediately
|
// its update. When configd receives the ack, it publishes a notification.
|
||||||
// after we return from here.
|
// Applications monitoring the notification then know when to re-issue their DNS queries
|
||||||
|
// after a network change occurs.
|
||||||
if (ackConfig)
|
if (ackConfig)
|
||||||
{
|
{
|
||||||
// Note: We have to set the generation number here when we are acking.
|
// Note: We have to set the generation number here when we are acking.
|
||||||
// For every DNS configuration change, we do the following:
|
|
||||||
//
|
|
||||||
// 1) Copy dns configuration, handle search domains change
|
|
||||||
// 2) Copy dns configuration, handle dns server change
|
|
||||||
//
|
|
||||||
// If we update the generation number at step (1), we won't process the
|
|
||||||
// DNS servers the second time because generation number would be the same.
|
|
||||||
// As we ack only when we process dns servers, we set the generation number
|
|
||||||
// during acking.
|
|
||||||
m->p->LastConfigGeneration = config->generation;
|
m->p->LastConfigGeneration = config->generation;
|
||||||
LogInfo("mDNSPlatformSetDNSConfig: Acking configuration setservers %d, setsearch %d", setservers, setsearch);
|
LogInfo("mDNSPlatformSetDNSConfig: Acking configuration setservers %d, setsearch %d", setservers, setsearch);
|
||||||
AckConfigd(m, config);
|
AckConfigd(m, config);
|
||||||
|
@ -503,6 +503,7 @@ static mStatus RegisterServicesInFile(const char *filePath)
|
|||||||
{
|
{
|
||||||
mStatus status = mStatus_NoError;
|
mStatus status = mStatus_NoError;
|
||||||
FILE * fp = fopen(filePath, "r");
|
FILE * fp = fopen(filePath, "r");
|
||||||
|
int rv;
|
||||||
|
|
||||||
if (fp == NULL) {
|
if (fp == NULL) {
|
||||||
return mStatus_UnknownErr;
|
return mStatus_UnknownErr;
|
||||||
@ -603,7 +604,8 @@ static mStatus RegisterServicesInFile(const char *filePath)
|
|||||||
status = mStatus_UnknownErr;
|
status = mStatus_UnknownErr;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(0 == fclose(fp));
|
rv = fclose(fp);
|
||||||
|
assert(rv == 0);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -584,11 +584,20 @@ mDNSexport mDNSu32 mDNSPlatformInterfaceIndexfromInterfaceID(mDNS *const m, mDNS
|
|||||||
// interface must have already been deregistered with the mDNS core.
|
// interface must have already been deregistered with the mDNS core.
|
||||||
mDNSlocal void FreePosixNetworkInterface(PosixNetworkInterface *intf)
|
mDNSlocal void FreePosixNetworkInterface(PosixNetworkInterface *intf)
|
||||||
{
|
{
|
||||||
|
int rv;
|
||||||
assert(intf != NULL);
|
assert(intf != NULL);
|
||||||
if (intf->intfName != NULL) free((void *)intf->intfName);
|
if (intf->intfName != NULL) free((void *)intf->intfName);
|
||||||
if (intf->multicastSocket4 != -1) assert(close(intf->multicastSocket4) == 0);
|
if (intf->multicastSocket4 != -1)
|
||||||
|
{
|
||||||
|
rv = close(intf->multicastSocket4);
|
||||||
|
assert(rv == 0);
|
||||||
|
}
|
||||||
#if HAVE_IPV6
|
#if HAVE_IPV6
|
||||||
if (intf->multicastSocket6 != -1) assert(close(intf->multicastSocket6) == 0);
|
if (intf->multicastSocket6 != -1)
|
||||||
|
{
|
||||||
|
rv = close(intf->multicastSocket6);
|
||||||
|
assert(rv == 0);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Move interface to the RecentInterfaces list for a minute
|
// Move interface to the RecentInterfaces list for a minute
|
||||||
@ -851,7 +860,13 @@ mDNSlocal int SetupSocket(struct sockaddr *intfAddr, mDNSIPPort port, int interf
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Clean up
|
// Clean up
|
||||||
if (err != 0 && *sktPtr != -1) { assert(close(*sktPtr) == 0); *sktPtr = -1; }
|
if (err != 0 && *sktPtr != -1)
|
||||||
|
{
|
||||||
|
int rv;
|
||||||
|
rv = close(*sktPtr);
|
||||||
|
assert(rv == 0);
|
||||||
|
*sktPtr = -1;
|
||||||
|
}
|
||||||
assert((err == 0) == (*sktPtr != -1));
|
assert((err == 0) == (*sktPtr != -1));
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@ -1353,11 +1368,20 @@ mDNSexport mStatus mDNSPlatformInit(mDNS *const m)
|
|||||||
// In our case all we need to do is to tear down every network interface.
|
// In our case all we need to do is to tear down every network interface.
|
||||||
mDNSexport void mDNSPlatformClose(mDNS *const m)
|
mDNSexport void mDNSPlatformClose(mDNS *const m)
|
||||||
{
|
{
|
||||||
|
int rv;
|
||||||
assert(m != NULL);
|
assert(m != NULL);
|
||||||
ClearInterfaceList(m);
|
ClearInterfaceList(m);
|
||||||
if (m->p->unicastSocket4 != -1) assert(close(m->p->unicastSocket4) == 0);
|
if (m->p->unicastSocket4 != -1)
|
||||||
|
{
|
||||||
|
rv = close(m->p->unicastSocket4);
|
||||||
|
assert(rv == 0);
|
||||||
|
}
|
||||||
#if HAVE_IPV6
|
#if HAVE_IPV6
|
||||||
if (m->p->unicastSocket6 != -1) assert(close(m->p->unicastSocket6) == 0);
|
if (m->p->unicastSocket6 != -1)
|
||||||
|
{
|
||||||
|
rv = close(m->p->unicastSocket6);
|
||||||
|
assert(rv == 0);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1662,7 +1686,7 @@ mDNSexport mDNSBool mDNSPlatformInterfaceIsD2D(mDNSInterfaceID InterfaceID)
|
|||||||
return mDNSfalse;
|
return mDNSfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
mDNSexport void mDNSPlatformSetSocktOpt(void *sock, mDNSTransport_Type transType, mDNSAddr_Type addrType, DNSQuestion *q)
|
mDNSexport void mDNSPlatformSetSocktOpt(void *sock, mDNSTransport_Type transType, mDNSAddr_Type addrType, const DNSQuestion *q)
|
||||||
{
|
{
|
||||||
(void) sock;
|
(void) sock;
|
||||||
(void) transType;
|
(void) transType;
|
||||||
|
@ -199,7 +199,9 @@ gotError:
|
|||||||
}
|
}
|
||||||
done:
|
done:
|
||||||
if (sockfd != -1) {
|
if (sockfd != -1) {
|
||||||
assert(close(sockfd) == 0);
|
int rv;
|
||||||
|
rv = close(sockfd);
|
||||||
|
assert(rv == 0);
|
||||||
}
|
}
|
||||||
if (fp != NULL) {
|
if (fp != NULL) {
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
@ -66,7 +66,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _DNS_SD_H
|
#ifndef _DNS_SD_H
|
||||||
#define _DNS_SD_H 7652004
|
#define _DNS_SD_H 7653011
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -2152,7 +2152,7 @@ mDNSexport mStatus mDNSPlatformRetrieveTCPInfo(mDNS *const m, mDNSAddr *laddr, m
|
|||||||
return mStatus_UnsupportedErr;
|
return mStatus_UnsupportedErr;
|
||||||
}
|
}
|
||||||
|
|
||||||
mDNSexport void mDNSPlatformSetSocktOpt(void *sock, mDNSTransport_Type transType, mDNSAddr_Type addrType, DNSQuestion *q)
|
mDNSexport void mDNSPlatformSetSocktOpt(void *sock, mDNSTransport_Type transType, mDNSAddr_Type addrType, const DNSQuestion *q)
|
||||||
{
|
{
|
||||||
(void) sock;
|
(void) sock;
|
||||||
(void) transType;
|
(void) transType;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user