summaryrefslogtreecommitdiffhomepage
path: root/pkg/syserr
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/syserr')
-rw-r--r--pkg/syserr/netstack.go189
1 files changed, 104 insertions, 85 deletions
diff --git a/pkg/syserr/netstack.go b/pkg/syserr/netstack.go
index cb8981633..a6a91e064 100644
--- a/pkg/syserr/netstack.go
+++ b/pkg/syserr/netstack.go
@@ -23,95 +23,114 @@ import (
// Mapping for tcpip.Error types.
var (
- ErrUnknownProtocol = New(tcpip.ErrUnknownProtocol.String(), linux.EINVAL)
- ErrUnknownNICID = New(tcpip.ErrUnknownNICID.String(), linux.ENODEV)
- ErrUnknownDevice = New(tcpip.ErrUnknownDevice.String(), linux.ENODEV)
- ErrUnknownProtocolOption = New(tcpip.ErrUnknownProtocolOption.String(), linux.ENOPROTOOPT)
- ErrDuplicateNICID = New(tcpip.ErrDuplicateNICID.String(), linux.EEXIST)
- ErrDuplicateAddress = New(tcpip.ErrDuplicateAddress.String(), linux.EEXIST)
- ErrBadLinkEndpoint = New(tcpip.ErrBadLinkEndpoint.String(), linux.EINVAL)
- ErrAlreadyBound = New(tcpip.ErrAlreadyBound.String(), linux.EINVAL)
- ErrInvalidEndpointState = New(tcpip.ErrInvalidEndpointState.String(), linux.EINVAL)
- ErrAlreadyConnecting = New(tcpip.ErrAlreadyConnecting.String(), linux.EALREADY)
- ErrNoPortAvailable = New(tcpip.ErrNoPortAvailable.String(), linux.EAGAIN)
- ErrPortInUse = New(tcpip.ErrPortInUse.String(), linux.EADDRINUSE)
- ErrBadLocalAddress = New(tcpip.ErrBadLocalAddress.String(), linux.EADDRNOTAVAIL)
- ErrClosedForSend = New(tcpip.ErrClosedForSend.String(), linux.EPIPE)
- ErrClosedForReceive = New(tcpip.ErrClosedForReceive.String(), nil)
- ErrTimeout = New(tcpip.ErrTimeout.String(), linux.ETIMEDOUT)
- ErrAborted = New(tcpip.ErrAborted.String(), linux.EPIPE)
- ErrConnectStarted = New(tcpip.ErrConnectStarted.String(), linux.EINPROGRESS)
- ErrDestinationRequired = New(tcpip.ErrDestinationRequired.String(), linux.EDESTADDRREQ)
- ErrNotSupported = New(tcpip.ErrNotSupported.String(), linux.EOPNOTSUPP)
- ErrQueueSizeNotSupported = New(tcpip.ErrQueueSizeNotSupported.String(), linux.ENOTTY)
- ErrNoSuchFile = New(tcpip.ErrNoSuchFile.String(), linux.ENOENT)
- ErrInvalidOptionValue = New(tcpip.ErrInvalidOptionValue.String(), linux.EINVAL)
- ErrBroadcastDisabled = New(tcpip.ErrBroadcastDisabled.String(), linux.EACCES)
- ErrNotPermittedNet = New(tcpip.ErrNotPermitted.String(), linux.EPERM)
- ErrBadBuffer = New(tcpip.ErrBadBuffer.String(), linux.EFAULT)
+ ErrUnknownProtocol = New((&tcpip.ErrUnknownProtocol{}).String(), linux.EINVAL)
+ ErrUnknownNICID = New((&tcpip.ErrUnknownNICID{}).String(), linux.ENODEV)
+ ErrUnknownDevice = New((&tcpip.ErrUnknownDevice{}).String(), linux.ENODEV)
+ ErrUnknownProtocolOption = New((&tcpip.ErrUnknownProtocolOption{}).String(), linux.ENOPROTOOPT)
+ ErrDuplicateNICID = New((&tcpip.ErrDuplicateNICID{}).String(), linux.EEXIST)
+ ErrDuplicateAddress = New((&tcpip.ErrDuplicateAddress{}).String(), linux.EEXIST)
+ ErrAlreadyBound = New((&tcpip.ErrAlreadyBound{}).String(), linux.EINVAL)
+ ErrInvalidEndpointState = New((&tcpip.ErrInvalidEndpointState{}).String(), linux.EINVAL)
+ ErrAlreadyConnecting = New((&tcpip.ErrAlreadyConnecting{}).String(), linux.EALREADY)
+ ErrNoPortAvailable = New((&tcpip.ErrNoPortAvailable{}).String(), linux.EAGAIN)
+ ErrPortInUse = New((&tcpip.ErrPortInUse{}).String(), linux.EADDRINUSE)
+ ErrBadLocalAddress = New((&tcpip.ErrBadLocalAddress{}).String(), linux.EADDRNOTAVAIL)
+ ErrClosedForSend = New((&tcpip.ErrClosedForSend{}).String(), linux.EPIPE)
+ ErrClosedForReceive = New((&tcpip.ErrClosedForReceive{}).String(), nil)
+ ErrTimeout = New((&tcpip.ErrTimeout{}).String(), linux.ETIMEDOUT)
+ ErrAborted = New((&tcpip.ErrAborted{}).String(), linux.EPIPE)
+ ErrConnectStarted = New((&tcpip.ErrConnectStarted{}).String(), linux.EINPROGRESS)
+ ErrDestinationRequired = New((&tcpip.ErrDestinationRequired{}).String(), linux.EDESTADDRREQ)
+ ErrNotSupported = New((&tcpip.ErrNotSupported{}).String(), linux.EOPNOTSUPP)
+ ErrQueueSizeNotSupported = New((&tcpip.ErrQueueSizeNotSupported{}).String(), linux.ENOTTY)
+ ErrNoSuchFile = New((&tcpip.ErrNoSuchFile{}).String(), linux.ENOENT)
+ ErrInvalidOptionValue = New((&tcpip.ErrInvalidOptionValue{}).String(), linux.EINVAL)
+ ErrBroadcastDisabled = New((&tcpip.ErrBroadcastDisabled{}).String(), linux.EACCES)
+ ErrNotPermittedNet = New((&tcpip.ErrNotPermitted{}).String(), linux.EPERM)
+ ErrBadBuffer = New((&tcpip.ErrBadBuffer{}).String(), linux.EFAULT)
)
-var netstackErrorTranslations map[string]*Error
-
-func addErrMapping(tcpipErr *tcpip.Error, netstackErr *Error) {
- key := tcpipErr.String()
- if _, ok := netstackErrorTranslations[key]; ok {
- panic(fmt.Sprintf("duplicate error key: %s", key))
- }
- netstackErrorTranslations[key] = netstackErr
-}
-
-func init() {
- netstackErrorTranslations = make(map[string]*Error)
- addErrMapping(tcpip.ErrUnknownProtocol, ErrUnknownProtocol)
- addErrMapping(tcpip.ErrUnknownNICID, ErrUnknownNICID)
- addErrMapping(tcpip.ErrUnknownDevice, ErrUnknownDevice)
- addErrMapping(tcpip.ErrUnknownProtocolOption, ErrUnknownProtocolOption)
- addErrMapping(tcpip.ErrDuplicateNICID, ErrDuplicateNICID)
- addErrMapping(tcpip.ErrDuplicateAddress, ErrDuplicateAddress)
- addErrMapping(tcpip.ErrNoRoute, ErrNoRoute)
- addErrMapping(tcpip.ErrBadLinkEndpoint, ErrBadLinkEndpoint)
- addErrMapping(tcpip.ErrAlreadyBound, ErrAlreadyBound)
- addErrMapping(tcpip.ErrInvalidEndpointState, ErrInvalidEndpointState)
- addErrMapping(tcpip.ErrAlreadyConnecting, ErrAlreadyConnecting)
- addErrMapping(tcpip.ErrAlreadyConnected, ErrAlreadyConnected)
- addErrMapping(tcpip.ErrNoPortAvailable, ErrNoPortAvailable)
- addErrMapping(tcpip.ErrPortInUse, ErrPortInUse)
- addErrMapping(tcpip.ErrBadLocalAddress, ErrBadLocalAddress)
- addErrMapping(tcpip.ErrClosedForSend, ErrClosedForSend)
- addErrMapping(tcpip.ErrClosedForReceive, ErrClosedForReceive)
- addErrMapping(tcpip.ErrWouldBlock, ErrWouldBlock)
- addErrMapping(tcpip.ErrConnectionRefused, ErrConnectionRefused)
- addErrMapping(tcpip.ErrTimeout, ErrTimeout)
- addErrMapping(tcpip.ErrAborted, ErrAborted)
- addErrMapping(tcpip.ErrConnectStarted, ErrConnectStarted)
- addErrMapping(tcpip.ErrDestinationRequired, ErrDestinationRequired)
- addErrMapping(tcpip.ErrNotSupported, ErrNotSupported)
- addErrMapping(tcpip.ErrQueueSizeNotSupported, ErrQueueSizeNotSupported)
- addErrMapping(tcpip.ErrNotConnected, ErrNotConnected)
- addErrMapping(tcpip.ErrConnectionReset, ErrConnectionReset)
- addErrMapping(tcpip.ErrConnectionAborted, ErrConnectionAborted)
- addErrMapping(tcpip.ErrNoSuchFile, ErrNoSuchFile)
- addErrMapping(tcpip.ErrInvalidOptionValue, ErrInvalidOptionValue)
- addErrMapping(tcpip.ErrBadAddress, ErrBadAddress)
- addErrMapping(tcpip.ErrNetworkUnreachable, ErrNetworkUnreachable)
- addErrMapping(tcpip.ErrMessageTooLong, ErrMessageTooLong)
- addErrMapping(tcpip.ErrNoBufferSpace, ErrNoBufferSpace)
- addErrMapping(tcpip.ErrBroadcastDisabled, ErrBroadcastDisabled)
- addErrMapping(tcpip.ErrNotPermitted, ErrNotPermittedNet)
- addErrMapping(tcpip.ErrAddressFamilyNotSupported, ErrAddressFamilyNotSupported)
- addErrMapping(tcpip.ErrBadBuffer, ErrBadBuffer)
-}
-
// TranslateNetstackError converts an error from the tcpip package to a sentry
// internal error.
-func TranslateNetstackError(err *tcpip.Error) *Error {
- if err == nil {
+func TranslateNetstackError(err tcpip.Error) *Error {
+ switch err.(type) {
+ case nil:
return nil
+ case *tcpip.ErrUnknownProtocol:
+ return ErrUnknownProtocol
+ case *tcpip.ErrUnknownNICID:
+ return ErrUnknownNICID
+ case *tcpip.ErrUnknownDevice:
+ return ErrUnknownDevice
+ case *tcpip.ErrUnknownProtocolOption:
+ return ErrUnknownProtocolOption
+ case *tcpip.ErrDuplicateNICID:
+ return ErrDuplicateNICID
+ case *tcpip.ErrDuplicateAddress:
+ return ErrDuplicateAddress
+ case *tcpip.ErrNoRoute:
+ return ErrNoRoute
+ case *tcpip.ErrAlreadyBound:
+ return ErrAlreadyBound
+ case *tcpip.ErrInvalidEndpointState:
+ return ErrInvalidEndpointState
+ case *tcpip.ErrAlreadyConnecting:
+ return ErrAlreadyConnecting
+ case *tcpip.ErrAlreadyConnected:
+ return ErrAlreadyConnected
+ case *tcpip.ErrNoPortAvailable:
+ return ErrNoPortAvailable
+ case *tcpip.ErrPortInUse:
+ return ErrPortInUse
+ case *tcpip.ErrBadLocalAddress:
+ return ErrBadLocalAddress
+ case *tcpip.ErrClosedForSend:
+ return ErrClosedForSend
+ case *tcpip.ErrClosedForReceive:
+ return ErrClosedForReceive
+ case *tcpip.ErrWouldBlock:
+ return ErrWouldBlock
+ case *tcpip.ErrConnectionRefused:
+ return ErrConnectionRefused
+ case *tcpip.ErrTimeout:
+ return ErrTimeout
+ case *tcpip.ErrAborted:
+ return ErrAborted
+ case *tcpip.ErrConnectStarted:
+ return ErrConnectStarted
+ case *tcpip.ErrDestinationRequired:
+ return ErrDestinationRequired
+ case *tcpip.ErrNotSupported:
+ return ErrNotSupported
+ case *tcpip.ErrQueueSizeNotSupported:
+ return ErrQueueSizeNotSupported
+ case *tcpip.ErrNotConnected:
+ return ErrNotConnected
+ case *tcpip.ErrConnectionReset:
+ return ErrConnectionReset
+ case *tcpip.ErrConnectionAborted:
+ return ErrConnectionAborted
+ case *tcpip.ErrNoSuchFile:
+ return ErrNoSuchFile
+ case *tcpip.ErrInvalidOptionValue:
+ return ErrInvalidOptionValue
+ case *tcpip.ErrBadAddress:
+ return ErrBadAddress
+ case *tcpip.ErrNetworkUnreachable:
+ return ErrNetworkUnreachable
+ case *tcpip.ErrMessageTooLong:
+ return ErrMessageTooLong
+ case *tcpip.ErrNoBufferSpace:
+ return ErrNoBufferSpace
+ case *tcpip.ErrBroadcastDisabled:
+ return ErrBroadcastDisabled
+ case *tcpip.ErrNotPermitted:
+ return ErrNotPermittedNet
+ case *tcpip.ErrAddressFamilyNotSupported:
+ return ErrAddressFamilyNotSupported
+ case *tcpip.ErrBadBuffer:
+ return ErrBadBuffer
+ default:
+ panic(fmt.Sprintf("unknown error %T", err))
}
- se, ok := netstackErrorTranslations[err.String()]
- if !ok {
- panic("Unknown error: " + err.String())
- }
- return se
}