|
OpenVPN
|
#include "syshead.h"#include "memdbg.h"#include "multi.h"#include "forward.h"#include "multi_io.h"
Go to the source code of this file.
Macros | |
| #define | MULTI_IO_SOCKET ((void *)1) |
| #define | MULTI_IO_TUN ((void *)2) |
| #define | MULTI_IO_SIG ((void *)3) /* Only on Windows */ |
| #define | MULTI_IO_MANAGEMENT ((void *)4) |
| #define | MULTI_IO_FILE_CLOSE_WRITE ((void *)5) |
| #define | MULTI_IO_DCO ((void *)6) |
| #define | MTP_NONE 0 |
| #define | MTP_TUN_OUT (1 << 0) |
| #define | MTP_LINK_OUT (1 << 1) |
Functions | |
| static const char * | pract (int action) |
| static struct context * | multi_get_context (struct multi_context *m, struct multi_instance *mi) |
| struct multi_io * | multi_io_init (const int maxclients) |
| void | multi_io_free (struct multi_io *multi_io) |
| static unsigned int | p2mp_iow_flags (const struct multi_context *m, const struct link_socket *sock) |
| int | multi_io_wait (struct multi_context *m) |
| static int | multi_io_wait_lite (struct multi_context *m, struct multi_instance *mi, const int action, bool *tun_input_pending) |
| static bool | multi_io_write_tun (struct multi_context *m, const unsigned int mpp_flags) |
| Send a packet over the virtual tun/tap network interface to its locally reachable destination. | |
| static void | multi_io_drop_tun (struct multi_context *m, const unsigned int mpp_flags) |
| static struct multi_instance * | multi_io_write_link_pre (struct multi_context *m) |
| bool | multi_io_send_link (struct multi_context *m, struct multi_instance *mi, const unsigned int mpp_flags) |
| static bool | multi_io_write_link_deferred (struct multi_context *m, struct multi_instance *mi, const unsigned int mpp_flags) |
| static bool | multi_io_write_link (struct multi_context *m, bool defer, const unsigned int mpp_flags) |
| static struct multi_instance * | multi_io_dispatch (struct multi_context *m, struct multi_instance *mi, const int action) |
| static int | multi_io_post (struct multi_context *m, struct multi_instance *mi, const int action) |
| void | multi_io_process_io (struct multi_context *m) |
| void | multi_io_action (struct multi_context *m, struct multi_instance *mi, int action, bool poll) |
| void | multi_io_delete_event (struct multi_io *multi_io, event_t event) |
| #define MTP_LINK_OUT (1 << 1) |
| #define MTP_NONE 0 |
| #define MTP_TUN_OUT (1 << 0) |
| #define MULTI_IO_DCO ((void *)6) |
Definition at line 47 of file multi_io.c.
| #define MULTI_IO_FILE_CLOSE_WRITE ((void *)5) |
Definition at line 46 of file multi_io.c.
| #define MULTI_IO_MANAGEMENT ((void *)4) |
Definition at line 45 of file multi_io.c.
| #define MULTI_IO_SIG ((void *)3) /* Only on Windows */ |
Definition at line 44 of file multi_io.c.
| #define MULTI_IO_SOCKET ((void *)1) |
Definition at line 42 of file multi_io.c.
| #define MULTI_IO_TUN ((void *)2) |
Definition at line 43 of file multi_io.c.
|
inlinestatic |
Definition at line 95 of file multi_io.c.
References multi_instance::context, and multi_context::top.
Referenced by multi_io_post(), and multi_io_wait_lite().
| void multi_io_action | ( | struct multi_context * | m, |
| struct multi_instance * | mi, | ||
| int | action, | ||
| bool | poll | ||
| ) |
Definition at line 686 of file multi_io.c.
References multi_instance::context, D_MULTI_DEBUG, dmsg, IS_SIG, M_FATAL, msg, multi_close_instance_on_signal(), multi_io_dispatch(), multi_io_post(), multi_io_wait_lite(), multi_context::pending, pract(), TA_SOCKET_READ_RESIDUAL, TA_TUN_READ, and TA_UNDEF.
Referenced by multi_io_process_io(), and tunnel_server_loop().
Definition at line 773 of file multi_io.c.
References multi_io::es, and event_del().
|
static |
Definition at line 426 of file multi_io.c.
References ASSERT, context::c2, clear_prefix(), multi_instance::context, D_MULTI_DEBUG, dmsg, IS_SIG, context_2::link_sockets, M_FATAL, MPP_PRE_SELECT, MPP_RECORD_TOUCH, multi_context::mpp_touched, msg, multi_io_drop_tun(), multi_io_write_link(), multi_io_write_link_deferred(), multi_io_write_tun(), multi_process_incoming_link(), multi_process_incoming_tun(), multi_process_post(), multi_process_timeout(), multi_tcp_set_global_rw_flags(), pract(), ptr_format, read_incoming_link(), read_incoming_tun(), set_prefix(), stream_buf_read_setup(), TA_INITIAL, TA_SOCKET_READ, TA_SOCKET_READ_RESIDUAL, TA_SOCKET_WRITE, TA_SOCKET_WRITE_DEFERRED, TA_SOCKET_WRITE_READY, TA_TIMEOUT, TA_TUN_READ, TA_TUN_WRITE, TA_TUN_WRITE_TIMEOUT, and multi_context::top.
Referenced by multi_io_action().
|
static |
Definition at line 310 of file multi_io.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_io_dispatch().
| void multi_io_free | ( | struct multi_io * | multi_io | ) |
Definition at line 125 of file multi_io.c.
References multi_io::es, multi_io::esr, and event_free().
Referenced by multi_uninit().
| struct multi_io * multi_io_init | ( | const int | maxclients | ) |
Definition at line 108 of file multi_io.c.
References ALLOC_ARRAY, ALLOC_OBJ_CLEAR, ASSERT, BASE_N_EVENTS, D_MULTI_LOW, multi_io::es, multi_io::esr, event_set_init(), multi_io::maxevents, msg, MULTI_IO_SIG, and wait_signal().
Referenced by multi_init().
|
static |
Definition at line 504 of file multi_io.c.
References D_MULTI_DEBUG, dmsg, gc, gc_free(), gc_new(), LINK_OUT, M_FATAL, msg, MTP_LINK_OUT, MTP_NONE, MTP_TUN_OUT, multi_get_context(), multi_instance_string(), multi_tcp_set_global_rw_flags(), pract(), sockets_read_residual(), TA_SOCKET_READ_RESIDUAL, TA_SOCKET_WRITE, TA_TUN_WRITE, TA_UNDEF, and TUN_OUT.
Referenced by multi_io_action().
| void multi_io_process_io | ( | struct multi_context * | m | ) |
Definition at line 561 of file multi_io.c.
References event_set_return::arg, ASSERT, context::c1, D_MULTI_ERRORS, tuntap::dco, dco_read_and_process(), multi_io::esr, multi_instance::ev_arg, EVENT_ARG_LINK_SOCKET, EVENT_ARG_MULTI_INSTANCE, EVENT_READ, EVENT_WRITE, get_signal(), link_socket::info, IS_SIG, management_io(), multi_context::mbuf, mbuf_peek(), event_arg::mi, MPP_PRE_SELECT, MPP_RECORD_TOUCH, msg, multi_create_instance_tcp(), multi_context::multi_io, multi_io_action(), MULTI_IO_DCO, MULTI_IO_FILE_CLOSE_WRITE, MULTI_IO_MANAGEMENT, MULTI_IO_SIG, MULTI_IO_TUN, MULTI_N, multi_process_io_udp(), multi_io::n_esr, multi_context::pending, link_socket_info::proto, proto_is_dgram(), event_set_return::rwflags, context::sig, signal_info::signal_received, event_arg::sock, socket_reset_listen_persistent(), TA_INITIAL, TA_SOCKET_READ, TA_SOCKET_WRITE, TA_SOCKET_WRITE_READY, TA_TUN_READ, TA_TUN_WRITE, multi_context::top, context_1::tuntap, event_arg::type, and event_arg::u.
Referenced by tunnel_server_loop().
| bool multi_io_send_link | ( | struct multi_context * | m, |
| struct multi_instance * | mi, | ||
| const unsigned int | mpp_flags | ||
| ) |
Definition at line 349 of file multi_io.c.
References context::c2, clear_prefix(), multi_instance::context, context_2::link_sockets, multi_process_post(), process_outgoing_link(), and set_prefix().
Referenced by multi_io_write_link(), multi_io_write_link_deferred(), and multi_process_outgoing_link().
| int multi_io_wait | ( | struct multi_context * | m | ) |
Definition at line 166 of file multi_io.c.
References context::c1, context::c2, tuntap::dco, dco_event_set(), multi_io::es, multi_io::esr, link_socket::ev_arg, event_ctl(), EVENT_READ, event_wait(), link_socket::info, context_2::link_sockets, context_1::link_sockets_num, multi_io::management_persist_flags, management_socket_set(), multi_io::maxevents, multi_context::multi_io, MULTI_IO_DCO, MULTI_IO_FILE_CLOSE_WRITE, MULTI_IO_MANAGEMENT, multi_io_process_flags(), MULTI_IO_TUN, multi_io::n_esr, p2mp_iow_flags(), link_socket_info::proto, proto_is_dgram(), socket_set_listen_persistent(), status, context_2::timeval, multi_context::top, multi_io::tun_rwflags, tun_set(), context_1::tuntap, tuntap_is_dco_win(), and update_time().
Referenced by tunnel_server_loop().
|
static |
Definition at line 215 of file multi_io.c.
References context::c2, D_MULTI_DEBUG, dmsg, context_2::event_set_status, io_wait(), IOW_READ_TUN_FORCE, IOW_TO_LINK, IOW_TO_TUN, M_FATAL, msg, multi_get_context(), pract(), ptr_format, SOCKET_WRITE, TA_SOCKET_WRITE, TA_SOCKET_WRITE_DEFERRED, TA_TUN_WRITE, TA_TUN_WRITE_TIMEOUT, TA_UNDEF, context_2::timeval, TUN_READ, TUN_WRITE, and tv_clear().
Referenced by multi_io_action().
|
static |
Definition at line 381 of file multi_io.c.
References BLEN, mbuf_buffer::buf, buf_reset(), mbuf_item::buffer, context::c2, clear_prefix(), multi_instance::context, D_MULTI_TCP, dmsg, link_socket::info, mbuf_item::instance, context_2::link_sockets, mbuf_add_item(), mbuf_alloc_buf(), mbuf_defined(), mbuf_free_buf(), multi_io_send_link(), multi_io_write_link_pre(), multi_process_post(), link_socket_info::proto, proto_is_dgram(), set_prefix(), multi_instance::tcp_link_out_deferred, and context_2::to_link.
Referenced by multi_io_dispatch().
|
static |
Definition at line 360 of file multi_io.c.
References ASSERT, mbuf_buffer::buf, mbuf_item::buffer, context::c2, multi_instance::context, D_MULTI_TCP, dmsg, mbuf_item::instance, mbuf_extract_item(), mbuf_free_buf(), multi_io_send_link(), multi_instance::tcp_link_out_deferred, and context_2::to_link.
Referenced by multi_io_dispatch().
|
static |
Definition at line 333 of file multi_io.c.
References multi_context::mbuf, mbuf_defined(), multi_get_queue(), and multi_context::pending.
Referenced by multi_io_write_link().
|
static |
Definition at line 140 of file multi_io.c.
References context::c2, multi_instance::context, IOW_READ, IOW_TO_LINK, IOW_TO_TUN, IOW_WAIT_SIGNAL, LINK_OUT, context_2::link_sockets, multi_context::pending, and TUN_OUT.
Referenced by multi_io_wait().
|
static |
Definition at line 51 of file multi_io.c.
References TA_INITIAL, TA_SOCKET_READ, TA_SOCKET_READ_RESIDUAL, TA_SOCKET_WRITE, TA_SOCKET_WRITE_DEFERRED, TA_SOCKET_WRITE_READY, TA_TIMEOUT, TA_TUN_READ, TA_TUN_WRITE, TA_TUN_WRITE_TIMEOUT, and TA_UNDEF.
Referenced by multi_io_action(), multi_io_dispatch(), multi_io_post(), and multi_io_wait_lite().