2 * Copyright (c) 2002-2003 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
21 * @APPLE_LICENSE_HEADER_END@
23 Change History (most recent first):
25 $Log: mDNSMacOSX.h,v $
26 Revision 1.50 2005/02/19 00:04:18 cheshire
29 Revision 1.49 2004/12/17 23:37:47 cheshire
30 <rdar://problem/3485365> Guard against repeating wireless dissociation/re-association
31 (and other repetitive configuration changes)
33 Revision 1.48 2004/12/07 01:31:31 cheshire
34 mDNSMacOSXSystemBuildNumber() returns int, not mDNSBool
36 Revision 1.47 2004/11/30 03:24:03 cheshire
37 <rdar://problem/3854544> Defer processing network configuration changes until configuration has stabilized
39 Revision 1.46 2004/11/03 03:45:16 cheshire
40 <rdar://problem/3863627> mDNSResponder does not inform user of Computer Name collisions
42 Revision 1.45 2004/10/28 00:53:57 cheshire
43 Export mDNSMacOSXNetworkChanged() so it's callable from outside this mDNSMacOSX.c;
44 Add LogOperation() call to record when we get network change events
46 Revision 1.44 2004/10/23 01:16:01 cheshire
47 <rdar://problem/3851677> uDNS operations not always reliable on multi-homed hosts
49 Revision 1.43 2004/10/15 23:00:18 ksekar
50 <rdar://problem/3799242> Need to update LLQs on location changes
52 Revision 1.42 2004/10/04 05:56:04 cheshire
53 <rdar://problem/3824730> mDNSResponder doesn't respond to certain AirPort changes
55 Revision 1.41 2004/09/30 00:24:59 ksekar
56 <rdar://problem/3695802> Dynamically update default registration domains on config change
58 Revision 1.40 2004/09/17 01:08:52 cheshire
59 Renamed mDNSClientAPI.h to mDNSEmbeddedAPI.h
60 The name "mDNSClientAPI.h" is misleading to new developers looking at this code. The interfaces
61 declared in that file are ONLY appropriate to single-address-space embedded applications.
62 For clients on general-purpose computers, the interfaces defined in dns_sd.h should be used.
64 Revision 1.39 2004/08/18 17:35:41 ksekar
65 <rdar://problem/3651443>: Feature #9586: Need support for Legacy NAT gateways
67 Revision 1.38 2004/07/13 21:24:25 rpantos
68 Fix for <rdar://problem/3701120>.
70 Revision 1.37 2004/06/04 08:58:30 ksekar
71 <rdar://problem/3668624>: Keychain integration for secure dynamic update
73 Revision 1.36 2004/05/26 17:06:33 cheshire
74 <rdar://problem/3668515>: Don't rely on CFSocketInvalidate() to remove RunLoopSource
76 Revision 1.35 2004/05/18 23:51:26 cheshire
77 Tidy up all checkin comments to use consistent "<rdar://problem/xxxxxxx>" format for bug numbers
79 Revision 1.34 2004/05/12 22:03:09 ksekar
80 Made GetSearchDomainList a true platform-layer call (declaration moved
81 from mDNSMacOSX.h to mDNSEmbeddedAPI.h), impelemted to return "local"
82 only on non-OSX platforms. Changed call to return a copy of the list
83 to avoid shared memory issues. Added a routine to free the list.
85 Revision 1.33 2004/05/12 02:03:25 ksekar
86 Non-local domains will only be browsed by default, and show up in
87 _browse domain enumeration, if they contain an _browse._dns-sd ptr record.
89 Revision 1.32 2004/04/21 02:20:47 cheshire
90 Rename interface field 'CurrentlyActive' to more descriptive 'Exists'
92 Revision 1.31 2004/04/09 17:40:26 cheshire
93 Remove unnecessary "Multicast" field -- it duplicates the semantics of the existing TxAndRx field
95 Revision 1.30 2004/01/28 02:30:08 ksekar
96 Added default Search Domains to unicast browsing, controlled via
97 Networking sharing prefs pane. Stopped sending unicast messages on
98 every interface. Fixed unicast resolving via mach-port API.
100 Revision 1.29 2004/01/27 22:57:48 cheshire
101 <rdar://problem/3534352>: Need separate socket for issuing unicast queries
103 Revision 1.28 2004/01/27 20:15:23 cheshire
104 <rdar://problem/3541288>: Time to prune obsolete code for listening on port 53
106 Revision 1.27 2004/01/24 08:46:26 bradley
107 Added InterfaceID<->Index platform interfaces since they are now used by all platforms for the DNS-SD APIs.
109 Revision 1.26 2003/12/08 21:00:46 rpantos
110 Changes to support mDNSResponder on Linux.
112 Revision 1.25 2003/11/08 22:18:29 cheshire
113 <rdar://problem/3477870>: Don't need to show process ID in *every* mDNSResponder syslog message
115 Revision 1.24 2003/11/08 22:13:00 cheshire
116 Move extern declarations inside '#ifdef __cplusplus extern "C" {' section
118 Revision 1.23 2003/09/23 16:38:25 cheshire
119 When LogAllOperations is false, treat LogOperation() like debugf()
120 (i.e. show in debug builds), rather than unconditionally ignoring
122 Revision 1.22 2003/09/23 02:12:43 cheshire
123 Also include port number in list of services registered via new UDS API
125 Revision 1.21 2003/08/19 22:20:00 cheshire
126 <rdar://problem/3376721> Don't use IPv6 on interfaces that have a routable IPv4 address configured
127 More minor refinements
129 Revision 1.20 2003/08/19 05:39:43 cheshire
130 <rdar://problem/3380097> SIGINFO dump should include resolves started by DNSServiceQueryRecord
132 Revision 1.19 2003/08/19 05:36:45 cheshire
133 Add missing "extern" directives
135 Revision 1.18 2003/08/19 03:04:43 cheshire
136 <rdar://problem/3376721> Don't use IPv6 on interfaces that have a routable IPv4 address configured
138 Revision 1.17 2003/08/12 19:56:25 cheshire
141 Revision 1.16 2003/08/08 18:36:04 cheshire
142 <rdar://problem/3344154> Only need to revalidate on interface removal on platforms that have the PhantomInterfaces bug
144 Revision 1.15 2003/08/05 00:32:28 cheshire
145 <rdar://problem/3326712> Time to turn off MACOSX_MDNS_MALLOC_DEBUGGING
147 Revision 1.14 2003/07/20 03:38:51 ksekar
148 <rdar://problem/3320722> Completed support for Unix-domain socket based API.
150 Revision 1.13 2003/07/18 00:30:00 cheshire
151 <rdar://problem/3268878> Remove mDNSResponder version from packet header and use HINFO record instead
153 Revision 1.12 2003/07/12 03:15:20 cheshire
154 <rdar://problem/3324848> After SCDynamicStore notification, mDNSResponder updates
155 m->hostlabel even if user hasn't actually actually changed their dot-local hostname
157 Revision 1.11 2003/07/02 21:19:51 cheshire
158 <rdar://problem/3313413> Update copyright notices, etc., in source code comments
160 Revision 1.10 2003/06/25 23:42:19 ksekar
161 <rdar://problem/3249292>: Feature: New DNS-SD APIs (#7875)
162 Reviewed by: Stuart Cheshire
163 Added files necessary to implement Unix domain sockets based enhanced
164 DNS-SD APIs, and integrated with existing Mach-port based daemon.
166 Revision 1.9 2003/06/10 01:14:11 cheshire
167 <rdar://problem/3286004> New APIs require a mDNSPlatformInterfaceIDfromInterfaceIndex() call
169 Revision 1.8 2003/05/14 07:08:37 cheshire
170 <rdar://problem/3159272> mDNSResponder should be smarter about reconfigurations
171 Previously, when there was any network configuration change, mDNSResponder
172 would tear down the entire list of active interfaces and start again.
173 That was very disruptive, and caused the entire cache to be flushed,
174 and caused lots of extra network traffic. Now it only removes interfaces
175 that have really gone, and only adds new ones that weren't there before.
177 Revision 1.7 2003/04/26 02:39:24 cheshire
178 Remove extern void LogMsg(const char *format, ...);
180 Revision 1.6 2003/03/05 21:59:56 cheshire
181 <rdar://problem/3189097> Additional debugging code in mDNSResponder
183 Revision 1.5 2003/03/05 01:50:38 cheshire
184 <rdar://problem/3189097> Additional debugging code in mDNSResponder
186 Revision 1.4 2003/02/21 01:54:10 cheshire
187 <rdar://problem/3099194> mDNSResponder needs performance improvements
188 Switched to using new "mDNS_Execute" model (see "Implementer Notes.txt")
190 Revision 1.3 2002/09/21 20:44:51 zarzycki
193 Revision 1.2 2002/09/19 04:20:44 cheshire
194 Remove high-ascii characters that confuse some systems
196 Revision 1.1 2002/09/17 01:04:09 cheshire
197 Defines mDNS_PlatformSupport_struct for OS X
208 #include <SystemConfiguration/SystemConfiguration.h>
209 #include <IOKit/pwr_mgt/IOPMLib.h>
210 #include <sys/socket.h>
211 #include <netinet/in.h>
212 #include "mDNSEmbeddedAPI.h" // for domain name structure
214 typedef struct NetworkInterfaceInfoOSX_struct NetworkInterfaceInfoOSX
;
219 NetworkInterfaceInfoOSX
*info
;
222 CFRunLoopSourceRef rlsv4
;
225 CFRunLoopSourceRef rlsv6
;
228 struct NetworkInterfaceInfoOSX_struct
230 NetworkInterfaceInfo ifinfo
; // MUST be the first element in this structure
231 NetworkInterfaceInfoOSX
*next
;
232 mDNSu32 Exists
; // 1 = currently exists in getifaddrs list; 0 = doesn't
233 // 2 = exists, but McastTxRx state changed
234 mDNSs32 LastSeen
; // If Exists==0, last time this interface appeared in getifaddrs list
235 char *ifa_name
; // Memory for this is allocated using malloc
236 mDNSu32 scope_id
; // interface index / IPv6 scope ID
237 mDNSEthAddr BSSID
; // BSSID of 802.11 base station, if applicable
243 struct mDNS_PlatformSupport_struct
245 NetworkInterfaceInfoOSX
*InterfaceList
;
246 CFSocketSet unicastsockets
;
247 domainlabel userhostlabel
; // The hostlabel as it was set in System Preferences the last time we looked
248 domainlabel usernicelabel
; // The nicelabel as it was set in System Preferences the last time we looked
250 mDNSs32 NetworkChanged
;
251 SCDynamicStoreRef Store
;
252 CFRunLoopSourceRef StoreRLS
;
253 io_connect_t PowerConnection
;
254 io_object_t PowerNotifier
;
255 CFRunLoopSourceRef PowerRLS
;
258 extern void mDNSMacOSXNetworkChanged(mDNS
*const m
);
259 extern int mDNSMacOSXSystemBuildNumber(char *HINFO_SWstring
);
261 extern const char mDNSResponderVersionString
[];
263 // Legacy NAT Traversal Support Setup/Teardown
264 extern int LegacyNATDestroy(void);
265 extern int LegacyNATInit(void);
267 // Allow platform layer to tell daemon when default registration/browse domains
268 extern void DefaultRegDomainChanged(const domainname
*d
, mDNSBool add
);
269 extern void DefaultBrowseDomainChanged(const domainname
*d
, mDNSBool add
);