OpenVPN
|
#include "syshead.h"
#include "forward.h"
#include "multi.h"
#include "push.h"
#include "run_command.h"
#include "otime.h"
#include "pf.h"
#include "gremlin.h"
#include "mstats.h"
#include "ssl_verify.h"
#include <inttypes.h>
#include "memdbg.h"
#include "crypto_backend.h"
Go to the source code of this file.
Functions | |
static void | update_mstat_n_clients (const int n_clients) |
static bool | learn_address_script (const struct multi_context *m, const struct multi_instance *mi, const char *op, const struct mroute_addr *addr) |
void | multi_ifconfig_pool_persist (struct multi_context *m, bool force) |
static void | multi_reap_range (const struct multi_context *m, int start_bucket, int end_bucket) |
static void | multi_reap_all (const struct multi_context *m) |
static struct multi_reap * | multi_reap_new (int buckets_per_pass) |
void | multi_reap_process_dowork (const struct multi_context *m) |
static void | multi_reap_free (struct multi_reap *mr) |
static int | reap_buckets_per_pass (int n_buckets) |
void | multi_init (struct multi_context *m, struct context *t, bool tcp_mode, int thread_mode) |
const char * | multi_instance_string (const struct multi_instance *mi, bool null, struct gc_arena *gc) |
static void | generate_prefix (struct multi_instance *mi) |
void | ungenerate_prefix (struct multi_instance *mi) |
static const char * | mi_prefix (const struct multi_instance *mi) |
static void | multi_del_iroutes (struct multi_context *m, struct multi_instance *mi) |
static void | setenv_stats (struct context *c) |
static void | multi_client_disconnect_setenv (struct multi_context *m, struct multi_instance *mi) |
static void | multi_client_disconnect_script (struct multi_context *m, struct multi_instance *mi) |
void | multi_close_instance (struct multi_context *m, struct multi_instance *mi, bool shutdown) |
void | multi_uninit (struct multi_context *m) |
struct multi_instance * | multi_create_instance (struct multi_context *m, const struct mroute_addr *real) |
void | multi_print_status (struct multi_context *m, struct status_output *so, const int version) |
static struct multi_instance * | multi_learn_addr (struct multi_context *m, struct multi_instance *mi, const struct mroute_addr *addr, const unsigned int flags) |
static struct multi_instance * | multi_get_instance_by_virtual_addr (struct multi_context *m, const struct mroute_addr *addr, bool cidr_routing) |
static struct multi_instance * | multi_learn_in_addr_t (struct multi_context *m, struct multi_instance *mi, in_addr_t a, int netbits, bool primary) |
static struct multi_instance * | multi_learn_in6_addr (struct multi_context *m, struct multi_instance *mi, struct in6_addr a6, int netbits, bool primary) |
static void | multi_add_iroutes (struct multi_context *m, struct multi_instance *mi) |
static void | multi_delete_dup (struct multi_context *m, struct multi_instance *new_mi) |
static void | check_stale_routes (struct multi_context *m) |
static bool | ifconfig_push_constraint_satisfied (const struct context *c) |
static void | multi_select_virtual_addr (struct multi_context *m, struct multi_instance *mi) |
static void | multi_set_virtual_addr_env (struct multi_context *m, struct multi_instance *mi) |
static void | multi_client_connect_post (struct multi_context *m, struct multi_instance *mi, const char *dc_file, unsigned int option_permissions_mask, unsigned int *option_types_found) |
static void | multi_client_connect_post_plugin (struct multi_context *m, struct multi_instance *mi, const struct plugin_return *pr, unsigned int option_permissions_mask, unsigned int *option_types_found) |
static void | multi_client_connect_setenv (struct multi_context *m, struct multi_instance *mi) |
static void | multi_connection_established (struct multi_context *m, struct multi_instance *mi) |
void | multi_add_mbuf (struct multi_context *m, struct multi_instance *mi, struct mbuf_buffer *mb) |
static void | multi_unicast (struct multi_context *m, const struct buffer *buf, struct multi_instance *mi) |
static void | multi_bcast (struct multi_context *m, const struct buffer *buf, const struct multi_instance *sender_instance, const struct mroute_addr *sender_addr) |
static unsigned int | compute_wakeup_sigma (const struct timeval *delta) |
static void | multi_schedule_context_wakeup (struct multi_context *m, struct multi_instance *mi) |
bool | multi_process_post (struct multi_context *m, struct multi_instance *mi, const unsigned int flags) |
Perform postprocessing of a VPN tunnel instance. More... | |
void | multi_process_float (struct multi_context *m, struct multi_instance *mi) |
Handles peer floating. More... | |
bool | multi_process_incoming_link (struct multi_context *m, struct multi_instance *instance, const unsigned int mpp_flags) |
Demultiplex and process a packet received over the external network interface. More... | |
bool | multi_process_incoming_tun (struct multi_context *m, const unsigned int mpp_flags) |
Determine the destination VPN tunnel of a packet received over the virtual tun/tap network interface and then process it accordingly. More... | |
struct multi_instance * | multi_get_queue (struct mbuf_set *ms) |
bool | multi_process_timeout (struct multi_context *m, const unsigned int mpp_flags) |
void | multi_process_drop_outgoing_tun (struct multi_context *m, const unsigned int mpp_flags) |
void | route_quota_exceeded (const struct multi_context *m, const struct multi_instance *mi) |
static bool | stale_route_check_trigger (struct multi_context *m) |
void | multi_process_per_second_timers_dowork (struct multi_context *m) |
void | multi_top_init (struct multi_context *m, const struct context *top) |
void | multi_top_free (struct multi_context *m) |
static bool | is_exit_restart (int sig) |
static void | multi_push_restart_schedule_exit (struct multi_context *m, bool next_server) |
bool | multi_process_signal (struct multi_context *m) |
void | multi_close_instance_on_signal (struct multi_context *m, struct multi_instance *mi) |
static void | multi_signal_instance (struct multi_context *m, struct multi_instance *mi, const int sig) |
static void | management_callback_status (void *arg, const int version, struct status_output *so) |
static int | management_callback_n_clients (void *arg) |
static int | management_callback_kill_by_cn (void *arg, const char *del_cn) |
static int | management_callback_kill_by_addr (void *arg, const in_addr_t addr, const int port) |
static void | management_delete_event (void *arg, event_t event) |
void | init_management_callback_multi (struct multi_context *m) |
void | uninit_management_callback_multi (struct multi_context *m) |
void | tunnel_server (struct context *top) |
Main event loop for OpenVPN in server mode. More... | |
|
static |
Definition at line 1399 of file multi.c.
References multi_route::addr, D_MULTI_DEBUG, dmsg, gc_free(), gc_new(), hash_iterator_delete_element(), hash_iterator_free(), hash_iterator_init_range(), hash_iterator_next(), hash_n_buckets(), multi_route::last_reference, learn_address_script(), mroute_addr_print(), multi_route_defined(), multi_route_del(), now, context::options, options::stale_routes_ageing_time, multi_context::top, hash_element::value, and multi_context::vhash.
Referenced by multi_process_per_second_timers_dowork().
|
inlinestatic |
Definition at line 2285 of file multi.c.
Referenced by multi_push_restart_schedule_exit(), and multi_schedule_context_wakeup().
|
static |
Definition at line 491 of file multi.c.
References gc_free(), gc_new(), multi_instance::msg_prefix, multi_instance_string(), set_prefix(), and strncpynt().
Referenced by multi_connection_established(), multi_create_instance(), and multi_process_float().
Definition at line 1429 of file multi.c.
References context::c2, context::options, options::push_ifconfig_constraint_defined, options::push_ifconfig_constraint_netmask, options::push_ifconfig_constraint_network, context_2::push_ifconfig_defined, and context_2::push_ifconfig_local.
Referenced by multi_connection_established().
void init_management_callback_multi | ( | struct multi_context * | m | ) |
Definition at line 3347 of file multi.c.
References management_callback::arg, CLEAR, management_callback::delete_event, management_callback::flags, management_callback::kill_by_addr, management_callback::kill_by_cn, management_callback_kill_by_addr(), management_callback_kill_by_cn(), management_callback_n_clients(), management_callback_status(), management_delete_event(), management_set_callback(), management_show_net_callback(), MCF_SERVER, management_callback::n_clients, management_callback::show_net, and management_callback::status.
Referenced by tunnel_server_tcp(), and tunnel_server_udp_single_threaded().
|
static |
|
static |
Definition at line 96 of file multi.c.
References argv_new(), argv_parse_cmd(), argv_printf(), argv_printf_cat(), argv_reset(), context::c2, multi_instance::context, env_set_create(), context_2::es, gc_free(), gc_new(), options::learn_address_script, M_WARN, mroute_addr_print(), msg, OPENVPN_PLUGIN_FUNC_SUCCESS, OPENVPN_PLUGIN_LEARN_ADDRESS, openvpn_run_script(), context::options, plugin_call(), plugin_defined(), context::plugins, setenv_str(), tls_common_name(), context_2::tls_multi, and multi_context::top.
Referenced by check_stale_routes(), multi_learn_addr(), multi_reap_range(), and show_p2mp_parms().
|
static |
Definition at line 3183 of file multi.c.
References openvpn_sockaddr::addr, CLEAR, multi_instance::halt, hash_iterator_free(), hash_iterator_init(), hash_iterator_next(), openvpn_sockaddr::in4, multi_context::iter, mroute_addr_equal(), mroute_extract_openvpn_sockaddr(), multi_signal_instance(), multi_instance::real, SIGTERM, and hash_element::value.
Referenced by init_management_callback_multi().
|
static |
Definition at line 3157 of file multi.c.
References context::c2, multi_instance::context, multi_instance::halt, hash_iterator_free(), hash_iterator_init(), hash_iterator_next(), multi_context::iter, multi_signal_instance(), SIGTERM, tls_common_name(), context_2::tls_multi, and hash_element::value.
Referenced by init_management_callback_multi().
|
static |
Definition at line 3150 of file multi.c.
References multi_context::n_clients.
Referenced by init_management_callback_multi().
|
static |
Definition at line 3135 of file multi.c.
References multi_print_status(), and multi_context::status_file_version.
Referenced by init_management_callback_multi().
|
static |
Definition at line 3214 of file multi.c.
References buffer_list_free(), context::c2, multi_instance::connection_established_flag, multi_instance::context, D_MULTI_LOW, multi_instance::halt, hash_lookup(), msg, multi_context::mtcp, multi_schedule_context_wakeup(), multi_tcp_delete_event(), np(), send_auth_failed(), send_restart(), and context_2::tls_multi.
Referenced by init_management_callback_multi().
|
static |
Definition at line 515 of file multi.c.
References multi_instance::msg_prefix.
Referenced by multi_bcast(), and multi_process_incoming_link().
|
static |
Definition at line 1312 of file multi.c.
References context::c1, multi_instance::context, D_MULTI_LOW, DEV_TYPE_TUN, multi_instance::did_iroutes, gc_free(), gc_new(), options::iroutes, options::iroutes_ipv6, mroute_helper_add_iroute46(), msg, multi_instance_string(), multi_learn_in6_addr(), multi_learn_in_addr_t(), iroute::netbits, iroute_ipv6::netbits, iroute::network, iroute_ipv6::network, iroute::next, iroute_ipv6::next, context::options, print_in6_addr(), print_in_addr_t(), multi_context::route_helper, TUNNEL_TYPE, and context_1::tuntap.
Referenced by multi_connection_established().
void multi_add_mbuf | ( | struct multi_context * | m, |
struct multi_instance * | mi, | ||
struct mbuf_buffer * | mb | ||
) |
Definition at line 2170 of file multi.c.
References mbuf_item::buffer, D_MULTI_DROPPED, mbuf_item::instance, multi_context::mbuf, mbuf_add_item(), msg, and multi_output_queue_ready().
Referenced by multi_bcast(), and multi_unicast().
|
static |
Definition at line 2210 of file multi.c.
References BLEN, context::c2, multi_instance::context, D_PF_DROPPED_BCAST, gc_free(), gc_new(), multi_instance::halt, hash_iterator_free(), hash_iterator_init(), hash_iterator_next(), multi_context::iter, MAPF_SHOW_ARP, mbuf_alloc_buf(), mbuf_free_buf(), mi_prefix(), mroute_addr_print_ex(), msg, multi_add_mbuf(), PERF_MULTI_BCAST, perf_pop(), perf_push(), context_2::tls_multi, and hash_element::value.
Referenced by multi_process_incoming_link(), multi_process_incoming_tun(), and route_quota_exceeded().
|
static |
Definition at line 1638 of file multi.c.
References context::c2, multi_instance::context, D_IMPORT_ERRORS, context_2::es, M_OPTERR, multi_select_virtual_addr(), multi_set_virtual_addr_env(), context::options, options_server_import(), and platform_test_file().
Referenced by multi_connection_established().
|
static |
Definition at line 1671 of file multi.c.
References BSTR, buffer_entry::buf, context::c2, multi_instance::context, D_IMPORT_ERRORS, context_2::es, buffer_list::head, plugin_return::list, M_OPTERR, multi_select_virtual_addr(), multi_set_virtual_addr_env(), plugin_return::n, buffer_entry::next, context::options, options_string_import(), plugin_return_defined(), plugin_return_get_column(), and openvpn_plugin_string_list::value.
Referenced by multi_connection_established().
|
static |
Definition at line 1752 of file multi.c.
References context::c2, multi_instance::context, multi_instance::created, context_2::es, gc_free(), gc_new(), get_link_socket_info(), multi_set_virtual_addr_env(), setenv_long_long(), setenv_str(), setenv_trusted(), time_string(), tls_common_name(), and context_2::tls_multi.
Referenced by multi_connection_established().
|
static |
Definition at line 574 of file multi.c.
References argv_new(), argv_parse_cmd(), argv_reset(), context::c2, CAS_PARTIAL, CAS_SUCCEEDED, options::client_disconnect_script, multi_instance::connection_established_flag, multi_instance::context, context_2::context_auth, context_2::es, M_WARN, msg, multi_client_disconnect_setenv(), OPENVPN_PLUGIN_CLIENT_DISCONNECT, OPENVPN_PLUGIN_FUNC_SUCCESS, openvpn_run_script(), context::options, plugin_call(), plugin_defined(), context::plugins, and setenv_str().
Referenced by multi_close_instance().
|
static |
Definition at line 560 of file multi.c.
References context::c2, multi_instance::context, multi_instance::created, context_2::es, get_link_socket_info(), now, setenv_long_long(), setenv_stats(), and setenv_trusted().
Referenced by multi_client_disconnect_script().
void multi_close_instance | ( | struct multi_context * | m, |
struct multi_instance * | mi, | ||
bool | shutdown | ||
) |
Definition at line 609 of file multi.c.
References ASSERT, context::c2, CC_GC_FREE, close_context(), multi_instance::context, D_MULTI_DEBUG, multi_instance::did_iter, multi_instance::did_open_context, multi_instance::did_real_hash, dmsg, multi_context::earliest_wakeup, multi_instance::halt, multi_context::hash, hash_remove(), multi_context::ifconfig_pool, ifconfig_pool_release(), multi_context::instances, multi_context::iter, MAX_PEER_ID, multi_context::mbuf, mbuf_dereference_instance(), multi_context::mtcp, multi_client_disconnect_script(), multi_del_iroutes(), multi_instance_dec_refcount(), multi_set_pending(), multi_tcp_dereference_instance(), multi_tcp_instance_specific_free(), multi_context::n_clients, multi_instance::n_clients_delta, tls_multi::peer_id, multi_context::pending, PERF_MULTI_CLOSE_INSTANCE, perf_pop(), perf_push(), multi_instance::real, multi_context::schedule, schedule_remove_entry(), SIGTERM, context_2::tls_multi, ungenerate_prefix(), and update_mstat_n_clients().
Referenced by multi_close_instance_on_signal(), multi_create_instance(), multi_create_instance_tcp(), multi_delete_dup(), multi_process_float(), and multi_uninit().
void multi_close_instance_on_signal | ( | struct multi_context * | m, |
struct multi_instance * | mi | ||
) |
Definition at line 3112 of file multi.c.
References clear_prefix(), multi_instance::context, D_MULTI_LOW, multi_close_instance(), print_signal(), remap_signal(), set_prefix(), and context::sig.
Referenced by multi_process_post(), multi_signal_instance(), and multi_tcp_action().
|
static |
Definition at line 1786 of file multi.c.
References argv_new(), argv_parse_cmd(), argv_printf(), argv_printf_cat(), argv_reset(), ASSERT, context::c1, context::c2, CAS_FAILED, CAS_PARTIAL, CAS_SUCCEEDED, CCD_DEFAULT, options::client_config_dir, options::client_connect_script, multi_instance::connection_established_flag, multi_instance::context, context_2::context_auth, D_IMPORT_ERRORS, D_MULTI_DEBUG, D_MULTI_ERRORS, D_MULTI_LOW, DEV_TYPE_TUN, options::disable, do_deferred_options(), options::duplicate_cn, context_2::es, gc_free(), gc_new(), generate_prefix(), hash_lookup(), hash_remove(), ifconfig_push_constraint_satisfied(), options::iroutes, M_OPTERR, M_WARN, msg, multi_add_iroutes(), multi_client_connect_post(), multi_client_connect_post_plugin(), multi_client_connect_setenv(), multi_delete_dup(), multi_instance_string(), multi_learn_in6_addr(), multi_learn_in_addr_t(), multi_process_post(), multi_select_virtual_addr(), multi_context::n_clients, multi_instance::n_clients_delta, OPENVPN_PLUGIN_CLIENT_CONNECT, OPENVPN_PLUGIN_CLIENT_CONNECT_V2, OPENVPN_PLUGIN_FUNC_SUCCESS, openvpn_run_script(), OPT_P_COMP, OPT_P_CONFIG, OPT_P_ECHO, OPT_P_INHERIT, OPT_P_INSTANCE, OPT_P_PUSH, OPT_P_SOCKFLAGS, OPT_P_TIMER, context::options, options_server_import(), platform_create_temp_file(), platform_gen_path(), platform_test_file(), platform_unlink(), plugin_call(), plugin_defined(), plugin_return_free(), plugin_return_init(), context::plugins, print_in6_addr(), print_in_addr_t(), process_incoming_push_request(), options::push_ifconfig_constraint_netmask, options::push_ifconfig_constraint_network, context_2::push_ifconfig_defined, context_2::push_ifconfig_ipv6_defined, context_2::push_ifconfig_ipv6_local, context_2::push_ifconfig_local, context_2::push_reply_deferred, read, remove_iroutes_from_push_route_list(), multi_instance::reporting_addr, multi_instance::reporting_addr_ipv6, setenv_str(), tls_authentication_status(), TLS_AUTHENTICATION_SUCCEEDED, tls_common_name(), tls_lock_cert_hash_set(), tls_lock_common_name(), context_2::tls_multi, options::tmp_dir, multi_context::top, TUNNEL_TYPE, context_1::tuntap, update_mstat_n_clients(), and multi_instance::vaddr_handle.
Referenced by multi_process_post().
struct multi_instance* multi_create_instance | ( | struct multi_context * | m, |
const struct mroute_addr * | real | ||
) |
Definition at line 768 of file multi.c.
References ALLOC_OBJ_CLEAR, context::c2, CAS_PENDING, multi_instance::context, context_2::context_auth, multi_instance::created, D_MULTI_ERRORS, D_MULTI_LOW, D_MULTI_MEDIUM, multi_instance::did_iter, multi_instance::did_open_context, multi_instance::gc, gc_free(), gc_new(), generate_prefix(), multi_context::hash, hash_add(), hash_n_elements(), inherit_context_child(), IS_SIG, multi_context::iter, multi_context::max_clients, MPP_PRE_SELECT, mroute_addr_init(), mroute_addr_print(), msg, multi_close_instance(), multi_instance_inc_refcount(), multi_process_post(), multi_tcp_instance_specific_init(), now, PERF_MULTI_CREATE_INSTANCE, perf_pop(), perf_push(), context_2::push_reply_deferred, multi_instance::real, multi_context::top, and multi_instance::vaddr_handle.
Referenced by multi_create_instance_tcp(), and multi_get_create_instance_udp().
|
static |
Definition at line 533 of file multi.c.
References context::c1, multi_instance::context, DEV_TYPE_TUN, options::iroutes, options::iroutes_ipv6, mroute_helper_del_iroute46(), iroute::netbits, iroute_ipv6::netbits, iroute::next, iroute_ipv6::next, context::options, multi_context::route_helper, TUNNEL_TYPE, and context_1::tuntap.
Referenced by multi_close_instance().
|
static |
Definition at line 1361 of file multi.c.
References context::c2, multi_instance::context, D_MULTI_LOW, multi_instance::did_iter, multi_instance::halt, hash_iterator_delete_element(), hash_iterator_free(), hash_iterator_init(), hash_iterator_next(), multi_context::iter, msg, multi_close_instance(), tls_common_name(), context_2::tls_multi, and hash_element::value.
Referenced by multi_connection_established().
|
static |
Definition at line 1163 of file multi.c.
References mroute_addr::addr, multi_route::addr, ASSERT, check_debug_level(), D_MULTI_DEBUG, dmsg, gc_free(), gc_new(), multi_instance::halt, hash_lookup(), multi_route::instance, multi_route::last_reference, multi_context::local, MR_WITH_NETBITS, mroute_addr_equal(), mroute_addr_mask_host_bits(), mroute_addr_print(), multi_instance_string(), multi_learn_addr(), MULTI_ROUTE_AGEABLE, MULTI_ROUTE_CACHE, multi_route_defined(), mroute_helper::n_net_len, mroute_helper::net_len, mroute_addr::netbits, now, route, multi_context::route_helper, mroute_addr::type, and multi_context::vhash.
Referenced by multi_process_incoming_link(), and multi_process_incoming_tun().
struct multi_instance* multi_get_queue | ( | struct mbuf_set * | ms | ) |
Definition at line 2852 of file multi.c.
References mbuf_buffer::buf, context_2::buf, mbuf_item::buffer, context::c2, clear_prefix(), multi_instance::context, D_MULTI_DEBUG, dmsg, encrypt_sign(), mbuf_buffer::flags, mbuf_item::instance, mbuf_extract_item(), mbuf_free_buf(), MF_UNICAST, PIP_MSSFIX, PIPV4_PASSTOS, PIPV6_IMCP_NOHOST_SERVER, process_ip_header(), and set_prefix().
Referenced by multi_process_outgoing_link_pre().
void multi_ifconfig_pool_persist | ( | struct multi_context * | m, |
bool | force | ||
) |
Definition at line 166 of file multi.c.
References context::c1, multi_context::ifconfig_pool, context_1::ifconfig_pool_persist, ifconfig_pool_write(), ifconfig_pool_write_trigger(), and multi_context::top.
Referenced by multi_process_per_second_timers_dowork(), tunnel_server_tcp(), and tunnel_server_udp_single_threaded().
void multi_init | ( | struct multi_context * | m, |
struct context * | t, | ||
bool | tcp_mode, | ||
int | thread_mode | ||
) |
Definition at line 295 of file multi.c.
References ASSERT, context::c1, options::cf_max, options::cf_per, CLEAR, D_MULTI_LOW, multi_context::deferred_shutdown_signal, options::dev, options::dev_type, dev_type_enum(), DEV_TYPE_TUN, DEV_TYPE_UNDEF, options::duplicate_cn, multi_context::enable_c2c, options::enable_c2c, event_timeout_init(), frequency_limit_init(), get_random(), multi_context::hash, hash_init(), options::ifconfig_ipv6_pool_base, options::ifconfig_ipv6_pool_defined, options::ifconfig_ipv6_pool_netbits, multi_context::ifconfig_pool, IFCONFIG_POOL_30NET, options::ifconfig_pool_defined, options::ifconfig_pool_end, IFCONFIG_POOL_INDIV, ifconfig_pool_init(), context_1::ifconfig_pool_persist, ifconfig_pool_read(), options::ifconfig_pool_start, multi_context::instances, multi_context::iter, tuntap::local, multi_context::local, M_INFO, multi_context::max_clients, options::max_clients, multi_context::mbuf, mbuf_init(), mroute_addr_compare_function(), mroute_addr_hash_function(), mroute_extract_in_addr_t(), mroute_helper_init(), msg, multi_context::mtcp, MULTI_CACHE_ROUTE_TTL, multi_reap_new(), multi_tcp_init(), options::n_bcast_buf, multi_context::new_connection_limiter, context::options, options::real_hash_size, reap_buckets_per_pass(), multi_context::reaper, multi_context::route_helper, multi_context::schedule, schedule_init(), deferred_signal_schedule_entry::signal_received, options::stale_routes_ageing_time, multi_context::stale_routes_check_et, options::stale_routes_check_interval, multi_context::status_file_version, options::status_file_version, multi_context::tcp_queue_limit, options::tcp_queue_limit, multi_context::thread_mode, TOP_NET30, options::topology, context_1::tuntap, multi_context::vhash, and options::virtual_hash_size.
Referenced by tunnel_server_tcp(), and tunnel_server_udp_single_threaded().
const char* multi_instance_string | ( | const struct multi_instance * | mi, |
bool | null, | ||
struct gc_arena * | gc | ||
) |
Definition at line 466 of file multi.c.
References alloc_buf_gc(), BSTR, buf_printf(), context::c2, multi_instance::context, mroute_addr_print(), MULTI_PREFIX_MAX_LENGTH, multi_instance::real, tls_common_name(), and context_2::tls_multi.
Referenced by generate_prefix(), multi_add_iroutes(), multi_connection_established(), multi_get_instance_by_virtual_addr(), multi_learn_addr(), multi_process_float(), multi_select_virtual_addr(), multi_tcp_post(), and route_quota_exceeded().
|
static |
Definition at line 1070 of file multi.c.
References multi_route::addr, ALLOC_OBJ, mroute_helper::cache_generation, multi_route::cache_generation, D_MULTI_LOW, flags, multi_route::flags, free, gc_free(), gc_new(), hash_add_fast(), hash_bucket(), hash_lookup_fast(), hash_value(), multi_route::instance, hash_element::key, multi_route::last_reference, learn_address_script(), multi_context::local, mroute_addr_equal(), mroute_addr_print(), mroute_learnable_address(), msg, multi_instance_inc_refcount(), multi_instance_string(), MULTI_ROUTE_CACHE, multi_route_defined(), multi_route_del(), now, multi_context::route_helper, route_quota_inc(), route_quota_test(), hash_element::value, and multi_context::vhash.
Referenced by multi_get_instance_by_virtual_addr(), multi_learn_in6_addr(), multi_learn_in_addr_t(), and multi_process_incoming_link().
|
static |
Definition at line 1275 of file multi.c.
References context::c2, multi_instance::context, mroute_addr::len, MR_ADDR_IPV6, MR_WITH_NETBITS, mroute_addr_mask_host_bits(), multi_learn_addr(), mroute_addr::netbits, mroute_addr::type, and mroute_addr::v6.
Referenced by multi_add_iroutes(), and multi_connection_established().
|
static |
Definition at line 1242 of file multi.c.
References openvpn_sockaddr::addr, ASSERT, context::c2, CLEAR, multi_instance::context, openvpn_sockaddr::in4, MR_WITH_NETBITS, mroute_extract_openvpn_sockaddr(), multi_learn_addr(), mroute_addr::netbits, and mroute_addr::type.
Referenced by multi_add_iroutes(), and multi_connection_established().
void multi_print_status | ( | struct multi_context * | m, |
struct status_output * | so, | ||
const int | version | ||
) |
Definition at line 861 of file multi.c.
References multi_route::addr, context::c2, options::ciphername, multi_instance::context, counter_format, multi_instance::created, D_MULTI_DEBUG, flags, multi_route::flags, gc_free(), gc_new(), multi_instance::halt, multi_context::hash, hash_iterator_free(), hash_iterator_init(), hash_iterator_next(), hash_n_elements(), IA_EMPTY_IF_UNDEF, multi_route::instance, multi_route::last_reference, context_2::link_read_bytes, context_2::link_write_bytes, multi_context::mbuf, mbuf_maximum_queued(), mroute_addr_print(), msg, MULTI_ROUTE_CACHE, multi_route_defined(), now, context::options, tls_multi::peer_id, print_in6_addr(), print_in_addr_t(), multi_instance::real, multi_instance::reporting_addr, multi_instance::reporting_addr_ipv6, route, status_flush(), status_printf(), status_reset(), time_string(), title_string, tls_common_name(), context_2::tls_multi, tls_username(), multi_context::top, translate_cipher_name_to_openvpn(), hash_element::value, and multi_context::vhash.
Referenced by management_callback_status(), multi_process_per_second_timers_dowork(), and multi_process_signal().
void multi_process_drop_outgoing_tun | ( | struct multi_context * | m, |
const unsigned int | mpp_flags | ||
) |
Definition at line 2917 of file multi.c.
References ASSERT, buf_reset(), context::c2, clear_prefix(), multi_instance::context, D_MULTI_ERRORS, buffer::len, msg, multi_process_post(), multi_context::pending, set_prefix(), and context_2::to_tun.
Referenced by multi_tcp_dispatch().
void multi_process_float | ( | struct multi_context * | m, |
struct multi_instance * | mi | ||
) |
Handles peer floating.
If peer is floated to a taken address, either drops packet (if peer that owns address has different CN) or disconnects existing peer. Updates multi_instance with new address, updates hashtables in multi_context.
Definition at line 2417 of file multi.c.
References link_socket_addr::actual, ASSERT, context_2::buf, context::c2, cert_hash_compare(), multi_instance::context, D_MULTI_LOW, D_MULTI_MEDIUM, link_socket_actual::dest, context_2::from, gc_free(), gc_new(), generate_prefix(), multi_context::hash, hash_add(), hash_bucket(), hash_lookup_fast(), hash_remove(), hash_value(), multi_context::iter, buffer::len, context_2::link_socket, context_2::link_socket_info, link_socket_info::lsa, mroute_addr_print(), mroute_extract_openvpn_sockaddr(), msg, multi_close_instance(), multi_instance_string(), tls_multi::peer_id, print_link_socket_actual(), multi_instance::real, tls_common_name(), context_2::tls_multi, tls_update_remote_addr(), context_2::to_link_addr, multi_context::top, and hash_element::value.
Referenced by multi_process_incoming_link().
void multi_process_per_second_timers_dowork | ( | struct multi_context * | m | ) |
Definition at line 2997 of file multi.c.
References context::c1, check_stale_routes(), multi_ifconfig_pool_persist(), multi_print_status(), multi_reap_process(), context::options, stale_route_check_trigger(), options::stale_routes_check_interval, multi_context::status_file_version, context_1::status_output, status_trigger(), and multi_context::top.
Referenced by multi_process_per_second_timers().
bool multi_process_post | ( | struct multi_context * | m, |
struct multi_instance * | mi, | ||
const unsigned int | flags | ||
) |
Perform postprocessing of a VPN tunnel instance.
After some VPN tunnel activity has taken place, the VPN tunnel's state may need updating and some follow-up action may be required. This function controls the necessary postprocessing. It is called by many other functions that handle VPN tunnel related activity, such as multi_process_incoming_link()
, multi_process_outgoing_link()
, multi_process_incoming_tun()
, multi_process_outgoing_tun()
, and multi_process_timeout()
, among others.
m | - The single multi_context structure. |
mi | - The multi_instance of the VPN tunnel to be postprocessed. |
flags | - Fast I/O optimization flags. |
Definition at line 2328 of file multi.c.
References ANY_OUT, key_state::authenticated, context::c2, CONNECTION_ESTABLISHED, multi_instance::connection_established_flag, multi_instance::context, context_2::fragment, hash_add(), hash_remove(), IS_SIG, tls_session::key, KS_PRIMARY, buffer::len, M_ERRNO, M_NONFATAL, MPP_CLOSE_ON_SIGNAL, MPP_CONDITIONAL_PRE_SELECT, MPP_PRE_SELECT, MPP_RECORD_TOUCH, multi_context::mpp_touched, msg, multi_close_instance_on_signal(), multi_connection_established(), multi_schedule_context_wakeup(), multi_set_pending(), fragment_master::outgoing, multi_context::pending, pre_select(), tls_multi::session, context_2::timeval, context_2::tls_multi, TM_ACTIVE, context_2::to_link, context_2::to_tun, and multi_context::top.
Referenced by multi_connection_established(), multi_create_instance(), multi_process_drop_outgoing_tun(), multi_process_incoming_link(), multi_process_incoming_tun(), multi_process_outgoing_link_dowork(), multi_process_outgoing_tun(), multi_process_timeout(), multi_tcp_dispatch(), and multi_tcp_process_outgoing_link().
bool multi_process_signal | ( | struct multi_context * | m | ) |
Definition at line 3086 of file multi.c.
References options::ce, multi_context::deferred_shutdown_signal, connection_entry::explicit_exit_notification, is_exit_restart(), M_INFO, multi_print_status(), multi_push_restart_schedule_exit(), context::options, connection_entry::proto, proto_is_dgram(), context::sig, signal_info::signal_received, deferred_signal_schedule_entry::signal_received, SIGUSR2, status_close(), multi_context::status_file_version, status_open(), and multi_context::top.
bool multi_process_timeout | ( | struct multi_context * | m, |
const unsigned int | mpp_flags | ||
) |
Definition at line 2886 of file multi.c.
References clear_prefix(), multi_context::deferred_shutdown_signal, multi_context::earliest_wakeup, multi_process_post(), multi_context::schedule, schedule_remove_entry(), set_prefix(), deferred_signal_schedule_entry::signal_received, and throw_signal().
Referenced by multi_tcp_dispatch(), and tunnel_server_udp_single_threaded().
|
static |
Definition at line 3046 of file multi.c.
References ASSERT, compute_wakeup_sigma(), multi_instance::context, D_PUSH, multi_context::deferred_shutdown_signal, multi_instance::halt, hash_iterator_free(), hash_iterator_init(), hash_iterator_next(), multi_context::iter, multi_schedule_context_wakeup(), openvpn_gettimeofday(), multi_context::schedule, schedule_add_entry(), send_control_channel_string(), context::sig, signal_info::signal_received, deferred_signal_schedule_entry::signal_received, multi_context::top, tv_add(), hash_element::value, and deferred_signal_schedule_entry::wakeup.
Referenced by multi_process_signal().
|
static |
Definition at line 211 of file multi.c.
References multi_reap_range().
Referenced by multi_uninit().
|
static |
|
static |
Definition at line 217 of file multi.c.
References ALLOC_OBJ, multi_reap::bucket_base, multi_reap::buckets_per_pass, multi_reap::last_call, and now.
Referenced by multi_init().
void multi_reap_process_dowork | ( | const struct multi_context * | m | ) |
Definition at line 228 of file multi.c.
References multi_reap::bucket_base, multi_reap::buckets_per_pass, hash_n_buckets(), multi_reap::last_call, multi_reap_range(), now, multi_context::reaper, and multi_context::vhash.
Referenced by multi_reap_process().
|
static |
Definition at line 178 of file multi.c.
References multi_route::addr, D_MULTI_DEBUG, dmsg, gc_free(), gc_new(), hash_iterator_delete_element(), hash_iterator_free(), hash_iterator_init_range(), hash_iterator_next(), hash_n_buckets(), learn_address_script(), mroute_addr_print(), multi_route_defined(), multi_route_del(), hash_element::value, and multi_context::vhash.
Referenced by multi_reap_all(), and multi_reap_process_dowork().
|
static |
Definition at line 2307 of file multi.c.
References ASSERT, context::c2, compute_wakeup_sigma(), multi_instance::context, openvpn_gettimeofday(), multi_context::schedule, schedule_add_entry(), context_2::timeval, tv_add(), and multi_instance::wakeup.
Referenced by management_delete_event(), multi_process_post(), and multi_push_restart_schedule_exit().
|
static |
Definition at line 1448 of file multi.c.
References context::c1, context::c2, CLEAR, multi_instance::context, D_MULTI_ERRORS, DEV_TYPE_TAP, DEV_TYPE_TUN, options::duplicate_cn, gc_free(), gc_new(), options::ifconfig_ipv6_netbits, options::ifconfig_ipv6_pool_defined, multi_context::ifconfig_pool, ifconfig_pool_acquire(), options::ifconfig_pool_netmask, ifconfig_pool_release(), in_addr_t, tuntap::local, tuntap::local_ipv6, M_INFO, msg, multi_instance_string(), context::options, print_in6_addr(), print_in_addr_t(), options::push_ifconfig_defined, context_2::push_ifconfig_defined, options::push_ifconfig_ipv6_defined, context_2::push_ifconfig_ipv6_defined, options::push_ifconfig_ipv6_local, context_2::push_ifconfig_ipv6_local, options::push_ifconfig_ipv6_netbits, context_2::push_ifconfig_ipv6_netbits, options::push_ifconfig_ipv6_remote, context_2::push_ifconfig_ipv6_remote, options::push_ifconfig_local, context_2::push_ifconfig_local, options::push_ifconfig_local_alias, context_2::push_ifconfig_local_alias, options::push_ifconfig_remote_netmask, context_2::push_ifconfig_remote_netmask, tuntap::remote_netmask, tls_common_name(), context_2::tls_multi, TOP_NET30, TOP_P2P, TOP_SUBNET, TUNNEL_TOPOLOGY, TUNNEL_TYPE, context_1::tuntap, and multi_instance::vaddr_handle.
Referenced by multi_client_connect_post(), multi_client_connect_post_plugin(), and multi_connection_established().
|
static |
Definition at line 1582 of file multi.c.
References context::c1, context::c2, multi_instance::context, DEV_TYPE_TAP, DEV_TYPE_TUN, context_2::es, context_2::push_ifconfig_defined, context_2::push_ifconfig_ipv6_defined, context_2::push_ifconfig_ipv6_local, context_2::push_ifconfig_ipv6_netbits, context_2::push_ifconfig_ipv6_remote, context_2::push_ifconfig_local, context_2::push_ifconfig_remote_netmask, SA_SET_IF_NONZERO, setenv_del(), setenv_in6_addr(), setenv_in_addr_t(), setenv_int(), TOP_SUBNET, TUNNEL_TOPOLOGY, TUNNEL_TYPE, and context_1::tuntap.
Referenced by multi_client_connect_post(), multi_client_connect_post_plugin(), and multi_client_connect_setenv().
|
static |
Definition at line 3122 of file multi.c.
References multi_instance::context, multi_close_instance_on_signal(), context::sig, and signal_info::signal_received.
Referenced by management_callback_kill_by_addr(), and management_callback_kill_by_cn().
void multi_top_free | ( | struct multi_context * | m | ) |
Definition at line 3033 of file multi.c.
References context_2::buffers, context::c2, CC_GC_FREE, close_context(), free_context_buffers(), and multi_context::top.
Referenced by multi_uninit(), tunnel_server_tcp(), and tunnel_server_udp_single_threaded().
void multi_top_init | ( | struct multi_context * | m, |
const struct context * | top | ||
) |
Definition at line 3026 of file multi.c.
References context_2::buffers, context::c2, context_2::frame, inherit_context_top(), init_context_buffers(), and multi_context::top.
Referenced by tunnel_server_tcp(), and tunnel_server_udp_single_threaded().
|
inlinestatic |
Definition at line 2191 of file multi.c.
References BLEN, mbuf_buffer::flags, mbuf_alloc_buf(), mbuf_free_buf(), MF_UNICAST, and multi_add_mbuf().
Referenced by multi_process_incoming_link().
void multi_uninit | ( | struct multi_context * | m | ) |
Definition at line 712 of file multi.c.
References multi_instance::did_iter, free, frequency_limit_free(), multi_context::hash, hash_free(), hash_iterator_free(), hash_iterator_init(), hash_iterator_next(), multi_context::ifconfig_pool, ifconfig_pool_free(), multi_context::instances, multi_context::iter, multi_context::mbuf, mbuf_free(), MC_UNDEF, MC_WORK_THREAD, mroute_helper_free(), multi_context::mtcp, multi_close_instance(), multi_reap_all(), multi_reap_free(), multi_tcp_free(), multi_top_free(), multi_context::new_connection_limiter, multi_context::reaper, multi_context::route_helper, multi_context::schedule, schedule_free(), multi_context::thread_mode, hash_element::value, and multi_context::vhash.
Referenced by tunnel_server_tcp(), and tunnel_server_udp_single_threaded().
|
static |
Definition at line 250 of file multi.c.
References constrain_int(), REAP_DIVISOR, REAP_MAX, and REAP_MIN.
Referenced by multi_init().
void route_quota_exceeded | ( | const struct multi_context * | m, |
const struct multi_instance * | mi | ||
) |
Definition at line 2939 of file multi.c.
References alloc_buf_gc(), ASSERT, buf_init, BUF_SIZE, buf_write_u8(), context::c2, multi_instance::context, D_GREMLIN, D_ROUTE_QUOTA, context_2::frame, FRAME_HEADROOM, gc_free(), gc_new(), get_random(), options::max_routes_per_client, MAX_RW_SIZE_TUN, min_int(), msg, multi_bcast(), multi_instance_string(), context::options, and multi_context::top.
Referenced by multi_process_outgoing_link_pre(), and route_quota_test().
|
static |
Definition at line 553 of file multi.c.
References context::c2, context_2::es, context_2::link_read_bytes, context_2::link_write_bytes, and setenv_counter().
Referenced by multi_client_disconnect_setenv().
|
static |
Definition at line 2986 of file multi.c.
References CLEAR, ETT_DEFAULT, event_timeout_trigger(), and multi_context::stale_routes_check_et.
Referenced by multi_process_per_second_timers_dowork().
void ungenerate_prefix | ( | struct multi_instance * | mi | ) |
Definition at line 508 of file multi.c.
References multi_instance::msg_prefix, and set_prefix().
Referenced by multi_close_instance(), multi_get_create_instance_udp(), and multi_route_defined().
void uninit_management_callback_multi | ( | struct multi_context * | m | ) |
Definition at line 3376 of file multi.c.
References uninit_management_callback().
Referenced by tunnel_server_tcp(), and tunnel_server_udp_single_threaded().
|
inlinestatic |
Definition at line 85 of file multi.c.
Referenced by multi_close_instance(), and multi_connection_established().