|
1 | 1 | use cfg_if::cfg_if;
|
2 | 2 | use ipnetwork::IpNetwork;
|
| 3 | +use once_cell::sync::Lazy; |
3 | 4 | use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
|
4 | 5 |
|
5 | 6 | cfg_if! {
|
@@ -68,22 +69,29 @@ impl TunConfig {
|
68 | 69 | }
|
69 | 70 | }
|
70 | 71 |
|
71 |
| -impl Default for TunConfig { |
72 |
| - fn default() -> Self { |
73 |
| - TunConfig { |
74 |
| - addresses: vec![IpAddr::V4(Ipv4Addr::new(10, 0, 0, 1))], |
75 |
| - mtu: 1380, |
76 |
| - ipv4_gateway: Ipv4Addr::new(10, 64, 0, 1), |
77 |
| - ipv6_gateway: None, |
78 |
| - routes: vec![ |
79 |
| - IpNetwork::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), 0) |
80 |
| - .expect("Invalid IP network prefix for IPv4 address"), |
81 |
| - IpNetwork::new(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0)), 0) |
82 |
| - .expect("Invalid IP network prefix for IPv6 address"), |
83 |
| - ], |
84 |
| - allow_lan: false, |
85 |
| - dns_servers: None, |
86 |
| - excluded_packages: vec![], |
87 |
| - } |
| 72 | +/// Return a tunnel configuration that routes all traffic inside the tunnel. |
| 73 | +/// Most values except the routes are nonsensical. This is mostly used as a reasonable default on |
| 74 | +/// Android to route all traffic inside the tunnel. |
| 75 | +pub fn blocking_config() -> TunConfig { |
| 76 | + TunConfig { |
| 77 | + addresses: vec![IpAddr::V4(Ipv4Addr::new(10, 0, 0, 1))], |
| 78 | + mtu: 1380, |
| 79 | + ipv4_gateway: Ipv4Addr::new(10, 64, 0, 1), |
| 80 | + ipv6_gateway: None, |
| 81 | + routes: DEFAULT_ROUTES.clone(), |
| 82 | + allow_lan: false, |
| 83 | + dns_servers: None, |
| 84 | + excluded_packages: vec![], |
88 | 85 | }
|
89 | 86 | }
|
| 87 | + |
| 88 | +static DEFAULT_ROUTES: Lazy<Vec<IpNetwork>> = |
| 89 | + Lazy::new(|| vec![*IPV4_DEFAULT_ROUTE, *IPV6_DEFAULT_ROUTE]); |
| 90 | +static IPV4_DEFAULT_ROUTE: Lazy<IpNetwork> = Lazy::new(|| { |
| 91 | + IpNetwork::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), 0) |
| 92 | + .expect("Invalid IP network prefix for IPv4 address") |
| 93 | +}); |
| 94 | +static IPV6_DEFAULT_ROUTE: Lazy<IpNetwork> = Lazy::new(|| { |
| 95 | + IpNetwork::new(IpAddr::V6(Ipv6Addr::UNSPECIFIED), 0) |
| 96 | + .expect("Invalid IP network prefix for IPv6 address") |
| 97 | +}); |
0 commit comments