1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
|
package api
import (
"fmt"
"strconv"
)
// CompatibilityError is the error type usually returned by CheckCompatibility
// method of Channel. It contains list of all the compatible/incompatible messages.
type CompatibilityError struct {
CompatibleMessages []string
IncompatibleMessages []string
}
func (c *CompatibilityError) Error() string {
return fmt.Sprintf("%d/%d messages incompatible", len(c.IncompatibleMessages), len(c.CompatibleMessages)+len(c.IncompatibleMessages))
}
// RetvalToVPPApiError returns error for retval value.
// Retval 0 returns nil error.
func RetvalToVPPApiError(retval int32) error {
if retval == 0 {
return nil
}
return VPPApiError(retval)
}
// VPPApiError represents VPP's vnet API error that is usually
// returned as Retval field in replies from VPP binary API.
type VPPApiError int32
func (e VPPApiError) Error() string {
errid := int64(e)
var errstr string
if s, ok := vppApiErrors[e]; ok {
errstr = fmt.Sprintf("%s (%d)", s, errid)
} else {
errstr = strconv.FormatInt(errid, 10)
}
return fmt.Sprintf("VPPApiError: %s", errstr)
}
// definitions from: vpp/src/vnet/api_errno.h
const (
_ VPPApiError = 0
UNSPECIFIED = -1
INVALID_SW_IF_INDEX = -2
NO_SUCH_FIB = -3
NO_SUCH_INNER_FIB = -4
NO_SUCH_LABEL = -5
NO_SUCH_ENTRY = -6
INVALID_VALUE = -7
INVALID_VALUE_2 = -8
UNIMPLEMENTED = -9
INVALID_SW_IF_INDEX_2 = -10
SYSCALL_ERROR_1 = -11
SYSCALL_ERROR_2 = -12
SYSCALL_ERROR_3 = -13
SYSCALL_ERROR_4 = -14
SYSCALL_ERROR_5 = -15
SYSCALL_ERROR_6 = -16
SYSCALL_ERROR_7 = -17
SYSCALL_ERROR_8 = -18
SYSCALL_ERROR_9 = -19
SYSCALL_ERROR_10 = -20
FEATURE_DISABLED = -30
INVALID_REGISTRATION = -31
NEXT_HOP_NOT_IN_FIB = -50
UNKNOWN_DESTINATION = -51
PREFIX_MATCHES_NEXT_HOP = -52
NEXT_HOP_NOT_FOUND_MP = -53
NO_MATCHING_INTERFACE = -54
INVALID_VLAN = -55
VLAN_ALREADY_EXISTS = -56
INVALID_SRC_ADDRESS = -57
INVALID_DST_ADDRESS = -58
ADDRESS_LENGTH_MISMATCH = -59
ADDRESS_NOT_FOUND_FOR_INTERFACE = -60
ADDRESS_NOT_DELETABLE = -61
IP6_NOT_ENABLED = -62
IN_PROGRESS = 10
NO_SUCH_NODE = -63
NO_SUCH_NODE2 = -64
NO_SUCH_TABLE = -65
NO_SUCH_TABLE2 = -66
NO_SUCH_TABLE3 = -67
SUBIF_ALREADY_EXISTS = -68
SUBIF_CREATE_FAILED = -69
INVALID_MEMORY_SIZE = -70
INVALID_INTERFACE = -71
INVALID_VLAN_TAG_COUNT = -72
INVALID_ARGUMENT = -73
UNEXPECTED_INTF_STATE = -74
TUNNEL_EXIST = -75
INVALID_DECAP_NEXT = -76
RESPONSE_NOT_READY = -77
NOT_CONNECTED = -78
IF_ALREADY_EXISTS = -79
BOND_SLAVE_NOT_ALLOWED = -80
VALUE_EXIST = -81
SAME_SRC_DST = -82
IP6_MULTICAST_ADDRESS_NOT_PRESENT = -83
SR_POLICY_NAME_NOT_PRESENT = -84
NOT_RUNNING_AS_ROOT = -85
ALREADY_CONNECTED = -86
UNSUPPORTED_JNI_VERSION = -87
FAILED_TO_ATTACH_TO_JAVA_THREAD = -88
INVALID_WORKER = -89
LISP_DISABLED = -90
CLASSIFY_TABLE_NOT_FOUND = -91
INVALID_EID_TYPE = -92
CANNOT_CREATE_PCAP_FILE = -93
INCORRECT_ADJACENCY_TYPE = -94
EXCEEDED_NUMBER_OF_RANGES_CAPACITY = -95
EXCEEDED_NUMBER_OF_PORTS_CAPACITY = -96
INVALID_ADDRESS_FAMILY = -97
INVALID_SUB_SW_IF_INDEX = -98
TABLE_TOO_BIG = -99
CANNOT_ENABLE_DISABLE_FEATURE = -100
BFD_EEXIST = -101
BFD_ENOENT = -102
BFD_EINUSE = -103
BFD_NOTSUPP = -104
ADDRESS_IN_USE = -105
ADDRESS_NOT_IN_USE = -106
QUEUE_FULL = -107
APP_UNSUPPORTED_CFG = -108
URI_FIFO_CREATE_FAILED = -109
LISP_RLOC_LOCAL = -110
BFD_EAGAIN = -111
INVALID_GPE_MODE = -112
LISP_GPE_ENTRIES_PRESENT = -113
ADDRESS_FOUND_FOR_INTERFACE = -114
SESSION_CONNECT = -115
ENTRY_ALREADY_EXISTS = -116
SVM_SEGMENT_CREATE_FAIL = -117
APPLICATION_NOT_ATTACHED = -118
BD_ALREADY_EXISTS = -119
BD_IN_USE = -120
BD_NOT_MODIFIABLE = -121
BD_ID_EXCEED_MAX = -122
SUBIF_DOESNT_EXIST = -123
L2_MACS_EVENT_CLINET_PRESENT = -124
INVALID_QUEUE = -125
UNSUPPORTED = -126
DUPLICATE_IF_ADDRESS = -127
APP_INVALID_NS = -128
APP_WRONG_NS_SECRET = -129
APP_CONNECT_SCOPE = -130
APP_ALREADY_ATTACHED = -131
SESSION_REDIRECT = -132
ILLEGAL_NAME = -133
NO_NAME_SERVERS = -134
NAME_SERVER_NOT_FOUND = -135
NAME_RESOLUTION_NOT_ENABLED = -136
NAME_SERVER_FORMAT_ERROR = -137
NAME_SERVER_NO_SUCH_NAME = -138
NAME_SERVER_NO_ADDRESSES = -139
NAME_SERVER_NEXT_SERVER = -140
APP_CONNECT_FILTERED = -141
ACL_IN_USE_INBOUND = -142
ACL_IN_USE_OUTBOUND = -143
INIT_FAILED = -144
NETLINK_ERROR = -145
BIER_BSL_UNSUP = -146
INSTANCE_IN_USE = -147
INVALID_SESSION_ID = -148
ACL_IN_USE_BY_LOOKUP_CONTEXT = -149
INVALID_VALUE_3 = -150
NON_ETHERNET = -151
BD_ALREADY_HAS_BVI = -152
)
var vppApiErrors = map[VPPApiError]string{
UNSPECIFIED: "Unspecified Error",
INVALID_SW_IF_INDEX: "Invalid sw_if_index",
NO_SUCH_FIB: "No such FIB / VRF",
NO_SUCH_INNER_FIB: "No such inner FIB / VRF",
NO_SUCH_LABEL: "No such label",
NO_SUCH_ENTRY: "No such entry",
INVALID_VALUE: "Invalid value",
INVALID_VALUE_2: "Invalid value #2",
UNIMPLEMENTED: "Unimplemented",
INVALID_SW_IF_INDEX_2: "Invalid sw_if_index #2",
SYSCALL_ERROR_1: "System call error #1",
SYSCALL_ERROR_2: "System call error #2",
SYSCALL_ERROR_3: "System call error #3",
SYSCALL_ERROR_4: "System call error #4",
SYSCALL_ERROR_5: "System call error #5",
SYSCALL_ERROR_6: "System call error #6",
SYSCALL_ERROR_7: "System call error #7",
SYSCALL_ERROR_8: "System call error #8",
SYSCALL_ERROR_9: "System call error #9",
SYSCALL_ERROR_10: "System call error #10",
FEATURE_DISABLED: "Feature disabled by configuration",
INVALID_REGISTRATION: "Invalid registration",
NEXT_HOP_NOT_IN_FIB: "Next hop not in FIB",
UNKNOWN_DESTINATION: "Unknown destination",
PREFIX_MATCHES_NEXT_HOP: "Prefix matches next hop",
NEXT_HOP_NOT_FOUND_MP: "Next hop not found (multipath)",
NO_MATCHING_INTERFACE: "No matching interface for probe",
INVALID_VLAN: "Invalid VLAN",
VLAN_ALREADY_EXISTS: "VLAN subif already exists",
INVALID_SRC_ADDRESS: "Invalid src address",
INVALID_DST_ADDRESS: "Invalid dst address",
ADDRESS_LENGTH_MISMATCH: "Address length mismatch",
ADDRESS_NOT_FOUND_FOR_INTERFACE: "Address not found for interface",
ADDRESS_NOT_DELETABLE: "Address not deletable",
IP6_NOT_ENABLED: "ip6 not enabled",
IN_PROGRESS: "Operation in progress",
NO_SUCH_NODE: "No such graph node",
NO_SUCH_NODE2: "No such graph node #2",
NO_SUCH_TABLE: "No such table",
NO_SUCH_TABLE2: "No such table #2",
NO_SUCH_TABLE3: "No such table #3",
SUBIF_ALREADY_EXISTS: "Subinterface already exists",
SUBIF_CREATE_FAILED: "Subinterface creation failed",
INVALID_MEMORY_SIZE: "Invalid memory size requested",
INVALID_INTERFACE: "Invalid interface",
INVALID_VLAN_TAG_COUNT: "Invalid number of tags for requested operation",
INVALID_ARGUMENT: "Invalid argument",
UNEXPECTED_INTF_STATE: "Unexpected interface state",
TUNNEL_EXIST: "Tunnel already exists",
INVALID_DECAP_NEXT: "Invalid decap-next",
RESPONSE_NOT_READY: "Response not ready",
NOT_CONNECTED: "Not connected to the data plane",
IF_ALREADY_EXISTS: "Interface already exists",
BOND_SLAVE_NOT_ALLOWED: "Operation not allowed on slave of BondEthernet",
VALUE_EXIST: "Value already exists",
SAME_SRC_DST: "Source and destination are the same",
IP6_MULTICAST_ADDRESS_NOT_PRESENT: "IP6 multicast address required",
SR_POLICY_NAME_NOT_PRESENT: "Segement routing policy name required",
NOT_RUNNING_AS_ROOT: "Not running as root",
ALREADY_CONNECTED: "Connection to the data plane already exists",
UNSUPPORTED_JNI_VERSION: "Unsupported JNI version",
FAILED_TO_ATTACH_TO_JAVA_THREAD: "Failed to attach to Java thread",
INVALID_WORKER: "Invalid worker thread",
LISP_DISABLED: "LISP is disabled",
CLASSIFY_TABLE_NOT_FOUND: "Classify table not found",
INVALID_EID_TYPE: "Unsupported LSIP EID type",
CANNOT_CREATE_PCAP_FILE: "Cannot create pcap file",
INCORRECT_ADJACENCY_TYPE: "Invalid adjacency type for this operation",
EXCEEDED_NUMBER_OF_RANGES_CAPACITY: "Operation would exceed configured capacity of ranges",
EXCEEDED_NUMBER_OF_PORTS_CAPACITY: "Operation would exceed capacity of number of ports",
INVALID_ADDRESS_FAMILY: "Invalid address family",
INVALID_SUB_SW_IF_INDEX: "Invalid sub-interface sw_if_index",
TABLE_TOO_BIG: "Table too big",
CANNOT_ENABLE_DISABLE_FEATURE: "Cannot enable/disable feature",
BFD_EEXIST: "Duplicate BFD object",
BFD_ENOENT: "No such BFD object",
BFD_EINUSE: "BFD object in use",
BFD_NOTSUPP: "BFD feature not supported",
ADDRESS_IN_USE: "Address in use",
ADDRESS_NOT_IN_USE: "Address not in use",
QUEUE_FULL: "Queue full",
APP_UNSUPPORTED_CFG: "Unsupported application config",
URI_FIFO_CREATE_FAILED: "URI FIFO segment create failed",
LISP_RLOC_LOCAL: "RLOC address is local",
BFD_EAGAIN: "BFD object cannot be manipulated at this time",
INVALID_GPE_MODE: "Invalid GPE mode",
LISP_GPE_ENTRIES_PRESENT: "LISP GPE entries are present",
ADDRESS_FOUND_FOR_INTERFACE: "Address found for interface",
SESSION_CONNECT: "Session failed to connect",
ENTRY_ALREADY_EXISTS: "Entry already exists",
SVM_SEGMENT_CREATE_FAIL: "svm segment create fail",
APPLICATION_NOT_ATTACHED: "application not attached",
BD_ALREADY_EXISTS: "Bridge domain already exists",
BD_IN_USE: "Bridge domain has member interfaces",
BD_NOT_MODIFIABLE: "Bridge domain 0 can't be deleted/modified",
BD_ID_EXCEED_MAX: "Bridge domain ID exceed 16M limit",
SUBIF_DOESNT_EXIST: "Subinterface doesn't exist",
L2_MACS_EVENT_CLINET_PRESENT: "Client already exist for L2 MACs events",
INVALID_QUEUE: "Invalid queue",
UNSUPPORTED: "Unsupported",
DUPLICATE_IF_ADDRESS: "Address already present on another interface",
APP_INVALID_NS: "Invalid application namespace",
APP_WRONG_NS_SECRET: "Wrong app namespace secret",
APP_CONNECT_SCOPE: "Connect scope",
APP_ALREADY_ATTACHED: "App already attached",
SESSION_REDIRECT: "Redirect failed",
ILLEGAL_NAME: "Illegal name",
NO_NAME_SERVERS: "No name servers configured",
NAME_SERVER_NOT_FOUND: "Name server not found",
NAME_RESOLUTION_NOT_ENABLED: "Name resolution not enabled",
NAME_SERVER_FORMAT_ERROR: "Server format error (bug!)",
NAME_SERVER_NO_SUCH_NAME: "No such name",
NAME_SERVER_NO_ADDRESSES: "No addresses available",
NAME_SERVER_NEXT_SERVER: "Retry with new server",
APP_CONNECT_FILTERED: "Connect was filtered",
ACL_IN_USE_INBOUND: "Inbound ACL in use",
ACL_IN_USE_OUTBOUND: "Outbound ACL in use",
INIT_FAILED: "Initialization Failed",
NETLINK_ERROR: "netlink error",
BIER_BSL_UNSUP: "BIER bit-string-length unsupported",
INSTANCE_IN_USE: "Instance in use",
INVALID_SESSION_ID: "session ID out of range",
ACL_IN_USE_BY_LOOKUP_CONTEXT: "ACL in use by a lookup context",
INVALID_VALUE_3: "Invalid value #3",
NON_ETHERNET: "Interface is not an Ethernet interface",
BD_ALREADY_HAS_BVI: "Bridge domain already has a BVI interface",
}
|