summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2018-09-05 16:24:19 +0200
committerLinus Färnstrand <linus@mullvad.net>2018-09-06 14:51:58 +0200
commit03339b89e914228fce1633935a0113a6ce7bc99a (patch)
treefdeafb7673dfa8001c63cafbe5b8f5ead29d6fd2
parent931265d2da0eed4962981f40b65d06cf7ce5b75e (diff)
downloadmullvadvpn-03339b89e914228fce1633935a0113a6ce7bc99a.tar.xz
mullvadvpn-03339b89e914228fce1633935a0113a6ce7bc99a.zip
Add LAN->SSDP multicast on Linux
-rw-r--r--talpid-core/src/security/linux/mod.rs9
-rw-r--r--talpid-core/src/security/mod.rs3
2 files changed, 9 insertions, 3 deletions
diff --git a/talpid-core/src/security/linux/mod.rs b/talpid-core/src/security/linux/mod.rs
index 455e4cc755..f4de49bfa9 100644
--- a/talpid-core/src/security/linux/mod.rs
+++ b/talpid-core/src/security/linux/mod.rs
@@ -309,7 +309,6 @@ impl<'a> PolicyBatch<'a> {
let mut rule = Rule::new(chain)?;
check_net(&mut rule, End::Src, IpNetwork::V4(*net))?;
check_net(&mut rule, End::Dst, IpNetwork::V4(*net))?;
-
add_verdict(&mut rule, Verdict::Accept)?;
self.batch.add(&rule, nftnl::MsgType::Add)?;
@@ -320,12 +319,18 @@ impl<'a> PolicyBatch<'a> {
let mut rule = Rule::new(&self.out_chain)?;
check_net(&mut rule, End::Src, IpNetwork::V4(*net))?;
check_net(&mut rule, End::Dst, IpNetwork::V4(*super::MULTICAST_NET))?;
+ add_verdict(&mut rule, Verdict::Accept)?;
+
+ self.batch.add(&rule, nftnl::MsgType::Add)?;
+ // LAN -> SSDP + WS-Discovery protocols
+ let mut rule = Rule::new(&self.out_chain)?;
+ check_net(&mut rule, End::Src, IpNetwork::V4(*net))?;
+ check_ip(&mut rule, End::Dst, *super::SSDP_IP)?;
add_verdict(&mut rule, Verdict::Accept)?;
self.batch.add(&rule, nftnl::MsgType::Add)?;
}
-
Ok(())
}
}
diff --git a/talpid-core/src/security/mod.rs b/talpid-core/src/security/mod.rs
index 9e5fadeab9..70da5edea5 100644
--- a/talpid-core/src/security/mod.rs
+++ b/talpid-core/src/security/mod.rs
@@ -2,7 +2,7 @@
use ipnetwork::Ipv4Network;
use std::fmt;
#[cfg(unix)]
-use std::net::Ipv4Addr;
+use std::net::{IpAddr, Ipv4Addr};
use std::path::Path;
use talpid_types::net::Endpoint;
@@ -31,6 +31,7 @@ lazy_static! {
];
static ref MULTICAST_NET: Ipv4Network =
Ipv4Network::new(Ipv4Addr::new(224, 0, 0, 0), 24).unwrap();
+ static ref SSDP_IP: IpAddr = IpAddr::V4(Ipv4Addr::new(239, 255, 255, 250));
}
/// A enum that describes network security strategy