[package] name = "easytier" description = "A full meshed p2p VPN, connecting all your devices in one network with one command." homepage = "https://github.com/EasyTier/EasyTier" repository = "https://github.com/EasyTier/EasyTier" version = "2.6.4" edition.workspace = true rust-version.workspace = true authors = ["kkrainbow"] keywords = ["vpn", "p2p", "network", "easytier"] categories = ["network-programming", "command-line-utilities"] license-file = "LICENSE" readme = "README.md" build = "build/main.rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [[bin]] name = "easytier-core" path = "src/easytier-core.rs" test = false required-features = ["management"] [[bin]] name = "easytier-cli" path = "src/easytier-cli.rs" required-features = ["management"] [lib] name = "easytier" path = "src/lib.rs" [[bench]] name = "packet_bytes_extraction" harness = false [dependencies] easytier-core = { path = "../easytier-core", version = "2.6.4", default-features = false } easytier-proto = { path = "../easytier-proto", version = "2.6.4", default-features = false, features = ["api", "core"] } git-version = "0.3.9" tracing = "0.1" log = { version = "0.4", features = ["std"] } tracing-subscriber = { version = "0.3", default-features = false, features = [ "registry", ], optional = true } derive_more = { version = "2.1.1", features = ["full"] } console-subscriber = { version = "0.4.1", optional = true } indoc = "2.0.7" paste = "1.0" thiserror = "1.0" auto_impl = "1.1.0" crossbeam = "0.8.4" arc-swap = "1.7" toml = "0.8.12" chrono = { version = "0.4.37", features = ["serde"] } guarden = "0.2" quanta = "0.12" strum = { version = "0.27.2", features = ["derive"] } gethostname = "0.5.0" futures = { version = "0.3", features = ["bilock", "unstable"] } tokio = { version = "1", default-features = false, features = [ "fs", "io-util", "macros", "net", "process", "rt", "signal", "sync", "time", ] } tokio-util = { version = "0.7.9", features = ["codec", "net", "io", "rt"] } async-trait = "0.1.74" dashmap = "6.0" moka = { version = "0.12", features = ["future"] } # for full-path zero-copy zerocopy = { version = "0.7.32", features = ["derive", "simd"] } bytes = "1.5.0" pin-project-lite = "0.2.13" atomic_refcell = "0.1.13" quinn = { version = "0.11.8", optional = true, features = ["ring"] } quinn-proto = { version = "0.11.12", optional = true } seahash = { version = "4.1.0", optional = true } rustls = { version = "0.23.0", features = [ "ring", "tls12" ], default-features = false, optional = true } # for websocket tokio-websockets = { version = "0.13.2", git = "https://github.com/EasyTier/tokio-websockets", optional = true, features = [ "rustls-webpki-roots", "client", "server", "fastrand", "ring", ] } forwarded-header-value = { version = "0.1.1", optional = true } http = { version = "1", default-features = false, features = [ "std", ], optional = true } rcgen = { version = "0.12.1", optional = true } tokio-rustls = { version = "0.26", default-features = false, optional = true } # for tap device tun = { package = "tun-easytier", git = "https://github.com/EasyTier/rust-tun", features = [ "async", ], optional = true } # for net ns nix = { version = "0.29.0", features = [ "sched", "socket", "ioctl", "net", "fs", ] } uuid = { version = "1.5.0", features = [ "v4", "fast-rng", "macro-diagnostics", "serde", ] } # for ring tunnel once_cell = "1.18.0" # for rpc prost = "0.14.3" anyhow = "1.0" url = { version = "2.5", features = ["serde"] } percent-encoding = "2.3.1" # for tun packet byteorder = "1.5.0" # for proxy cidr = { version = "0.3.1", features = ["serde"] } socket2 = { version = "0.5.10", features = ["all"] } # for hole punching rand = "0.8.5" serde = { version = "1.0", features = ["derive"] } pnet = { version = "0.35.0", features = ["serde"] } serde_json = "1" clap = { version = "4.5.30", features = [ "string", "unicode", "derive", "wrap_help", "env", ] } clap_complete = { version = "4.5.55" } clap_complete_nushell = { version = "4.5.10" } async-recursion = "1.0.5" network-interface = "2.0" # for wireguard boringtun = { package = "boringtun-easytier", version = "0.6.1", optional = true } # for cli tabled = "0.16" humansize = "2.1.3" terminal_size = "0.4" unicode-width = "0.1" base64 = "0.22" mimalloc = { version = "*", optional = true } # mips atomic-shim = "0.2.0" parking_lot = { version = "0.12.0" } rust-i18n = "3" sys-locale = "0.3" service-manager = { git = "https://github.com/EasyTier/service-manager-rs.git", branch = "main" } kcp-sys = { git = "https://github.com/EasyTier/kcp-sys", rev = "d7427c22d764deb1860a7d37acc446ed5033464c", optional = true } # for dns connector hickory-resolver = { version = "0.25.2", optional = true } hickory-proto = { version = "0.25.2", optional = true } # for magic dns hickory-client = { version = "0.25.2", optional = true } hickory-server = { version = "0.25.2", features = [ "resolver", ], optional = true } bon = "3.9.1" derive_builder = "0.20.2" humantime-serde = "1.1.1" shellexpand = "3.1.1" # for fake tcp flume = { version = "0.12", optional = true } igd-next = { version = "0.17.0", features = ["aio_tokio"], optional = true } natpmp = { version = "0.5.0", optional = true } [target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "windows", target_os = "freebsd"))'.dependencies] machine-uid = "0.5.3" [target.'cfg(any(target_os = "linux"))'.dependencies] netlink-sys = { version = "0.8.7", optional = true } [target.'cfg(all(windows, any(target_arch = "x86_64", target_arch = "x86")))'.dependencies] windivert = { git = "https://github.com/EasyTier/windivert-rust.git", rev = "adcc56d1550f7b5377ec2b3429f413ee24a77375", features = [ "static", ] } [target.'cfg(windows)'.dependencies] windows = { version = "0.62.2", features = [ "Win32_Foundation", "Win32_NetworkManagement_IpHelper", "Win32_NetworkManagement_Ndis", "Win32_NetworkManagement_WindowsFirewall", "Win32_Networking", "Win32_System_Com", "Win32_System_Diagnostics", "Win32_System_Diagnostics_Debug", "Win32_System_Ole", "Win32_System_Variant", "Win32_Networking_WinSock", "Win32_System_IO", ] } encoding = "0.2" winreg = "0.52" windows-service = "0.7.0" winapi = { version = "0.3.9", features = ["impl-default"] } [target.'cfg(not(windows))'.dependencies] jemallocator = { package = "tikv-jemallocator", version = "0.6.0", optional = true, features = [ "unprefixed_malloc_on_supported_platforms", ] } jemalloc-ctl = { package = "tikv-jemalloc-ctl", version = "0.6.0", optional = true, features = [ "use_std", ] } [target.'cfg(not(target_os = "macos"))'.dependencies] jemalloc-sys = { package = "tikv-jemalloc-sys", version = "0.6.0", features = [ "background_threads_runtime_support", "background_threads", ], optional = true } [target.'cfg(target_os = "macos")'.dependencies] jemalloc-sys = { package = "tikv-jemalloc-sys", version = "0.6.0", features = [ ], optional = true } [build-dependencies] cfg_aliases = "0.2.1" globwalk = "0.8.1" regex = "1" thunk-rs = { git = "https://github.com/easytier/thunk.git", default-features = false, features = [ "win7", ] } [dev-dependencies] criterion = "0.5.1" easytier-core = { path = "../easytier-core", version = "2.6.4", default-features = false, features = [ "test-utils", ] } serial_test = "3.0.0" rstest = "0.25.0" futures-util = "0.3.31" maplit = "1.0.2" tempfile = "3.22.0" ctor = "0.8.0" stun_codec = "0.3.4" bytecodec = "0.4.15" x25519-dalek = { version = "2.0", features = ["static_secrets"] } [target.'cfg(target_os = "linux")'.dev-dependencies] defguard_wireguard_rs = "0.4.2" tokio-socks = "0.5.2" [features] default = [ "wireguard", "websocket", "smoltcp", "tun", "socks5", "kcp", "quic", "faketcp", "magic-dns", "zstd", "upnp", "icmp-proxy", "management", "endpoint-discovery", "extended-services", "linux-netlink", "tcp-hole-punch", ] full = [ "websocket", "wireguard", "aes-gcm", "openssl-crypto", "smoltcp", "tun", "socks5", "kcp", "quic", "faketcp", "magic-dns", "zstd", "upnp", "icmp-proxy", "management", "endpoint-discovery", "extended-services", "tcp-hole-punch", ] wireguard = ["vpn-portal", "dep:boringtun", "ring-crypto", "easytier-proto/wireguard"] quic = ["wrapped-transport", "easytier-core/proxy-packet", "dep:quinn", "dep:quinn-proto", "dep:seahash", "dep:rustls", "easytier-proto/quic"] kcp = ["wrapped-transport", "easytier-core/proxy-packet", "dep:kcp-sys"] mimalloc = ["dep:mimalloc"] aes-gcm = ["easytier-core/aes-gcm"] openssl-crypto = ["easytier-core/openssl-crypto"] ring-crypto = ["easytier-core/ring-crypto"] tun = ["dep:tun", "linux-netlink"] linux-netlink = ["dep:netlink-sys"] proxy-cidr-monitor = ["easytier-core/proxy-cidr-monitor"] websocket = [ "dep:tokio-websockets", "dep:forwarded-header-value", "dep:http", "dep:rcgen", "dep:tokio-rustls", "dep:rustls", "easytier-proto/websocket", ] smoltcp = ["easytier-core/proxy-smoltcp-stack"] icmp-proxy = ["easytier-core/proxy-packet"] socks5 = ["smoltcp"] ffi-dataplane = ["socks5"] jemalloc = ["dep:jemallocator", "dep:jemalloc-sys"] jemalloc-prof = [ "jemalloc", "dep:jemalloc-ctl", "jemalloc-ctl/stats", "jemalloc-sys/profiling", "jemalloc-sys/stats", ] tracing = ["tokio/tracing", "dep:console-subscriber", "dep:tracing-subscriber"] tracing-log = ["tracing/log", "easytier-core/tracing-log"] logging = [] dns-resolver = ["dep:hickory-proto", "dep:hickory-resolver"] magic-dns = [ "dns-resolver", "dep:hickory-client", "dep:hickory-server", "easytier-core/proxy-packet", "easytier-proto/magic-dns", ] faketcp = ["dep:flume", "easytier-proto/faketcp"] zstd = ["easytier-core/zstd", "easytier-proto/zstd"] upnp = ["dep:igd-next", "dep:natpmp"] endpoint-discovery = [ "dns-resolver", "easytier-core/endpoint-discovery", ] dhcp-ipv4 = ["easytier-core/dhcp-ipv4"] public-ipv6-provider = ["linux-netlink", "easytier-core/public-ipv6-provider"] vpn-portal = ["easytier-core/vpn-portal"] wrapped-transport = ["easytier-core/wrapped-transport"] extended-services = [ "dhcp-ipv4", "public-ipv6-provider", "vpn-portal", "wrapped-transport", "proxy-cidr-monitor", ] management = [ "logging", "management-rpc", "easytier-core/management", "easytier-proto/json-rpc", "easytier-proto/utils", "tokio/full", ] management-rpc = ["easytier-core/management-rpc"] tcp-hole-punch = ["easytier-core/tcp-hole-punch"] # Deprecated: hotpath profiling has been removed. These feature aliases are # retained as no-ops so existing build scripts using `--features hotpath*` # continue to work without pulling in any dependencies. hotpath = [] hotpath-cpu = ["hotpath"] hotpath-alloc = ["hotpath"] # For Network Extension on macOS macos-ne = []