1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//! OpenVPN server.
//!
//! This module ports the Go `ovpn` subpackage. The control channel runs a
//! `rustls::ServerConnection` *inside* OpenVPN's own reliable transport (no TCP
//! socket under the TLS); the data channel uses RustCrypto AES-GCM / AES-CBC.
//!
//! What works:
//! - [`Options`] parse / `Display` (`V4,dev-type tun,…`).
//! - TLS 1.2 control channel over the reliable layer (rustls in buffered mode).
//! - Key-method 2 key exchange and TLS-1.0 PRF key derivation.
//! - Data channel: AES-256/128-GCM (AEAD) and AES-CBC + HMAC.
//! - Replay window, PKCS#7 padding, control-packet framing.
//! - UDP and TCP [`Server`]; per-peer [`Adapter`] over an `L3Connector` (tun)
//! or `L2Connector` (tap).
//!
//! TODO (tracked under `// TODO(ovpn): …` markers):
//! - tls-crypt / tls-auth HMAC wrapping of control packets.
//! - Retransmission timers for unacknowledged control packets (the reliable
//! layer tracks them but the server does not yet retransmit).
//! - Full PUSH_REPLY option negotiation beyond ifconfig/ping/comp-lzo.
//! - Idle-peer reaping / keepalive ping generation.
pub use ;
pub use ;
pub use ;
pub use Opcode;
pub use Options;
pub use ;
pub use ;