xref: /titanic_51/usr/src/cmd/cmd-inet/usr.lib/mdnsd/uDNS.h (revision d4bc0535efa2c2219e9f83246a5f371dc7f94273)
1 /* -*- Mode: C; tab-width: 4 -*-
2  *
3  * Copyright (c) 2002-2003 Apple Computer, Inc. All rights reserved.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16 
17     Change History (most recent first):
18 
19 $Log: uDNS.h,v $
20 Revision 1.32.2.1  2006/08/29 06:24:23  cheshire
21 Re-licensed mDNSResponder daemon source code under Apache License, Version 2.0
22 
23 Revision 1.32  2005/07/29 19:46:10  ksekar
24 <rdar://problem/4191860> reduce polling period on failed LLQs to 15 minutes
25 
26 Revision 1.31  2005/03/31 02:19:56  cheshire
27 <rdar://problem/4021486> Fix build warnings
28 Reviewed by: Scott Herscher
29 
30 Revision 1.30  2005/03/04 03:00:03  ksekar
31 <rdar://problem/4026546> Retransmissions happen too early, causing registrations to conflict with themselves
32 
33 Revision 1.29  2005/01/11 22:50:53  ksekar
34 Fixed constant naming (was using kLLQ_DefLease for update leases)
35 
36 Revision 1.28  2004/12/22 00:13:49  ksekar
37 <rdar://problem/3873993> Change version, port, and polling interval for LLQ
38 
39 Revision 1.27  2004/11/23 04:06:50  cheshire
40 Get rid of floating point constant -- in a small embedded device, bringing in all
41 the floating point libraries just to halve an integer value is a bit too heavyweight.
42 
43 Revision 1.26  2004/11/22 17:49:15  ksekar
44 Changed INIT_REFRESH from fraction to decimal
45 
46 Revision 1.25  2004/11/22 17:16:20  ksekar
47 <rdar://problem/3854298> Unicast services don't disappear when you disable all networking
48 
49 Revision 1.24  2004/11/19 04:24:08  ksekar
50 <rdar://problem/3682609> Security: Enforce a "window" on one-shot wide-area queries
51 
52 Revision 1.23  2004/11/18 18:04:21  ksekar
53 Add INIT_REFRESH constant
54 
55 Revision 1.22  2004/11/15 20:09:24  ksekar
56 <rdar://problem/3719050> Wide Area support for Add/Remove record
57 
58 Revision 1.21  2004/11/11 20:14:55  ksekar
59 <rdar://problem/3719574> Wide-Area registrations not deregistered on sleep
60 
61 Revision 1.20  2004/10/16 00:16:59  cheshire
62 <rdar://problem/3770558> Replace IP TTL 255 check with local subnet source address check
63 
64 Revision 1.19  2004/09/17 01:08:49  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.18  2004/09/03 19:23:05  ksekar
71 <rdar://problem/3788460>: Need retransmission mechanism for wide-area service registrations
72 
73 Revision 1.17  2004/09/01 03:59:29  ksekar
74 <rdar://problem/3783453>: Conditionally compile out uDNS code on Windows
75 
76 Revision 1.16  2004/08/25 00:37:27  ksekar
77 <rdar://problem/3774635>: Cleanup DynDNS hostname registration code
78 
79 Revision 1.15  2004/07/30 17:40:06  ksekar
80 <rdar://problem/3739115>: TXT Record updates not available for wide-area services
81 
82 Revision 1.14  2004/07/29 19:27:15  ksekar
83 NATPMP Support - minor fixes and cleanup
84 
85 Revision 1.13  2004/07/29 02:03:35  ksekar
86 Delete unused #define and structure field
87 
88 Revision 1.12  2004/07/26 22:49:30  ksekar
89 <rdar://problem/3651409>: Feature #9516: Need support for NATPMP in client
90 
91 Revision 1.11  2004/06/17 01:13:11  ksekar
92 <rdar://problem/3696616>: polling interval too short
93 
94 Revision 1.10  2004/06/11 05:45:03  ksekar
95 <rdar://problem/3682397>: Change SRV names for LLQ/Update port lookups
96 
97 Revision 1.9  2004/06/01 23:46:50  ksekar
98 <rdar://problem/3675149>: DynDNS: dynamically look up LLQ/Update ports
99 
100 Revision 1.8  2004/05/28 23:42:37  ksekar
101 <rdar://problem/3258021>: Feature: DNS server->client notification on record changes (#7805)
102 
103 Revision 1.7  2004/05/18 23:51:25  cheshire
104 Tidy up all checkin comments to use consistent "<rdar://problem/xxxxxxx>" format for bug numbers
105 
106 Revision 1.6  2004/03/13 01:57:33  ksekar
107 <rdar://problem/3192546>: DynDNS: Dynamic update of service records
108 
109 Revision 1.5  2004/02/21 08:56:58  bradley
110 Wrap prototypes with extern "C" for C++ builds.
111 
112 Revision 1.4  2004/02/06 23:04:19  ksekar
113 Basic Dynamic Update support via mDNS_Register (dissabled via
114 UNICAST_REGISTRATION #define)
115 
116 Revision 1.3  2004/01/24 03:38:27  cheshire
117 Fix minor syntactic error: Headers should use "extern" declarations, not "mDNSexport"
118 
119 Revision 1.2  2004/01/23 23:23:15  ksekar
120 Added TCP support for truncated unicast messages.
121 
122 Revision 1.1  2003/12/13 03:05:27  ksekar
123 <rdar://problem/3192548>: DynDNS: Unicast query of service records
124 
125 
126  */
127 
128 #pragma ident	"%Z%%M%	%I%	%E% SMI"
129 
130 #ifndef __UDNS_H_
131 #define __UDNS_H_
132 
133 #include "mDNSEmbeddedAPI.h"
134 #include "DNSCommon.h"
135 
136 #ifdef	__cplusplus
137 	extern "C" {
138 #endif
139 
140 #define RESTART_GOODBYE_DELAY    (6 * mDNSPlatformOneSecond) // delay after restarting LLQ before nuking previous known answers (avoids flutter if we restart before we have networking up)
141 #define MIN_UCAST_PERIODIC_EXEC  (5 * mDNSPlatformOneSecond)
142 #define INIT_UCAST_POLL_INTERVAL (3 * mDNSPlatformOneSecond) // this interval is used after send failures on network transitions
143 	                                                         // which typically heal quickly, so we start agressively and exponentially back off
144 #define MAX_UCAST_POLL_INTERVAL (60 * 60 * mDNSPlatformOneSecond)
145 #define LLQ_POLL_INTERVAL       (15 * 60 * mDNSPlatformOneSecond) // Polling interval for zones w/ an advertised LLQ port (ie not static zones) if LLQ fails due to NAT, etc.
146 #define RESPONSE_WINDOW (60 * mDNSPlatformOneSecond)         // require server responses within one minute of request
147 #define UPDATE_PORT_NAME "_dns-update._udp."
148 #define LLQ_PORT_NAME "_dns-llq._udp"
149 #define DEFAULT_UPDATE_LEASE 7200
150 
151 // Entry points into unicast-specific routines
152 
153 extern mStatus uDNS_StartQuery(mDNS *const m, DNSQuestion *const question);
154 extern mDNSBool uDNS_IsActiveQuery(DNSQuestion *const question, uDNS_GlobalInfo *u);  // returns true if OK to call StopQuery
155 extern mStatus uDNS_StopQuery(mDNS *const m, DNSQuestion *const question);
156 
157 extern void uDNS_Init(mDNS *const m);
158 extern void uDNS_Sleep(mDNS *const m);
159 extern void uDNS_Wake(mDNS *const m);
160 #define uDNS_Close uDNS_Sleep
161 
162 // uDNS_UpdateRecord
163 // following fields must be set, and the update validated, upon entry.
164 // rr->NewRData
165 // rr->newrdlength
166 // rr->UpdateCallback
167 
168 extern mStatus uDNS_AddRecordToService(mDNS *const m, ServiceRecordSet *sr, ExtraResourceRecord *extra);
169 extern mStatus uDNS_UpdateRecord(mDNS *m, AuthRecord *rr);
170 
171 extern mStatus uDNS_RegisterRecord(mDNS *const m, AuthRecord *const rr);
172 extern mStatus uDNS_DeregisterRecord(mDNS *const m, AuthRecord *const rr);
173 
174 extern mStatus uDNS_RegisterService(mDNS *const m, ServiceRecordSet *srs);
175 extern mStatus uDNS_DeregisterService(mDNS *const m, ServiceRecordSet *srs);
176 
177 // integer fields of msg header must be in HOST byte order before calling this routine
178 extern void uDNS_ReceiveMsg(mDNS *const m, DNSMessage *const msg, const mDNSu8 *const end,
179 	const mDNSAddr *const srcaddr, const mDNSIPPort srcport, const mDNSAddr *const dstaddr,
180 	const mDNSIPPort dstport, const mDNSInterfaceID InterfaceID);
181 
182 extern void uDNS_ReceiveNATMap(mDNS *m, mDNSu8 *pkt, mDNSu16 len);
183 
184 // returns time of next scheduled event
185 extern void uDNS_Execute(mDNS *const m);
186 
187 
188 #ifdef	__cplusplus
189 	}
190 #endif
191 
192 #endif // __UDNS_H_
193