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