aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJake McGinty <me@jake.su>2018-02-05 20:58:00 +0000
committerJake McGinty <me@jake.su>2018-02-05 20:58:00 +0000
commit90114301f6c30a16fb5f3ac8a2bd2da2426fd506 (patch)
treec92321f38954f4212426abbc3c0fe7b4c261a571 /src
parentpreliminary support for ipv6 routing table lookups (diff)
downloadwireguard-rs-90114301f6c30a16fb5f3ac8a2bd2da2426fd506.tar.xz
wireguard-rs-90114301f6c30a16fb5f3ac8a2bd2da2426fd506.zip
route IPv6 traffic correctly over utun
Diffstat (limited to 'src')
-rw-r--r--src/interface/peer_server.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/interface/peer_server.rs b/src/interface/peer_server.rs
index fb6af05..ff94ed7 100644
--- a/src/interface/peer_server.rs
+++ b/src/interface/peer_server.rs
@@ -234,7 +234,13 @@ impl PeerServer {
if let Ok(payload_len) = res {
raw_packet.truncate(payload_len);
trace_packet("received TRANSPORT: ", &raw_packet);
- self.handle.spawn(self.tunnel_tx.clone().send(UtunPacket::Inet4(raw_packet))
+ let ethertype = EthernetPacket::new(&raw_packet).unwrap().get_ethertype();
+ let utun_packet = match ethertype {
+ EtherTypes::Ipv4 => UtunPacket::Inet4(raw_packet),
+ EtherTypes::Ipv6 => UtunPacket::Inet6(raw_packet),
+ _ => unimplemented!()
+ };
+ self.handle.spawn(self.tunnel_tx.clone().send(utun_packet)
.then(|_| Ok(())));
} else {
warn!("dropped incoming tranport packet that neither the current nor past session could decrypt");