FD.io VPP  v21.06-3-gbb25fbf28
Vector Packet Processing
bond_api.c
Go to the documentation of this file.
1 /*
2  *------------------------------------------------------------------
3  * bond_api.c - vnet bonding device driver API support
4  *
5  * Copyright (c) 2017 Cisco and/or its affiliates.
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at:
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *------------------------------------------------------------------
18  */
19 
20 #include <vnet/vnet.h>
21 #include <vlibmemory/api.h>
22 
23 #include <vnet/interface.h>
24 #include <vnet/api_errno.h>
25 #include <vnet/ethernet/ethernet.h>
27 
28 #include <vnet/vnet_msg_enum.h>
29 
30 #define vl_typedefs /* define message structures */
31 #include <vnet/vnet_all_api_h.h>
32 #undef vl_typedefs
33 
34 #define vl_endianfun /* define message structures */
35 #include <vnet/vnet_all_api_h.h>
36 #undef vl_endianfun
37 
38 /* instantiate all the print functions we know about */
39 #define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__)
40 #define vl_printfun
41 #include <vnet/vnet_all_api_h.h>
42 #undef vl_printfun
43 
45 #include <vnet/bonding/node.h>
46 
47 #define foreach_bond_api_msg \
48 _(BOND_CREATE, bond_create) \
49 _(BOND_CREATE2, bond_create2) \
50 _(BOND_DELETE, bond_delete) \
51 _(BOND_ENSLAVE, bond_enslave) \
52 _(BOND_ADD_MEMBER, bond_add_member) \
53 _(SW_INTERFACE_SET_BOND_WEIGHT, sw_interface_set_bond_weight) \
54 _(BOND_DETACH_SLAVE, bond_detach_slave) \
55 _(BOND_DETACH_MEMBER, bond_detach_member) \
56 _(SW_INTERFACE_BOND_DUMP, sw_interface_bond_dump) \
57 _(SW_BOND_INTERFACE_DUMP, sw_bond_interface_dump) \
58 _(SW_INTERFACE_SLAVE_DUMP, sw_interface_slave_dump) \
59 _(SW_MEMBER_INTERFACE_DUMP, sw_member_interface_dump)
60 
61 static void
63 {
65  int rv;
66  vl_api_bond_delete_reply_t *rmp;
67  u32 sw_if_index = ntohl (mp->sw_if_index);
68 
70 
71  REPLY_MACRO (VL_API_BOND_DELETE_REPLY);
72 }
73 
74 static void
76 {
79  bond_create_if_args_t _a, *ap = &_a;
80 
81  clib_memset (ap, 0, sizeof (*ap));
82 
83  ap->id = ntohl (mp->id);
84 
85  if (mp->use_custom_mac)
86  {
88  ap->hw_addr_set = 1;
89  }
90 
91  ap->mode = ntohl (mp->mode);
92  ap->lb = ntohl (mp->lb);
93  ap->numa_only = mp->numa_only;
94  bond_create_if (vm, ap);
95 
96  int rv = ap->rv;
97 
98  /* *INDENT-OFF* */
99  REPLY_MACRO2(VL_API_BOND_CREATE_REPLY,
100  ({
101  rmp->sw_if_index = ntohl (ap->sw_if_index);
102  }));
103  /* *INDENT-ON* */
104 }
105 
106 static void
108 {
111  bond_create_if_args_t _a, *ap = &_a;
112 
113  clib_memset (ap, 0, sizeof (*ap));
114 
115  ap->id = ntohl (mp->id);
116 
117  if (mp->use_custom_mac)
118  {
120  ap->hw_addr_set = 1;
121  }
122 
123  ap->mode = ntohl (mp->mode);
124  ap->lb = ntohl (mp->lb);
125  ap->numa_only = mp->numa_only;
126  ap->gso = mp->enable_gso;
127  bond_create_if (vm, ap);
128 
129  int rv = ap->rv;
130 
131  /* *INDENT-OFF* */
132  REPLY_MACRO2(VL_API_BOND_CREATE2_REPLY,
133  ({
134  rmp->sw_if_index = ntohl (ap->sw_if_index);
135  }));
136  /* *INDENT-ON* */
137 }
138 
139 static void
141 {
144  bond_add_member_args_t _a, *ap = &_a;
145  int rv = 0;
146 
147  clib_memset (ap, 0, sizeof (*ap));
148 
149  ap->group = ntohl (mp->bond_sw_if_index);
151  ap->member = ntohl (mp->sw_if_index);
152  ap->is_passive = mp->is_passive;
154 
155  bond_add_member (vm, ap);
156  rv = ap->rv;
157 
159  REPLY_MACRO (VL_API_BOND_ADD_MEMBER_REPLY);
160 }
161 
162 static void
164 {
167  bond_add_member_args_t _a, *ap = &_a;
168  int rv = 0;
169 
170  clib_memset (ap, 0, sizeof (*ap));
171 
172  ap->group = ntohl (mp->bond_sw_if_index);
174  ap->member = ntohl (mp->sw_if_index);
175  ap->is_passive = mp->is_passive;
177 
178  bond_add_member (vm, ap);
179  rv = ap->rv;
180 
182  REPLY_MACRO (VL_API_BOND_ENSLAVE_REPLY);
183 }
184 
185 static void
188 {
190  bond_set_intf_weight_args_t _a, *ap = &_a;
191  vl_api_sw_interface_set_bond_weight_reply_t *rmp;
192  int rv = 0;
193 
194  clib_memset (ap, 0, sizeof (*ap));
195 
196  ap->sw_if_index = ntohl (mp->sw_if_index);
197  ap->weight = ntohl (mp->weight);
198 
199  bond_set_intf_weight (vm, ap);
200  rv = ap->rv;
201 
202  REPLY_MACRO (VL_API_SW_INTERFACE_SET_BOND_WEIGHT_REPLY);
203 }
204 
205 static void
207 {
209  vl_api_bond_detach_slave_reply_t *rmp;
210  bond_detach_member_args_t _a, *ap = &_a;
211  int rv = 0;
212 
213  clib_memset (ap, 0, sizeof (*ap));
214 
215  ap->member = ntohl (mp->sw_if_index);
216  bond_detach_member (vm, ap);
217  rv = ap->rv;
218 
219  REPLY_MACRO (VL_API_BOND_DETACH_SLAVE_REPLY);
220 }
221 
222 static void
224 {
226  vl_api_bond_detach_member_reply_t *rmp;
227  bond_detach_member_args_t _a, *ap = &_a;
228  int rv = 0;
229 
230  clib_memset (ap, 0, sizeof (*ap));
231 
232  ap->member = ntohl (mp->sw_if_index);
233  bond_detach_member (vm, ap);
234  rv = ap->rv;
235 
236  REPLY_MACRO (VL_API_BOND_DETACH_MEMBER_REPLY);
237 }
238 
239 static void
241  vl_api_registration_t * reg,
242  bond_interface_details_t * bond_if,
243  u32 context)
244 {
246 
247  mp = vl_msg_api_alloc (sizeof (*mp));
248  clib_memset (mp, 0, sizeof (*mp));
249  mp->_vl_msg_id = htons (VL_API_SW_INTERFACE_BOND_DETAILS);
250  mp->sw_if_index = htonl (bond_if->sw_if_index);
251  mp->id = htonl (bond_if->id);
253  MIN (ARRAY_LEN (mp->interface_name) - 1,
254  strlen ((const char *) bond_if->interface_name)));
255  mp->mode = htonl (bond_if->mode);
256  mp->lb = htonl (bond_if->lb);
257  mp->numa_only = bond_if->numa_only;
258  mp->active_slaves = htonl (bond_if->active_members);
259  mp->slaves = htonl (bond_if->members);
260 
261  mp->context = context;
262  vl_api_send_msg (reg, (u8 *) mp);
263 }
264 
265 static void
267 {
268  int rv;
271  bond_interface_details_t *bondifs = NULL;
272  bond_interface_details_t *bond_if = NULL;
273 
275  if (!reg)
276  return;
277 
278  rv = bond_dump_ifs (&bondifs);
279  if (rv)
280  return;
281 
282  vec_foreach (bond_if, bondifs)
283  {
284  bond_send_sw_interface_details (am, reg, bond_if, mp->context);
285  }
286 
287  vec_free (bondifs);
288 }
289 
290 static void
292  vl_api_registration_t * reg,
293  bond_interface_details_t * bond_if,
294  u32 context)
295 {
297 
298  mp = vl_msg_api_alloc (sizeof (*mp));
299  clib_memset (mp, 0, sizeof (*mp));
300  mp->_vl_msg_id = htons (VL_API_SW_BOND_INTERFACE_DETAILS);
301  mp->sw_if_index = htonl (bond_if->sw_if_index);
302  mp->id = htonl (bond_if->id);
304  MIN (ARRAY_LEN (mp->interface_name) - 1,
305  strlen ((const char *) bond_if->interface_name)));
306  mp->mode = htonl (bond_if->mode);
307  mp->lb = htonl (bond_if->lb);
308  mp->numa_only = bond_if->numa_only;
309  mp->active_members = htonl (bond_if->active_members);
310  mp->members = htonl (bond_if->members);
311 
312  mp->context = context;
313  vl_api_send_msg (reg, (u8 *) mp);
314 }
315 
316 static void
318 {
319  int rv;
322  bond_interface_details_t *bondifs = NULL;
323  bond_interface_details_t *bond_if = NULL;
324  u32 filter_sw_if_index;
325 
327  if (!reg)
328  return;
329 
330  filter_sw_if_index = htonl (mp->sw_if_index);
331  if (filter_sw_if_index != ~0)
333 
334  rv = bond_dump_ifs (&bondifs);
335  if (rv)
336  return;
337 
338  vec_foreach (bond_if, bondifs)
339  {
340  if ((filter_sw_if_index == ~0) ||
341  (bond_if->sw_if_index == filter_sw_if_index))
342  bond_send_sw_bond_interface_details (am, reg, bond_if, mp->context);
343  }
344 
346  vec_free (bondifs);
347 }
348 
349 static void
351  vl_api_registration_t * reg,
352  member_interface_details_t * member_if,
353  u32 context)
354 {
356 
357  mp = vl_msg_api_alloc (sizeof (*mp));
358  clib_memset (mp, 0, sizeof (*mp));
359  mp->_vl_msg_id = htons (VL_API_SW_INTERFACE_SLAVE_DETAILS);
360  mp->sw_if_index = htonl (member_if->sw_if_index);
361  clib_memcpy (mp->interface_name, member_if->interface_name,
362  MIN (ARRAY_LEN (mp->interface_name) - 1,
363  strlen ((const char *) member_if->interface_name)));
364  mp->is_passive = member_if->is_passive;
365  mp->is_long_timeout = member_if->is_long_timeout;
366  mp->is_local_numa = member_if->is_local_numa;
367  mp->weight = htonl (member_if->weight);
368 
369  mp->context = context;
370  vl_api_send_msg (reg, (u8 *) mp);
371 }
372 
373 static void
375  mp)
376 {
377  int rv;
380  member_interface_details_t *memberifs = NULL;
381  member_interface_details_t *member_if = NULL;
382 
384  if (!reg)
385  return;
386 
387  rv = bond_dump_member_ifs (&memberifs, ntohl (mp->sw_if_index));
388  if (rv)
389  return;
390 
391  vec_foreach (member_if, memberifs)
392  {
393  bond_send_sw_member_interface_details (am, reg, member_if, mp->context);
394  }
395 
396  vec_free (memberifs);
397 }
398 
399 static void
401  vl_api_registration_t * reg,
402  member_interface_details_t * member_if,
403  u32 context)
404 {
406 
407  mp = vl_msg_api_alloc (sizeof (*mp));
408  clib_memset (mp, 0, sizeof (*mp));
409  mp->_vl_msg_id = htons (VL_API_SW_MEMBER_INTERFACE_DETAILS);
410  mp->sw_if_index = htonl (member_if->sw_if_index);
411  clib_memcpy (mp->interface_name, member_if->interface_name,
412  MIN (ARRAY_LEN (mp->interface_name) - 1,
413  strlen ((const char *) member_if->interface_name)));
414  mp->is_passive = member_if->is_passive;
415  mp->is_long_timeout = member_if->is_long_timeout;
416  mp->is_local_numa = member_if->is_local_numa;
417  mp->weight = htonl (member_if->weight);
418 
419  mp->context = context;
420  vl_api_send_msg (reg, (u8 *) mp);
421 }
422 
423 static void
425  mp)
426 {
427  int rv;
430  member_interface_details_t *memberifs = NULL;
431  member_interface_details_t *member_if = NULL;
432 
434  if (!reg)
435  return;
436 
437  rv = bond_dump_member_ifs (&memberifs, ntohl (mp->sw_if_index));
438  if (rv)
439  return;
440 
441  vec_foreach (member_if, memberifs)
442  {
443  bond_send_member_interface_details (am, reg, member_if, mp->context);
444  }
445 
446  vec_free (memberifs);
447 }
448 
449 #define vl_msg_name_crc_list
450 #include <vnet/vnet_all_api_h.h>
451 #undef vl_msg_name_crc_list
452 
453 static void
455 {
456 #define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id);
457  foreach_vl_msg_name_crc_bond;
458 #undef _
459 }
460 
461 static clib_error_t *
463 {
465 
466 #define _(N,n) \
467  vl_msg_api_set_handlers(VL_API_##N, #n, \
468  vl_api_##n##_t_handler, \
469  vl_noop_handler, \
470  vl_api_##n##_t_endian, \
471  vl_api_##n##_t_print, \
472  sizeof(vl_api_##n##_t), 1);
474 #undef _
475 
476  /*
477  * Set up the (msg_name, crc, message-id) table
478  */
480 
481  return 0;
482 }
483 
485 
486 /*
487  * fd.io coding-style-patch-verification: ON
488  *
489  * Local Variables:
490  * eval: (c-set-style "gnu")
491  * End:
492  */
member_interface_details_t::is_local_numa
u8 is_local_numa
Definition: node.h:143
vl_api_bond_create_t::numa_only
bool numa_only
Definition: bond.api:66
vl_api_sw_bond_interface_dump_t_handler
static void vl_api_sw_bond_interface_dump_t_handler(vl_api_sw_bond_interface_dump_t *mp)
Definition: bond_api.c:317
vl_api_bond_add_member_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:170
vl_api_bond_create2_reply_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:114
bond_create_if
void bond_create_if(vlib_main_t *vm, bond_create_if_args_t *args)
Definition: cli.c:377
vl_api_sw_interface_slave_details_t
Reply for slave dump request.
Definition: bond.api:294
vl_api_sw_interface_bond_details_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:232
vl_api_bond_create_t::mode
vl_api_bond_mode_t mode
Definition: bond.api:64
vl_api_sw_member_interface_details_t::weight
u32 weight
Definition: bond.api:333
VALIDATE_SW_IF_INDEX
#define VALIDATE_SW_IF_INDEX(mp)
Definition: api_helper_macros.h:281
vl_api_client_index_to_registration
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
Definition: api.h:79
vl_api_bond_detach_slave_t
bond detach slave
Definition: bond.api:191
member_interface_details_t::is_long_timeout
u8 is_long_timeout
Definition: node.h:142
vl_api_sw_interface_bond_details_t::interface_name
string interface_name[64]
Definition: bond.api:239
api.h
vl_api_sw_member_interface_dump_t_handler
static void vl_api_sw_member_interface_dump_t_handler(vl_api_sw_member_interface_dump_t *mp)
Definition: bond_api.c:424
vl_api_sw_interface_set_bond_weight_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:346
vl_api_bond_detach_slave_t_handler
static void vl_api_bond_detach_slave_t_handler(vl_api_bond_detach_slave_t *mp)
Definition: bond_api.c:206
vl_api_sw_interface_bond_details_t::active_slaves
u32 active_slaves
Definition: bond.api:237
vl_api_sw_bond_interface_dump_t::sw_if_index
vl_api_interface_index_t sw_if_index[default=0xffffffff]
Definition: bond.api:247
bond_set_intf_weight_args_t::weight
u32 weight
Definition: node.h:117
vl_api_sw_interface_bond_dump_t_handler
static void vl_api_sw_interface_bond_dump_t_handler(vl_api_sw_interface_bond_dump_t *mp)
Definition: bond_api.c:266
vl_api_bond_create2_t::enable_gso
bool enable_gso
Definition: bond.api:99
vl_api_bond_enslave_t
Initialize a new bond interface with the given paramters.
Definition: bond.api:137
REPLY_MACRO2
#define REPLY_MACRO2(t, body)
Definition: api_helper_macros.h:65
vl_api_bond_create_t::mac_address
vl_api_mac_address_t mac_address
Definition: bond.api:63
clib_memcpy
#define clib_memcpy(d, s, n)
Definition: string.h:197
vl_api_sw_member_interface_details_t::context
u32 context
Definition: bond.api:327
bond_add_member_args_t::group
u32 group
Definition: node.h:98
vl_api_send_msg
static void vl_api_send_msg(vl_api_registration_t *rp, u8 *elem)
Definition: api.h:35
vl_api_bond_delete_t
Delete bond interface.
Definition: bond.api:122
vl_api_sw_interface_slave_details_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:297
vl_api_sw_bond_interface_details_t::interface_name
string interface_name[64]
Definition: bond.api:270
bond_add_member_args_t::member
u32 member
Definition: node.h:96
bond_create_if_args_t::sw_if_index
u32 sw_if_index
Definition: node.h:88
vl_api_bond_add_member_t_handler
static void vl_api_bond_add_member_t_handler(vl_api_bond_add_member_t *mp)
Definition: bond_api.c:140
foreach_bond_api_msg
#define foreach_bond_api_msg
Definition: bond_api.c:47
bond_interface_details_t::members
u32 members
Definition: node.h:133
vpe_api_main_t
Definition: api_helper_macros.h:414
vl_api_sw_bond_interface_dump_t::context
u32 context
Definition: bond.api:246
vl_api_bond_create2_t
Initialize a new bond interface with the given paramters.
Definition: bond.api:92
vl_api_sw_bond_interface_dump_t::client_index
u32 client_index
Definition: bond.api:245
vl_api_sw_member_interface_dump_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:314
bond_delete_if
int bond_delete_if(vlib_main_t *vm, u32 sw_if_index)
Definition: cli.c:336
bond_api_hookup
static clib_error_t * bond_api_hookup(vlib_main_t *vm)
Definition: bond_api.c:462
vl_api_bond_delete_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:126
bond_interface_details_t::sw_if_index
u32 sw_if_index
Definition: node.h:126
vl_api_bond_create_t::id
u32 id[default=0xFFFFFFFF]
Definition: bond.api:61
am
app_main_t * am
Definition: application.c:489
vm
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
Definition: nat44_ei.c:3047
bond_create_if_args_t
Definition: node.h:78
vl_api_sw_interface_bond_details_t::lb
vl_api_bond_lb_algo_t lb
Definition: bond.api:235
vl_api_bond_enslave_t::is_passive
bool is_passive
Definition: bond.api:144
member_interface_details_t
member interface details struct
Definition: node.h:137
vl_api_sw_interface_slave_dump_t::client_index
u32 client_index
Definition: bond.api:281
vl_api_sw_interface_slave_details_t::weight
u32 weight
Definition: bond.api:302
vl_api_sw_member_interface_dump_t::client_index
u32 client_index
Definition: bond.api:312
vl_api_sw_interface_slave_details_t::is_local_numa
bool is_local_numa
Definition: bond.api:301
vl_api_sw_interface_bond_details_t::context
u32 context
Definition: bond.api:231
vl_api_sw_interface_slave_details_t::interface_name
string interface_name[64]
Definition: bond.api:298
bond_add_member_args_t::is_passive
u8 is_passive
Definition: node.h:99
ethernet.h
vl_api_sw_bond_interface_details_t::mode
vl_api_bond_mode_t mode
Definition: bond.api:265
vl_api_bond_create_reply_t
Reply for bond create reply.
Definition: bond.api:74
vl_api_sw_bond_interface_details_t::members
u32 members
Definition: bond.api:269
vl_api_sw_interface_bond_dump_t::context
u32 context
Definition: bond.api:216
vl_api_bond_create_reply_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:78
vl_api_bond_create_t::use_custom_mac
bool use_custom_mac
Definition: bond.api:62
vl_api_sw_bond_interface_dump_t
Dump bond interfaces request.
Definition: bond.api:243
bond_interface_details_t::interface_name
u8 interface_name[64]
Definition: node.h:128
vl_api_bond_create2_t::mode
vl_api_bond_mode_t mode
Definition: bond.api:96
vl_api_sw_member_interface_dump_t
bond member dump
Definition: bond.api:310
bond_set_intf_weight
void bond_set_intf_weight(vlib_main_t *vm, bond_set_intf_weight_args_t *args)
Definition: cli.c:997
bond_add_member_args_t
Definition: node.h:93
bond_send_sw_bond_interface_details
static void bond_send_sw_bond_interface_details(vpe_api_main_t *am, vl_api_registration_t *reg, bond_interface_details_t *bond_if, u32 context)
Definition: bond_api.c:291
bond_send_member_interface_details
static void bond_send_member_interface_details(vpe_api_main_t *am, vl_api_registration_t *reg, member_interface_details_t *member_if, u32 context)
Definition: bond_api.c:400
vl_api_sw_member_interface_details_t::is_local_numa
bool is_local_numa
Definition: bond.api:332
vl_api_bond_create2_t::numa_only
bool numa_only
Definition: bond.api:98
bond_setup_message_id_table
static void bond_setup_message_id_table(api_main_t *am)
Definition: bond_api.c:454
vl_api_sw_interface_bond_dump_t::client_index
u32 client_index
Definition: bond.api:215
vl_api_sw_interface_bond_details_t::id
u32 id
Definition: bond.api:233
vnet_msg_enum.h
vl_api_sw_interface_set_bond_weight_t::weight
u32 weight
Definition: bond.api:347
vl_api_registration_
An API client registration, only in vpp/vlib.
Definition: api_common.h:47
REPLY_MACRO
#define REPLY_MACRO(t)
Definition: api_helper_macros.h:30
MIN
#define MIN(x, y)
Definition: node.h:31
ARRAY_LEN
#define ARRAY_LEN(x)
Definition: clib.h:70
vl_api_bond_enslave_t_handler
static void vl_api_bond_enslave_t_handler(vl_api_bond_enslave_t *mp)
Definition: bond_api.c:163
bond_interface_details_t::numa_only
u8 numa_only
Definition: node.h:131
bond_send_sw_interface_details
static void bond_send_sw_interface_details(vpe_api_main_t *am, vl_api_registration_t *reg, bond_interface_details_t *bond_if, u32 context)
Definition: bond_api.c:240
bond_detach_member
void bond_detach_member(vlib_main_t *vm, bond_detach_member_args_t *args)
Definition: cli.c:830
bond_add_member_args_t::rv
int rv
Definition: node.h:102
bond_create_if_args_t::gso
u8 gso
Definition: node.h:86
vl_api_sw_bond_interface_details_t::numa_only
bool numa_only
Definition: bond.api:267
bond_detach_member_args_t::rv
int rv
Definition: node.h:110
vl_api_bond_create2_t::use_custom_mac
bool use_custom_mac
Definition: bond.api:100
vl_api_sw_interface_slave_details_t::context
u32 context
Definition: bond.api:296
vl_api_sw_interface_slave_details_t::is_long_timeout
bool is_long_timeout
Definition: bond.api:300
vl_api_sw_bond_interface_details_t::id
u32 id
Definition: bond.api:264
vlibapi_get_main
static api_main_t * vlibapi_get_main(void)
Definition: api_common.h:390
interface.h
node.h
bond_create_if_args_t::hw_addr_set
u8 hw_addr_set
Definition: node.h:81
bond_create_if_args_t::rv
int rv
Definition: node.h:89
vl_api_sw_interface_bond_dump_t
Dump bond interfaces request.
Definition: bond.api:212
vl_api_sw_bond_interface_details_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:263
VLIB_API_INIT_FUNCTION
VLIB_API_INIT_FUNCTION(bond_api_hookup)
member_interface_details_t::weight
u32 weight
Definition: node.h:144
vl_api_bond_add_member_t::bond_sw_if_index
vl_api_interface_index_t bond_sw_if_index
Definition: bond.api:171
vl_api_bond_delete_t_handler
static void vl_api_bond_delete_t_handler(vl_api_bond_delete_t *mp)
Definition: bond_api.c:62
BAD_SW_IF_INDEX_LABEL
#define BAD_SW_IF_INDEX_LABEL
Definition: api_helper_macros.h:289
vl_api_bond_detach_member_t
bond detach member
Definition: bond.api:204
bond_interface_details_t::mode
u32 mode
Definition: node.h:129
api_main_t
API main structure, used by both vpp and binary API clients.
Definition: api_common.h:228
vl_api_bond_detach_member_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:208
vl_api_bond_enslave_t::bond_sw_if_index
vl_api_interface_index_t bond_sw_if_index
Definition: bond.api:143
vl_api_bond_create2_t::mac_address
vl_api_mac_address_t mac_address
Definition: bond.api:101
vec_free
#define vec_free(V)
Free vector's memory (no header).
Definition: vec.h:395
bond_create_if_args_t::id
u32 id
Definition: node.h:80
vl_api_sw_interface_slave_details_t::is_passive
bool is_passive
Definition: bond.api:299
vl_api_sw_interface_set_bond_weight_t_handler
static void vl_api_sw_interface_set_bond_weight_t_handler(vl_api_sw_interface_set_bond_weight_t *mp)
Definition: bond_api.c:187
vl_api_bond_add_member_t::is_passive
bool is_passive
Definition: bond.api:172
vl_api_sw_bond_interface_details_t
Reply for bond dump request.
Definition: bond.api:260
member_interface_details_t::interface_name
u8 interface_name[64]
Definition: node.h:140
vl_api_bond_create2_reply_t
Reply for bond create2 reply.
Definition: bond.api:110
vl_api_sw_member_interface_details_t::interface_name
string interface_name[64]
Definition: bond.api:329
u32
unsigned int u32
Definition: types.h:88
bond_interface_details_t::active_members
u32 active_members
Definition: node.h:132
vl_api_sw_interface_bond_details_t::numa_only
bool numa_only
Definition: bond.api:236
vl_api_bond_create_t::lb
vl_api_bond_lb_algo_t lb
Definition: bond.api:65
vl_api_sw_interface_slave_dump_t::context
u32 context
Definition: bond.api:282
vl_api_sw_member_interface_details_t
Reply for member dump request.
Definition: bond.api:325
ethernet_types_api.h
bond_dump_member_ifs
int bond_dump_member_ifs(member_interface_details_t **out_memberifs, u32 bond_sw_if_index)
Definition: cli.c:212
bond_interface_details_t::lb
u32 lb
Definition: node.h:130
vl_api_bond_detach_member_t_handler
static void vl_api_bond_detach_member_t_handler(vl_api_bond_detach_member_t *mp)
Definition: bond_api.c:223
api_helper_macros.h
vec_foreach
#define vec_foreach(var, vec)
Vector iterator.
Definition: vec_bootstrap.h:213
vl_api_bond_create2_t::id
u32 id[default=0xFFFFFFFF]
Definition: bond.api:102
mac_address_decode
void mac_address_decode(const u8 *in, mac_address_t *out)
Conversion functions to/from (decode/encode) API types to VPP internal types.
Definition: ethernet_types_api.c:34
vl_api_sw_interface_bond_details_t::mode
vl_api_bond_mode_t mode
Definition: bond.api:234
bond_dump_ifs
int bond_dump_ifs(bond_interface_details_t **out_bondifs)
Definition: cli.c:177
vl_api_sw_interface_slave_dump_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:283
bond_create_if_args_t::lb
u8 lb
Definition: node.h:84
mac_address_t_
Definition: mac_address.h:21
vl_api_bond_create2_t::lb
vl_api_bond_lb_algo_t lb
Definition: bond.api:97
bond_set_intf_weight_args_t
Definition: node.h:114
bond_interface_details_t::id
u32 id
Definition: node.h:127
member_interface_details_t::is_passive
u8 is_passive
Definition: node.h:141
clib_memset
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
vlib_main_t
Definition: main.h:102
bond_set_intf_weight_args_t::sw_if_index
u32 sw_if_index
Definition: node.h:116
vl_api_sw_interface_slave_dump_t_handler
static void vl_api_sw_interface_slave_dump_t_handler(vl_api_sw_interface_slave_dump_t *mp)
Definition: bond_api.c:374
bond_create_if_args_t::mode
u8 mode
Definition: node.h:83
vl_api_sw_bond_interface_details_t::active_members
u32 active_members
Definition: bond.api:268
vlib_get_main
static vlib_main_t * vlib_get_main(void)
Definition: global_funcs.h:38
vl_api_sw_bond_interface_details_t::lb
vl_api_bond_lb_algo_t lb
Definition: bond.api:266
u8
unsigned char u8
Definition: types.h:56
clib_error_t
Definition: clib_error.h:21
vl_api_bond_create_t
Initialize a new bond interface with the given paramters.
Definition: bond.api:56
vnet_all_api_h.h
vl_api_bond_create_t_handler
static void vl_api_bond_create_t_handler(vl_api_bond_create_t *mp)
Definition: bond_api.c:75
bond_set_intf_weight_args_t::rv
int rv
Definition: node.h:119
vl_api_sw_interface_slave_dump_t
bond slave dump
Definition: bond.api:278
bond_interface_details_t
BOND interface details struct.
Definition: node.h:124
bond_send_sw_member_interface_details
static void bond_send_sw_member_interface_details(vpe_api_main_t *am, vl_api_registration_t *reg, member_interface_details_t *member_if, u32 context)
Definition: bond_api.c:350
context
u32 context
Definition: ip.api:780
vl_api_sw_member_interface_details_t::is_long_timeout
bool is_long_timeout
Definition: bond.api:331
vl_api_sw_interface_set_bond_weight_t
Interface set bond weight.
Definition: bond.api:342
rv
int __clib_unused rv
Definition: application.c:491
bond_detach_member_args_t::member
u32 member
Definition: node.h:108
vl_api_sw_member_interface_dump_t::context
u32 context
Definition: bond.api:313
vl_api_sw_member_interface_details_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:328
vl_api_bond_enslave_t::is_long_timeout
bool is_long_timeout
Definition: bond.api:145
vl_api_sw_member_interface_details_t::is_passive
bool is_passive
Definition: bond.api:330
vnet.h
vl_api_bond_add_member_reply_t
Reply for bond add_member reply.
Definition: bond.api:180
api_errno.h
bond_add_member
void bond_add_member(vlib_main_t *vm, bond_add_member_args_t *args)
Definition: cli.c:600
vl_api_bond_add_member_t
Initialize a new bond interface with the given paramters.
Definition: bond.api:166
bond_create_if_args_t::numa_only
u8 numa_only
Definition: node.h:85
member_interface_details_t::sw_if_index
u32 sw_if_index
Definition: node.h:139
sw_if_index
vl_api_interface_index_t sw_if_index
Definition: wireguard.api:34
vl_api_bond_create2_t_handler
static void vl_api_bond_create2_t_handler(vl_api_bond_create2_t *mp)
Definition: bond_api.c:107
vl_api_bond_detach_slave_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:196
vl_api_sw_interface_bond_details_t::slaves
u32 slaves
Definition: bond.api:238
vl_api_sw_interface_bond_details_t
Reply for bond dump request.
Definition: bond.api:229
bond_detach_member_args_t
Definition: node.h:106
bond_create_if_args_t::hw_addr
u8 hw_addr[6]
Definition: node.h:82
vl_api_bond_enslave_t::sw_if_index
vl_api_interface_index_t sw_if_index
Definition: bond.api:142
vl_api_bond_add_member_t::is_long_timeout
bool is_long_timeout
Definition: bond.api:173
vpe_api_main
vpe_api_main_t vpe_api_main
Definition: interface_api.c:55
bond_add_member_args_t::is_long_timeout
u8 is_long_timeout
Definition: node.h:100
vl_msg_api_alloc
void * vl_msg_api_alloc(int nbytes)
Definition: memory_shared.c:199
vl_api_bond_enslave_reply_t
Reply for bond enslave reply.
Definition: bond.api:152
vl_api_sw_bond_interface_details_t::context
u32 context
Definition: bond.api:262