diff --git a/src/yggdrasil/icmpv6.go b/src/yggdrasil/icmpv6.go index fc037fcb..52ca50c6 100644 --- a/src/yggdrasil/icmpv6.go +++ b/src/yggdrasil/icmpv6.go @@ -156,6 +156,9 @@ func (i *icmpv6) parse_packet_tun(datain []byte, datamac *[]byte) ([]byte, error // Check for a supported message type switch icmpv6Header.Type { case ipv6.ICMPTypeNeighborSolicitation: + if !i.tun.iface.IsTAP() { + return nil, errors.New("Ignoring Neighbor Solicitation in TUN mode") + } response, err := i.handle_ndp(datain[ipv6.HeaderLen:]) if err == nil { // Create our ICMPv6 response @@ -173,6 +176,9 @@ func (i *icmpv6) parse_packet_tun(datain []byte, datamac *[]byte) ([]byte, error return nil, err } case ipv6.ICMPTypeNeighborAdvertisement: + if !i.tun.iface.IsTAP() { + return nil, errors.New("Ignoring Neighbor Advertisement in TUN mode") + } if datamac != nil { var addr address.Address var target address.Address diff --git a/src/yggdrasil/tun.go b/src/yggdrasil/tun.go index b6bc9132..8ed53332 100644 --- a/src/yggdrasil/tun.go +++ b/src/yggdrasil/tun.go @@ -214,11 +214,12 @@ func (tun *tunAdapter) read() error { continue } if buf[o+6] == 58 { - // Found an ICMPv6 packet - b := make([]byte, n) - copy(b, buf) - // tun.icmpv6.recv <- b - go tun.icmpv6.parse_packet(b) + if tun.iface.IsTAP() { + // Found an ICMPv6 packet + b := make([]byte, n) + copy(b, buf) + go tun.icmpv6.parse_packet(b) + } } packet := append(util.GetBytes(), buf[o:n]...) tun.send <- packet