diff --git a/CHANGELOG.md b/CHANGELOG.md index e4a71db..35654a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ This project follows [semantic versioning](http://semver.org). - [changed] Warning for missing router is now info - [changed] New warning on claimed addresses in learning mode - [changed] Updated dependencies +- [changed] Rewrote argument parsing - [fixed] Fixed problem that could lead to 100% cpu consumption diff --git a/Cargo.lock b/Cargo.lock index be20e6b..b99912b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,11 +1,11 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. [[package]] -name = "aho-corasick" -version = "0.7.10" +name = "ansi_term" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -18,6 +18,16 @@ dependencies = [ "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "hermit-abi 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.71 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "base-x" version = "0.2.6" @@ -53,6 +63,20 @@ name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "clap" +version = "2.33.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "vec_map 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "daemonize" version = "0.4.1" @@ -67,17 +91,6 @@ name = "discard" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "docopt" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", - "strsim 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "dtoa" version = "0.4.5" @@ -98,6 +111,22 @@ dependencies = [ "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "heck" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hermit-abi" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.71 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "http" version = "0.2.1" @@ -137,10 +166,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "js-sys" -version = "0.3.39" +version = "0.3.40" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen 0.2.63 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -171,11 +200,6 @@ name = "matches" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "memchr" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "nix" version = "0.14.1" @@ -229,6 +253,30 @@ dependencies = [ "nix 0.16.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "proc-macro-error" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro-error-attr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "syn-mid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "proc-macro-hack" version = "0.5.16" @@ -292,22 +340,6 @@ name = "redox_syscall" version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "regex" -version = "1.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex-syntax" -version = "0.6.17" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "remove_dir_all" version = "0.5.2" @@ -326,7 +358,7 @@ dependencies = [ "once_cell 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "untrusted 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "web-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", + "web-sys 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -360,9 +392,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "serde" version = "1.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "serde_derive" @@ -439,7 +468,7 @@ dependencies = [ "stdweb-derive 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "stdweb-internal-macros 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", "stdweb-internal-runtime 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen 0.2.63 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -476,9 +505,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "strsim" -version = "0.9.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "structopt" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "clap 2.33.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt-derive 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "structopt-derive" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-error 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "syn" version = "1.0.27" @@ -489,6 +540,16 @@ dependencies = [ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "syn-mid" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "tempfile" version = "3.1.0" @@ -503,11 +564,11 @@ dependencies = [ ] [[package]] -name = "thread_local" -version = "1.0.1" +name = "textwrap" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -561,6 +622,16 @@ dependencies = [ "smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "unicode-segmentation" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-width" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "unicode-xid" version = "0.2.0" @@ -581,6 +652,11 @@ dependencies = [ "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "version_check" version = "0.9.2" @@ -597,7 +673,6 @@ version = "1.3.0" dependencies = [ "cc 1.0.54 (registry+https://github.com/rust-lang/crates.io-index)", "daemonize 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "docopt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", "igd 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.71 (registry+https://github.com/rust-lang/crates.io-index)", @@ -611,6 +686,7 @@ dependencies = [ "serde_yaml 0.8.12 (registry+https://github.com/rust-lang/crates.io-index)", "signal 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "siphasher 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", "yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -623,16 +699,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "wasm-bindgen" -version = "0.2.62" +version = "0.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-macro 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-macro 0.2.63 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.62" +version = "0.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bumpalo 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -641,42 +717,42 @@ dependencies = [ "proc-macro2 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "syn 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-shared 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-shared 0.2.63 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.62" +version = "0.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-macro-support 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-macro-support 0.2.63 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.62" +version = "0.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "syn 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-backend 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-shared 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-backend 0.2.63 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-shared 0.2.63 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.62" +version = "0.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "web-sys" -version = "0.3.39" +version = "0.3.40" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "js-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", + "js-sys 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen 0.2.63 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -720,8 +796,9 @@ dependencies = [ ] [metadata] -"checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada" +"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" "checksum attohttpc 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "baf13118df3e3dce4b5ac930641343b91b656e4e72c8f8325838b01a4b1c9d45" +"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" "checksum base-x 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1b20b618342cf9891c292c4f5ac2cde7287cc5c87e87e9c769d617793607dec1" "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" "checksum boxfnonce 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5988cb1d626264ac94100be357308f29ff7cbdd3b36bda27f450a4ee3f713426" @@ -729,23 +806,24 @@ dependencies = [ "checksum bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" "checksum cc 1.0.54 (registry+https://github.com/rust-lang/crates.io-index)" = "7bbb73db36c1246e9034e307d0fba23f9a2e251faa47ade70c1bd252220c8311" "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +"checksum clap 2.33.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129" "checksum daemonize 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "70c24513e34f53b640819f0ac9f705b673fcf4006d7aab8778bee72ebfc89815" "checksum discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" -"checksum docopt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f525a586d310c87df72ebcd98009e57f1cc030c8c268305287a476beb653969" "checksum dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" "checksum fnv 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" "checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" +"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +"checksum hermit-abi 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "91780f809e750b0a89f5544be56617ff6b1227ee485bcb06ebe10cdf89bd3b71" "checksum http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9" "checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" "checksum igd 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9e8cad093dcfafa3770b737b9d570cf4d44177e90785385716d90322ef60ddc4" "checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" -"checksum js-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5a448de267e7358beaf4a5d849518fe9a0c13fce7afd44b06e68550e5562a7" +"checksum js-sys 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "ce10c23ad2ea25ceca0093bd3192229da4c5b3c0f2de499c1ecac0d98d452177" "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" "checksum libc 0.2.71 (registry+https://github.com/rust-lang/crates.io-index)" = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49" "checksum linked-hash-map 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" -"checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" "checksum nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce" "checksum nix 0.16.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dd0eaf8df8bab402257e0a5c17a254e4cc1f72a93588a1ddfb5d356c801aa7cb" "checksum once_cell 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d" @@ -753,6 +831,8 @@ dependencies = [ "checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" "checksum ppv-lite86 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea" "checksum privdrop 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "939fa7cbfef9c15c65cf2fb3ed57f3f2a14dca1757a556aa1ba4a7f998b2b479" +"checksum proc-macro-error 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "98e9e4b82e0ef281812565ea4751049f1bdcdfccda7d3f459f2e138a40c08678" +"checksum proc-macro-error-attr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4f5444ead4e9935abd7f27dc51f7e852a0569ac888096d5ec2499470794e2e53" "checksum proc-macro-hack 0.5.16 (registry+https://github.com/rust-lang/crates.io-index)" = "7e0456befd48169b9f13ef0f0ad46d492cf9d2dbb918bcf38e01eed4ce3ec5e4" "checksum proc-macro2 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "1502d12e458c49a4c9cbff560d0fe0060c252bc29799ed94ca2ed4bb665a0101" "checksum quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "54a21852a652ad6f610c9510194f398ff6f8692e334fd1145fed931f7fbe44ea" @@ -761,8 +841,6 @@ dependencies = [ "checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" "checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" "checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" -"checksum regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a6020f034922e3194c711b82a627453881bc4682166cabb07134a10c26ba7692" -"checksum regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae" "checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" "checksum ring 0.16.13 (registry+https://github.com/rust-lang/crates.io-index)" = "703516ae74571f24b465b4a1431e81e2ad51336cb0ded733a55a1aa3eccac196" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" @@ -783,27 +861,33 @@ dependencies = [ "checksum stdweb-derive 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" "checksum stdweb-internal-macros 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" "checksum stdweb-internal-runtime 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" -"checksum strsim 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" +"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +"checksum structopt 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "863246aaf5ddd0d6928dfeb1a9ca65f505599e4e1b399935ef7e75107516b4ef" +"checksum structopt-derive 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d239ca4b13aee7a2142e6795cbd69e457665ff8037aed33b3effdc430d2f927a" "checksum syn 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)" = "ef781e621ee763a2a40721a8861ec519cb76966aee03bb5d00adb6a31dc1c1de" +"checksum syn-mid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" "checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" -"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" "checksum time 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)" = "3a51cadc5b1eec673a685ff7c33192ff7b7603d0b75446fb354939ee615acb15" "checksum time-macros 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9ae9b6e9f095bc105e183e3cd493d72579be3181ad4004fceb01adbe9eecab2d" "checksum time-macros-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" "checksum unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" +"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" +"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" "checksum untrusted 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" "checksum url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" +"checksum vec_map 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" "checksum version_check 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -"checksum wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "e3c7d40d09cdbf0f4895ae58cf57d92e1e57a9dd8ed2e8390514b54a47cc5551" -"checksum wasm-bindgen-backend 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "c3972e137ebf830900db522d6c8fd74d1900dcfc733462e9a12e942b00b4ac94" -"checksum wasm-bindgen-macro 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "2cd85aa2c579e8892442954685f0d801f9129de24fa2136b2c6a539c76b65776" -"checksum wasm-bindgen-macro-support 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "8eb197bd3a47553334907ffd2f16507b4f4f01bbec3ac921a7719e0decdfe72a" -"checksum wasm-bindgen-shared 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "a91c2916119c17a8e316507afaaa2dd94b47646048014bbdf6bef098c1bb58ad" -"checksum web-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)" = "8bc359e5dd3b46cb9687a051d50a2fdd228e4ba7cf6fcf861a5365c3d671a642" +"checksum wasm-bindgen 0.2.63 (registry+https://github.com/rust-lang/crates.io-index)" = "4c2dc4aa152834bc334f506c1a06b866416a8b6697d5c9f75b9a689c8486def0" +"checksum wasm-bindgen-backend 0.2.63 (registry+https://github.com/rust-lang/crates.io-index)" = "ded84f06e0ed21499f6184df0e0cb3494727b0c5da89534e0fcc55c51d812101" +"checksum wasm-bindgen-macro 0.2.63 (registry+https://github.com/rust-lang/crates.io-index)" = "838e423688dac18d73e31edce74ddfac468e37b1506ad163ffaf0a46f703ffe3" +"checksum wasm-bindgen-macro-support 0.2.63 (registry+https://github.com/rust-lang/crates.io-index)" = "3156052d8ec77142051a533cdd686cba889537b213f948cd1d20869926e68e92" +"checksum wasm-bindgen-shared 0.2.63 (registry+https://github.com/rust-lang/crates.io-index)" = "c9ba19973a58daf4db6f352eda73dc0e289493cd29fb2632eb172085b6521acd" +"checksum web-sys 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "7b72fe77fd39e4bd3eaa4412fd299a0be6b3dfe9d2597e2f1c20beb968f41d17" "checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml index a495b99..3ac563d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ edition = "2018" [dependencies] time = "0.2" -docopt = "^1" +structopt = "0.3" serde = "1.0" serde_derive = "1.0" serde_yaml = "0.8" diff --git a/src/config.rs b/src/config.rs index 5b1047b..c24899b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -172,76 +172,76 @@ impl Config { } pub fn merge_args(&mut self, mut args: Args) { - if let Some(val) = args.flag_type { + if let Some(val) = args.type_ { self.device_type = val; } - if let Some(val) = args.flag_device { + if let Some(val) = args.device { self.device_name = val; } - if let Some(val) = args.flag_device_path { + if let Some(val) = args.device_path { self.device_path = Some(val); } - if let Some(val) = args.flag_ifup { + if let Some(val) = args.ifup { self.ifup = Some(val); } - if let Some(val) = args.flag_ifdown { + if let Some(val) = args.ifdown { self.ifdown = Some(val); } - if let Some(val) = args.flag_crypto { + if let Some(val) = args.crypto { self.crypto = val; } - if let Some(val) = args.flag_shared_key { + if let Some(val) = args.key { self.shared_key = Some(val); } - if let Some(val) = args.flag_network_id { + if let Some(val) = args.network_id { warn!("The --network-id argument is deprecated, please use --magic instead."); self.magic = Some(val); } - if let Some(val) = args.flag_magic { + if let Some(val) = args.magic { self.magic = Some(val); } - if let Some(val) = args.flag_listen { + if let Some(val) = args.listen { self.listen = parse_listen(&val); } - self.peers.append(&mut args.flag_connect); - if let Some(val) = args.flag_peer_timeout { + self.peers.append(&mut args.connect); + if let Some(val) = args.peer_timeout { self.peer_timeout = val; } - if let Some(val) = args.flag_keepalive { + if let Some(val) = args.keepalive { self.keepalive = Some(val); } - if let Some(val) = args.flag_beacon_store { + if let Some(val) = args.beacon_store { self.beacon_store = Some(val); } - if let Some(val) = args.flag_beacon_load { + if let Some(val) = args.beacon_load { self.beacon_load = Some(val); } - if let Some(val) = args.flag_beacon_interval { + if let Some(val) = args.beacon_interval { self.beacon_interval = val; } - if let Some(val) = args.flag_mode { + if let Some(val) = args.mode { self.mode = val; } - if let Some(val) = args.flag_dst_timeout { + if let Some(val) = args.dst_timeout { self.dst_timeout = val; } - self.subnets.append(&mut args.flag_subnet); - if args.flag_no_port_forwarding { + self.subnets.append(&mut args.subnets); + if args.no_port_forwarding { self.port_forwarding = false; } - if args.flag_daemon { + if args.daemon { self.daemonize = true; } - if let Some(val) = args.flag_pid_file { + if let Some(val) = args.pid_file { self.pid_file = Some(val); } - if let Some(val) = args.flag_stats_file { + if let Some(val) = args.stats_file { self.stats_file = Some(val); } - if let Some(val) = args.flag_user { + if let Some(val) = args.user { self.user = Some(val); } - if let Some(val) = args.flag_group { + if let Some(val) = args.group { self.group = Some(val); } } @@ -417,30 +417,30 @@ fn config_merge() { ..Default::default() }); config.merge_args(Args { - flag_type: Some(Type::Tap), - flag_device: Some("vpncloud0".to_string()), - flag_device_path: Some("/dev/null".to_string()), - flag_ifup: Some("ifconfig $IFNAME 10.0.1.2/16 mtu 1400 up".to_string()), - flag_ifdown: Some("ifconfig $IFNAME down".to_string()), - flag_crypto: Some(CryptoMethod::ChaCha20), - flag_shared_key: Some("anothersecret".to_string()), - flag_magic: Some("hash:mynet".to_string()), - flag_listen: Some("3211".to_string()), - flag_peer_timeout: Some(1801), - flag_keepalive: Some(850), - flag_dst_timeout: Some(301), - flag_beacon_store: Some("/run/vpncloud.beacon.out2".to_string()), - flag_beacon_load: Some("/run/vpncloud.beacon.in2".to_string()), - flag_beacon_interval: Some(3600), - flag_mode: Some(Mode::Switch), - flag_subnet: vec![], - flag_connect: vec!["another:3210".to_string()], - flag_no_port_forwarding: true, - flag_daemon: true, - flag_pid_file: Some("/run/vpncloud-mynet.run".to_string()), - flag_stats_file: Some("/var/log/vpncloud-mynet.stats".to_string()), - flag_user: Some("root".to_string()), - flag_group: Some("root".to_string()), + type_: Some(Type::Tap), + device: Some("vpncloud0".to_string()), + device_path: Some("/dev/null".to_string()), + ifup: Some("ifconfig $IFNAME 10.0.1.2/16 mtu 1400 up".to_string()), + ifdown: Some("ifconfig $IFNAME down".to_string()), + crypto: Some(CryptoMethod::ChaCha20), + key: Some("anothersecret".to_string()), + magic: Some("hash:mynet".to_string()), + listen: Some("3211".to_string()), + peer_timeout: Some(1801), + keepalive: Some(850), + dst_timeout: Some(301), + beacon_store: Some("/run/vpncloud.beacon.out2".to_string()), + beacon_load: Some("/run/vpncloud.beacon.in2".to_string()), + beacon_interval: Some(3600), + mode: Some(Mode::Switch), + subnets: vec![], + connect: vec!["another:3210".to_string()], + no_port_forwarding: true, + daemon: true, + pid_file: Some("/run/vpncloud-mynet.run".to_string()), + stats_file: Some("/var/log/vpncloud-mynet.stats".to_string()), + user: Some("root".to_string()), + group: Some("root".to_string()), ..Default::default() }); assert_eq!(config, Config { diff --git a/src/crypto.rs b/src/crypto.rs index 287dcc3..b6cb6fb 100644 --- a/src/crypto.rs +++ b/src/crypto.rs @@ -2,7 +2,7 @@ // Copyright (C) 2015-2020 Dennis Schwerdel // This software is licensed under GPL-3 or newer (see LICENSE.md) -use std::num::NonZeroU32; +use std::{num::NonZeroU32, str::FromStr}; use ring::{aead::*, pbkdf2, rand::*}; @@ -19,6 +19,17 @@ pub enum CryptoMethod { #[serde(rename = "aes256")] AES256 } +impl FromStr for CryptoMethod { + type Err = &'static str; + + fn from_str(text: &str) -> Result { + Ok(match &text.to_lowercase() as &str { + "chacha20" | "chacha" => Self::ChaCha20, + "aes256" | "aes" => Self::AES256, + _ => return Err("Unknown method") + }) + } +} pub struct CryptoData { crypto_key: LessSafeKey, diff --git a/src/device.rs b/src/device.rs index ba02173..8c9cfb0 100644 --- a/src/device.rs +++ b/src/device.rs @@ -6,7 +6,8 @@ use std::{ collections::VecDeque, fmt, fs, io::{self, Error as IoError, ErrorKind, Read, Write}, - os::unix::io::{AsRawFd, RawFd} + os::unix::io::{AsRawFd, RawFd}, + str::FromStr }; use super::types::Error; @@ -23,7 +24,7 @@ pub enum Type { /// Tun interface: This interface transports IP packets. #[serde(rename = "tun")] Tun, - /// Tap interface: This insterface transports Ethernet frames. + /// Tap interface: This interface transports Ethernet frames. #[serde(rename = "tap")] Tap, /// Dummy interface: This interface does nothing. @@ -41,6 +42,18 @@ impl fmt::Display for Type { } } +impl FromStr for Type { + type Err = &'static str; + + fn from_str(text: &str) -> Result { + Ok(match &text.to_lowercase() as &str { + "tun" => Self::Tun, + "tap" => Self::Tap, + "dummy" => Self::Dummy, + _ => return Err("Unknown device type") + }) + } +} pub trait Device: AsRawFd { /// Returns the type of this device diff --git a/src/main.rs b/src/main.rs index 52f70e7..eda6ef6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,7 +30,7 @@ pub mod traffic; pub mod types; pub mod udpmessage; -use docopt::Docopt; +use structopt::StructOpt; use std::{ fs::{self, File, Permissions}, @@ -59,41 +59,127 @@ use crate::{ const VERSION: u8 = 1; const MAGIC: HeaderMagic = *b"vpn\x01"; -static USAGE: &str = include_str!("usage.txt"); - -#[derive(Deserialize, Debug, Default)] +#[derive(StructOpt, Debug, Default)] pub struct Args { - flag_config: Option, - flag_type: Option, - flag_device_path: Option, - flag_mode: Option, - flag_shared_key: Option, - flag_crypto: Option, - flag_subnet: Vec, - flag_device: Option, - flag_listen: Option, - flag_network_id: Option, - flag_magic: Option, - flag_connect: Vec, - flag_peer_timeout: Option, - flag_keepalive: Option, - flag_dst_timeout: Option, - flag_beacon_store: Option, - flag_beacon_load: Option, - flag_beacon_interval: Option, - flag_verbose: bool, - flag_quiet: bool, - flag_ifup: Option, - flag_ifdown: Option, - flag_version: bool, - flag_no_port_forwarding: bool, - flag_daemon: bool, - flag_pid_file: Option, - flag_stats_file: Option, - flag_user: Option, - flag_group: Option, - flag_log_file: Option + /// Read configuration options from the specified file. + #[structopt(long)] + config: Option, + + /// Set the type of network ("tap" or "tun") + #[structopt(name = "type", short, long)] + type_: Option, + + /// Set the path of the base device + #[structopt(long)] + device_path: Option, + + /// The mode of the VPN ("normal", "router", "switch", or "hub") + #[structopt(short, long)] + mode: Option, + + /// The shared key to encrypt all traffic + #[structopt(short, long, aliases=&["shared-key", "secret-key", "secret"])] + key: Option, + + /// The encryption method to use ("aes256", or "chacha20") + #[structopt(long)] + crypto: Option, + + /// The local subnets to use + #[structopt(short, long)] + subnets: Vec, + + /// Name of the virtual device + #[structopt(short, long)] + device: Option, + + /// The port number (or ip:port) on which to listen for data + #[structopt(short, long)] + listen: Option, + + /// Optional token that identifies the network. (DEPRECATED) + #[structopt(long)] + network_id: Option, + + /// Override the 4-byte magic header of each packet + #[structopt(long)] + magic: Option, + + /// Address of a peer to connect to + #[structopt(short, long)] + connect: Vec, + + /// Peer timeout in seconds + #[structopt(long)] + peer_timeout: Option, + /// Periodically send message to keep connections alive + #[structopt(long)] + keepalive: Option, + + /// Switch table entry timeout in seconds + #[structopt(long)] + dst_timeout: Option, + + /// The file path or |command to store the beacon + #[structopt(long)] + beacon_store: Option, + + /// The file path or |command to load the beacon + #[structopt(long)] + beacon_load: Option, + + /// Beacon store/load interval in seconds + #[structopt(long)] + beacon_interval: Option, + + /// Print debug information + #[structopt(short, long, conflicts_with = "quiet")] + verbose: bool, + + /// Only print errors and warnings + #[structopt(short, long)] + quiet: bool, + + /// A command to setup the network interface + #[structopt(long)] + ifup: Option, + + /// A command to bring down the network interface + #[structopt(long)] + ifdown: Option, + + /// Print the version and exit + #[structopt(long)] + version: bool, + + /// Disable automatic port forwarding + #[structopt(long)] + no_port_forwarding: bool, + + /// Run the process in the background + #[structopt(long)] + daemon: bool, + + /// Store the process id in this file when daemonizing + #[structopt(long)] + pid_file: Option, + + /// Print statistics to this file + #[structopt(long)] + stats_file: Option, + + /// Run as other user + #[structopt(long)] + user: Option, + + /// Run as other group + #[structopt(long)] + group: Option, + + /// Print logs also to this file + #[structopt(long)] + log_file: Option } struct DualLogger { @@ -326,23 +412,23 @@ fn run(config: Config) { } fn main() { - let args: Args = Docopt::new(USAGE).and_then(|d| d.deserialize()).unwrap_or_else(|e| e.exit()); - if args.flag_version { + let args: Args = Args::from_args(); + if args.version { println!("VpnCloud v{}, protocol version {}", env!("CARGO_PKG_VERSION"), VERSION); return } - let logger = try_fail!(DualLogger::new(args.flag_log_file.as_ref()), "Failed to open logfile: {}"); + let logger = try_fail!(DualLogger::new(args.log_file.as_ref()), "Failed to open logfile: {}"); log::set_boxed_logger(Box::new(logger)).unwrap(); - assert!(!args.flag_verbose || !args.flag_quiet); - log::set_max_level(if args.flag_verbose { + assert!(!args.verbose || !args.quiet); + log::set_max_level(if args.verbose { log::LevelFilter::Debug - } else if args.flag_quiet { + } else if args.quiet { log::LevelFilter::Error } else { log::LevelFilter::Info }); let mut config = Config::default(); - if let Some(ref file) = args.flag_config { + if let Some(ref file) = args.config { info!("Reading config file '{}'", file); let f = try_fail!(File::open(file), "Failed to open config file: {:?}"); let config_file = try_fail!(serde_yaml::from_reader(f), "Failed to load config file: {:?}"); diff --git a/src/types.rs b/src/types.rs index dfbc4c9..9838522 100644 --- a/src/types.rs +++ b/src/types.rs @@ -206,6 +206,19 @@ impl fmt::Display for Mode { } } } +impl FromStr for Mode { + type Err = &'static str; + + fn from_str(text: &str) -> Result { + Ok(match &text.to_lowercase() as &str { + "normal" => Self::Normal, + "hub" => Self::Hub, + "switch" => Self::Switch, + "router" => Self::Router, + _ => return Err("Unknown mode") + }) + } +} pub trait Table { fn learn(&mut self, _: Address, _: Option, _: SocketAddr); diff --git a/src/usage.txt b/src/usage.txt deleted file mode 100644 index 93e6a96..0000000 --- a/src/usage.txt +++ /dev/null @@ -1,43 +0,0 @@ -Usage: - vpncloud [options] [--config ] [-t ] [-d ] [-l ] [-c ...] [-s ...] - -Options: - --config Read configuration options from the - specified file. - -t , --type Set the type of network ("tap" or "tun"). - --device-path Set the path of the base device. - -d , --device Name of the virtual device. - -m , --mode The mode of the VPN ("hub", "switch", - "router", or "normal"). - -l , --listen The port number on which to listen for data. - -c , --connect Address of a peer to connect to. - -s , --subnet The local subnets to use. - --magic Override the 4-byte magic header of each - packet. - --network-id Optional token that identifies the network. - (DEPRECATED) - --shared-key The shared key to encrypt all traffic. - --crypto The encryption method to use ("aes256", or - "chacha20"). - --peer-timeout Peer timeout in seconds. - --keepalive Periodically send message to keep - connections alive. - --dst-timeout Switch table entry timeout in seconds. - --beacon-store The file or command to store the beacon. - --beacon-load The file or command to load the beacon. - --beacon-interval Beacon store/load interval in seconds. - --ifup A command to setup the network interface. - --ifdown A command to bring down the network - interface. - --pid-file Store the process id in this file when - daemonizing. - --user Run as other user. - --group Run as other group. - --log-file Print logs also to this file. - --stats-file Print statistics to this file. - --no-port-forwarding Disable automatic port forward. - --daemon Run the process in the background. - -v, --verbose Print debug information. - -q, --quiet Only print errors and warnings. - -h, --help Display the help. - -V, --version Print the version and exit.