5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-11-26 13:01:39 +00:00

Redirect Conn session closure errors to debug channel

This commit is contained in:
Neil Alexander 2019-07-22 22:41:55 +01:00
parent 48ad3c5d7f
commit de9d0a6cf1
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944

View File

@ -63,7 +63,11 @@ func (s *tunConn) reader() (err error) {
} }
if n, err = s.conn.Read(b); err != nil { if n, err = s.conn.Read(b); err != nil {
if e, eok := err.(yggdrasil.ConnError); eok && !e.Temporary() { if e, eok := err.(yggdrasil.ConnError); eok && !e.Temporary() {
if e.Closed() {
s.tun.log.Debugln(s.conn.String(), "TUN/TAP conn read debug:", err)
} else {
s.tun.log.Errorln(s.conn.String(), "TUN/TAP conn read error:", err) s.tun.log.Errorln(s.conn.String(), "TUN/TAP conn read error:", err)
}
return e return e
} }
} else if n > 0 { } else if n > 0 {
@ -98,9 +102,12 @@ func (s *tunConn) writer() error {
} }
// TODO write timeout and close // TODO write timeout and close
if _, err := s.conn.Write(b); err != nil { if _, err := s.conn.Write(b); err != nil {
e, eok := err.(yggdrasil.ConnError) if e, eok := err.(yggdrasil.ConnError); !eok {
if !eok { if e.Closed() {
s.tun.log.Debugln(s.conn.String(), "TUN/TAP generic write debug:", err)
} else {
s.tun.log.Errorln(s.conn.String(), "TUN/TAP generic write error:", err) s.tun.log.Errorln(s.conn.String(), "TUN/TAP generic write error:", err)
}
} else if ispackettoobig, maxsize := e.PacketTooBig(); ispackettoobig { } else if ispackettoobig, maxsize := e.PacketTooBig(); ispackettoobig {
// TODO: This currently isn't aware of IPv4 for CKR // TODO: This currently isn't aware of IPv4 for CKR
ptb := &icmp.PacketTooBig{ ptb := &icmp.PacketTooBig{
@ -110,9 +117,13 @@ func (s *tunConn) writer() error {
if packet, err := CreateICMPv6(b[8:24], b[24:40], ipv6.ICMPTypePacketTooBig, 0, ptb); err == nil { if packet, err := CreateICMPv6(b[8:24], b[24:40], ipv6.ICMPTypePacketTooBig, 0, ptb); err == nil {
s.tun.send <- packet s.tun.send <- packet
} }
} else {
if e.Closed() {
s.tun.log.Debugln(s.conn.String(), "TUN/TAP conn write debug:", err)
} else { } else {
s.tun.log.Errorln(s.conn.String(), "TUN/TAP conn write error:", err) s.tun.log.Errorln(s.conn.String(), "TUN/TAP conn write error:", err)
} }
}
} else { } else {
s.stillAlive() s.stillAlive()
} }