Cross-compiling for ARMv7, updated dependencies, silenced clippy warnings

This commit is contained in:
Dennis Schwerdel 2016-06-21 08:57:20 +02:00
parent f933db2dd9
commit bebfc07ecd
9 changed files with 84 additions and 56 deletions

1
.gitignore vendored
View File

@ -5,3 +5,4 @@ vpncloud-oldnodes
deb/vpncloud/vpncloud
deb/vpncloud/vpncloud.1*
Stats.ods
.sodium-build

View File

@ -2,6 +2,12 @@
This project follows [semantic versioning](http://semver.org).
### UNRELEASED
- [changed] Updated dependencies
- [changed] Turned some clippy warnings off
- [changed] Cross-compiling for ARMv7
### v0.6.0 (2016-06-02)
- [added] Exponential backoff for reconnect timeouts

90
Cargo.lock generated
View File

@ -3,18 +3,18 @@ name = "vpncloud"
version = "0.6.0"
dependencies = [
"aligned_alloc 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"docopt 0.6.80 (registry+https://github.com/rust-lang/crates.io-index)",
"docopt 0.6.81 (registry+https://github.com/rust-lang/crates.io-index)",
"epoll 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"fnv 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"gcc 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"net2 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
"nix 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
"net2 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
"nix 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
"signal 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"signal 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -32,15 +32,10 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "bitflags"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "bitflags"
version = "0.4.0"
@ -53,7 +48,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "docopt"
version = "0.6.80"
version = "0.6.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"regex 0.1.71 (registry+https://github.com/rust-lang/crates.io-index)",
@ -66,17 +61,17 @@ name = "epoll"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"errno 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"errno 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "errno"
version = "0.1.6"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -101,12 +96,7 @@ dependencies = [
[[package]]
name = "libc"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "libc"
version = "0.2.11"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@ -119,37 +109,32 @@ name = "memchr"
version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "net2"
version = "0.2.23"
version = "0.2.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
"ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "nix"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "nix"
version = "0.5.0"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)",
"void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -162,7 +147,7 @@ name = "rand"
version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -188,13 +173,25 @@ version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "signal"
version = "0.1.4"
name = "rustc_version"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
"nix 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
"semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "semver"
version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "signal"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
"nix 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -208,7 +205,7 @@ version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -225,7 +222,7 @@ version = "0.1.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -234,6 +231,11 @@ name = "utf8-ranges"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "void"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "winapi"
version = "0.2.7"

View File

@ -17,7 +17,7 @@ rustc-serialize = "0.3"
log = "0.3"
epoll = "0.3"
signal = ">=0.1.4"
nix = "0.5"
nix = "0.6"
libc = "0.2"
aligned_alloc = "0.1"
rand = "0.3"

View File

@ -2,20 +2,34 @@ extern crate gcc;
extern crate pkg_config;
use std::process::Command;
use std::path::Path;
use std::path::PathBuf;
use std::env;
use std::fs;
fn main() {
if ! Path::new("libsodium/src/libsodium/.libs/libsodium.a").exists() {
let target = env::var("TARGET").unwrap();
Command::new("sh").arg("autogen.sh").current_dir("libsodium").status().unwrap();
let target = env::var("TARGET").unwrap();
let dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
let libsodium_dir = dir.join("libsodium");
let libsodium_target_dir = dir.join(".sodium-build").join(&target);
let libsodium_target_file = libsodium_target_dir.join("libsodium.a");
if ! libsodium_target_file.exists() {
fs::create_dir_all(&libsodium_target_dir).unwrap();
Command::new("make").arg("clean").current_dir(&libsodium_dir).status().unwrap();
Command::new("sh").arg("autogen.sh").current_dir(&libsodium_dir).status().unwrap();
let mut args = vec!["configure", "--host", &target];
if target.starts_with("i686-") {
args.extend(vec!["CFLAGS=-m32", "CXXFLAGS=-m32", "LDFLAGS=-m32"]);
}
Command::new("sh").args(&args).current_dir("libsodium").status().unwrap();
Command::new("make").current_dir("libsodium").status().unwrap();
if target.ends_with("-musl") {
args.extend(vec!["CC=musl-gcc"]);
}
if target == "armv7-unknown-linux-gnueabihf" {
args.extend(vec!["CC=arm-linux-gnueabihf-gcc"]);
}
Command::new("sh").args(&args).current_dir(&libsodium_dir).status().unwrap();
Command::new("make").current_dir(&libsodium_dir).status().unwrap();
fs::copy(libsodium_dir.join("src/libsodium/.libs/libsodium.a"), libsodium_target_file).unwrap();
}
gcc::Config::new().file("src/c/tuntap.c").include("src").compile("libtuntap.a");
println!("cargo:rustc-link-search={}", "libsodium/src/libsodium/.libs");
println!("cargo:rustc-link-search={}", libsodium_target_dir.to_str().unwrap());
}

View File

@ -10,12 +10,12 @@ use std::fmt;
use std::os::unix::io::AsRawFd;
use std::marker::PhantomData;
use std::hash::BuildHasherDefault;
use std::time::Instant;
use fnv::FnvHasher;
use epoll;
use nix::sys::signal::{SIGTERM, SIGQUIT, SIGINT};
use signal::trap::Trap;
use time::SteadyTime;
use rand::{random, sample, thread_rng};
use net2::UdpBuilder;
@ -174,6 +174,7 @@ pub struct GenericCloud<P: Protocol> {
}
impl<P: Protocol> GenericCloud<P> {
#[allow(too_many_arguments)]
pub fn new(device: Device, listen: u16, network_id: Option<NetworkId>, table: Box<Table>,
peer_timeout: Duration, learning: bool, broadcast: bool, addresses: Vec<Range>,
crypto: Crypto) -> Self {
@ -439,8 +440,9 @@ impl<P: Protocol> GenericCloud<P> {
Ok(())
}
#[allow(cyclomatic_complexity)]
pub fn run(&mut self) {
let dummy_time = SteadyTime::now();
let dummy_time = Instant::now();
let trap = Trap::trap(&[SIGINT, SIGTERM, SIGQUIT]);
let epoll_handle = try_fail!(epoll::create1(0), "Failed to create epoll handle: {}");
let socket4_fd = self.socket4.as_raw_fd();

View File

@ -180,11 +180,11 @@ impl Crypto {
pub fn nonce_bytes(&self) -> usize {
match *self {
Crypto::None => 0,
Crypto::ChaCha20Poly1305{ref nonce, ..} => nonce.len(),
Crypto::AES256GCM{ref nonce, ..} => nonce.len()
Crypto::ChaCha20Poly1305{ref nonce, ..} | Crypto::AES256GCM{ref nonce, ..} => nonce.len(),
}
}
#[allow(match_same_arms)]
pub fn additional_bytes(&self) -> usize {
match *self {
Crypto::None => 0,

View File

@ -108,6 +108,7 @@ impl fmt::Debug for Address {
impl FromStr for Address {
type Err=Error;
#[allow(needless_range_loop)]
fn from_str(text: &str) -> Result<Self, Self::Err> {
if let Ok(addr) = Ipv4Addr::from_str(text) {
let ip = addr.octets();

View File

@ -94,6 +94,7 @@ impl<'a> fmt::Debug for Message<'a> {
}
}
#[allow(needless_range_loop)]
pub fn decode<'a>(data: &'a mut [u8], crypto: &mut Crypto) -> Result<(Options, Message<'a>), Error> {
let mut end = data.len();
let (header, mut pos) = try!(TopHeader::read_from(&data[..end]));
@ -193,6 +194,7 @@ pub fn decode<'a>(data: &'a mut [u8], crypto: &mut Crypto) -> Result<(Options, M
Ok((options, msg))
}
#[allow(needless_range_loop)]
pub fn encode<'a>(options: &Options, msg: &'a mut Message, mut buf: &'a mut [u8], crypto: &mut Crypto) -> &'a mut [u8] {
let mut start = 64;
let mut end = 64;