1 /* -*- Mode: C; tab-width: 4 -*-
3 * Copyright (c) 2007-2013 Apple Inc. All rights reserved.
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
23 #define kHelperService "com.apple.mDNSResponder_Helper"
25 #define kmDNSHelperProgramArgs CFSTR("com.apple.mDNSResponderHelper")
26 #define kPreferencesKey_mDNSHelperLog CFSTR("mDNSHelperDebugLogging")
28 #define kHelperMode "HelperMode"
29 #define kHelperReplyStatus "HelperReplyStatusToClient"
30 #define kHelperErrCode "HelperErrorCodefromCall"
32 #define kPrefsNameKey "PreferencesNameKey"
33 #define kPrefsOldName "PreferencesOldName"
34 #define kPrefsNewName "PreferencesNewName"
36 extern int mDNSHelperLogEnabled
;
38 extern os_log_t log_handle
;
48 set_localaddr_cacheentry
= 7,
51 keychain_getsecrets
= 10,
52 autotunnel_setkeys
= 11,
59 } HelperReplyStatusCodes
;
65 kHelperErr_DefaultErr
= -1,
66 kHelperErr_NotConnected
= -2,
67 kHelperErr_NoResponse
= -3,
68 kHelperErr_UndefinedMode
= -4,
69 kHelperErr_ApiErr
= -5,
70 kHelperErr_InvalidTunnelSetKeysOperation
= -6,
71 kHelperErr_InvalidNetworkAddress
= -7,
72 kHelperErr_ResultTooLarge
= -8,
73 kHelperErr_RacoonConfigCreationFailed
= -9,
74 kHelperErr_IPsecPolicySocketCreationFailed
= -10,
75 kHelperErr_IPsecPolicyCreationFailed
= -11,
76 kHelperErr_IPsecPolicySetFailed
= -12,
77 kHelperErr_IPsecRemoveSAFailed
= -13,
78 kHelperErr_IPsecDisabled
= -14,
79 kHelperErr_RoutingSocketCreationFailed
= -15,
80 kHelperErr_RouteDeletionFailed
= -16,
81 kHelperErr_RouteAdditionFailed
= -17,
82 kHelperErr_RacoonStartFailed
= -18,
83 kHelperErr_RacoonNotificationFailed
= -19,
87 enum mDNSPreferencesSetNameKey
89 kmDNSComputerName
= 1,
99 enum mDNSAutoTunnelSetKeysReplaceDelete
101 kmDNSAutoTunnelSetKeysReplace
= 1,
102 kmDNSAutoTunnelSetKeysDelete
106 // helper parses the system keychain and returns the information to mDNSResponder.
107 // It returns four attributes. Attributes are defined after how they show up in
108 // keychain access utility (the actual attribute name to retrieve these are different).
109 enum mDNSKeyChainAttributes
111 kmDNSKcWhere
, // Where
112 kmDNSKcAccount
, // Account
117 #include "mDNSEmbeddedAPI.h"
118 #include "helpermsg-types.h"
120 extern const char *mDNSHelperError(int errornum
);
122 extern mStatus
mDNSHelperInit(void);
125 extern void mDNSRequestBPF(void);
126 extern int mDNSPowerRequest(int key
, int interval
);
127 extern int mDNSSetLocalAddressCacheEntry(int ifindex
, int family
, const v6addr_t ip
, const ethaddr_t eth
);
128 extern void mDNSNotify(const char *title
, const char *msg
); // Both strings are UTF-8 text
129 extern void mDNSPreferencesSetName(int key
, domainlabel
*old
, domainlabel
*new);
130 extern int mDNSKeychainGetSecrets(CFArrayRef
*secrets
);
131 extern int mDNSAutoTunnelSetKeys(int replacedelete
, v6addr_t local_inner
,
132 v6addr_t local_outer
, short local_port
, v6addr_t remote_inner
,
133 v6addr_t remote_outer
, short remote_port
, const char *const prefix
, const domainname
*const fqdn
);
134 extern void mDNSSendWakeupPacket(unsigned ifid
, char *eth_addr
, char *ip_addr
, int iteration
);
135 extern void mDNSPacketFilterControl(uint32_t command
, char * ifname
, uint32_t count
, pfArray_t portArray
, pfArray_t protocolArray
);
136 extern void mDNSSendKeepalive(const v6addr_t sadd
, const v6addr_t dadd
, uint16_t lport
, uint16_t rport
, unsigned seq
, unsigned ack
, uint16_t win
);
137 extern int mDNSRetrieveTCPInfo(int family
, v6addr_t laddr
, uint16_t lport
, v6addr_t raddr
, uint16_t rport
, uint32_t *seq
, uint32_t *ack
, uint16_t *win
, int32_t *intfid
);
139 extern void RequestBPF(void);
140 extern void PreferencesSetName(int key
, const char* old
, const char* new);
141 extern void PacketFilterControl(uint32_t command
, const char * ifname
, uint32_t count
, pfArray_t portArray
, pfArray_t protocolArray
);
142 extern void UserNotify(const char *title
, const char *msg
); // Both strings are UTF-8 text
143 extern void PowerRequest(int key
, int interval
, int *error
);
144 extern void SendWakeupPacket(unsigned int ifid
, const char *eth_addr
, const char *ip_addr
, int iteration
);
145 extern void SetLocalAddressCacheEntry(int ifindex
, int family
, const v6addr_t ip
, const ethaddr_t eth
, int *err
);
146 extern void SendKeepalive(const v6addr_t sadd6
, const v6addr_t dadd6
, uint16_t lport
, uint16_t rport
, uint32_t seq
, uint32_t ack
, uint16_t win
);
147 extern void RetrieveTCPInfo(int family
, const v6addr_t laddr
, uint16_t lport
, const v6addr_t raddr
, uint16_t rport
, uint32_t *seq
, uint32_t *ack
, uint16_t *win
, int32_t *intfid
, int *err
);
148 extern void KeychainGetSecrets(__unused
unsigned int *numsecrets
,__unused
unsigned long *secrets
, __unused
unsigned int *secretsCnt
, __unused
int *err
);
149 extern int HelperAutoTunnelSetKeys(int replacedelete
, const v6addr_t loc_inner
, const v6addr_t loc_outer6
, uint16_t loc_port
, const v6addr_t rmt_inner
,
150 const v6addr_t rmt_outer6
, uint16_t rmt_port
, const char *id
, int *err
);
151 extern void helper_exit(void);
153 #endif /* H_HELPER_H */