#include "DNSCommon.h" // Defines general DNS utility routines #include "unittest_common.h" #include "mDNSMacOSX.h" // To match *either* a v4 or v6 instance of this interface mDNSlocal mDNSInterfaceID SearchForInterfaceByAddr(mDNSAddr* addr) { NetworkInterfaceInfoOSX *i; for (i = mDNSStorage.p->InterfaceList; i; i = i->next) if (i->Exists) { if ((i->ifinfo.ip.type == mDNSAddrType_IPv4) && i->ifinfo.ip.ip.v4.NotAnInteger == addr->ip.v4.NotAnInteger) return i->ifinfo.InterfaceID; else if ((i->ifinfo.ip.type == mDNSAddrType_IPv6) && (i->ifinfo.ip.ip.v6.l[0] == addr->ip.v6.l[0] && i->ifinfo.ip.ip.v6.l[1] == addr->ip.v6.l[1] && i->ifinfo.ip.ip.v6.l[2] == addr->ip.v6.l[2] && i->ifinfo.ip.ip.v6.l[3] == addr->ip.v6.l[3]) ) return i->ifinfo.InterfaceID; } return(NULL); } mDNSexport void SetInterfaces_ut(mDNSInterfaceID* pri_id, mDNSAddr *pri_v4, mDNSAddr* pri_v6, mDNSAddr* pri_router) { mDNSs32 utc = mDNSPlatformUTC(); MarkAllInterfacesInactive(utc); UpdateInterfaceList(utc); ClearInactiveInterfaces(utc); SetupActiveInterfaces(utc); // set primary interface info { mDNSAddr* addr; NetworkChangedKey_IPv4 = SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL, kSCDynamicStoreDomainState, kSCEntNetIPv4); NetworkChangedKey_IPv6 = SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL, kSCDynamicStoreDomainState, kSCEntNetIPv6); NetworkChangedKey_Hostnames = SCDynamicStoreKeyCreateHostNames(NULL); NetworkChangedKey_Computername = SCDynamicStoreKeyCreateComputerName(NULL); NetworkChangedKey_DNS = SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL, kSCDynamicStoreDomainState, kSCEntNetDNS); NetworkChangedKey_StateInterfacePrefix = SCDynamicStoreKeyCreateNetworkInterfaceEntity(NULL, kSCDynamicStoreDomainState, CFSTR(""), NULL); mDNSPlatformGetPrimaryInterface(pri_v4, pri_v6, pri_router); addr = (pri_v4->type == mDNSAddrType_IPv4) ? pri_v4 : pri_v6; *pri_id = SearchForInterfaceByAddr(addr); MDNS_DISPOSE_CF_OBJECT(NetworkChangedKey_IPv4); MDNS_DISPOSE_CF_OBJECT(NetworkChangedKey_IPv6); MDNS_DISPOSE_CF_OBJECT(NetworkChangedKey_Hostnames); MDNS_DISPOSE_CF_OBJECT(NetworkChangedKey_Computername); MDNS_DISPOSE_CF_OBJECT(NetworkChangedKey_DNS); MDNS_DISPOSE_CF_OBJECT(NetworkChangedKey_StateInterfacePrefix); } } mDNSexport mDNSBool mDNSMacOSXCreateEtcHostsEntry_ut(const domainname *domain, const struct sockaddr *sa, const domainname *cname, char *ifname, AuthHash *auth) { return mDNSMacOSXCreateEtcHostsEntry(domain, sa, cname, ifname, auth); } mDNSexport void UpdateEtcHosts_ut(void *context) { mDNS_Lock(&mDNSStorage); UpdateEtcHosts(&mDNSStorage, context); mDNS_Unlock(&mDNSStorage); } mDNSexport void mDNSDomainLabelFromCFString_ut(CFStringRef cfs, domainlabel *const namelabel) { mDNSDomainLabelFromCFString(cfs, namelabel); } mDNSexport mDNSu32 IndexForInterfaceByName_ut(const char *ifname) { NetworkInterfaceInfoOSX * i = SearchForInterfaceByName(ifname, AF_UNSPEC); return (i ? i->scope_id : 0); }