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