diff options
author | Jake McGinty <me@jake.su> | 2018-02-05 22:17:19 +0000 |
---|---|---|
committer | Jake McGinty <me@jake.su> | 2018-02-05 22:17:19 +0000 |
commit | 6676d5fd95161fd2a16595bc5566e52438cbbcaf (patch) | |
tree | 068377bf43c5f1ab9acba28f42f9e45ef76881c8 /src/interface/mod.rs | |
parent | route IPv6 traffic correctly over utun (diff) | |
download | wireguard-rs-6676d5fd95161fd2a16595bc5566e52438cbbcaf.tar.xz wireguard-rs-6676d5fd95161fd2a16595bc5566e52438cbbcaf.zip |
finish up basic utun ipv6 support
Diffstat (limited to 'src/interface/mod.rs')
-rw-r--r-- | src/interface/mod.rs | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/interface/mod.rs b/src/interface/mod.rs index 18a15dd..228ea31 100644 --- a/src/interface/mod.rs +++ b/src/interface/mod.rs @@ -56,13 +56,27 @@ pub enum UtunPacket { Inet4(Vec<u8>), Inet6(Vec<u8>), } + +impl UtunPacket { + pub fn payload(&self) -> &[u8] { + match self { + &UtunPacket::Inet4(ref payload) => &payload, + &UtunPacket::Inet6(ref payload) => &payload, + } + } +} + impl UtunCodec for VecUtunCodec { - type In = Vec<u8>; + type In = UtunPacket; type Out = UtunPacket; fn decode(&mut self, buf: &[u8]) -> io::Result<Self::In> { trace!("utun packet type {}", buf[3]); - Ok(buf[4..].to_vec()) + match buf[3] { + 0x02 => Ok(UtunPacket::Inet4(buf[4..].to_vec())), + 0x1e => Ok(UtunPacket::Inet6(buf[4..].to_vec())), + _ => Err(io::ErrorKind::InvalidData.into()) + } } fn encode(&mut self, msg: Self::Out, buf: &mut Vec<u8>) { |