summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/mDNSMacOSX/helper.h
blob: eedf7380e27f2ae6559856c5bdf1fc35b415641f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/* -*- Mode: C; tab-width: 4 -*-
 *
 * Copyright (c) 2007-2013 Apple Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef H_HELPER_H
#define H_HELPER_H

#include <os/log.h>

#define kHelperService "com.apple.mDNSResponder_Helper"

#define kmDNSHelperProgramArgs CFSTR("com.apple.mDNSResponderHelper")
#define kPreferencesKey_mDNSHelperLog  CFSTR("mDNSHelperDebugLogging")

#define kHelperMode             "HelperMode"
#define kHelperReplyStatus      "HelperReplyStatusToClient"
#define kHelperErrCode          "HelperErrorCodefromCall"

#define kPrefsNameKey  "PreferencesNameKey"
#define kPrefsOldName  "PreferencesOldName"
#define kPrefsNewName  "PreferencesNewName"

extern int mDNSHelperLogEnabled;

extern os_log_t  log_handle;

typedef enum
{
    bpf_request = 1,
    set_name = 2,
    p2p_packetfilter = 3,
    user_notify = 4,
    power_req = 5,
    send_wakepkt = 6,
    set_localaddr_cacheentry = 7,
    send_keepalive = 8,
    retreive_tcpinfo = 9,
    keychain_getsecrets = 10,
    autotunnel_setkeys = 11,
    request_other,
} HelperModes;

typedef enum
{
    kHelperReply_ACK = 0,
} HelperReplyStatusCodes;


typedef enum
{
    kHelperErr_NoErr = 0,
    kHelperErr_DefaultErr = -1,
    kHelperErr_NotConnected = -2,
    kHelperErr_NoResponse = -3,
    kHelperErr_UndefinedMode = -4,
    kHelperErr_ApiErr = -5,
    kHelperErr_InvalidTunnelSetKeysOperation = -6,
    kHelperErr_InvalidNetworkAddress = -7,
    kHelperErr_ResultTooLarge = -8,
    kHelperErr_RacoonConfigCreationFailed = -9,
    kHelperErr_IPsecPolicySocketCreationFailed = -10,
    kHelperErr_IPsecPolicyCreationFailed = -11,
    kHelperErr_IPsecPolicySetFailed = -12,
    kHelperErr_IPsecRemoveSAFailed = -13,
    kHelperErr_IPsecDisabled = -14,
    kHelperErr_RoutingSocketCreationFailed = -15,
    kHelperErr_RouteDeletionFailed = -16,
    kHelperErr_RouteAdditionFailed = -17,
    kHelperErr_RacoonStartFailed = -18,
    kHelperErr_RacoonNotificationFailed = -19,
} HelperErrorCodes;


enum mDNSPreferencesSetNameKey
{
    kmDNSComputerName = 1,
    kmDNSLocalHostName
};

enum mDNSUpDown
{
    kmDNSUp = 1,
    kmDNSDown
};

enum mDNSAutoTunnelSetKeysReplaceDelete
{
    kmDNSAutoTunnelSetKeysReplace = 1,
    kmDNSAutoTunnelSetKeysDelete
};


// helper parses the system keychain and returns the information to mDNSResponder.
// It returns four attributes. Attributes are defined after how they show up in
// keychain access utility (the actual attribute name to retrieve these are different).
enum mDNSKeyChainAttributes
{
    kmDNSKcWhere,   // Where
    kmDNSKcAccount, // Account
    kmDNSKcKey,     // Key
    kmDNSKcName     // Name
};

#include "mDNSEmbeddedAPI.h"
#include "helpermsg-types.h"

extern const char *mDNSHelperError(int errornum);

extern mStatus mDNSHelperInit(void);


extern void mDNSRequestBPF(void);
extern int  mDNSPowerRequest(int key, int interval);
extern int  mDNSSetLocalAddressCacheEntry(int ifindex, int family, const v6addr_t ip, const ethaddr_t eth);
extern void mDNSNotify(const char *title, const char *msg);     // Both strings are UTF-8 text
extern void mDNSPreferencesSetName(int key, domainlabel *old, domainlabel *new);
extern int  mDNSKeychainGetSecrets(CFArrayRef *secrets);
extern int  mDNSAutoTunnelSetKeys(int replacedelete, v6addr_t local_inner,
                                  v6addr_t local_outer, short local_port, v6addr_t remote_inner,
                                  v6addr_t remote_outer, short remote_port, const char *const prefix, const domainname *const fqdn);
extern void mDNSSendWakeupPacket(unsigned ifid, char *eth_addr, char *ip_addr, int iteration);
extern void mDNSPacketFilterControl(uint32_t command, char * ifname, uint32_t count, pfArray_t portArray, pfArray_t protocolArray);
extern void mDNSSendKeepalive(const v6addr_t sadd, const v6addr_t dadd, uint16_t lport, uint16_t rport, unsigned seq, unsigned ack, uint16_t win);
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);

extern void RequestBPF(void);
extern void PreferencesSetName(int key, const char* old, const char* new);
extern void PacketFilterControl(uint32_t command, const char * ifname, uint32_t count, pfArray_t portArray, pfArray_t protocolArray);
extern void UserNotify(const char *title, const char *msg);     // Both strings are UTF-8 text
extern void PowerRequest(int key, int interval, int *error);
extern void SendWakeupPacket(unsigned int ifid, const char *eth_addr, const char *ip_addr, int iteration);
extern void SetLocalAddressCacheEntry(int ifindex, int family, const v6addr_t ip, const ethaddr_t eth, int *err);
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);
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);
extern void KeychainGetSecrets(__unused unsigned int *numsecrets,__unused unsigned long *secrets, __unused unsigned int *secretsCnt, __unused int *err);
extern int  HelperAutoTunnelSetKeys(int replacedelete, const v6addr_t loc_inner, const v6addr_t loc_outer6, uint16_t loc_port, const v6addr_t rmt_inner,
                            const v6addr_t rmt_outer6, uint16_t rmt_port, const char *id, int *err);
extern void helper_exit(void);

#endif /* H_HELPER_H */