-
Notifications
You must be signed in to change notification settings - Fork 329
/
runtime_interface.h
423 lines (334 loc) · 14.6 KB
/
runtime_interface.h
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
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
/* Copyright 2013-present Barefoot Networks, Inc.
*
* 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.
*/
/*
* Antonin Bas (antonin@barefootnetworks.com)
*
*/
#ifndef BM_BM_SIM_RUNTIME_INTERFACE_H_
#define BM_BM_SIM_RUNTIME_INTERFACE_H_
#include <string>
#include <vector>
#include <iosfwd>
#include "action_profile.h"
#include "match_tables.h"
#include "device_id.h"
namespace bm {
class RuntimeInterface {
public:
using mbr_hdl_t = MatchTableIndirect::mbr_hdl_t;
using grp_hdl_t = MatchTableIndirectWS::grp_hdl_t;
using MeterErrorCode = Meter::MeterErrorCode;
using RegisterErrorCode = Register::RegisterErrorCode;
enum ErrorCode {
SUCCESS = 0,
CONFIG_SWAP_DISABLED,
ONGOING_SWAP,
NO_ONGOING_SWAP
};
public:
virtual ~RuntimeInterface() { }
// common to all tables
virtual MatchErrorCode
mt_get_num_entries(cxt_id_t cxt_id,
const std::string &table_name,
size_t *num_entries) const = 0;
virtual MatchErrorCode
mt_clear_entries(cxt_id_t cxt_id,
const std::string &table_name,
bool reset_default_entry) = 0;
// direct tables
virtual MatchErrorCode
mt_add_entry(cxt_id_t cxt_id,
const std::string &table_name,
const std::vector<MatchKeyParam> &match_key,
const std::string &action_name,
ActionData action_data, // will be moved
entry_handle_t *handle,
int priority = -1 /*only used for ternary*/) = 0;
virtual MatchErrorCode
mt_set_default_action(cxt_id_t cxt_id,
const std::string &table_name,
const std::string &action_name,
ActionData action_data) = 0;
virtual MatchErrorCode
mt_reset_default_entry(cxt_id_t cxt_id,
const std::string &table_name) = 0;
virtual MatchErrorCode
mt_delete_entry(cxt_id_t cxt_id,
const std::string &table_name,
entry_handle_t handle) = 0;
virtual MatchErrorCode
mt_modify_entry(cxt_id_t cxt_id,
const std::string &table_name,
entry_handle_t handle,
const std::string &action_name,
ActionData action_data) = 0;
virtual MatchErrorCode
mt_set_entry_ttl(cxt_id_t cxt_id,
const std::string &table_name,
entry_handle_t handle,
unsigned int ttl_ms) = 0;
// action profiles
virtual MatchErrorCode
mt_act_prof_add_member(cxt_id_t cxt_id,
const std::string &act_prof_name,
const std::string &action_name,
ActionData action_data,
mbr_hdl_t *mbr) = 0;
virtual MatchErrorCode
mt_act_prof_delete_member(cxt_id_t cxt_id,
const std::string &act_prof_name,
mbr_hdl_t mbr) = 0;
virtual MatchErrorCode
mt_act_prof_modify_member(cxt_id_t cxt_id,
const std::string &act_prof_name,
mbr_hdl_t mbr,
const std::string &action_name,
ActionData action_data) = 0;
virtual MatchErrorCode
mt_act_prof_create_group(cxt_id_t cxt_id,
const std::string &act_prof_name,
grp_hdl_t *grp) = 0;
virtual MatchErrorCode
mt_act_prof_delete_group(cxt_id_t cxt_id,
const std::string &act_prof_name,
grp_hdl_t grp) = 0;
virtual MatchErrorCode
mt_act_prof_add_member_to_group(cxt_id_t cxt_id,
const std::string &act_prof_name,
mbr_hdl_t mbr, grp_hdl_t grp) = 0;
virtual MatchErrorCode
mt_act_prof_remove_member_from_group(cxt_id_t cxt_id,
const std::string &act_prof_name,
mbr_hdl_t mbr, grp_hdl_t grp) = 0;
virtual std::vector<ActionProfile::Member>
mt_act_prof_get_members(cxt_id_t cxt_id,
const std::string &act_prof_name) const = 0;
virtual MatchErrorCode
mt_act_prof_get_member(cxt_id_t cxt_id, const std::string &act_prof_name,
mbr_hdl_t mbr,
ActionProfile::Member *member) const = 0;
virtual std::vector<ActionProfile::Group>
mt_act_prof_get_groups(cxt_id_t cxt_id,
const std::string &act_prof_name) const = 0;
virtual MatchErrorCode
mt_act_prof_get_group(cxt_id_t cxt_id, const std::string &act_prof_name,
grp_hdl_t grp,
ActionProfile::Group *group) const = 0;
// indirect tables
virtual MatchErrorCode
mt_indirect_add_entry(cxt_id_t cxt_id,
const std::string &table_name,
const std::vector<MatchKeyParam> &match_key,
mbr_hdl_t mbr,
entry_handle_t *handle,
int priority = 1) = 0;
virtual MatchErrorCode
mt_indirect_modify_entry(cxt_id_t cxt_id,
const std::string &table_name,
entry_handle_t handle,
mbr_hdl_t mbr) = 0;
virtual MatchErrorCode
mt_indirect_delete_entry(cxt_id_t cxt_id,
const std::string &table_name,
entry_handle_t handle) = 0;
virtual MatchErrorCode
mt_indirect_set_entry_ttl(cxt_id_t cxt_id,
const std::string &table_name,
entry_handle_t handle,
unsigned int ttl_ms) = 0;
virtual MatchErrorCode
mt_indirect_set_default_member(cxt_id_t cxt_id,
const std::string &table_name,
mbr_hdl_t mbr) = 0;
virtual MatchErrorCode
mt_indirect_reset_default_entry(cxt_id_t cxt_id,
const std::string &table_name) = 0;
virtual MatchErrorCode
mt_indirect_ws_add_entry(cxt_id_t cxt_id,
const std::string &table_name,
const std::vector<MatchKeyParam> &match_key,
grp_hdl_t grp,
entry_handle_t *handle,
int priority = 1) = 0;
virtual MatchErrorCode
mt_indirect_ws_modify_entry(cxt_id_t cxt_id,
const std::string &table_name,
entry_handle_t handle,
grp_hdl_t grp) = 0;
virtual MatchErrorCode
mt_indirect_ws_set_default_group(cxt_id_t cxt_id,
const std::string &table_name,
grp_hdl_t grp) = 0;
virtual MatchErrorCode
mt_read_counters(cxt_id_t cxt_id,
const std::string &table_name,
entry_handle_t handle,
MatchTableAbstract::counter_value_t *bytes,
MatchTableAbstract::counter_value_t *packets) = 0;
virtual MatchErrorCode
mt_reset_counters(cxt_id_t cxt_id,
const std::string &table_name) = 0;
virtual MatchErrorCode
mt_write_counters(cxt_id_t cxt_id,
const std::string &table_name,
entry_handle_t handle,
MatchTableAbstract::counter_value_t bytes,
MatchTableAbstract::counter_value_t packets) = 0;
virtual MatchErrorCode
mt_set_meter_rates(cxt_id_t cxt_id,
const std::string &table_name,
entry_handle_t handle,
const std::vector<Meter::rate_config_t> &configs) = 0;
virtual MatchErrorCode
mt_get_meter_rates(cxt_id_t cxt_id,
const std::string &table_name,
entry_handle_t handle,
std::vector<Meter::rate_config_t> *configs) = 0;
virtual MatchErrorCode
mt_reset_meter_rates(cxt_id_t cxt_id,
const std::string &table_name,
entry_handle_t handle) = 0;
virtual MatchTableType
mt_get_type(cxt_id_t cxt_id, const std::string &table_name) const = 0;
virtual std::vector<MatchTable::Entry>
mt_get_entries(cxt_id_t cxt_id, const std::string &table_name) const = 0;
virtual std::vector<MatchTableIndirect::Entry>
mt_indirect_get_entries(cxt_id_t cxt_id,
const std::string &table_name) const = 0;
virtual std::vector<MatchTableIndirectWS::Entry>
mt_indirect_ws_get_entries(cxt_id_t cxt_id,
const std::string &table_name) const = 0;
virtual MatchErrorCode
mt_get_entry(cxt_id_t cxt_id, const std::string &table_name,
entry_handle_t handle, MatchTable::Entry *entry) const = 0;
virtual MatchErrorCode
mt_indirect_get_entry(cxt_id_t cxt_id, const std::string &table_name,
entry_handle_t handle,
MatchTableIndirect::Entry *entry) const = 0;
virtual MatchErrorCode
mt_indirect_ws_get_entry(cxt_id_t cxt_id, const std::string &table_name,
entry_handle_t handle,
MatchTableIndirectWS::Entry *entry) const = 0;
virtual MatchErrorCode
mt_get_default_entry(cxt_id_t cxt_id, const std::string &table_name,
MatchTable::Entry *entry) const = 0;
virtual MatchErrorCode
mt_indirect_get_default_entry(cxt_id_t cxt_id, const std::string &table_name,
MatchTableIndirect::Entry *entry) const = 0;
virtual MatchErrorCode
mt_indirect_ws_get_default_entry(
cxt_id_t cxt_id, const std::string &table_name,
MatchTableIndirectWS::Entry *entry) const = 0;
virtual MatchErrorCode
mt_get_entry_from_key(cxt_id_t cxt_id, const std::string &table_name,
const std::vector<MatchKeyParam> &match_key,
MatchTable::Entry *entry, int priority = 1) const = 0;
virtual MatchErrorCode
mt_indirect_get_entry_from_key(cxt_id_t cxt_id, const std::string &table_name,
const std::vector<MatchKeyParam> &match_key,
MatchTableIndirect::Entry *entry,
int priority = 1) const = 0;
virtual MatchErrorCode
mt_indirect_ws_get_entry_from_key(cxt_id_t cxt_id,
const std::string &table_name,
const std::vector<MatchKeyParam> &match_key,
MatchTableIndirectWS::Entry *entry,
int priority = 1) const = 0;
virtual Counter::CounterErrorCode
read_counters(cxt_id_t cxt_id,
const std::string &counter_name,
size_t index,
MatchTableAbstract::counter_value_t *bytes,
MatchTableAbstract::counter_value_t *packets) = 0;
virtual Counter::CounterErrorCode
reset_counters(cxt_id_t cxt_id,
const std::string &counter_name) = 0;
virtual Counter::CounterErrorCode
write_counters(cxt_id_t cxt_id,
const std::string &counter_name,
size_t index,
MatchTableAbstract::counter_value_t bytes,
MatchTableAbstract::counter_value_t packets) = 0;
virtual MeterErrorCode
meter_array_set_rates(cxt_id_t cxt_id,
const std::string &meter_name,
const std::vector<Meter::rate_config_t> &configs) = 0;
virtual MeterErrorCode
meter_set_rates(cxt_id_t cxt_id,
const std::string &meter_name, size_t idx,
const std::vector<Meter::rate_config_t> &configs) = 0;
virtual MeterErrorCode
meter_get_rates(cxt_id_t cxt_id,
const std::string &meter_name, size_t idx,
std::vector<Meter::rate_config_t> *configs) = 0;
virtual MeterErrorCode
meter_reset_rates(cxt_id_t cxt_id,
const std::string &meter_name, size_t idx) = 0;
virtual RegisterErrorCode
register_read(cxt_id_t cxt_id,
const std::string ®ister_name,
const size_t idx, Data *value) = 0;
virtual std::vector<Data>
register_read_all(cxt_id_t cxt_id, const std::string ®ister_name) = 0;
virtual RegisterErrorCode
register_write(cxt_id_t cxt_id,
const std::string ®ister_name,
const size_t idx, Data value) = 0; // to be moved
virtual RegisterErrorCode
register_write_range(cxt_id_t cxt_id,
const std::string ®ister_name,
const size_t start, const size_t end,
Data value) = 0;
virtual RegisterErrorCode
register_reset(cxt_id_t cxt_id, const std::string ®ister_name) = 0;
virtual ParseVSet::ErrorCode
parse_vset_add(cxt_id_t cxt_id, const std::string &parse_vset_name,
const ByteContainer &value) = 0;
virtual ParseVSet::ErrorCode
parse_vset_remove(cxt_id_t cxt_id, const std::string &parse_vset_name,
const ByteContainer &value) = 0;
virtual ParseVSet::ErrorCode
parse_vset_get(cxt_id_t cxt_id, const std::string &parse_vset_name,
std::vector<ByteContainer> *values) = 0;
virtual ParseVSet::ErrorCode
parse_vset_clear(cxt_id_t cxt_id, const std::string &parse_vset_name) = 0;
virtual ErrorCode
load_new_config(const std::string &new_config) = 0;
virtual ErrorCode
swap_configs() = 0;
virtual std::string
get_config() const = 0;
virtual std::string
get_config_md5() const = 0;
virtual CustomCrcErrorCode
set_crc16_custom_parameters(
cxt_id_t cxt_id, const std::string &calc_name,
const CustomCrcMgr<uint16_t>::crc_config_t &crc16_config) = 0;
virtual CustomCrcErrorCode
set_crc32_custom_parameters(
cxt_id_t cxt_id, const std::string &calc_name,
const CustomCrcMgr<uint32_t>::crc_config_t &crc32_config) = 0;
virtual ToeplitzErrorCode
set_toeplitz_key(
cxt_id_t cxt_id, const std::string &calc_name,
const ToeplitzMgr::key_t &key) = 0;
virtual ErrorCode
reset_state() = 0;
virtual ErrorCode
serialize(std::ostream *out) = 0;
};
} // namespace bm
#endif // BM_BM_SIM_RUNTIME_INTERFACE_H_