diff --git a/wgengine/magicsock/magicsock.go b/wgengine/magicsock/magicsock.go index 0d1a15a22..da726e9dc 100644 --- a/wgengine/magicsock/magicsock.go +++ b/wgengine/magicsock/magicsock.go @@ -1176,6 +1176,7 @@ func (c *Conn) mkReceiveFunc(ruc *RebindingUDPConn, healthItem *health.ReceiveFu if neterror.PacketWasTruncated(err) { continue } + //_, err := ruc.ReadBatch(batch.msgs[:len(buffs)], MSG_ERRQUE) rcv message ip recv here return 0, err } diff --git a/wgengine/magicsock/peermtu_linux.go b/wgengine/magicsock/peermtu_linux.go index b76f30f08..bdbea0696 100644 --- a/wgengine/magicsock/peermtu_linux.go +++ b/wgengine/magicsock/peermtu_linux.go @@ -47,3 +47,35 @@ func (c *Conn) getDontFragment(network string) (bool, error) { } return false, err } + +func (c *Conn) setReceiveICMPErrors(network string, enable bool) error { + optArg := 1 + if enable == false { + optArg = 0 + } + var err error + rcErr := c.connControl(network, func(fd uintptr) { + err = syscall.SetsockoptInt(int(fd), getIPProto(network), syscall.IP_RECVERR, optArg) + }) + + if rcErr != nil { + return rcErr + } + return err +} + +func (c *Conn) getReceiveICMPErrors(network string, enable bool) (bool, error) { + var v int + var err error + rcErr := c.connControl(network, func(fd uintptr) { + v, err = syscall.GetsockoptInt(int(fd), getIPProto(network), syscall.IP_RECVERR) + }) + + if rcErr != nil { + return false, rcErr + } + if v == 1 { + return true, err + } + return false, err +} diff --git a/wgengine/magicsock/rebinding_conn.go b/wgengine/magicsock/rebinding_conn.go index f1e47f3a8..0a78ae397 100644 --- a/wgengine/magicsock/rebinding_conn.go +++ b/wgengine/magicsock/rebinding_conn.go @@ -177,3 +177,12 @@ func (c *RebindingUDPConn) SyscallConn() (syscall.RawConn, error) { } return sc.SyscallConn() } + +/*func (c *RebindingUDPConn) ReadICMPErrors(msgs []ipv6.Message) (int, error) { + for { + sc, ok := c.pconn.(syscall.Conn) + a, err := sc.SyscallConn() + err := syscall.SetsockoptInt(sc.SyscallConn(), syscall.SOL_IP, syscall.IP_RECVERR, 1) + return n, err + } +}*/