summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-01-24 10:32:55 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-02-06 12:05:57 +0000
commitcd3784f31e30356b101b2597e390811f836a89d5 (patch)
treea2579b585f8ad5997464dcd428b23e51cebeb3a3
parent1b719c9ff141a68c3b8a073159b27846ced06666 (diff)
downloadmullvadvpn-cd3784f31e30356b101b2597e390811f836a89d5.tar.xz
mullvadvpn-cd3784f31e30356b101b2597e390811f836a89d5.zip
Add required routes to `TunConfig` on Android
-rw-r--r--talpid-core/src/tunnel/tun_provider/android/mod.rs1
-rw-r--r--talpid-core/src/tunnel/tun_provider/mod.rs5
-rw-r--r--talpid-core/src/tunnel/wireguard/wireguard_go.rs14
3 files changed, 20 insertions, 0 deletions
diff --git a/talpid-core/src/tunnel/tun_provider/android/mod.rs b/talpid-core/src/tunnel/tun_provider/android/mod.rs
index 229118656f..70ce5f3bd4 100644
--- a/talpid-core/src/tunnel/tun_provider/android/mod.rs
+++ b/talpid-core/src/tunnel/tun_provider/android/mod.rs
@@ -85,6 +85,7 @@ impl AndroidTunProvider {
IpNetwork::new(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0)), 0)
.expect("Invalid IP network prefix for IPv6 address"),
],
+ required_routes: vec![],
mtu: 1380,
};
diff --git a/talpid-core/src/tunnel/tun_provider/mod.rs b/talpid-core/src/tunnel/tun_provider/mod.rs
index 882d42207c..9ac1e14895 100644
--- a/talpid-core/src/tunnel/tun_provider/mod.rs
+++ b/talpid-core/src/tunnel/tun_provider/mod.rs
@@ -51,6 +51,11 @@ pub struct TunConfig {
)]
pub routes: Vec<IpNetwork>,
+ /// Routes that are required to be configured for the tunnel.
+ #[cfg(target_os = "android")]
+ #[jnix(skip)]
+ pub required_routes: Vec<IpNetwork>,
+
/// Maximum Transmission Unit in the tunnel.
#[cfg_attr(target_os = "android", jnix(map = "|mtu| mtu as i32"))]
pub mtu: u16,
diff --git a/talpid-core/src/tunnel/wireguard/wireguard_go.rs b/talpid-core/src/tunnel/wireguard/wireguard_go.rs
index c569c8727e..f0c79b595d 100644
--- a/talpid-core/src/tunnel/wireguard/wireguard_go.rs
+++ b/talpid-core/src/tunnel/wireguard/wireguard_go.rs
@@ -234,11 +234,25 @@ impl WgGoTunnel {
addresses: config.tunnel.addresses.clone(),
dns_servers,
routes: routes.collect(),
+ #[cfg(target_os = "android")]
+ required_routes: Self::create_required_routes(config),
mtu: config.mtu,
}
}
#[cfg(target_os = "android")]
+ fn create_required_routes(config: &Config) -> Vec<IpNetwork> {
+ let mut required_routes = vec![IpNetwork::new(IpAddr::V4(config.ipv4_gateway), 32)
+ .expect("Invalid IPv4 network prefix")];
+
+ required_routes.extend(config.ipv6_gateway.map(|address| {
+ IpNetwork::new(IpAddr::V6(address), 128).expect("Invalid IPv6 network prefix")
+ }));
+
+ required_routes
+ }
+
+ #[cfg(target_os = "android")]
fn bypass_tunnel_sockets(
tunnel_device: &mut Tun,
handle: i32,