OpenVPN
options.h
Go to the documentation of this file.
1/*
2 * OpenVPN -- An application to securely tunnel IP networks
3 * over a single UDP port, with support for SSL/TLS-based
4 * session authentication and key exchange,
5 * packet encryption, packet authentication, and
6 * packet compression.
7 *
8 * Copyright (C) 2002-2025 OpenVPN Inc <sales@openvpn.net>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2
12 * as published by the Free Software Foundation.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License along
20 * with this program; if not, see <https://www.gnu.org/licenses/>.
21 */
22
23/*
24 * 2004-01-28: Added Socks5 proxy support
25 * (Christof Meerwald, https://cmeerw.org)
26 */
27
28#ifndef OPTIONS_H
29#define OPTIONS_H
30
31#include "basic.h"
32#include "common.h"
33#include "mtu.h"
34#include "route.h"
35#include "tun.h"
36#include "socket_util.h"
37#include "plugin.h"
38#include "manage.h"
39#include "proxy.h"
40#include "comp.h"
41#include "pushlist.h"
42#include "clinat.h"
43#include "crypto_backend.h"
44#include "dns.h"
45
46
47/*
48 * Maximum number of parameters associated with an option,
49 * including the option name itself.
50 */
51#define MAX_PARMS 16
52
53/*
54 * Max size of options line and parameter.
55 */
56#define OPTION_PARM_SIZE 256
57#define OPTION_LINE_SIZE 256
58
59extern const char title_string[];
60
61/* certain options are saved before --pull modifications are applied */
94
95#if !defined(ENABLE_CRYPTO_OPENSSL) && !defined(ENABLE_CRYPTO_MBEDTLS)
96#error "At least one of OpenSSL or mbed TLS needs to be defined."
97#endif
98
100{
101 const char *local;
102 const char *port;
103 int proto;
104};
105
107{
109 int proto;
111 const char *local_port;
113 const char *remote_port;
114 const char *remote;
124 const char *socks_proxy_port;
126
127 int tun_mtu; /* MTU of tun device */
128 int occ_mtu; /* if non-null, this is the MTU we announce to peers in OCC */
129 int tun_mtu_max; /* maximum MTU that can be pushed */
130
131 bool tun_mtu_defined; /* true if user overriding parm with command line option */
134 int link_mtu; /* MTU of device over which tunnel packets pass via TCP/UDP */
135 bool link_mtu_defined; /* true if user overriding parm with command line option */
136 int tls_mtu; /* Maximum MTU for the control channel messages */
137
138 /* Advanced MTU negotiation and datagram fragmentation options */
139 int mtu_discover_type; /* used if OS supports setting Path MTU discovery options on socket */
140
141 int fragment; /* internal fragmentation size */
142 bool fragment_encap; /* true if --fragment had the "mtu" parameter to
143 * include overhead from IP and TCP/UDP encapsulation */
144 int mssfix; /* Upper bound on TCP MSS */
145 bool mssfix_default; /* true if --mssfix should use the default parameters */
146 bool mssfix_encap; /* true if --mssfix had the "mtu" parameter to include
147 * overhead from IP and TCP/UDP encapsulation */
148 bool mssfix_fixed; /* use the mssfix value without any encapsulation adjustments */
149
150 int explicit_exit_notification; /* Explicitly tell peer when we are exiting via OCC_EXIT or
151 [RESTART] message */
152
153#define CE_DISABLED (1u << 0)
154#define CE_MAN_QUERY_PROXY (1u << 1)
155#define CE_MAN_QUERY_REMOTE_UNDEF 0
156#define CE_MAN_QUERY_REMOTE_QUERY 1
157#define CE_MAN_QUERY_REMOTE_ACCEPT 2
158#define CE_MAN_QUERY_REMOTE_MOD 3
159#define CE_MAN_QUERY_REMOTE_SKIP 4
160#define CE_MAN_QUERY_REMOTE_MASK (0x07u)
161#define CE_MAN_QUERY_REMOTE_SHIFT (2)
162 unsigned int flags;
163
164 /* Shared secret used for TLS control channel authentication */
165 const char *tls_auth_file;
168
169 /* Shared secret used for TLS control channel authenticated encryption */
170 const char *tls_crypt_file;
172
173 /* Client-specific secret or server key used for TLS control channel
174 * authenticated encryption v2 */
175 const char *tls_crypt_v2_file;
177
178 /* Allow only client that support resending the wrapped client key */
180};
181
183{
184 const char *remote;
185 const char *remote_port;
186 int proto;
188};
189
190#define CONNECTION_LIST_SIZE 64
191
193{
195 int len;
197};
198
206
208{
210 int len;
212};
213
215{
216 /* Names of the providers */
217 const char *names[MAX_PARMS];
218 /* Pointers to the loaded providers to unload them */
220};
221
228
230{
231#define RH_HOST_LEN 80
233#define RH_PORT_LEN 20
235};
236
244
246{
247 /* We support SHA256 and SHA1 fingerpint. In the case of using the
248 * deprecated SHA1, only the first 20 bytes of each list item are used */
251};
252
253/* Command line options */
255{
256 struct gc_arena gc;
258
259 /* first config file */
260 const char *config;
261
262 /* major mode */
263#define MODE_POINT_TO_POINT 0
264#define MODE_SERVER 1
265 int mode;
266
267 /* enable forward compatibility for post-2.1 features */
272
273 /* list of options that should be ignored even if unknown */
275
276 /* persist parms */
279
280 const char *key_pass_file;
286 bool genkey;
288 const char *genkey_filename;
289 const char *genkey_extra_data;
290
291 /* Networking parms */
295
297 /* Do not advance the connection or remote addr list */
299 /* Advance directly to the next remote, skipping remaining addresses of the
300 * current remote */
302 /* Counts the number of unsuccessful connection attempts */
304 /* count of connection entries to advance by when no_advance is not set */
306 /* the server can suggest a backoff time to the client, it
307 * will still be capped by the max timeout between connections
308 * (300s by default) */
310
311#if ENABLE_MANAGEMENT
313#endif
314
316
318
320 const char *ipchange;
321 const char *dev;
322 const char *dev_type;
323 const char *dev_node;
324 const char *lladdr;
325 int topology; /* one of the TOP_x values from proto.h */
326 const char *ifconfig_local;
334
336
338
339#ifdef ENABLE_MEMSTATS
340 char *memstats_fn;
341#endif
342
343 bool mlock;
344
345 int keepalive_ping; /* a proxy for ping/ping-restart */
347
348 int inactivity_timeout; /* --inactive */
350
351 int session_timeout; /* Force-kill session after n seconds */
352
353 int ping_send_timeout; /* Send a TCP/UDP ping to remote every n seconds */
354 int ping_rec_timeout; /* Expect a TCP/UDP ping from remote at least once every n seconds */
355 bool ping_timer_remote; /* Run ping timer only if we have a remote address */
356
357#define PING_UNDEF 0
358#define PING_EXIT 1
359#define PING_RESTART 2
360 int ping_rec_timeout_action; /* What action to take on ping_rec_timeout (exit or restart)? */
361
362 bool persist_tun; /* Don't close/reopen TUN/TAP dev on SIGUSR1 or PING_RESTART */
363 bool persist_local_ip; /* Don't re-resolve local address on SIGUSR1 or PING_RESTART */
364 bool persist_remote_ip; /* Don't re-resolve remote address on SIGUSR1 or PING_RESTART */
365
366#if PASSTOS_CAPABILITY
367 bool passtos;
368#endif
369
370 int resolve_retry_seconds; /* If hostname resolve fails, retry for n seconds */
372 const char *ip_remote_hint;
373
375 /* DCO is disabled and should not be used as backend driver for the
376 * tun/tap device */
378
379 /* Misc parms */
380 const char *username;
381 const char *groupname;
382 const char *chroot_dir;
383 const char *cd_dir;
384#ifdef ENABLE_SELINUX
385 char *selinux_context;
386#endif
387 const char *writepid;
388 const char *up_script;
389 const char *down_script;
394 bool daemon;
395
397
398 bool log;
401 int nice;
403 int mute;
404
405#ifdef ENABLE_DEBUG
406 int gremlin;
407#endif
408
409 const char *status_file;
412
413 /* optimize TUN/TAP/UDP writes */
415
417
418 /* buffer sizes */
421
422 /* mark value */
423 int mark;
424 char *bind_dev;
425
426 /* socket flags */
427 unsigned int sockflags;
428
429 /* route management */
430 const char *route_script;
445 bool allow_pull_fqdn; /* as a client, allow server to push a FQDN for certain parameters */
447
448 /* Enable options consistency check between peers */
449 bool occ;
450
451#ifdef ENABLE_MANAGEMENT
452 const char *management_addr;
453 const char *management_port;
458
461
463#endif
464 /* Mask of MF_ values of manage.h */
465 unsigned int management_flags;
466
467#ifdef ENABLE_PLUGIN
469#endif
470
471 /* the tmp dir is for now only used in the P2P server context */
472 const char *tmp_dir;
474 in_addr_t server_network;
475 in_addr_t server_netmask;
476 bool server_ipv6_defined; /* IPv6 */
477 struct in6_addr server_network_ipv6; /* IPv6 */
478 unsigned int server_netbits_ipv6; /* IPv6 */
479
480#define SF_NOPOOL (1 << 0)
481#define SF_TCP_NODELAY_HELPER (1 << 1)
482#define SF_NO_PUSH_ROUTE_GATEWAY (1 << 2)
483 unsigned int server_flags;
484
486
492
500
502 struct in6_addr ifconfig_ipv6_pool_base; /* IPv6 */
504
511 const char *client_config_dir;
514 const char *override_username;
518 struct iroute_ipv6 *iroutes_ipv6; /* IPv6 */
528 struct in6_addr push_ifconfig_ipv6_local; /* IPv6 */
530 struct in6_addr push_ifconfig_ipv6_remote; /* IPv6 */
534
537
540
545
554
555#if PORT_SHARE
556 char *port_share_host;
557 char *port_share_port;
558 const char *port_share_journal_dir;
559#endif
560
561 bool client;
562 bool pull; /* client pull of config options from server */
568
570
571#ifdef ENABLE_MANAGEMENT
573#endif
574 /* Cipher parms */
579 const char *ciphername;
583 const char *ncp_ciphers_conf;
584 const char *ncp_ciphers;
585 const char *authname;
586 const char *engine;
591 const char *packet_id_file;
593#ifdef ENABLE_PREDICTION_RESISTANCE
594 bool use_prediction_resistance;
595#endif
596
597 /* TLS (control channel) parms */
600 const char *ca_file;
602 const char *ca_path;
603 const char *dh_file;
605 const char *cert_file;
607 const char *extra_certs_file;
609 const char *priv_key_file;
611 const char *pkcs12_file;
613 const char *cipher_list;
614 const char *cipher_list_tls13;
615 const char *tls_groups;
616 const char *tls_cert_profile;
617 const char *ecdh_curve;
618 const char *tls_verify;
621 const char *verify_x509_name;
622 const char *crl_file;
624
625 int ns_cert_type; /* set to 0, NS_CERT_CHECK_SERVER, or NS_CERT_CHECK_CLIENT */
627 const char *remote_cert_eku;
632 unsigned int ssl_flags; /* set to SSLF_x flags from ssl.h */
633
634#ifdef ENABLE_PKCS11
635 const char *pkcs11_providers[MAX_PARMS];
636 unsigned pkcs11_private_mode[MAX_PARMS];
637 bool pkcs11_protected_authentication[MAX_PARMS];
638 bool pkcs11_cert_private[MAX_PARMS];
639 int pkcs11_pin_cache_period;
640 const char *pkcs11_id;
642#endif
643
644#ifdef ENABLE_CRYPTOAPI
645 const char *cryptoapi_cert;
646#endif
647 /* Per-packet timeout on control channel */
649
650 /* Data channel key renegotiation parameters */
655
656 /* Data channel key handshake must finalize
657 * within n seconds of handshake initiation. */
659
660#ifdef ENABLE_X509ALTUSERNAME
661 /* Field list used to be the username in X509 cert. */
662 char *x509_username_field[MAX_PARMS];
663#endif
664
665 /* Old key allowed to live n seconds after new key goes active */
667
668 /* Shared secret used for TLS control channel authentication */
669 const char *tls_auth_file;
671
672 /* Shared secret used for TLS control channel authenticated encryption */
673 const char *tls_crypt_file;
675
676 /* Client-specific secret or server key used for TLS control channel
677 * authenticated encryption v2 */
678 const char *tls_crypt_v2_file;
680
682
684
685 /* Allow only one session */
687
689
691
692 const struct x509_track *x509_track;
693
694 /* special state parms */
696
697#ifdef _WIN32
699 const char *exit_event_name;
705#endif
706
708 uint32_t peer_id;
709
710 /* Keying Material Exporters [RFC 5705] */
713 /* force using TLS key material export for data channel key generation */
715
718 uint16_t vlan_pvid;
719
721
722 /* Useful when packets sent by openvpn itself are not subject
723 * to the routing tables that would move packets into the tunnel. */
725
726 /* data channel crypto flags set by push/pull. Reuses the CO_* crypto_flags */
728};
729
730#define streq(x, y) (!strcmp((x), (y)))
731
732/*
733 * Option classes.
734 */
735#define OPT_P_GENERAL (1u << 0)
736#define OPT_P_UP (1u << 1)
737#define OPT_P_ROUTE (1u << 2)
738#define OPT_P_DHCPDNS (1u << 3) /* includes ip windows options like */
739#define OPT_P_SCRIPT (1u << 4)
740#define OPT_P_SETENV (1u << 5)
741#define OPT_P_SHAPER (1u << 6)
742#define OPT_P_TIMER (1u << 7)
743#define OPT_P_PERSIST (1u << 8)
744#define OPT_P_PERSIST_IP (1u << 9)
745#define OPT_P_COMP (1u << 10) /* TODO */
746#define OPT_P_MESSAGES (1u << 11)
747#define OPT_P_NCP (1u << 12)
748#define OPT_P_TLS_PARMS (1u << 13) /* TODO */
749#define OPT_P_MTU (1u << 14) /* TODO */
750#define OPT_P_NICE (1u << 15)
751#define OPT_P_PUSH (1u << 16)
752#define OPT_P_INSTANCE (1u << 17)
753#define OPT_P_CONFIG (1u << 18)
754#define OPT_P_EXPLICIT_NOTIFY (1u << 19)
755#define OPT_P_ECHO (1u << 20)
756#define OPT_P_INHERIT (1u << 21)
757#define OPT_P_ROUTE_EXTRAS (1u << 22)
758#define OPT_P_PULL_MODE (1u << 23)
759#define OPT_P_PLUGIN (1u << 24)
760#define OPT_P_SOCKBUF (1u << 25)
761#define OPT_P_SOCKFLAGS (1u << 26)
762#define OPT_P_CONNECTION (1u << 27)
763#define OPT_P_PEER_ID (1u << 28)
764#define OPT_P_INLINE (1u << 29)
765#define OPT_P_PUSH_MTU (1u << 30)
766#define OPT_P_ROUTE_TABLE (1u << 31)
767
768#define OPT_P_DEFAULT (~(OPT_P_INSTANCE | OPT_P_PULL_MODE))
769
770#define PULL_DEFINED(opt) ((opt)->pull)
771
772#ifdef _WIN32
773#define ROUTE_OPTION_FLAGS(o) ((o)->route_method & ROUTE_METHOD_MASK)
774#else
775#define ROUTE_OPTION_FLAGS(o) (0)
776#endif
777
778#define SHAPER_DEFINED(opt) ((opt)->shaper)
779
780#ifdef ENABLE_PLUGIN
781#define PLUGIN_OPTION_LIST(opt) ((opt)->plugin_list)
782#else
783#define PLUGIN_OPTION_LIST(opt) (NULL)
784#endif
785
786#ifdef ENABLE_MANAGEMENT
787#define MAN_CLIENT_AUTH_ENABLED(opt) ((opt)->management_flags & MF_CLIENT_AUTH)
788#else
789#define MAN_CLIENT_AUTH_ENABLED(opt) (false)
790#endif
791
792/*
793 * some PUSH_UPDATE options
794 */
795#define OPT_P_U_ROUTE (1 << 0)
796#define OPT_P_U_ROUTE6 (1 << 1)
797#define OPT_P_U_DNS (1 << 2)
798#define OPT_P_U_DHCP (1 << 3)
799#define OPT_P_U_REDIR_GATEWAY (1 << 4)
800
802{
803#define PUF_TYPE_UNDEF 0
804#define PUF_TYPE_ACCEPT 1
805#define PUF_TYPE_IGNORE 2
806#define PUF_TYPE_REJECT 3
807 int type;
808 int size;
809 char *pattern;
811};
812
814{
817};
818
819void add_option(struct options *options, char *p[], bool is_inline, const char *file,
820 int line, const int level, const msglvl_t msglevel,
821 const unsigned int permission_mask, unsigned int *option_types_found,
822 struct env_set *es);
823
844void remove_option(struct context *c, struct options *options, char *p[], bool is_inline,
845 const char *file, int line, const msglvl_t msglevel,
846 const unsigned int permission_mask, unsigned int *option_types_found,
847 struct env_set *es);
848
872void update_option(struct context *c, struct options *options, char *p[], bool is_inline,
873 const char *file, int line, const int level, const msglvl_t msglevel,
874 const unsigned int permission_mask, unsigned int *option_types_found,
875 struct env_set *es, unsigned int *update_options_found);
876
877void parse_argv(struct options *options, const int argc, char *argv[], const msglvl_t msglevel,
878 const unsigned int permission_mask, unsigned int *option_types_found,
879 struct env_set *es);
880
881void read_config_file(struct options *options, const char *file, int level, const char *top_file,
882 const int top_line, const msglvl_t msglevel,
883 const unsigned int permission_mask, unsigned int *option_types_found,
884 struct env_set *es);
885
886void read_config_string(const char *prefix, struct options *options, const char *config,
887 const msglvl_t msglevel, const unsigned int permission_mask,
888 unsigned int *option_types_found, struct env_set *es);
889
890void notnull(const char *arg, const char *description);
891
892void usage_small(void);
893
894void usage(void);
895
896void show_library_versions(const unsigned int flags);
897
898#ifdef _WIN32
899void show_windows_version(const unsigned int flags);
900
901#endif
902
903void show_dco_version(const unsigned int flags);
904
905void init_options(struct options *o, const bool init_gc);
906
907void uninit_options(struct options *o);
908
909void setenv_settings(struct env_set *es, const struct options *o);
910
911void show_settings(const struct options *o);
912
913bool string_defined_equal(const char *s1, const char *s2);
914
915const char *options_string_version(const char *s, struct gc_arena *gc);
916
917char *options_string(const struct options *o, const struct frame *frame, struct tuntap *tt,
918 openvpn_net_ctx_t *ctx, bool remote, struct gc_arena *gc);
919
920bool options_cmp_equal_safe(char *actual, const char *expected, size_t actual_n);
921
922void options_warning_safe(char *actual, const char *expected, size_t actual_n);
923
924bool options_cmp_equal(char *actual, const char *expected);
925
926void options_warning(char *actual, const char *expected);
927
938char *options_string_extract_option(const char *options_string, const char *opt_name,
939 struct gc_arena *gc);
940
941
942void options_postprocess(struct options *options, struct env_set *es);
943
944bool options_postprocess_pull(struct options *o, struct env_set *es);
945
946void pre_connect_restore(struct options *o, struct gc_arena *gc);
947
948bool apply_push_options(struct context *c, struct options *options, struct buffer *buf,
949 unsigned int permission_mask, unsigned int *option_types_found,
950 struct env_set *es, bool is_update);
951
952void options_detach(struct options *o);
953
954void options_server_import(struct options *o, const char *filename, msglvl_t msglevel,
955 unsigned int permission_mask, unsigned int *option_types_found,
956 struct env_set *es);
957
958void pre_pull_default(struct options *o);
959
960void rol_check_alloc(struct options *options);
961
962int parse_line(const char *line, char *p[], const int n, const char *file, const int line_num,
963 msglvl_t msglevel, struct gc_arena *gc);
964
965/*
966 * parse/print topology coding
967 */
968
969int parse_topology(const char *str, const msglvl_t msglevel);
970
971const char *print_topology(const int topology);
972
973/*
974 * Manage auth-retry variable
975 */
976
977#define AR_NONE 0
978#define AR_INTERACT 1
979#define AR_NOINTERACT 2
980
981int auth_retry_get(void);
982
983bool auth_retry_set(const msglvl_t msglevel, const char *option);
984
985const char *auth_retry_print(void);
986
987void options_string_import(struct options *options, const char *config, const msglvl_t msglevel,
988 const unsigned int permission_mask, unsigned int *option_types_found,
989 struct env_set *es);
990
991bool key_is_external(const struct options *options);
992
993bool has_udp_in_local_list(const struct options *options);
994
998static inline bool
999dco_enabled(const struct options *o)
1000{
1001#ifdef ENABLE_DCO
1002 return !o->disable_dco;
1003#else
1004 return false;
1005#endif /* ENABLE_DCO */
1006}
1007
1008#endif /* ifndef OPTIONS_H */
Data Channel Cryptography SSL library-specific backend interface.
hash_algo_type
Types referencing specific message digest hashing algorithms.
#define SHA256_DIGEST_LENGTH
void provider_t
void * openvpn_net_ctx_t
Definition networking.h:38
unsigned int msglvl_t
Definition error.h:77
bool options_cmp_equal(char *actual, const char *expected)
Definition options.c:4575
void parse_argv(struct options *options, const int argc, char *argv[], const msglvl_t msglevel, const unsigned int permission_mask, unsigned int *option_types_found, struct env_set *es)
void read_config_file(struct options *options, const char *file, int level, const char *top_file, const int top_line, const msglvl_t msglevel, const unsigned int permission_mask, unsigned int *option_types_found, struct env_set *es)
bool options_postprocess_pull(struct options *o, struct env_set *es)
Definition options.c:4317
void uninit_options(struct options *o)
Definition options.c:935
int parse_topology(const char *str, const msglvl_t msglevel)
Definition options.c:4765
void show_windows_version(const unsigned int flags)
Definition options.c:4900
bool key_is_external(const struct options *options)
Definition options.c:5585
void show_dco_version(const unsigned int flags)
Definition options.c:4909
void rol_check_alloc(struct options *options)
Definition options.c:1574
void show_settings(const struct options *o)
Definition options.c:1698
static bool dco_enabled(const struct options *o)
Returns whether the current configuration has dco enabled.
Definition options.h:999
void remove_option(struct context *c, struct options *options, char *p[], bool is_inline, const char *file, int line, const msglvl_t msglevel, const unsigned int permission_mask, unsigned int *option_types_found, struct env_set *es)
Resets options found in the PUSH_UPDATE message that are preceded by the - flag.
Definition options.c:5095
int parse_line(const char *line, char *p[], const int n, const char *file, const int line_num, msglvl_t msglevel, struct gc_arena *gc)
bool options_cmp_equal_safe(char *actual, const char *expected, size_t actual_n)
Definition options.c:4695
bool string_defined_equal(const char *s1, const char *s2)
Definition options.c:4964
void options_postprocess(struct options *options, struct env_set *es)
Definition options.c:4303
void options_string_import(struct options *options, const char *config, const msglvl_t msglevel, const unsigned int permission_mask, unsigned int *option_types_found, struct env_set *es)
void usage_small(void)
Definition options.c:4892
const char * auth_retry_print(void)
Definition options.c:4844
void options_warning_safe(char *actual, const char *expected, size_t actual_n)
Definition options.c:4718
void show_library_versions(const unsigned int flags)
Definition options.c:4919
void setenv_settings(struct env_set *es, const struct options *o)
Definition options.c:1014
void options_server_import(struct options *o, const char *filename, msglvl_t msglevel, unsigned int permission_mask, unsigned int *option_types_found, struct env_set *es)
#define RH_PORT_LEN
Definition options.h:233
genkey_type
Definition options.h:238
@ GENKEY_AUTH_TOKEN
Definition options.h:242
@ GENKEY_SECRET
Definition options.h:239
@ GENKEY_TLS_CRYPTV2_SERVER
Definition options.h:241
@ GENKEY_TLS_CRYPTV2_CLIENT
Definition options.h:240
bool apply_push_options(struct context *c, struct options *options, struct buffer *buf, unsigned int permission_mask, unsigned int *option_types_found, struct env_set *es, bool is_update)
void add_option(struct options *options, char *p[], bool is_inline, const char *file, int line, const int level, const msglvl_t msglevel, const unsigned int permission_mask, unsigned int *option_types_found, struct env_set *es)
Definition options.c:5600
#define RH_HOST_LEN
Definition options.h:231
void options_detach(struct options *o)
Definition options.c:1565
void pre_connect_restore(struct options *o, struct gc_arena *gc)
Definition options.c:3175
const char * print_topology(const int topology)
Definition options.c:4787
char * options_string_extract_option(const char *options_string, const char *opt_name, struct gc_arena *gc)
Given an OpenVPN options string, extract the value of an option.
Definition options.c:4732
#define MAX_PARMS
Definition options.h:51
void pre_pull_default(struct options *o)
void init_options(struct options *o, const bool init_gc)
Definition options.c:807
void options_warning(char *actual, const char *expected)
Definition options.c:4581
const char * options_string_version(const char *s, struct gc_arena *gc)
Definition options.c:4724
const char title_string[]
Definition options.c:71
void update_option(struct context *c, struct options *options, char *p[], bool is_inline, const char *file, int line, const int level, const msglvl_t msglevel, const unsigned int permission_mask, unsigned int *option_types_found, struct env_set *es, unsigned int *update_options_found)
Processes an option to update.
Definition options.c:5415
bool auth_retry_set(const msglvl_t msglevel, const char *option)
Definition options.c:4821
int auth_retry_get(void)
Definition options.c:4815
void notnull(const char *arg, const char *description)
Definition options.c:4955
void usage(void)
Definition options.c:4866
void read_config_string(const char *prefix, struct options *options, const char *config, const msglvl_t msglevel, const unsigned int permission_mask, unsigned int *option_types_found, struct env_set *es)
bool has_udp_in_local_list(const struct options *options)
Definition options.c:9335
char * options_string(const struct options *o, const struct frame *frame, struct tuntap *tt, openvpn_net_ctx_t *ctx, bool remote, struct gc_arena *gc)
Definition options.c:4374
vlan_acceptable_frames
Definition options.h:223
@ VLAN_ONLY_UNTAGGED_OR_PRIORITY
Definition options.h:225
@ VLAN_ALL
Definition options.h:226
@ VLAN_ONLY_TAGGED
Definition options.h:224
Definition argv.h:35
Wrapper structure for dynamically allocated memory.
Definition buffer.h:60
Definition options.h:107
struct local_list * local_list
Definition options.h:108
int tun_mtu_max
Definition options.h:129
int connect_retry_seconds
Definition options.h:119
bool tls_crypt_v2_force_cookie
Definition options.h:179
int link_mtu
Definition options.h:134
bool link_mtu_defined
Definition options.h:135
int tun_mtu_extra
Definition options.h:132
int connect_retry_seconds_max
Definition options.h:120
bool bind_local
Definition options.h:118
int mssfix
Definition options.h:144
const char * tls_crypt_file
Definition options.h:170
const char * tls_crypt_v2_file
Definition options.h:175
bool tun_mtu_extra_defined
Definition options.h:133
const char * remote
Definition options.h:114
int connect_timeout
Definition options.h:121
const char * socks_proxy_port
Definition options.h:124
bool mssfix_default
Definition options.h:145
bool mssfix_encap
Definition options.h:146
int occ_mtu
Definition options.h:128
struct http_proxy_options * http_proxy_options
Definition options.h:122
bool tls_crypt_file_inline
Definition options.h:171
bool tls_auth_file_inline
Definition options.h:166
bool bind_ipv6_only
Definition options.h:117
bool tun_mtu_defined
Definition options.h:131
bool remote_float
Definition options.h:115
int tls_mtu
Definition options.h:136
int explicit_exit_notification
Definition options.h:150
const char * socks_proxy_authfile
Definition options.h:125
const char * remote_port
Definition options.h:113
bool fragment_encap
Definition options.h:142
const char * socks_proxy_server
Definition options.h:123
int fragment
Definition options.h:141
int mtu_discover_type
Definition options.h:139
int proto
Definition options.h:109
sa_family_t af
Definition options.h:110
const char * tls_auth_file
Definition options.h:165
bool local_port_defined
Definition options.h:112
int tun_mtu
Definition options.h:127
bool bind_defined
Definition options.h:116
const char * local_port
Definition options.h:111
int key_direction
Definition options.h:167
bool tls_crypt_v2_file_inline
Definition options.h:176
unsigned int flags
Definition options.h:162
bool mssfix_fixed
Definition options.h:148
struct connection_entry ** array
Definition options.h:204
Contains all state information for one tunnel.
Definition openvpn.h:474
Packet geometry parameters.
Definition mtu.h:103
Garbage collection arena used to keep track of dynamically allocated memory.
Definition buffer.h:116
Definition list.h:53
Definition options.h:100
const char * port
Definition options.h:102
int proto
Definition options.h:103
const char * local
Definition options.h:101
struct local_entry ** array
Definition options.h:196
int capacity
Definition options.h:194
int ping_rec_timeout_action
Definition options.h:89
bool tuntap_options_defined
Definition options.h:64
bool routes_ipv6_defined
Definition options.h:73
struct route_option_list * routes
Definition options.h:71
struct compress_options comp
Definition options.h:92
const char * ciphername
Definition options.h:84
const char * ifconfig_local
Definition options.h:67
const char * route_default_gateway
Definition options.h:76
const char * ifconfig_ipv6_local
Definition options.h:68
const char * authname
Definition options.h:85
struct route_ipv6_option_list * routes_ipv6
Definition options.h:74
bool client_nat_defined
Definition options.h:79
struct client_nat_option_list * client_nat
Definition options.h:80
const char * route_ipv6_default_gateway
Definition options.h:77
int resolve_retry_seconds
Definition options.h:370
int rcvbuf
Definition options.h:419
bool resolve_in_advance
Definition options.h:371
bool route_nopull
Definition options.h:443
const char * genkey_extra_data
Definition options.h:289
struct compress_options comp
Definition options.h:416
struct http_proxy_options * http_proxy_override
Definition options.h:312
int push_ifconfig_ipv6_netbits
Definition options.h:529
int proto_force
Definition options.h:335
bool persist_config
Definition options.h:277
struct connection_list * connection_list
Definition options.h:294
const char * management_port
Definition options.h:453
bool tls_crypt_file_inline
Definition options.h:674
const char * ifconfig_ipv6_remote
Definition options.h:330
int max_routes_per_client
Definition options.h:542
const char * ncp_ciphers_conf
The original ncp_ciphers specified by the user in the configuration.
Definition options.h:583
int status_file_version
Definition options.h:410
int server_backoff_time
Definition options.h:309
enum vlan_acceptable_frames vlan_accept
Definition options.h:717
int auth_token_renewal
Definition options.h:551
in_addr_t push_ifconfig_constraint_network
Definition options.h:524
const char * tmp_dir
Definition options.h:472
bool push_peer_info
Definition options.h:688
bool daemon
Definition options.h:394
struct options_pre_connect * pre_connect
Definition options.h:567
int route_default_metric
Definition options.h:435
int renegotiate_seconds_min
Definition options.h:654
const char * auth_token_secret_file
Definition options.h:552
unsigned int imported_protocol_flags
Definition options.h:727
const char * tls_export_peer_cert_dir
Definition options.h:619
bool crl_file_inline
Definition options.h:623
const char * cryptoapi_cert
Definition options.h:645
const char * down_script
Definition options.h:389
unsigned int backwards_compatible
What version we should try to be compatible with as major * 10000 + minor * 100 + patch,...
Definition options.h:271
hash_algo_type verify_hash_algo
Definition options.h:629
int scheduled_exit_interval
Definition options.h:569
int stale_routes_ageing_time
Definition options.h:544
bool pkcs12_file_inline
Definition options.h:612
int replay_time
Definition options.h:590
unsigned int push_option_types_found
Definition options.h:564
int management_state_buffer_size
Definition options.h:457
const char * ca_file
Definition options.h:600
const char * tls_auth_file
Definition options.h:669
struct provider_list providers
Definition options.h:587
bool duplicate_cn
Definition options.h:533
struct in6_addr server_network_ipv6
Definition options.h:477
int shaper
Definition options.h:333
int management_echo_buffer_size
Definition options.h:456
in_addr_t server_network
Definition options.h:474
uint32_t real_hash_size
Definition options.h:505
bool show_net_up
Definition options.h:701
bool verify_hash_no_ca
Definition options.h:631
bool allow_pull_fqdn
Definition options.h:445
bool use_peer_id
Definition options.h:707
unsigned remote_cert_ku[MAX_PARMS]
Definition options.h:626
bool server_bridge_defined
Definition options.h:487
const char * keying_material_exporter_label
Definition options.h:711
const char * status_file
Definition options.h:409
unsigned int ssl_flags
Definition options.h:632
bool route_noexec
Definition options.h:436
bool ifconfig_nowarn
Definition options.h:332
const char * remote_cert_eku
Definition options.h:627
in_addr_t ifconfig_pool_netmask
Definition options.h:497
in_addr_t server_netmask
Definition options.h:475
int tls_timeout
Definition options.h:648
bool test_crypto
Definition options.h:592
bool up_delay
Definition options.h:392
bool server_bridge_proxy_dhcp
Definition options.h:485
bool allow_recursive_routing
Definition options.h:724
const char * authname
Definition options.h:585
const char * exit_event_name
Definition options.h:699
const char * ifconfig_ipv6_local
Definition options.h:328
int cf_max
Definition options.h:535
bool dh_file_inline
Definition options.h:604
int replay_window
Definition options.h:589
bool disable
Definition options.h:513
int mute
Definition options.h:403
bool auth_user_pass_verify_script_via_file
Definition options.h:547
const char * dev_type
Definition options.h:322
int persist_mode
Definition options.h:278
int ifconfig_pool_persist_refresh_freq
Definition options.h:499
bool show_digests
Definition options.h:282
const char * up_script
Definition options.h:388
int ce_advance_count
Definition options.h:305
bool single_session
Definition options.h:686
bool push_ifconfig_defined
Definition options.h:519
bool ifconfig_pool_defined
Definition options.h:494
struct remote_host_store * rh_store
Definition options.h:315
int verify_hash_depth
Definition options.h:630
bool route_delay_defined
Definition options.h:439
const char * packet_id_file
Definition options.h:591
const char * tls_crypt_v2_file
Definition options.h:678
int management_log_history_cache
Definition options.h:455
in_addr_t server_bridge_netmask
Definition options.h:489
const char * ip_remote_hint
Definition options.h:372
bool vlan_tagging
Definition options.h:716
uint32_t peer_id
Definition options.h:708
struct route_option_list * routes
Definition options.h:440
in_addr_t ifconfig_pool_end
Definition options.h:496
int keepalive_timeout
Definition options.h:346
const char * writepid
Definition options.h:387
int64_t inactivity_minimum_bytes
Definition options.h:349
bool ifconfig_ipv6_pool_defined
Definition options.h:501
bool fast_io
Definition options.h:414
unsigned int server_flags
Definition options.h:483
bool block_outside_dns
Definition options.h:703
bool push_ifconfig_ipv6_blocked
Definition options.h:531
bool tls_exit
Definition options.h:690
const char * pkcs12_file
Definition options.h:611
const char * client_disconnect_script
Definition options.h:508
bool show_engines
Definition options.h:283
struct remote_list * remote_list
Definition options.h:296
HANDLE msg_channel
Definition options.h:698
const char * key_pass_file
Definition options.h:280
bool mute_replay_warnings
Definition options.h:588
const char * tls_crypt_file
Definition options.h:673
int inactivity_timeout
Definition options.h:348
int n_bcast_buf
Definition options.h:515
unsigned int unsuccessful_attempts
Definition options.h:303
int handshake_window
Definition options.h:658
bool server_defined
Definition options.h:473
const char * ifconfig_local
Definition options.h:326
struct connection_entry ce
Definition options.h:293
struct iroute_ipv6 * iroutes_ipv6
Definition options.h:518
bool user_script_used
Definition options.h:390
const char * tls_groups
Definition options.h:615
bool show_tls_ciphers
Definition options.h:284
int route_method
Definition options.h:702
struct verify_hash_list * verify_hash
Definition options.h:628
const char * tls_cert_profile
Definition options.h:616
int64_t renegotiate_packets
Definition options.h:652
unsigned int management_flags
Definition options.h:465
int push_continuation
Definition options.h:563
const char * route_default_gateway
Definition options.h:432
in_addr_t push_ifconfig_local_alias
Definition options.h:522
bool exit_event_initial_state
Definition options.h:700
struct static_challenge_info sc_info
Definition options.h:572
bool auth_token_call_auth
Definition options.h:549
const char * ipchange
Definition options.h:320
int topology
Definition options.h:325
bool disable_dco
Definition options.h:377
const char * ncp_ciphers
Definition options.h:584
bool genkey
Definition options.h:286
uint32_t virtual_hash_size
Definition options.h:506
const char * learn_address_script
Definition options.h:509
const char * ciphername
Definition options.h:579
const char * auth_user_pass_file
Definition options.h:565
bool forward_compatible
Definition options.h:268
const char * username
Definition options.h:380
int cf_initial_max
Definition options.h:538
int stale_routes_check_interval
Definition options.h:543
struct plugin_option_list * plugin_list
Definition options.h:468
int auth_token_lifetime
Definition options.h:550
uint16_t vlan_pvid
Definition options.h:718
int ns_cert_type
Definition options.h:625
const char * tls_crypt_v2_verify_script
Definition options.h:683
int mode
Definition options.h:265
bool tls_server
Definition options.h:598
const char * auth_user_pass_verify_script
Definition options.h:546
int connect_retry_max
Definition options.h:292
char * bind_dev
Definition options.h:424
const char * extra_certs_file
Definition options.h:607
bool client
Definition options.h:561
bool pull
Definition options.h:562
int ifconfig_ipv6_pool_netbits
Definition options.h:503
in_addr_t push_ifconfig_constraint_netmask
Definition options.h:525
bool show_curves
Definition options.h:285
const char * tls_crypt_v2_metadata
Definition options.h:681
const char * route_ipv6_default_gateway
Definition options.h:433
bool tls_client
Definition options.h:599
bool ping_timer_remote
Definition options.h:355
bool auth_token_generate
Definition options.h:548
bool priv_key_file_inline
Definition options.h:610
const char * tls_verify
Definition options.h:618
const char * crl_file
Definition options.h:622
int ping_rec_timeout_action
Definition options.h:360
bool auth_user_pass_file_inline
Definition options.h:566
bool show_ciphers
Definition options.h:281
bool enable_ncp_fallback
If defined fall back to ciphername if NCP fails.
Definition options.h:580
const char * route_predown_script
Definition options.h:431
const char * dh_file
Definition options.h:603
int route_delay_window
Definition options.h:438
in_addr_t push_ifconfig_local
Definition options.h:520
bool mlock
Definition options.h:343
const char ** ignore_unknown_option
Definition options.h:274
int sndbuf
Definition options.h:420
int foreign_option_index
Definition options.h:695
struct gc_arena gc
Definition options.h:256
bool gc_owned
Definition options.h:257
bool down_pre
Definition options.h:391
bool persist_tun
Definition options.h:362
int route_default_table_id
Definition options.h:434
bool ca_file_inline
Definition options.h:601
bool auth_token_secret_file_inline
Definition options.h:553
bool block_ipv6
Definition options.h:442
const char * config
Definition options.h:260
bool extra_certs_file_inline
Definition options.h:608
bool push_ifconfig_constraint_defined
Definition options.h:523
int mark
Definition options.h:423
int cf_initial_per
Definition options.h:539
int keying_material_exporter_length
Definition options.h:712
bool suppress_timestamps
Definition options.h:399
bool force_key_material_export
Definition options.h:714
bool mtu_test
Definition options.h:337
struct iroute * iroutes
Definition options.h:517
int verify_x509_type
Definition options.h:620
const char * cipher_list_tls13
Definition options.h:614
const char * ecdh_curve
Definition options.h:617
int status_file_update_freq
Definition options.h:411
const char * management_client_user
Definition options.h:459
const char * cipher_list
Definition options.h:613
bool ccd_exclusive
Definition options.h:512
bool allow_deprecated_insecure_static_crypto
Definition options.h:577
struct pull_filter_list * pull_filter_list
Definition options.h:720
const char * management_certificate
Definition options.h:462
const char * genkey_filename
Definition options.h:288
const struct x509_track * x509_track
Definition options.h:692
const char * chroot_dir
Definition options.h:382
bool log
Definition options.h:398
bool shared_secret_file_inline
Definition options.h:576
struct in6_addr push_ifconfig_ipv6_remote
Definition options.h:530
const char * ca_path
Definition options.h:602
int renegotiate_seconds
Definition options.h:653
int ping_rec_timeout
Definition options.h:354
unsigned int sockflags
Definition options.h:427
const char * engine
Definition options.h:586
const char * management_addr
Definition options.h:452
const char * client_connect_script
Definition options.h:507
const char * verify_x509_name
Definition options.h:621
int ping_send_timeout
Definition options.h:353
bool route_gateway_via_dhcp
Definition options.h:444
bool remote_random
Definition options.h:319
bool push_ifconfig_ipv6_defined
Definition options.h:527
int tcp_queue_limit
Definition options.h:516
int route_delay
Definition options.h:437
const char * dev_node
Definition options.h:323
const char * override_username
Definition options.h:514
const char * client_crresponse_script
Definition options.h:510
struct route_ipv6_option_list * routes_ipv6
Definition options.h:441
bool machine_readable_output
Definition options.h:400
int key_direction
Definition options.h:578
bool server_ipv6_defined
Definition options.h:476
const char * priv_key_file
Definition options.h:609
bool persist_remote_ip
Definition options.h:364
bool up_restart
Definition options.h:393
int keepalive_ping
Definition options.h:345
bool no_advance
Definition options.h:298
bool tls_auth_file_inline
Definition options.h:670
bool tls_crypt_v2_file_inline
Definition options.h:679
const char * groupname
Definition options.h:381
in_addr_t server_bridge_pool_start
Definition options.h:490
const char * cd_dir
Definition options.h:383
struct client_nat_option_list * client_nat
Definition options.h:446
struct in6_addr push_ifconfig_ipv6_local
Definition options.h:528
int nice
Definition options.h:401
int max_clients
Definition options.h:541
int transition_window
Definition options.h:666
const char * ifconfig_remote_netmask
Definition options.h:327
const char * lladdr
Definition options.h:324
int verbosity
Definition options.h:402
int session_timeout
Definition options.h:351
const char * cert_file
Definition options.h:605
bool enable_c2c
Definition options.h:532
in_addr_t server_bridge_pool_end
Definition options.h:491
bool push_ifconfig_ipv4_blocked
Definition options.h:526
int cf_per
Definition options.h:536
enum tun_driver_type windows_driver
Definition options.h:704
bool cert_file_inline
Definition options.h:606
int remap_sigusr1
Definition options.h:396
int64_t renegotiate_bytes
Definition options.h:651
const char * route_script
Definition options.h:430
in_addr_t ifconfig_pool_start
Definition options.h:495
const char * management_user_pass
Definition options.h:454
unsigned int server_netbits_ipv6
Definition options.h:478
in_addr_t push_ifconfig_remote_netmask
Definition options.h:521
bool occ
Definition options.h:449
in_addr_t server_bridge_ip
Definition options.h:488
const char * shared_secret_file
Definition options.h:575
bool ifconfig_noexec
Definition options.h:331
const char * dev
Definition options.h:321
const char * management_client_group
Definition options.h:460
struct in6_addr ifconfig_ipv6_pool_base
Definition options.h:502
const char * client_config_dir
Definition options.h:511
enum genkey_type genkey_type
Definition options.h:287
bool advance_next_remote
Definition options.h:301
const char * ifconfig_pool_persist_filename
Definition options.h:498
int ifconfig_ipv6_netbits
Definition options.h:329
bool persist_local_ip
Definition options.h:363
provider_t * providers[MAX_PARMS]
Definition options.h:219
const char * names[MAX_PARMS]
Definition options.h:217
struct pull_filter * tail
Definition options.h:816
struct pull_filter * head
Definition options.h:815
struct pull_filter * next
Definition options.h:810
char * pattern
Definition options.h:809
Definition options.h:183
int proto
Definition options.h:186
const char * remote
Definition options.h:184
const char * remote_port
Definition options.h:185
sa_family_t af
Definition options.h:187
char port[RH_PORT_LEN]
Definition options.h:234
char host[RH_HOST_LEN]
Definition options.h:232
struct remote_entry ** array
Definition options.h:211
int capacity
Definition options.h:209
Definition tun.h:183
struct verify_hash_list * next
Definition options.h:250
unsigned short sa_family_t
Definition syshead.h:396
struct env_set * es
static bool pkcs11_id_management
struct gc_arena gc
Definition test_ssl.c:131
tun_driver_type
Definition tun.h:44