1#include "DNSCommon.h"                  // Defines general DNS utility routines
2
3// To match *either* a v4 or v6 instance of this interface
4mDNSlocal mDNSInterfaceID SearchForInterfaceByAddr(mDNSAddr* addr)
5{
6	NetworkInterfaceInfoOSX *i;
7	for (i = mDNSStorage.p->InterfaceList; i; i = i->next)
8		if (i->Exists)
9		{
10			if ((i->ifinfo.ip.type == mDNSAddrType_IPv4) &&
11				i->ifinfo.ip.ip.v4.NotAnInteger == addr->ip.v4.NotAnInteger)
12				return i->ifinfo.InterfaceID;
13			else if ((i->ifinfo.ip.type == mDNSAddrType_IPv6) &&
14					 (i->ifinfo.ip.ip.v6.l[0] == addr->ip.v6.l[0] &&
15					  i->ifinfo.ip.ip.v6.l[1] == addr->ip.v6.l[1] &&
16					  i->ifinfo.ip.ip.v6.l[2] == addr->ip.v6.l[2] &&
17					  i->ifinfo.ip.ip.v6.l[3] == addr->ip.v6.l[3])
18					 )
19				return i->ifinfo.InterfaceID;
20		}
21	return(NULL);
22}
23
24mDNSexport void SetInterfaces_ut(mDNSInterfaceID* pri_id, mDNSAddr *pri_v4, mDNSAddr* pri_v6, mDNSAddr* pri_router)
25{
26	mDNSs32 utc = mDNSPlatformUTC();
27
28	MarkAllInterfacesInactive(utc);
29	UpdateInterfaceList(utc);
30	ClearInactiveInterfaces(utc);
31	SetupActiveInterfaces(utc);
32
33	// set primary interface info
34	{
35		mDNSAddr* addr;
36		NetworkChangedKey_IPv4         = SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL, kSCDynamicStoreDomainState, kSCEntNetIPv4);
37		NetworkChangedKey_IPv6         = SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL, kSCDynamicStoreDomainState, kSCEntNetIPv6);
38		NetworkChangedKey_Hostnames    = SCDynamicStoreKeyCreateHostNames(NULL);
39		NetworkChangedKey_Computername = SCDynamicStoreKeyCreateComputerName(NULL);
40		NetworkChangedKey_DNS          = SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL, kSCDynamicStoreDomainState, kSCEntNetDNS);
41		NetworkChangedKey_StateInterfacePrefix = SCDynamicStoreKeyCreateNetworkInterfaceEntity(NULL, kSCDynamicStoreDomainState, CFSTR(""), NULL);
42
43		mDNSPlatformGetPrimaryInterface(pri_v4, pri_v6, pri_router);
44		addr = (pri_v4->type == mDNSAddrType_IPv4) ? pri_v4 : pri_v6;
45		*pri_id = SearchForInterfaceByAddr(addr);
46
47		CFRelease(NetworkChangedKey_IPv4);
48		CFRelease(NetworkChangedKey_IPv6);
49		CFRelease(NetworkChangedKey_Hostnames);
50		CFRelease(NetworkChangedKey_Computername);
51		CFRelease(NetworkChangedKey_DNS);
52		CFRelease(NetworkChangedKey_StateInterfacePrefix);
53	}
54}
55
56mDNSexport mDNSBool mDNSMacOSXCreateEtcHostsEntry_ut(const domainname *domain, const struct sockaddr *sa, const domainname *cname, char *ifname, AuthHash *auth)
57{
58	return mDNSMacOSXCreateEtcHostsEntry(domain, sa, cname, ifname, auth);
59}
60
61mDNSexport void UpdateEtcHosts_ut(void *context)
62{
63	mDNS_Lock(&mDNSStorage);
64	UpdateEtcHosts(&mDNSStorage, context);
65	mDNS_Unlock(&mDNSStorage);
66}
67