diff options
author | Jake McGinty <me@jake.su> | 2018-02-05 20:58:00 +0000 |
---|---|---|
committer | Jake McGinty <me@jake.su> | 2018-02-05 20:58:00 +0000 |
commit | 90114301f6c30a16fb5f3ac8a2bd2da2426fd506 (patch) | |
tree | c92321f38954f4212426abbc3c0fe7b4c261a571 /src | |
parent | preliminary support for ipv6 routing table lookups (diff) | |
download | wireguard-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.rs | 8 |
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"); |