Ziti C SDK
Loading...
Searching...
No Matches
ziti_model.h
Go to the documentation of this file.
1// Copyright (c) 2020-2026. NetFoundry Inc
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#ifndef ZITI_SDK_ZITI_MODEL_H
16#define ZITI_SDK_ZITI_MODEL_H
17
18#include "model_support.h"
19
20#if _WIN32
21#include <winsock2.h>
22#include <in6addr.h>
23#else
24
25#include <netinet/in.h>
26
27#endif
28
29#define ZITI_PROTOCOL_ENUM(XX, ...) \
30XX(tcp, __VA_ARGS__) \
31XX(udp, __VA_ARGS__)
32
33#define ZITI_SESSION_TYPE_ENUM(XX, ...) \
34XX(Bind, __VA_ARGS__) \
35XX(Dial, __VA_ARGS__)
36
37#define ZITI_AUTH_QUERY_TYPE_ENUM(XX, ...) \
38XX(MFA, __VA_ARGS__) \
39XX(TOTP, __VA_ARGS__) \
40XX(EXT_JWT, "EXT-JWT", __VA_ARGS__)
41
42#define ZITI_POSTURE_QUERY_TYPE_ENUM(XX, ...) \
43XX(PC_Domain, "DOMAIN", __VA_ARGS__) \
44XX(PC_OS, "OS", __VA_ARGS__) \
45XX(PC_Process, "PROCESS", __VA_ARGS__) \
46XX(PC_Process_Multi, "PROCESS_MULTI", __VA_ARGS__) \
47XX(PC_MAC, "MAC", __VA_ARGS__) \
48XX(PC_MFA, "MFA", __VA_ARGS__) \
49XX(PC_Endpoint_State, "ENDPOINT_STATE", __VA_ARGS__)
50
51#define ZITI_SIGNER_TARGET_TOKEN(XX, ...) \
52XX(access_token, "ACCESS", __VA_ARGS__) \
53XX(id_token, "ID", __VA_ARGS__)
54
55#define ZITI_TERMINATOR_STRATEGY(XX, ...) \
56 XX(random, __VA_ARGS__) \
57 XX(smartrouting, __VA_ARGS__) \
58 XX(sticky, __VA_ARGS__) \
59 XX(weighted, __VA_ARGS__)
60
61#define ZITI_JWT_SIGNER_MODEL(XX, ...) \
62XX(id, model_string, none, id, __VA_ARGS__) \
63XX(name, model_string, none, name, __VA_ARGS__) \
64XX(enabled, model_bool, none, enabled, __VA_ARGS__) \
65XX(provider_url, model_string, none, externalAuthUrl, __VA_ARGS__) \
66XX(client_id, model_string, none, clientId, __VA_ARGS__) \
67XX(audience, model_string, none, audience, __VA_ARGS__) \
68XX(scopes, model_string, list, scopes, __VA_ARGS__) \
69XX(target_token, ziti_target_token, none, targetToken, __VA_ARGS__) \
70XX(can_token_enroll, model_bool, none, enrollToTokenEnabled, __VA_ARGS__) \
71XX(can_cert_enroll, model_bool, none, enrollToCertEnabled, __VA_ARGS__)
72
73#define ZITI_ID_CFG_MODEL(XX, ...) \
74XX(cert, model_string, none, cert, __VA_ARGS__) \
75XX(key, model_string, none, key, __VA_ARGS__) \
76XX(ca, model_string, none, ca, __VA_ARGS__)
77
78#define ZITI_CONFIG_MODEL(XX, ...) \
79XX(controller_url, model_string, none, ztAPI, __VA_ARGS__) \
80XX(controllers, model_string, list, ztAPIs, __VA_ARGS__) \
81XX(id, ziti_id_cfg, none, id, __VA_ARGS__) \
82XX(cfg_source, model_string, none, , __VA_ARGS__)
83
84#define ZITI_API_PATH_MODEL(XX, ...) \
85XX(path, model_string, none, path, __VA_ARGS__) \
86XX(base_urls, model_string, array, apiBaseUrls, __VA_ARGS__)
87
88#define ZITI_API_VERSIONS_MODEL(XX, ...) \
89XX(edge, api_path, map, edge, __VA_ARGS__) \
90XX(oidc, api_path, map, edge-oidc, __VA_ARGS__)
91
92#define ZITI_CTRL_CAP_ENUM(XX, ...) \
93XX(HA_CONTROLLER, __VA_ARGS__) \
94XX(OIDC_AUTH, __VA_ARGS__)
95
96#define ZITI_VERSION_MODEL(XX, ...) \
97XX(version, model_string, none, version, __VA_ARGS__) \
98XX(revision, model_string, none, revision, __VA_ARGS__) \
99XX(build_date, model_string, none, buildDate, __VA_ARGS__) \
100XX(capabilities, ziti_ctrl_cap, array, capabilities, __VA_ARGS__) \
101XX(api_versions, ziti_api_versions, ptr, apiVersions, __VA_ARGS__)
102
103#define ZITI_IDENTITY_MODEL(XX, ...) \
104XX(id, model_string, none, id, __VA_ARGS__) \
105XX(name, model_string, none, name, __VA_ARGS__) \
106XX(app_data, json, map, appData, __VA_ARGS__)
107
108#define ZITI_PROCESS_MODEL(XX, ...) \
109XX(path, model_string, none, path, __VA_ARGS__)
110
111#define ZITI_POSTURE_QUERY_MODEL(XX, ...) \
112XX(id, model_string, none, id, __VA_ARGS__) \
113XX(is_passing, model_bool, none, isPassing, __VA_ARGS__) \
114XX(query_type, ziti_posture_query_type, none, queryType, __VA_ARGS__) \
115XX(process, ziti_process, ptr, process, __VA_ARGS__) \
116XX(processes, ziti_process, array, processes, __VA_ARGS__) \
117XX(timeout, model_number, none, timeout, __VA_ARGS__) \
118XX(timeoutRemaining, model_number, ptr, timeoutRemaining, __VA_ARGS__) \
119XX(updated_at,model_string, none, updatedAt, __VA_ARGS__)
120
121#define ZITI_POSTURE_QUERY_SET_MODEL(XX, ...) \
122XX(policy_id, model_string, none, policyId, __VA_ARGS__) \
123XX(is_passing, model_bool, none, isPassing, __VA_ARGS__) \
124XX(policy_type, model_string, none, policyType, __VA_ARGS__) \
125XX(posture_queries, ziti_posture_query, array, postureQueries, __VA_ARGS__)
126
127#define ZITI_SERVICE_MODEL(XX, ...) \
128 XX(id, model_string, none, id, __VA_ARGS__) \
129 XX(name, model_string, none, name, __VA_ARGS__) \
130 XX(permissions, ziti_session_type, array, permissions, __VA_ARGS__) \
131 XX(encryption, model_bool, none, encryptionRequired, __VA_ARGS__) \
132 XX(perm_flags, model_number, none, NULL, __VA_ARGS__) \
133 XX(config, json, map, config, __VA_ARGS__) \
134 XX(posture_query_set, ziti_posture_query_set, array, postureQueries, __VA_ARGS__) \
135 XX(posture_query_map, ziti_posture_query_set, map, posturePolicies, __VA_ARGS__) \
136 XX(terminator_strategy, ziti_terminator_strategy, none, terminatorStrategy, __VA_ARGS__) \
137 XX(updated_at,model_string, none, updatedAt, __VA_ARGS__)
138
139#define ZITI_TERMINATOR_MODEL(XX, ...) \
140XX(identity, model_string, none, identity, __VA_ARGS__) \
141XX(service_id, model_string, none, serviceId, __VA_ARGS__)
142
143#define ZITI_CLIENT_CFG_V1_MODEL(XX, ...) \
144XX(hostname, ziti_address, none, hostname, __VA_ARGS__) \
145XX(port, model_number, none, port, __VA_ARGS__)
146
147#define ZITI_PORT_RANGE_MODEL(XX, ...) \
148XX(low, model_number, none, low, __VA_ARGS__) \
149XX(high, model_number, none, high, __VA_ARGS__)
150
151#define ZITI_INTERCEPT_CFG_V1 "intercept.v1"
152#define ZITI_CLIENT_CFG_V1 "ziti-tunneler-client.v1"
153
154#define ZITI_INTERCEPT_CFG_V1_MODEL(XX, ...) \
155XX(protocols, ziti_protocol, list, protocols, __VA_ARGS__) \
156XX(addresses, ziti_address, list, addresses, __VA_ARGS__) \
157XX(port_ranges, ziti_port_range, list, portRanges, __VA_ARGS__) \
158XX(dial_options, tag, map, dialOptions, __VA_ARGS__) \
159XX(source_ip, model_string, none, sourceIp, __VA_ARGS__) \
160XX(allowed_source_addresses, ziti_address, list, allowedSourceAddresses, __VA_ARGS__)
161
162#define ZITI_SERVER_CFG_V1_MODEL(XX, ...) \
163XX(protocol, model_string, none, protocol, __VA_ARGS__) \
164XX(hostname, model_string, none, hostname, __VA_ARGS__) \
165XX(port, model_number, none, port, __VA_ARGS__)
166
167#define ZITI_L2_INTERCEPT_CFG_V1_MODEL(XX, ...) \
168 XX(ethtypes, model_string, list, ethTypes, __VA_ARGS__) \
169 XX(dial_options, tag, map, dialOptions, __VA_ARGS__)
170
171#define ZITI_L2_HOST_CFG_V1_MODEL(XX, ...) \
172 XX(bridge_ifs, model_string, list, bridgeIfs, __VA_ARGS__) \
173 XX(listen_options, ziti_listen_options, ptr, listenOptions, __VA_ARGS__)
174
175#define ZITI_PROXY_SERVER_TYPE_ENUM(XX, ...) \
176XX(http, __VA_ARGS__)
177
178#define ZITI_PROXY_SERVER_MODEL(XX, ...) \
179XX(address, model_string, none, address, __VA_ARGS__) \
180XX(type, ziti_proxy_server_type, none, type, __VA_ARGS__)
181
182#define ZITI_ADDRESS_TRANSLATION_MODEL(XX, ...) \
183XX(from, ziti_address, none, from, __VA_ARGS__) \
184XX(to, ziti_address, none, to, __VA_ARGS__) \
185XX(prefix_length, model_number, none, prefixLength, __VA_ARGS__ )
186
187#define ZITI_HOST_CFG_V1_MODEL(XX, ...) \
188XX(protocol, model_string, none, protocol, __VA_ARGS__) \
189XX(forward_protocol, model_bool, none, forwardProtocol, __VA_ARGS__) \
190XX(allowed_protocols, model_string, array, allowedProtocols, __VA_ARGS__) \
191XX(address, model_string, none, address, __VA_ARGS__) \
192XX(forward_address, model_bool, none, forwardAddress, __VA_ARGS__) \
193XX(forward_address_translations, ziti_address_translation, array, forwardAddressTranslations, __VA_ARGS__) \
194XX(allowed_addresses, ziti_address, array, allowedAddresses, __VA_ARGS__) \
195XX(port, model_number, none, port, __VA_ARGS__) \
196XX(forward_port, model_bool, none, forwardPort, __VA_ARGS__) \
197XX(allowed_port_ranges, ziti_port_range, array, allowedPortRanges, __VA_ARGS__) \
198XX(allowed_source_addresses, ziti_address, array, allowedSourceAddresses, __VA_ARGS__) \
199XX(proxy, ziti_proxy_server, none, proxy, __VA_ARGS__) \
200XX(listen_options, ziti_listen_options, ptr, listenOptions, __VA_ARGS__)
201
202#define ZITI_HOST_CFG_V2_MODEL(XX, ...) \
203XX(terminators, ziti_host_cfg_v1, list, terminators, __VA_ARGS__)
204
205#define ZITI_MFA_ENROLLMENT_MODEL(XX, ...) \
206XX(is_verified, model_bool, none, isVerified, __VA_ARGS__) \
207XX(recovery_codes, model_string, array, recoveryCodes, __VA_ARGS__) \
208XX(provisioning_url, model_string, none, provisioningUrl, __VA_ARGS__)
209
210#define ZITI_LISTEN_OPTS_MODEL(XX, ...) \
211XX(bind_with_identity, model_bool, none, bindUsingEdgeIdentity, __VA_ARGS__) \
212XX(connect_timeout, duration, none, connectTimeout, __VA_ARGS__) \
213XX(connect_timeout_seconds, model_number, none, connectTimeoutSeconds, __VA_ARGS__) \
214XX(cost, model_number, none, cost, __VA_ARGS__) \
215XX(identity, model_string, none, identity, __VA_ARGS__) \
216XX(max_connections, model_number, none, maxConnections, __VA_ARGS__)\
217XX(precendence, model_string, none, precendence, __VA_ARGS__)
218
219
220#ifdef __cplusplus
221extern "C" {
222#endif
223
228
229typedef struct ziti_address_s {
231 union {
232 struct {
233 char af;
234 unsigned int bits;
235 struct in6_addr ip;
236 } cidr;
237 char hostname[256];
238 } addr;
240
241
242
243
244// make sure ziti model functions are properly exported
245#ifdef MODEL_VISIBILITY
246#undef MODEL_VISIBILITY
247#endif
248#define MODEL_VISIBILITY ZITI_FUNC
249
250ZITI_FUNC int parse_ziti_address_str(ziti_address *addr, const char *addr_str);
251
252ZITI_FUNC int ziti_address_print(char *buf, size_t max, const ziti_address *address);
253
255
256ZITI_FUNC int ziti_address_match_s(const char *addr, const ziti_address *range);
257
258ZITI_FUNC int ziti_addrstr_match_list(const char *addr, const model_list *range);
260
261ZITI_FUNC int ziti_address_match_array(const char *addr, ziti_address **range);
262
264
266
268ZITI_FUNC int ziti_port_match(int port, const model_list *port_range_list);
269
271
273
275
277
279
281
283
285
287
289
291
293
295
297
299
301
303
305
307
309
311
313
315
317
319
321
323
325
327
329
331
333
334ZITI_FUNC const char *ziti_service_get_raw_config(const ziti_service *service, const char *cfg_type);
335
336typedef int (*parse_service_cfg_f)(void *, const char *, size_t);
337
338ZITI_FUNC int ziti_service_get_config(const ziti_service *service, const char *cfg_type, void *cfg,
339 parse_service_cfg_f parse_func);
340
342
343ZITI_FUNC int
344ziti_intercept_match(const ziti_intercept_cfg_v1 *intercept, ziti_protocol proto, const char *addr, int port);
345
346ZITI_FUNC int ziti_intercept_match2(const ziti_intercept_cfg_v1 *intercept, ziti_protocol proto, const ziti_address *addr, int port);
347
348
349#ifdef __cplusplus
350}
351#endif
352
353#endif //ZITI_SDK_ZITI_MODEL_H
#define ZITI_FUNC
Definition externs.h:38
bool model_bool
Definition model_support.h:161
#define DECLARE_MODEL(type, model)
Definition model_support.h:89
#define DECLARE_MODEL_FUNCS(T)
Definition model_support.h:95
#define DECLARE_ENUM(Enum, Values)
Definition model_support.h:275
Definition ziti_model.h:282
Definition model_collections.h:97
Definition ziti_model.h:324
Definition ziti_model.h:229
char af
Definition ziti_model.h:233
unsigned int bits
Definition ziti_model.h:234
enum ziti_address_type type
Definition ziti_model.h:230
Definition ziti_model.h:284
Definition ziti_model.h:306
Definition ziti_model.h:292
Definition ziti_model.h:326
Definition ziti_model.h:328
Definition ziti_model.h:290
Definition ziti_model.h:294
Definition ziti_model.h:310
Definition ziti_model.h:288
Definition ziti_model.h:318
Definition ziti_model.h:316
Definition ziti_model.h:312
Definition ziti_model.h:330
Definition ziti_model.h:308
Definition ziti_model.h:300
Definition ziti_model.h:298
Definition ziti_model.h:296
Definition ziti_model.h:322
Definition ziti_model.h:314
Definition ziti_model.h:302
Definition ziti_model.h:304
Definition ziti_model.h:286
#define ZITI_SESSION_TYPE_ENUM(XX,...)
Definition ziti_model.h:33
model_bool ziti_protocol_match(ziti_protocol proto, const model_list *proto_list)
int ziti_service_get_config(const ziti_service *service, const char *cfg_type, void *cfg, parse_service_cfg_f parse_func)
#define ZITI_IDENTITY_MODEL(XX,...)
Definition ziti_model.h:103
#define ZITI_LISTEN_OPTS_MODEL(XX,...)
Definition ziti_model.h:210
ziti_session_type
Definition ziti_model.h:270
#define ZITI_POSTURE_QUERY_MODEL(XX,...)
Definition ziti_model.h:111
#define ZITI_SIGNER_TARGET_TOKEN(XX,...)
Definition ziti_model.h:51
const char * ziti_service_get_raw_config(const ziti_service *service, const char *cfg_type)
#define ZITI_PROTOCOL_ENUM(XX,...)
Definition ziti_model.h:29
int ziti_port_match(int port, const model_list *port_range_list)
int parse_ziti_address_str(ziti_address *addr, const char *addr_str)
int ziti_address_print(char *buf, size_t max, const ziti_address *address)
int ziti_address_match_s(const char *addr, const ziti_address *range)
ziti_auth_query_type
Definition ziti_model.h:272
#define ZITI_API_PATH_MODEL(XX,...)
Definition ziti_model.h:84
int ziti_address_match_list(const ziti_address *addr, const model_list *range)
#define ZITI_PROCESS_MODEL(XX,...)
Definition ziti_model.h:108
#define ZITI_CONFIG_MODEL(XX,...)
Definition ziti_model.h:78
#define ZITI_L2_INTERCEPT_CFG_V1_MODEL(XX,...)
Definition ziti_model.h:167
#define ZITI_POSTURE_QUERY_TYPE_ENUM(XX,...)
Definition ziti_model.h:42
#define ZITI_INTERCEPT_CFG_V1_MODEL(XX,...)
Definition ziti_model.h:154
ziti_ctrl_cap
Definition ziti_model.h:276
#define ZITI_TERMINATOR_STRATEGY(XX,...)
Definition ziti_model.h:55
#define ZITI_TERMINATOR_MODEL(XX,...)
Definition ziti_model.h:139
ziti_posture_query_type
Definition ziti_model.h:274
int ziti_intercept_match2(const ziti_intercept_cfg_v1 *intercept, ziti_protocol proto, const ziti_address *addr, int port)
#define ZITI_AUTH_QUERY_TYPE_ENUM(XX,...)
Definition ziti_model.h:37
#define ZITI_POSTURE_QUERY_SET_MODEL(XX,...)
Definition ziti_model.h:121
#define ZITI_SERVICE_MODEL(XX,...)
Definition ziti_model.h:127
#define ZITI_VERSION_MODEL(XX,...)
Definition ziti_model.h:96
#define ZITI_PROXY_SERVER_MODEL(XX,...)
Definition ziti_model.h:178
ziti_terminator_strategy
Definition ziti_model.h:280
#define ZITI_L2_HOST_CFG_V1_MODEL(XX,...)
Definition ziti_model.h:171
#define ZITI_SERVER_CFG_V1_MODEL(XX,...)
Definition ziti_model.h:162
#define ZITI_PORT_RANGE_MODEL(XX,...)
Definition ziti_model.h:147
#define ZITI_HOST_CFG_V2_MODEL(XX,...)
Definition ziti_model.h:202
#define ZITI_CLIENT_CFG_V1_MODEL(XX,...)
Definition ziti_model.h:143
int ziti_address_match(const ziti_address *addr, const ziti_address *range)
#define ZITI_HOST_CFG_V1_MODEL(XX,...)
Definition ziti_model.h:187
int ziti_intercept_from_client_cfg(ziti_intercept_cfg_v1 *intercept, const ziti_client_cfg_v1 *client_cfg)
#define ZITI_API_VERSIONS_MODEL(XX,...)
Definition ziti_model.h:88
#define ZITI_ID_CFG_MODEL(XX,...)
Definition ziti_model.h:73
ziti_address_type
Definition ziti_model.h:224
@ ziti_address_hostname
Definition ziti_model.h:225
@ ziti_address_cidr
Definition ziti_model.h:226
#define ZITI_JWT_SIGNER_MODEL(XX,...)
Definition ziti_model.h:61
ziti_proxy_server_type
Definition ziti_model.h:320
#define ZITI_ADDRESS_TRANSLATION_MODEL(XX,...)
Definition ziti_model.h:182
#define ZITI_PROXY_SERVER_TYPE_ENUM(XX,...)
Definition ziti_model.h:175
int ziti_intercept_match(const ziti_intercept_cfg_v1 *intercept, ziti_protocol proto, const char *addr, int port)
int ziti_addrstr_match_list(const char *addr, const model_list *range)
int(* parse_service_cfg_f)(void *, const char *, size_t)
Definition ziti_model.h:336
ziti_protocol
Definition ziti_model.h:265
#define ZITI_MFA_ENROLLMENT_MODEL(XX,...)
Definition ziti_model.h:205
ziti_target_token
Definition ziti_model.h:278
#define ZITI_CTRL_CAP_ENUM(XX,...)
Definition ziti_model.h:92
int ziti_address_match_array(const char *addr, ziti_address **range)
model_bool ziti_service_has_permission(const ziti_service *service, ziti_session_type sessionType)