]> git.saurik.com Git - apple/ipsec.git/blob - ipsec-tools/racoon/api_support.h
7b028d2083f6267d6f05c0f0e549484353843320
[apple/ipsec.git] / ipsec-tools / racoon / api_support.h
1 /*
2 * Copyright (c) 2012, 2013 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
24 #ifndef __API_SUPPORT__
25 #define __API_SUPPORT__
26
27 #include <CoreFoundation/CoreFoundation.h>
28 #include <net/pfkeyv2.h>
29 #include "racoon_types.h"
30 #include <sys/socket.h>
31 #include <SNIPSecIKEDefinitions.h>
32 #include <SNIPSecDBDefinitions.h>
33 #include <SNIPSecIKE.h>
34 #include <SNIPSecDB.h>
35
36 struct isakmp_cfg_state;
37 struct ikev2_traffic_selector;
38
39 #define kSNIPSecDBSrcRangeEndAddress CFSTR("SrcRangeEndAddress") /* CFString */
40 #define kSNIPSecDBDstRangeEndAddress CFSTR("DstRangeEndAddress") /* CFString */
41 #define kSNIPSecDBSrcRangeEndPort CFSTR("SrcRangeEndPort") /* CFNumber */
42 #define kSNIPSecDBDstRangeEndPort CFSTR("DstRangeEndPort") /* CFNumber */
43
44 #define kSNIPSecDBPolicyID CFSTR("PolicyID") /* CFNumber */
45
46 #define kSNIPSecDBPolicyType CFSTR("PolicyType") /* CFString */
47 #define kSNIPSecDBValPolicyTypeDiscard CFSTR("Discard")
48 #define kSNIPSecDBValPolicyTypeNone CFSTR("None")
49 #define kSNIPSecDBValPolicyTypeIPSec CFSTR("IPSec")
50 #define kSNIPSecDBValPolicyTypeEntrust CFSTR("Entrust")
51 #define kSNIPSecDBValPolicyTypeBypass CFSTR("Bypass")
52 #define kSNIPSecDBValPolicyTypeGenerate CFSTR("Generate")
53
54 #define kSNIPSecDBSACreateTime CFSTR("CreateTime")
55 #define kSNIPSecDBSACurrentTime CFSTR("CurrentTime")
56 #define kSNIPSecDBSADiffTime CFSTR("DiffTime")
57 #define kSNIPSecDBSAHardLifetime CFSTR("HardLifetime")
58 #define kSNIPSecDBSASoftLifetime CFSTR("SoftLifetime")
59 #define kSNIPSecDBSALastUseTime CFSTR("LastUseTime")
60 #define kSNIPSecDBSAHardUseTime CFSTR("HardUseTime")
61 #define kSNIPSecDBSASoftUseTime CFSTR("SoftUseTime")
62 #define kSNIPSecDBSACurrentBytes CFSTR("CurrentBytes")
63 #define kSNIPSecDBSAHardBytes CFSTR("HardBytes")
64 #define kSNIPSecDBSASoftBytes CFSTR("SoftBytes")
65 #define kSNIPSecDBSACurrentAllocations CFSTR("CurrentAllocations")
66 #define kSNIPSecDBSAHardAllocations CFSTR("HardAllocations")
67 #define kSNIPSecDBSASoftAllocations CFSTR("SoftAllocations")
68
69 #define kSNIPSecDBSAState CFSTR("State")
70 #define kSNIPSecDBValSAStateLarval CFSTR("Larval")
71 #define kSNIPSecDBValSAStateMature CFSTR("Mature")
72 #define kSNIPSecDBValSAStateDying CFSTR("Dying")
73 #define kSNIPSecDBValSAStateDead CFSTR("Dead")
74
75 #define kSNIPSecIKEAssignedPCSCFIPv6Address CFSTR("AssignedPCSCFIPv6Address")
76
77 typedef uint32_t InternalSessionRef;
78 typedef uint32_t InternalItemRef;
79
80 /* IPSec DB API Types */
81 typedef InternalSessionRef InternalDBRef;
82 typedef InternalItemRef InternalDBSARef;
83 typedef InternalItemRef InternalDBPolicyRef;
84 typedef InternalItemRef InternalDBInterfaceRef;
85 #define kInternalDBRefInvalid 0
86 #define kInternalDBSARefInvalid 0
87 #define kInternalDBPolicyRefInvalid 0
88 #define kInternalDBInterfaceRefInvalid 0
89
90 /* IKE API Types */
91 typedef InternalSessionRef InternalIKESARef;
92 typedef InternalItemRef InternalChildSARef;
93 #define kInternalIKESARefInvalid 0
94 #define kInternalChildSARefInvalid 0
95
96 /* Internal support functions -- Dictionaries should be verified for required keys and valid types before calling these */
97 void ASSendXPCReply (InternalSessionRef sessionRef, InternalItemRef objRef, int callType, void *retVal, Boolean success);
98 void ASSendXPCMessage(uint32_t message, void *messageobj, uint32_t sessionID, uint32_t itemID);
99
100 /* IPSec DB API Functions */
101 InternalDBRef ASDBCreate (void);
102 InternalDBSARef ASDBGetSPI (InternalDBRef ref, CFDictionaryRef sadata);
103 InternalDBSARef ASDBCreateSA (InternalDBRef ref, CFDictionaryRef sadata);
104 Boolean ASDBUpdateSA (InternalDBRef ref, InternalDBSARef saref, CFDictionaryRef sadata);
105 Boolean ASDBDeleteSA (InternalDBRef ref, InternalDBSARef saref);
106 Boolean ASDBCopySA (InternalDBRef ref, InternalDBSARef saref);
107 Boolean ASDBFlushSA (InternalDBRef ref, Boolean *blockForResponse);
108 CFArrayRef ASDBCopySAIDs (InternalDBRef ref);
109 InternalDBPolicyRef ASDBAddPolicy (InternalDBRef ref, CFDictionaryRef spdata);
110 Boolean ASDBDeletePolicy (InternalDBRef ref, InternalDBPolicyRef policyref);
111 Boolean ASDBCopyPolicy (InternalDBRef ref, InternalDBPolicyRef policyref);
112 Boolean ASDBFlushPolicy (InternalDBRef ref, Boolean *blockForResponse);
113 CFArrayRef ASDBCopyPolicyIDs (InternalDBRef ref);
114 Boolean ASDBFlushAll (InternalDBRef ref, Boolean *blockForResponse);
115 Boolean ASDBDispose (InternalDBRef ref, Boolean *blockForResponse);
116
117 /* IPSec DB Interface Functions */
118 InternalDBInterfaceRef ASDBCreateIPSecInterface (InternalDBRef ref, struct sockaddr_storage *address, struct sockaddr_storage *netmask, struct sockaddr_storage *v6address, int v6prefix);
119 Boolean ASDBFlushInterfaces (InternalDBRef ref);
120
121 /* IKE API Functions */
122 InternalIKESARef ASIKECreate (CFDictionaryRef ikedata, CFDictionaryRef childData);
123 InternalChildSARef ASIKEStartConnection (InternalIKESARef ref);
124 Boolean ASIKEStopConnection (InternalIKESARef ref);
125 InternalChildSARef ASIKEStartChildSA (InternalIKESARef ref, CFDictionaryRef ikechilddata);
126 Boolean ASIKEStopChildSA (InternalIKESARef ref, InternalChildSARef childref);
127 SNIPSecIKEStatus ASIKEGetConnectionStatus (InternalIKESARef ref);
128 SNIPSecIKEStatus ASIKEGetChildStatus (InternalIKESARef ref, InternalChildSARef childref);
129 Boolean ASIKEDispose (InternalIKESARef ref, Boolean *blockForResponse);
130 Boolean ASIKEEnableAll (InternalIKESARef ref);
131 Boolean ASIKEDisableAll (InternalIKESARef ref);
132
133 /* Functions to support racoon */
134 InternalDBSARef ASDBGetSPIFromIKE (InternalDBRef ref, phase2_handle_t *phase2);
135 Boolean ASDBAddSAFromIKE (InternalDBRef ref, phase2_handle_t *phase2, Boolean update);
136 Boolean ASDBDeleteSAFromIKE (InternalDBRef ref, struct sockaddr_storage *dst, uint32_t spi, int ipsecProtocol);
137 Boolean ASDBFlushAllForIKEChildSA (InternalDBRef ref, InternalChildSARef childRef);
138 InternalDBPolicyRef ASDBAddPolicyFromIKE (InternalDBRef ref, phase2_handle_t *phase2);
139 Boolean ASDBReceivePFKeyMessage (caddr_t *message, int array_size); /* Returns TRUE if handled message */
140 Boolean ASDBGetIPSecInterfaceName (InternalDBRef ref, char *buf, int bufLen);
141 Boolean ASIKEConnectionAddChildSAFromIKE (InternalIKESARef ref, phase2_handle_t *childSA);
142 Boolean ASIKEConnectionSwapChildSAs (InternalIKESARef ref, InternalChildSARef oldChildSA, InternalChildSARef newChildSA);
143 void ASIKEConnectionExpireChildSAFromIKE (InternalIKESARef ref, InternalChildSARef childSARef);
144 Boolean ASHasValidSessions (void);
145 void ASIKEUpdateLocalAddressesFromIKE (void);
146 void ASIKEUpdateStatusFromIKE (InternalIKESARef ref, InternalChildSARef childRef, uint32_t status, uint32_t reason);
147 phase2_handle_t *ASIKEConnectionGetChildSAFromIKE (InternalIKESARef ref, InternalChildSARef childSARef);
148 void ASIKEUpdateConfigurationFromIKE (InternalIKESARef ref, struct isakmp_cfg_state *config);
149 void ASIKEUpdateTrafficSelectorsFromIKE (InternalIKESARef ref, InternalChildSARef childRef, struct ikev2_traffic_selector *local, struct ikev2_traffic_selector *remote);
150 void ASIKEStopConnectionFromIKE (InternalIKESARef ref);
151
152 #endif