aboutsummaryrefslogtreecommitdiffstats
path: root/src/interface/mod.rs
diff options
context:
space:
mode:
authorJake McGinty <me@jake.su>2018-02-09 14:21:10 +0000
committerJake McGinty <me@jake.su>2018-02-09 14:21:10 +0000
commit1ef81bf07f9bfbfd57c8c4d408f037eb20ce7367 (patch)
treeeef7a5fbebeb4353f5e19b50a95ebf1dced1c24d /src/interface/mod.rs
parentrouter.rs (diff)
downloadwireguard-rs-1ef81bf07f9bfbfd57c8c4d408f037eb20ce7367.tar.xz
wireguard-rs-1ef81bf07f9bfbfd57c8c4d408f037eb20ce7367.zip
router refactoring
Diffstat (limited to 'src/interface/mod.rs')
-rw-r--r--src/interface/mod.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/interface/mod.rs b/src/interface/mod.rs
index 73530fe..6d51902 100644
--- a/src/interface/mod.rs
+++ b/src/interface/mod.rs
@@ -8,6 +8,7 @@ use router::Router;
use base64;
use hex;
use byteorder::{ByteOrder, BigEndian, LittleEndian};
+use failure::Error;
use snow::NoiseBuilder;
use protocol::Peer;
use std::io;
@@ -63,6 +64,14 @@ impl UtunPacket {
&UtunPacket::Inet6(ref payload) => &payload,
}
}
+
+ pub fn from(raw_packet: Vec<u8>) -> Result<UtunPacket, Error> {
+ match raw_packet[0] >> 4 {
+ 4 => Ok(UtunPacket::Inet4(raw_packet)),
+ 6 => Ok(UtunPacket::Inet6(raw_packet)),
+ _ => bail!("unrecognized IP version")
+ }
+ }
}
impl UtunCodec for VecUtunCodec {