mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Some hosts use iptables and are configured to respond an ICMP destination
unreachable message with a {host/net/admin}prohibited code instead of a RST.
Linux handles these codes correctly by aborting the handshake. This commit
adds handling of all possible codes of an ICMPv4 destination unreachable message
to bring gVisor to parity.
PiperOrigin-RevId: 496703813
188 lines
3.2 KiB
Go
188 lines
3.2 KiB
Go
// Copyright 2018 The gVisor Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
// Package errno holds errno codes for abi/linux.
|
|
package errno
|
|
|
|
// Errno represents a Linux errno value.
|
|
type Errno uint32
|
|
|
|
// Errno values from include/uapi/asm-generic/errno-base.h.
|
|
const (
|
|
NOERRNO = iota
|
|
EPERM
|
|
ENOENT
|
|
ESRCH
|
|
EINTR
|
|
EIO
|
|
ENXIO
|
|
E2BIG
|
|
ENOEXEC
|
|
EBADF
|
|
ECHILD // 10
|
|
EAGAIN
|
|
ENOMEM
|
|
EACCES
|
|
EFAULT
|
|
ENOTBLK
|
|
EBUSY
|
|
EEXIST
|
|
EXDEV
|
|
ENODEV
|
|
ENOTDIR // 20
|
|
EISDIR
|
|
EINVAL
|
|
ENFILE
|
|
EMFILE
|
|
ENOTTY
|
|
ETXTBSY
|
|
EFBIG
|
|
ENOSPC
|
|
ESPIPE
|
|
EROFS // 30
|
|
EMLINK
|
|
EPIPE
|
|
EDOM
|
|
ERANGE
|
|
// Errno values from include/uapi/asm-generic/errno.h.
|
|
EDEADLK
|
|
ENAMETOOLONG
|
|
ENOLCK
|
|
ENOSYS
|
|
ENOTEMPTY
|
|
ELOOP // 40
|
|
_ // Skip for EWOULDBLOCK = EAGAIN.
|
|
ENOMSG //42
|
|
EIDRM
|
|
ECHRNG
|
|
EL2NSYNC
|
|
EL3HLT
|
|
EL3RST
|
|
ELNRNG
|
|
EUNATCH
|
|
ENOCSI
|
|
EL2HLT // 50
|
|
EBADE
|
|
EBADR
|
|
EXFULL
|
|
ENOANO
|
|
EBADRQC
|
|
EBADSLT
|
|
_ // Skip for EDEADLOCK = EDEADLK.
|
|
EBFONT
|
|
ENOSTR // 60
|
|
ENODATA
|
|
ETIME
|
|
ENOSR
|
|
ENONET
|
|
ENOPKG
|
|
EREMOTE
|
|
ENOLINK
|
|
EADV
|
|
ESRMNT
|
|
ECOMM // 70
|
|
EPROTO
|
|
EMULTIHOP
|
|
EDOTDOT
|
|
EBADMSG
|
|
EOVERFLOW
|
|
ENOTUNIQ
|
|
EBADFD
|
|
EREMCHG
|
|
ELIBACC
|
|
ELIBBAD // 80
|
|
ELIBSCN
|
|
ELIBMAX
|
|
ELIBEXEC
|
|
EILSEQ
|
|
ERESTART
|
|
ESTRPIPE
|
|
EUSERS
|
|
ENOTSOCK
|
|
EDESTADDRREQ
|
|
EMSGSIZE // 90
|
|
EPROTOTYPE
|
|
ENOPROTOOPT
|
|
EPROTONOSUPPORT
|
|
ESOCKTNOSUPPORT
|
|
EOPNOTSUPP
|
|
EPFNOSUPPORT
|
|
EAFNOSUPPORT
|
|
EADDRINUSE
|
|
EADDRNOTAVAIL
|
|
ENETDOWN // 100
|
|
ENETUNREACH
|
|
ENETRESET
|
|
ECONNABORTED
|
|
ECONNRESET
|
|
ENOBUFS
|
|
EISCONN
|
|
ENOTCONN
|
|
ESHUTDOWN
|
|
ETOOMANYREFS
|
|
ETIMEDOUT // 110
|
|
ECONNREFUSED
|
|
EHOSTDOWN
|
|
EHOSTUNREACH
|
|
EALREADY
|
|
EINPROGRESS
|
|
ESTALE
|
|
EUCLEAN
|
|
ENOTNAM
|
|
ENAVAIL
|
|
EISNAM // 120
|
|
EREMOTEIO
|
|
EDQUOT
|
|
ENOMEDIUM
|
|
EMEDIUMTYPE
|
|
ECANCELED
|
|
ENOKEY
|
|
EKEYEXPIRED
|
|
EKEYREVOKED
|
|
EKEYREJECTED
|
|
EOWNERDEAD // 130
|
|
ENOTRECOVERABLE
|
|
ERFKILL
|
|
EHWPOISON
|
|
)
|
|
|
|
// errnos derived from other errnos.
|
|
const (
|
|
EWOULDBLOCK = EAGAIN
|
|
EDEADLOCK = EDEADLK
|
|
)
|
|
|
|
// errnos for internal errors.
|
|
const (
|
|
// ERESTARTSYS is returned by an interrupted syscall to indicate that it
|
|
// should be converted to EINTR if interrupted by a signal delivered to a
|
|
// user handler without SA_RESTART set, and restarted otherwise.
|
|
ERESTARTSYS = 512
|
|
|
|
// ERESTARTNOINTR is returned by an interrupted syscall to indicate that it
|
|
// should always be restarted.
|
|
ERESTARTNOINTR = 513
|
|
|
|
// ERESTARTNOHAND is returned by an interrupted syscall to indicate that it
|
|
// should be converted to EINTR if interrupted by a signal delivered to a
|
|
// user handler, and restarted otherwise.
|
|
ERESTARTNOHAND = 514
|
|
|
|
// ERESTART_RESTARTBLOCK is returned by an interrupted syscall to indicate
|
|
// that it should be restarted using a custom function. The interrupted
|
|
// syscall must register a custom restart function by calling
|
|
// Task.SetRestartSyscallFn.
|
|
ERESTART_RESTARTBLOCK = 516
|
|
)
|