1 // Copyright (c) 2017 Cisco and/or its affiliates.
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at:
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 // +build !windows,!darwin
27 // List of errors thrown by go-libmemif.
28 // Error handling code should compare returned error by value against these variables.
30 ErrSyscall = newMemifError(1)
31 ErrConnRefused = newMemifError(2)
32 ErrAccess = newMemifError(3)
33 ErrNoFile = newMemifError(4)
34 ErrFileLimit = newMemifError(5)
35 ErrProcFileLimit = newMemifError(6)
36 ErrAlready = newMemifError(7)
37 ErrAgain = newMemifError(8)
38 ErrBadFd = newMemifError(9)
39 ErrNoMem = newMemifError(10)
40 ErrInvalArgs = newMemifError(11)
41 ErrNoConn = newMemifError(12)
42 ErrConn = newMemifError(13)
43 ErrClbFDUpdate = newMemifError(14)
44 ErrFileNotSock = newMemifError(15)
45 ErrNoShmFD = newMemifError(16)
46 ErrCookie = newMemifError(17)
48 // Not thrown, instead properly handled inside the golang adapter:
49 ErrNoBufRing = newMemifError(18)
50 ErrNoBuf = newMemifError(19)
51 ErrNoBufDetails = newMemifError(20)
53 ErrIntWrite = newMemifError(21)
54 ErrMalformedMsg = newMemifError(22)
55 ErrQueueID = newMemifError(23)
56 ErrProto = newMemifError(24)
57 ErrIfID = newMemifError(25)
58 ErrAcceptSlave = newMemifError(26)
59 ErrAlreadyConn = newMemifError(27)
60 ErrMode = newMemifError(28)
61 ErrSecret = newMemifError(29)
62 ErrNoSecret = newMemifError(30)
63 ErrMaxRegion = newMemifError(31)
64 ErrMaxRing = newMemifError(32)
65 ErrNotIntFD = newMemifError(33)
66 ErrDisconnect = newMemifError(34)
67 ErrDisconnected = newMemifError(35)
68 ErrUnknownMsg = newMemifError(36)
69 ErrPollCanceled = newMemifError(37)
71 // Errors added by the adapter:
72 ErrNotInit = newMemifError(100, "libmemif is not initialized")
73 ErrAlreadyInit = newMemifError(101, "libmemif is already initialized")
74 ErrUnsupported = newMemifError(102, "the feature is not supported by C-libmemif")
76 // Received unrecognized error code from C-libmemif.
77 ErrUnknown = newMemifError(-1, "unknown error")
80 // MemifError implements and extends the error interface with the method Code(),
81 // which returns the integer error code as returned by C-libmemif.
82 type MemifError struct {
87 // Error prints error description.
88 func (e *MemifError) Error() string {
92 // Code returns the integer error code as returned by C-libmemif.
93 func (e *MemifError) Code() int {
97 // A registry of libmemif errors. Used to convert C-libmemif error code into
98 // the associated MemifError.
99 var errorRegistry = map[int]*MemifError{}
101 // newMemifError builds and registers a new MemifError.
102 func newMemifError(code int, desc ...string) *MemifError {
105 err = &MemifError{code: code, description: "libmemif: " + desc[0]}
107 err = &MemifError{code: code, description: "libmemif: " + C.GoString(C.memif_strerror(C.int(code)))}
109 errorRegistry[code] = err
113 // getMemifError returns the MemifError associated with the given C-libmemif
115 func getMemifError(code int) error {
117 return nil /* success */
119 err, known := errorRegistry[code]