summaryrefslogtreecommitdiffhomepage
path: root/talpid-core/src
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-03-02 09:40:42 +0100
committerDavid Lönnhager <david.l@mullvad.net>2020-06-02 10:05:02 +0200
commit2304fb57505aff1e6fca73c426cc24056ea136f2 (patch)
tree185c0fe1757e64a7a38283fb555f7faf1bd530bd /talpid-core/src
parent83f738eb9e4e070c93a2e24461ac03a3ce767269 (diff)
downloadmullvadvpn-2304fb57505aff1e6fca73c426cc24056ea136f2.tar.xz
mullvadvpn-2304fb57505aff1e6fca73c426cc24056ea136f2.zip
Add function to remove split tunneling routing
Diffstat (limited to 'talpid-core/src')
-rw-r--r--talpid-core/src/split.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/talpid-core/src/split.rs b/talpid-core/src/split.rs
index 23955d0f32..2b012f076a 100644
--- a/talpid-core/src/split.rs
+++ b/talpid-core/src/split.rs
@@ -104,6 +104,40 @@ pub fn route_marked_packets() -> Result<(), Error> {
cmd.output().map(|_| ()).map_err(Error::RoutingTableSetup)
}
+/// Stop routing PID-associated packets through the physical interface.
+pub fn disable_routing() -> Result<(), Error> {
+ // TODO: IPv6
+
+ let mut cmd = Command::new("ip");
+ cmd.args(&[
+ "-4",
+ "rule",
+ "del",
+ "from",
+ "all",
+ "fwmark",
+ &MARK.to_string(),
+ "lookup",
+ ROUTING_TABLE_NAME,
+ ]);
+
+ log::trace!("running cmd - {:?}", &cmd);
+ let out = cmd.output();
+ if out.is_err() {
+ log::warn!("Failed to delete routing policy: {}", out.err().unwrap());
+ } else {
+ let out = out.unwrap();
+ if !out.status.success() {
+ log::warn!(
+ "Failed to delete routing policy: {}",
+ String::from_utf8_lossy(&out.stderr)
+ );
+ }
+ }
+
+ Ok(())
+}
+
/// Route DNS requests through the tunnel interface.
pub fn route_dns(tunnel_alias: &str, dns_servers: &[IpAddr]) -> Result<(), Error> {
// TODO: IPv6