Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
2/* Do not edit directly, auto-generated from: */
3/* Documentation/netlink/specs/devlink.yaml */
4/* YNL-GEN user header */
5
6#ifndef _LINUX_DEVLINK_GEN_H
7#define _LINUX_DEVLINK_GEN_H
8
9#include <stdlib.h>
10#include <string.h>
11#include <linux/types.h>
12#include <linux/netlink.h>
13#include <linux/devlink.h>
14
15struct ynl_sock;
16
17extern const struct ynl_family ynl_devlink_family;
18
19/* Enums */
20const char *devlink_op_str(int op);
21const char *devlink_sb_pool_type_str(enum devlink_sb_pool_type value);
22const char *devlink_port_type_str(enum devlink_port_type value);
23const char *devlink_port_flavour_str(enum devlink_port_flavour value);
24const char *devlink_port_fn_state_str(enum devlink_port_fn_state value);
25const char *devlink_port_fn_opstate_str(enum devlink_port_fn_opstate value);
26const char *devlink_port_fn_attr_cap_str(enum devlink_port_fn_attr_cap value);
27const char *
28devlink_sb_threshold_type_str(enum devlink_sb_threshold_type value);
29const char *devlink_eswitch_mode_str(enum devlink_eswitch_mode value);
30const char *
31devlink_eswitch_inline_mode_str(enum devlink_eswitch_inline_mode value);
32const char *
33devlink_eswitch_encap_mode_str(enum devlink_eswitch_encap_mode value);
34const char *devlink_dpipe_match_type_str(enum devlink_dpipe_match_type value);
35const char *
36devlink_dpipe_action_type_str(enum devlink_dpipe_action_type value);
37const char *
38devlink_dpipe_field_mapping_type_str(enum devlink_dpipe_field_mapping_type value);
39const char *devlink_resource_unit_str(enum devlink_resource_unit value);
40const char *devlink_reload_action_str(enum devlink_reload_action value);
41const char *devlink_param_cmode_str(enum devlink_param_cmode value);
42const char *devlink_flash_overwrite_str(enum devlink_flash_overwrite value);
43const char *devlink_trap_action_str(enum devlink_trap_action value);
44
45/* Common nested types */
46struct devlink_dl_dpipe_match {
47 struct {
48 __u32 dpipe_match_type:1;
49 __u32 dpipe_header_id:1;
50 __u32 dpipe_header_global:1;
51 __u32 dpipe_header_index:1;
52 __u32 dpipe_field_id:1;
53 } _present;
54
55 enum devlink_dpipe_match_type dpipe_match_type;
56 __u32 dpipe_header_id;
57 __u8 dpipe_header_global;
58 __u32 dpipe_header_index;
59 __u32 dpipe_field_id;
60};
61
62struct devlink_dl_dpipe_match_value {
63 struct {
64 __u32 dpipe_value_len;
65 __u32 dpipe_value_mask_len;
66 __u32 dpipe_value_mapping:1;
67 } _present;
68
69 unsigned int n_dpipe_match;
70 struct devlink_dl_dpipe_match *dpipe_match;
71 void *dpipe_value;
72 void *dpipe_value_mask;
73 __u32 dpipe_value_mapping;
74};
75
76struct devlink_dl_dpipe_action {
77 struct {
78 __u32 dpipe_action_type:1;
79 __u32 dpipe_header_id:1;
80 __u32 dpipe_header_global:1;
81 __u32 dpipe_header_index:1;
82 __u32 dpipe_field_id:1;
83 } _present;
84
85 enum devlink_dpipe_action_type dpipe_action_type;
86 __u32 dpipe_header_id;
87 __u8 dpipe_header_global;
88 __u32 dpipe_header_index;
89 __u32 dpipe_field_id;
90};
91
92struct devlink_dl_dpipe_action_value {
93 struct {
94 __u32 dpipe_value_len;
95 __u32 dpipe_value_mask_len;
96 __u32 dpipe_value_mapping:1;
97 } _present;
98
99 unsigned int n_dpipe_action;
100 struct devlink_dl_dpipe_action *dpipe_action;
101 void *dpipe_value;
102 void *dpipe_value_mask;
103 __u32 dpipe_value_mapping;
104};
105
106struct devlink_dl_dpipe_field {
107 struct {
108 __u32 dpipe_field_name_len;
109 __u32 dpipe_field_id:1;
110 __u32 dpipe_field_bitwidth:1;
111 __u32 dpipe_field_mapping_type:1;
112 } _present;
113
114 char *dpipe_field_name;
115 __u32 dpipe_field_id;
116 __u32 dpipe_field_bitwidth;
117 enum devlink_dpipe_field_mapping_type dpipe_field_mapping_type;
118};
119
120struct devlink_dl_resource {
121 struct {
122 __u32 resource_name_len;
123 __u32 resource_id:1;
124 __u32 resource_size:1;
125 __u32 resource_size_new:1;
126 __u32 resource_size_valid:1;
127 __u32 resource_size_min:1;
128 __u32 resource_size_max:1;
129 __u32 resource_size_gran:1;
130 __u32 resource_unit:1;
131 __u32 resource_occ:1;
132 } _present;
133
134 char *resource_name;
135 __u64 resource_id;
136 __u64 resource_size;
137 __u64 resource_size_new;
138 __u8 resource_size_valid;
139 __u64 resource_size_min;
140 __u64 resource_size_max;
141 __u64 resource_size_gran;
142 enum devlink_resource_unit resource_unit;
143 __u64 resource_occ;
144};
145
146struct devlink_dl_info_version {
147 struct {
148 __u32 info_version_name_len;
149 __u32 info_version_value_len;
150 } _present;
151
152 char *info_version_name;
153 char *info_version_value;
154};
155
156struct devlink_dl_fmsg {
157 struct {
158 __u32 fmsg_obj_nest_start:1;
159 __u32 fmsg_pair_nest_start:1;
160 __u32 fmsg_arr_nest_start:1;
161 __u32 fmsg_nest_end:1;
162 __u32 fmsg_obj_name_len;
163 } _present;
164
165 char *fmsg_obj_name;
166};
167
168struct devlink_dl_port_function {
169 struct {
170 __u32 hw_addr_len;
171 __u32 state:1;
172 __u32 opstate:1;
173 __u32 caps:1;
174 } _present;
175
176 void *hw_addr;
177 enum devlink_port_fn_state state;
178 enum devlink_port_fn_opstate opstate;
179 struct nla_bitfield32 caps;
180};
181
182struct devlink_dl_reload_stats_entry {
183 struct {
184 __u32 reload_stats_limit:1;
185 __u32 reload_stats_value:1;
186 } _present;
187
188 __u8 reload_stats_limit;
189 __u32 reload_stats_value;
190};
191
192struct devlink_dl_reload_act_stats {
193 unsigned int n_reload_stats_entry;
194 struct devlink_dl_reload_stats_entry *reload_stats_entry;
195};
196
197struct devlink_dl_selftest_id {
198 struct {
199 __u32 flash:1;
200 } _present;
201};
202
203struct devlink_dl_dpipe_table_matches {
204 unsigned int n_dpipe_match;
205 struct devlink_dl_dpipe_match *dpipe_match;
206};
207
208struct devlink_dl_dpipe_table_actions {
209 unsigned int n_dpipe_action;
210 struct devlink_dl_dpipe_action *dpipe_action;
211};
212
213struct devlink_dl_dpipe_entry_match_values {
214 unsigned int n_dpipe_match_value;
215 struct devlink_dl_dpipe_match_value *dpipe_match_value;
216};
217
218struct devlink_dl_dpipe_entry_action_values {
219 unsigned int n_dpipe_action_value;
220 struct devlink_dl_dpipe_action_value *dpipe_action_value;
221};
222
223struct devlink_dl_dpipe_header_fields {
224 unsigned int n_dpipe_field;
225 struct devlink_dl_dpipe_field *dpipe_field;
226};
227
228struct devlink_dl_resource_list {
229 unsigned int n_resource;
230 struct devlink_dl_resource *resource;
231};
232
233struct devlink_dl_reload_act_info {
234 struct {
235 __u32 reload_action:1;
236 } _present;
237
238 enum devlink_reload_action reload_action;
239 unsigned int n_reload_action_stats;
240 struct devlink_dl_reload_act_stats *reload_action_stats;
241};
242
243struct devlink_dl_dpipe_table {
244 struct {
245 __u32 dpipe_table_name_len;
246 __u32 dpipe_table_size:1;
247 __u32 dpipe_table_matches:1;
248 __u32 dpipe_table_actions:1;
249 __u32 dpipe_table_counters_enabled:1;
250 __u32 dpipe_table_resource_id:1;
251 __u32 dpipe_table_resource_units:1;
252 } _present;
253
254 char *dpipe_table_name;
255 __u64 dpipe_table_size;
256 struct devlink_dl_dpipe_table_matches dpipe_table_matches;
257 struct devlink_dl_dpipe_table_actions dpipe_table_actions;
258 __u8 dpipe_table_counters_enabled;
259 __u64 dpipe_table_resource_id;
260 __u64 dpipe_table_resource_units;
261};
262
263struct devlink_dl_dpipe_entry {
264 struct {
265 __u32 dpipe_entry_index:1;
266 __u32 dpipe_entry_match_values:1;
267 __u32 dpipe_entry_action_values:1;
268 __u32 dpipe_entry_counter:1;
269 } _present;
270
271 __u64 dpipe_entry_index;
272 struct devlink_dl_dpipe_entry_match_values dpipe_entry_match_values;
273 struct devlink_dl_dpipe_entry_action_values dpipe_entry_action_values;
274 __u64 dpipe_entry_counter;
275};
276
277struct devlink_dl_dpipe_header {
278 struct {
279 __u32 dpipe_header_name_len;
280 __u32 dpipe_header_id:1;
281 __u32 dpipe_header_global:1;
282 __u32 dpipe_header_fields:1;
283 } _present;
284
285 char *dpipe_header_name;
286 __u32 dpipe_header_id;
287 __u8 dpipe_header_global;
288 struct devlink_dl_dpipe_header_fields dpipe_header_fields;
289};
290
291struct devlink_dl_reload_stats {
292 unsigned int n_reload_action_info;
293 struct devlink_dl_reload_act_info *reload_action_info;
294};
295
296struct devlink_dl_dpipe_tables {
297 unsigned int n_dpipe_table;
298 struct devlink_dl_dpipe_table *dpipe_table;
299};
300
301struct devlink_dl_dpipe_entries {
302 unsigned int n_dpipe_entry;
303 struct devlink_dl_dpipe_entry *dpipe_entry;
304};
305
306struct devlink_dl_dpipe_headers {
307 unsigned int n_dpipe_header;
308 struct devlink_dl_dpipe_header *dpipe_header;
309};
310
311struct devlink_dl_dev_stats {
312 struct {
313 __u32 reload_stats:1;
314 __u32 remote_reload_stats:1;
315 } _present;
316
317 struct devlink_dl_reload_stats reload_stats;
318 struct devlink_dl_reload_stats remote_reload_stats;
319};
320
321/* ============== DEVLINK_CMD_GET ============== */
322/* DEVLINK_CMD_GET - do */
323struct devlink_get_req {
324 struct {
325 __u32 bus_name_len;
326 __u32 dev_name_len;
327 } _present;
328
329 char *bus_name;
330 char *dev_name;
331};
332
333static inline struct devlink_get_req *devlink_get_req_alloc(void)
334{
335 return calloc(1, sizeof(struct devlink_get_req));
336}
337void devlink_get_req_free(struct devlink_get_req *req);
338
339static inline void
340devlink_get_req_set_bus_name(struct devlink_get_req *req, const char *bus_name)
341{
342 free(req->bus_name);
343 req->_present.bus_name_len = strlen(bus_name);
344 req->bus_name = malloc(req->_present.bus_name_len + 1);
345 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
346 req->bus_name[req->_present.bus_name_len] = 0;
347}
348static inline void
349devlink_get_req_set_dev_name(struct devlink_get_req *req, const char *dev_name)
350{
351 free(req->dev_name);
352 req->_present.dev_name_len = strlen(dev_name);
353 req->dev_name = malloc(req->_present.dev_name_len + 1);
354 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
355 req->dev_name[req->_present.dev_name_len] = 0;
356}
357
358struct devlink_get_rsp {
359 struct {
360 __u32 bus_name_len;
361 __u32 dev_name_len;
362 __u32 reload_failed:1;
363 __u32 dev_stats:1;
364 } _present;
365
366 char *bus_name;
367 char *dev_name;
368 __u8 reload_failed;
369 struct devlink_dl_dev_stats dev_stats;
370};
371
372void devlink_get_rsp_free(struct devlink_get_rsp *rsp);
373
374/*
375 * Get devlink instances.
376 */
377struct devlink_get_rsp *
378devlink_get(struct ynl_sock *ys, struct devlink_get_req *req);
379
380/* DEVLINK_CMD_GET - dump */
381struct devlink_get_list {
382 struct devlink_get_list *next;
383 struct devlink_get_rsp obj __attribute__((aligned(8)));
384};
385
386void devlink_get_list_free(struct devlink_get_list *rsp);
387
388struct devlink_get_list *devlink_get_dump(struct ynl_sock *ys);
389
390/* ============== DEVLINK_CMD_PORT_GET ============== */
391/* DEVLINK_CMD_PORT_GET - do */
392struct devlink_port_get_req {
393 struct {
394 __u32 bus_name_len;
395 __u32 dev_name_len;
396 __u32 port_index:1;
397 } _present;
398
399 char *bus_name;
400 char *dev_name;
401 __u32 port_index;
402};
403
404static inline struct devlink_port_get_req *devlink_port_get_req_alloc(void)
405{
406 return calloc(1, sizeof(struct devlink_port_get_req));
407}
408void devlink_port_get_req_free(struct devlink_port_get_req *req);
409
410static inline void
411devlink_port_get_req_set_bus_name(struct devlink_port_get_req *req,
412 const char *bus_name)
413{
414 free(req->bus_name);
415 req->_present.bus_name_len = strlen(bus_name);
416 req->bus_name = malloc(req->_present.bus_name_len + 1);
417 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
418 req->bus_name[req->_present.bus_name_len] = 0;
419}
420static inline void
421devlink_port_get_req_set_dev_name(struct devlink_port_get_req *req,
422 const char *dev_name)
423{
424 free(req->dev_name);
425 req->_present.dev_name_len = strlen(dev_name);
426 req->dev_name = malloc(req->_present.dev_name_len + 1);
427 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
428 req->dev_name[req->_present.dev_name_len] = 0;
429}
430static inline void
431devlink_port_get_req_set_port_index(struct devlink_port_get_req *req,
432 __u32 port_index)
433{
434 req->_present.port_index = 1;
435 req->port_index = port_index;
436}
437
438struct devlink_port_get_rsp {
439 struct {
440 __u32 bus_name_len;
441 __u32 dev_name_len;
442 __u32 port_index:1;
443 } _present;
444
445 char *bus_name;
446 char *dev_name;
447 __u32 port_index;
448};
449
450void devlink_port_get_rsp_free(struct devlink_port_get_rsp *rsp);
451
452/*
453 * Get devlink port instances.
454 */
455struct devlink_port_get_rsp *
456devlink_port_get(struct ynl_sock *ys, struct devlink_port_get_req *req);
457
458/* DEVLINK_CMD_PORT_GET - dump */
459struct devlink_port_get_req_dump {
460 struct {
461 __u32 bus_name_len;
462 __u32 dev_name_len;
463 } _present;
464
465 char *bus_name;
466 char *dev_name;
467};
468
469static inline struct devlink_port_get_req_dump *
470devlink_port_get_req_dump_alloc(void)
471{
472 return calloc(1, sizeof(struct devlink_port_get_req_dump));
473}
474void devlink_port_get_req_dump_free(struct devlink_port_get_req_dump *req);
475
476static inline void
477devlink_port_get_req_dump_set_bus_name(struct devlink_port_get_req_dump *req,
478 const char *bus_name)
479{
480 free(req->bus_name);
481 req->_present.bus_name_len = strlen(bus_name);
482 req->bus_name = malloc(req->_present.bus_name_len + 1);
483 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
484 req->bus_name[req->_present.bus_name_len] = 0;
485}
486static inline void
487devlink_port_get_req_dump_set_dev_name(struct devlink_port_get_req_dump *req,
488 const char *dev_name)
489{
490 free(req->dev_name);
491 req->_present.dev_name_len = strlen(dev_name);
492 req->dev_name = malloc(req->_present.dev_name_len + 1);
493 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
494 req->dev_name[req->_present.dev_name_len] = 0;
495}
496
497struct devlink_port_get_rsp_dump {
498 struct {
499 __u32 bus_name_len;
500 __u32 dev_name_len;
501 __u32 port_index:1;
502 } _present;
503
504 char *bus_name;
505 char *dev_name;
506 __u32 port_index;
507};
508
509struct devlink_port_get_rsp_list {
510 struct devlink_port_get_rsp_list *next;
511 struct devlink_port_get_rsp_dump obj __attribute__((aligned(8)));
512};
513
514void devlink_port_get_rsp_list_free(struct devlink_port_get_rsp_list *rsp);
515
516struct devlink_port_get_rsp_list *
517devlink_port_get_dump(struct ynl_sock *ys,
518 struct devlink_port_get_req_dump *req);
519
520/* ============== DEVLINK_CMD_PORT_SET ============== */
521/* DEVLINK_CMD_PORT_SET - do */
522struct devlink_port_set_req {
523 struct {
524 __u32 bus_name_len;
525 __u32 dev_name_len;
526 __u32 port_index:1;
527 __u32 port_type:1;
528 __u32 port_function:1;
529 } _present;
530
531 char *bus_name;
532 char *dev_name;
533 __u32 port_index;
534 enum devlink_port_type port_type;
535 struct devlink_dl_port_function port_function;
536};
537
538static inline struct devlink_port_set_req *devlink_port_set_req_alloc(void)
539{
540 return calloc(1, sizeof(struct devlink_port_set_req));
541}
542void devlink_port_set_req_free(struct devlink_port_set_req *req);
543
544static inline void
545devlink_port_set_req_set_bus_name(struct devlink_port_set_req *req,
546 const char *bus_name)
547{
548 free(req->bus_name);
549 req->_present.bus_name_len = strlen(bus_name);
550 req->bus_name = malloc(req->_present.bus_name_len + 1);
551 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
552 req->bus_name[req->_present.bus_name_len] = 0;
553}
554static inline void
555devlink_port_set_req_set_dev_name(struct devlink_port_set_req *req,
556 const char *dev_name)
557{
558 free(req->dev_name);
559 req->_present.dev_name_len = strlen(dev_name);
560 req->dev_name = malloc(req->_present.dev_name_len + 1);
561 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
562 req->dev_name[req->_present.dev_name_len] = 0;
563}
564static inline void
565devlink_port_set_req_set_port_index(struct devlink_port_set_req *req,
566 __u32 port_index)
567{
568 req->_present.port_index = 1;
569 req->port_index = port_index;
570}
571static inline void
572devlink_port_set_req_set_port_type(struct devlink_port_set_req *req,
573 enum devlink_port_type port_type)
574{
575 req->_present.port_type = 1;
576 req->port_type = port_type;
577}
578static inline void
579devlink_port_set_req_set_port_function_hw_addr(struct devlink_port_set_req *req,
580 const void *hw_addr, size_t len)
581{
582 free(req->port_function.hw_addr);
583 req->port_function._present.hw_addr_len = len;
584 req->port_function.hw_addr = malloc(req->port_function._present.hw_addr_len);
585 memcpy(req->port_function.hw_addr, hw_addr, req->port_function._present.hw_addr_len);
586}
587static inline void
588devlink_port_set_req_set_port_function_state(struct devlink_port_set_req *req,
589 enum devlink_port_fn_state state)
590{
591 req->_present.port_function = 1;
592 req->port_function._present.state = 1;
593 req->port_function.state = state;
594}
595static inline void
596devlink_port_set_req_set_port_function_opstate(struct devlink_port_set_req *req,
597 enum devlink_port_fn_opstate opstate)
598{
599 req->_present.port_function = 1;
600 req->port_function._present.opstate = 1;
601 req->port_function.opstate = opstate;
602}
603static inline void
604devlink_port_set_req_set_port_function_caps(struct devlink_port_set_req *req,
605 struct nla_bitfield32 *caps)
606{
607 req->_present.port_function = 1;
608 req->port_function._present.caps = 1;
609 memcpy(&req->port_function.caps, caps, sizeof(struct nla_bitfield32));
610}
611
612/*
613 * Set devlink port instances.
614 */
615int devlink_port_set(struct ynl_sock *ys, struct devlink_port_set_req *req);
616
617/* ============== DEVLINK_CMD_PORT_NEW ============== */
618/* DEVLINK_CMD_PORT_NEW - do */
619struct devlink_port_new_req {
620 struct {
621 __u32 bus_name_len;
622 __u32 dev_name_len;
623 __u32 port_index:1;
624 __u32 port_flavour:1;
625 __u32 port_pci_pf_number:1;
626 __u32 port_pci_sf_number:1;
627 __u32 port_controller_number:1;
628 } _present;
629
630 char *bus_name;
631 char *dev_name;
632 __u32 port_index;
633 enum devlink_port_flavour port_flavour;
634 __u16 port_pci_pf_number;
635 __u32 port_pci_sf_number;
636 __u32 port_controller_number;
637};
638
639static inline struct devlink_port_new_req *devlink_port_new_req_alloc(void)
640{
641 return calloc(1, sizeof(struct devlink_port_new_req));
642}
643void devlink_port_new_req_free(struct devlink_port_new_req *req);
644
645static inline void
646devlink_port_new_req_set_bus_name(struct devlink_port_new_req *req,
647 const char *bus_name)
648{
649 free(req->bus_name);
650 req->_present.bus_name_len = strlen(bus_name);
651 req->bus_name = malloc(req->_present.bus_name_len + 1);
652 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
653 req->bus_name[req->_present.bus_name_len] = 0;
654}
655static inline void
656devlink_port_new_req_set_dev_name(struct devlink_port_new_req *req,
657 const char *dev_name)
658{
659 free(req->dev_name);
660 req->_present.dev_name_len = strlen(dev_name);
661 req->dev_name = malloc(req->_present.dev_name_len + 1);
662 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
663 req->dev_name[req->_present.dev_name_len] = 0;
664}
665static inline void
666devlink_port_new_req_set_port_index(struct devlink_port_new_req *req,
667 __u32 port_index)
668{
669 req->_present.port_index = 1;
670 req->port_index = port_index;
671}
672static inline void
673devlink_port_new_req_set_port_flavour(struct devlink_port_new_req *req,
674 enum devlink_port_flavour port_flavour)
675{
676 req->_present.port_flavour = 1;
677 req->port_flavour = port_flavour;
678}
679static inline void
680devlink_port_new_req_set_port_pci_pf_number(struct devlink_port_new_req *req,
681 __u16 port_pci_pf_number)
682{
683 req->_present.port_pci_pf_number = 1;
684 req->port_pci_pf_number = port_pci_pf_number;
685}
686static inline void
687devlink_port_new_req_set_port_pci_sf_number(struct devlink_port_new_req *req,
688 __u32 port_pci_sf_number)
689{
690 req->_present.port_pci_sf_number = 1;
691 req->port_pci_sf_number = port_pci_sf_number;
692}
693static inline void
694devlink_port_new_req_set_port_controller_number(struct devlink_port_new_req *req,
695 __u32 port_controller_number)
696{
697 req->_present.port_controller_number = 1;
698 req->port_controller_number = port_controller_number;
699}
700
701struct devlink_port_new_rsp {
702 struct {
703 __u32 bus_name_len;
704 __u32 dev_name_len;
705 __u32 port_index:1;
706 } _present;
707
708 char *bus_name;
709 char *dev_name;
710 __u32 port_index;
711};
712
713void devlink_port_new_rsp_free(struct devlink_port_new_rsp *rsp);
714
715/*
716 * Create devlink port instances.
717 */
718struct devlink_port_new_rsp *
719devlink_port_new(struct ynl_sock *ys, struct devlink_port_new_req *req);
720
721/* ============== DEVLINK_CMD_PORT_DEL ============== */
722/* DEVLINK_CMD_PORT_DEL - do */
723struct devlink_port_del_req {
724 struct {
725 __u32 bus_name_len;
726 __u32 dev_name_len;
727 __u32 port_index:1;
728 } _present;
729
730 char *bus_name;
731 char *dev_name;
732 __u32 port_index;
733};
734
735static inline struct devlink_port_del_req *devlink_port_del_req_alloc(void)
736{
737 return calloc(1, sizeof(struct devlink_port_del_req));
738}
739void devlink_port_del_req_free(struct devlink_port_del_req *req);
740
741static inline void
742devlink_port_del_req_set_bus_name(struct devlink_port_del_req *req,
743 const char *bus_name)
744{
745 free(req->bus_name);
746 req->_present.bus_name_len = strlen(bus_name);
747 req->bus_name = malloc(req->_present.bus_name_len + 1);
748 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
749 req->bus_name[req->_present.bus_name_len] = 0;
750}
751static inline void
752devlink_port_del_req_set_dev_name(struct devlink_port_del_req *req,
753 const char *dev_name)
754{
755 free(req->dev_name);
756 req->_present.dev_name_len = strlen(dev_name);
757 req->dev_name = malloc(req->_present.dev_name_len + 1);
758 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
759 req->dev_name[req->_present.dev_name_len] = 0;
760}
761static inline void
762devlink_port_del_req_set_port_index(struct devlink_port_del_req *req,
763 __u32 port_index)
764{
765 req->_present.port_index = 1;
766 req->port_index = port_index;
767}
768
769/*
770 * Delete devlink port instances.
771 */
772int devlink_port_del(struct ynl_sock *ys, struct devlink_port_del_req *req);
773
774/* ============== DEVLINK_CMD_PORT_SPLIT ============== */
775/* DEVLINK_CMD_PORT_SPLIT - do */
776struct devlink_port_split_req {
777 struct {
778 __u32 bus_name_len;
779 __u32 dev_name_len;
780 __u32 port_index:1;
781 __u32 port_split_count:1;
782 } _present;
783
784 char *bus_name;
785 char *dev_name;
786 __u32 port_index;
787 __u32 port_split_count;
788};
789
790static inline struct devlink_port_split_req *devlink_port_split_req_alloc(void)
791{
792 return calloc(1, sizeof(struct devlink_port_split_req));
793}
794void devlink_port_split_req_free(struct devlink_port_split_req *req);
795
796static inline void
797devlink_port_split_req_set_bus_name(struct devlink_port_split_req *req,
798 const char *bus_name)
799{
800 free(req->bus_name);
801 req->_present.bus_name_len = strlen(bus_name);
802 req->bus_name = malloc(req->_present.bus_name_len + 1);
803 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
804 req->bus_name[req->_present.bus_name_len] = 0;
805}
806static inline void
807devlink_port_split_req_set_dev_name(struct devlink_port_split_req *req,
808 const char *dev_name)
809{
810 free(req->dev_name);
811 req->_present.dev_name_len = strlen(dev_name);
812 req->dev_name = malloc(req->_present.dev_name_len + 1);
813 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
814 req->dev_name[req->_present.dev_name_len] = 0;
815}
816static inline void
817devlink_port_split_req_set_port_index(struct devlink_port_split_req *req,
818 __u32 port_index)
819{
820 req->_present.port_index = 1;
821 req->port_index = port_index;
822}
823static inline void
824devlink_port_split_req_set_port_split_count(struct devlink_port_split_req *req,
825 __u32 port_split_count)
826{
827 req->_present.port_split_count = 1;
828 req->port_split_count = port_split_count;
829}
830
831/*
832 * Split devlink port instances.
833 */
834int devlink_port_split(struct ynl_sock *ys, struct devlink_port_split_req *req);
835
836/* ============== DEVLINK_CMD_PORT_UNSPLIT ============== */
837/* DEVLINK_CMD_PORT_UNSPLIT - do */
838struct devlink_port_unsplit_req {
839 struct {
840 __u32 bus_name_len;
841 __u32 dev_name_len;
842 __u32 port_index:1;
843 } _present;
844
845 char *bus_name;
846 char *dev_name;
847 __u32 port_index;
848};
849
850static inline struct devlink_port_unsplit_req *
851devlink_port_unsplit_req_alloc(void)
852{
853 return calloc(1, sizeof(struct devlink_port_unsplit_req));
854}
855void devlink_port_unsplit_req_free(struct devlink_port_unsplit_req *req);
856
857static inline void
858devlink_port_unsplit_req_set_bus_name(struct devlink_port_unsplit_req *req,
859 const char *bus_name)
860{
861 free(req->bus_name);
862 req->_present.bus_name_len = strlen(bus_name);
863 req->bus_name = malloc(req->_present.bus_name_len + 1);
864 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
865 req->bus_name[req->_present.bus_name_len] = 0;
866}
867static inline void
868devlink_port_unsplit_req_set_dev_name(struct devlink_port_unsplit_req *req,
869 const char *dev_name)
870{
871 free(req->dev_name);
872 req->_present.dev_name_len = strlen(dev_name);
873 req->dev_name = malloc(req->_present.dev_name_len + 1);
874 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
875 req->dev_name[req->_present.dev_name_len] = 0;
876}
877static inline void
878devlink_port_unsplit_req_set_port_index(struct devlink_port_unsplit_req *req,
879 __u32 port_index)
880{
881 req->_present.port_index = 1;
882 req->port_index = port_index;
883}
884
885/*
886 * Unplit devlink port instances.
887 */
888int devlink_port_unsplit(struct ynl_sock *ys,
889 struct devlink_port_unsplit_req *req);
890
891/* ============== DEVLINK_CMD_SB_GET ============== */
892/* DEVLINK_CMD_SB_GET - do */
893struct devlink_sb_get_req {
894 struct {
895 __u32 bus_name_len;
896 __u32 dev_name_len;
897 __u32 sb_index:1;
898 } _present;
899
900 char *bus_name;
901 char *dev_name;
902 __u32 sb_index;
903};
904
905static inline struct devlink_sb_get_req *devlink_sb_get_req_alloc(void)
906{
907 return calloc(1, sizeof(struct devlink_sb_get_req));
908}
909void devlink_sb_get_req_free(struct devlink_sb_get_req *req);
910
911static inline void
912devlink_sb_get_req_set_bus_name(struct devlink_sb_get_req *req,
913 const char *bus_name)
914{
915 free(req->bus_name);
916 req->_present.bus_name_len = strlen(bus_name);
917 req->bus_name = malloc(req->_present.bus_name_len + 1);
918 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
919 req->bus_name[req->_present.bus_name_len] = 0;
920}
921static inline void
922devlink_sb_get_req_set_dev_name(struct devlink_sb_get_req *req,
923 const char *dev_name)
924{
925 free(req->dev_name);
926 req->_present.dev_name_len = strlen(dev_name);
927 req->dev_name = malloc(req->_present.dev_name_len + 1);
928 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
929 req->dev_name[req->_present.dev_name_len] = 0;
930}
931static inline void
932devlink_sb_get_req_set_sb_index(struct devlink_sb_get_req *req, __u32 sb_index)
933{
934 req->_present.sb_index = 1;
935 req->sb_index = sb_index;
936}
937
938struct devlink_sb_get_rsp {
939 struct {
940 __u32 bus_name_len;
941 __u32 dev_name_len;
942 __u32 sb_index:1;
943 } _present;
944
945 char *bus_name;
946 char *dev_name;
947 __u32 sb_index;
948};
949
950void devlink_sb_get_rsp_free(struct devlink_sb_get_rsp *rsp);
951
952/*
953 * Get shared buffer instances.
954 */
955struct devlink_sb_get_rsp *
956devlink_sb_get(struct ynl_sock *ys, struct devlink_sb_get_req *req);
957
958/* DEVLINK_CMD_SB_GET - dump */
959struct devlink_sb_get_req_dump {
960 struct {
961 __u32 bus_name_len;
962 __u32 dev_name_len;
963 } _present;
964
965 char *bus_name;
966 char *dev_name;
967};
968
969static inline struct devlink_sb_get_req_dump *
970devlink_sb_get_req_dump_alloc(void)
971{
972 return calloc(1, sizeof(struct devlink_sb_get_req_dump));
973}
974void devlink_sb_get_req_dump_free(struct devlink_sb_get_req_dump *req);
975
976static inline void
977devlink_sb_get_req_dump_set_bus_name(struct devlink_sb_get_req_dump *req,
978 const char *bus_name)
979{
980 free(req->bus_name);
981 req->_present.bus_name_len = strlen(bus_name);
982 req->bus_name = malloc(req->_present.bus_name_len + 1);
983 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
984 req->bus_name[req->_present.bus_name_len] = 0;
985}
986static inline void
987devlink_sb_get_req_dump_set_dev_name(struct devlink_sb_get_req_dump *req,
988 const char *dev_name)
989{
990 free(req->dev_name);
991 req->_present.dev_name_len = strlen(dev_name);
992 req->dev_name = malloc(req->_present.dev_name_len + 1);
993 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
994 req->dev_name[req->_present.dev_name_len] = 0;
995}
996
997struct devlink_sb_get_list {
998 struct devlink_sb_get_list *next;
999 struct devlink_sb_get_rsp obj __attribute__((aligned(8)));
1000};
1001
1002void devlink_sb_get_list_free(struct devlink_sb_get_list *rsp);
1003
1004struct devlink_sb_get_list *
1005devlink_sb_get_dump(struct ynl_sock *ys, struct devlink_sb_get_req_dump *req);
1006
1007/* ============== DEVLINK_CMD_SB_POOL_GET ============== */
1008/* DEVLINK_CMD_SB_POOL_GET - do */
1009struct devlink_sb_pool_get_req {
1010 struct {
1011 __u32 bus_name_len;
1012 __u32 dev_name_len;
1013 __u32 sb_index:1;
1014 __u32 sb_pool_index:1;
1015 } _present;
1016
1017 char *bus_name;
1018 char *dev_name;
1019 __u32 sb_index;
1020 __u16 sb_pool_index;
1021};
1022
1023static inline struct devlink_sb_pool_get_req *
1024devlink_sb_pool_get_req_alloc(void)
1025{
1026 return calloc(1, sizeof(struct devlink_sb_pool_get_req));
1027}
1028void devlink_sb_pool_get_req_free(struct devlink_sb_pool_get_req *req);
1029
1030static inline void
1031devlink_sb_pool_get_req_set_bus_name(struct devlink_sb_pool_get_req *req,
1032 const char *bus_name)
1033{
1034 free(req->bus_name);
1035 req->_present.bus_name_len = strlen(bus_name);
1036 req->bus_name = malloc(req->_present.bus_name_len + 1);
1037 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1038 req->bus_name[req->_present.bus_name_len] = 0;
1039}
1040static inline void
1041devlink_sb_pool_get_req_set_dev_name(struct devlink_sb_pool_get_req *req,
1042 const char *dev_name)
1043{
1044 free(req->dev_name);
1045 req->_present.dev_name_len = strlen(dev_name);
1046 req->dev_name = malloc(req->_present.dev_name_len + 1);
1047 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1048 req->dev_name[req->_present.dev_name_len] = 0;
1049}
1050static inline void
1051devlink_sb_pool_get_req_set_sb_index(struct devlink_sb_pool_get_req *req,
1052 __u32 sb_index)
1053{
1054 req->_present.sb_index = 1;
1055 req->sb_index = sb_index;
1056}
1057static inline void
1058devlink_sb_pool_get_req_set_sb_pool_index(struct devlink_sb_pool_get_req *req,
1059 __u16 sb_pool_index)
1060{
1061 req->_present.sb_pool_index = 1;
1062 req->sb_pool_index = sb_pool_index;
1063}
1064
1065struct devlink_sb_pool_get_rsp {
1066 struct {
1067 __u32 bus_name_len;
1068 __u32 dev_name_len;
1069 __u32 sb_index:1;
1070 __u32 sb_pool_index:1;
1071 } _present;
1072
1073 char *bus_name;
1074 char *dev_name;
1075 __u32 sb_index;
1076 __u16 sb_pool_index;
1077};
1078
1079void devlink_sb_pool_get_rsp_free(struct devlink_sb_pool_get_rsp *rsp);
1080
1081/*
1082 * Get shared buffer pool instances.
1083 */
1084struct devlink_sb_pool_get_rsp *
1085devlink_sb_pool_get(struct ynl_sock *ys, struct devlink_sb_pool_get_req *req);
1086
1087/* DEVLINK_CMD_SB_POOL_GET - dump */
1088struct devlink_sb_pool_get_req_dump {
1089 struct {
1090 __u32 bus_name_len;
1091 __u32 dev_name_len;
1092 } _present;
1093
1094 char *bus_name;
1095 char *dev_name;
1096};
1097
1098static inline struct devlink_sb_pool_get_req_dump *
1099devlink_sb_pool_get_req_dump_alloc(void)
1100{
1101 return calloc(1, sizeof(struct devlink_sb_pool_get_req_dump));
1102}
1103void
1104devlink_sb_pool_get_req_dump_free(struct devlink_sb_pool_get_req_dump *req);
1105
1106static inline void
1107devlink_sb_pool_get_req_dump_set_bus_name(struct devlink_sb_pool_get_req_dump *req,
1108 const char *bus_name)
1109{
1110 free(req->bus_name);
1111 req->_present.bus_name_len = strlen(bus_name);
1112 req->bus_name = malloc(req->_present.bus_name_len + 1);
1113 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1114 req->bus_name[req->_present.bus_name_len] = 0;
1115}
1116static inline void
1117devlink_sb_pool_get_req_dump_set_dev_name(struct devlink_sb_pool_get_req_dump *req,
1118 const char *dev_name)
1119{
1120 free(req->dev_name);
1121 req->_present.dev_name_len = strlen(dev_name);
1122 req->dev_name = malloc(req->_present.dev_name_len + 1);
1123 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1124 req->dev_name[req->_present.dev_name_len] = 0;
1125}
1126
1127struct devlink_sb_pool_get_list {
1128 struct devlink_sb_pool_get_list *next;
1129 struct devlink_sb_pool_get_rsp obj __attribute__((aligned(8)));
1130};
1131
1132void devlink_sb_pool_get_list_free(struct devlink_sb_pool_get_list *rsp);
1133
1134struct devlink_sb_pool_get_list *
1135devlink_sb_pool_get_dump(struct ynl_sock *ys,
1136 struct devlink_sb_pool_get_req_dump *req);
1137
1138/* ============== DEVLINK_CMD_SB_POOL_SET ============== */
1139/* DEVLINK_CMD_SB_POOL_SET - do */
1140struct devlink_sb_pool_set_req {
1141 struct {
1142 __u32 bus_name_len;
1143 __u32 dev_name_len;
1144 __u32 sb_index:1;
1145 __u32 sb_pool_index:1;
1146 __u32 sb_pool_threshold_type:1;
1147 __u32 sb_pool_size:1;
1148 } _present;
1149
1150 char *bus_name;
1151 char *dev_name;
1152 __u32 sb_index;
1153 __u16 sb_pool_index;
1154 enum devlink_sb_threshold_type sb_pool_threshold_type;
1155 __u32 sb_pool_size;
1156};
1157
1158static inline struct devlink_sb_pool_set_req *
1159devlink_sb_pool_set_req_alloc(void)
1160{
1161 return calloc(1, sizeof(struct devlink_sb_pool_set_req));
1162}
1163void devlink_sb_pool_set_req_free(struct devlink_sb_pool_set_req *req);
1164
1165static inline void
1166devlink_sb_pool_set_req_set_bus_name(struct devlink_sb_pool_set_req *req,
1167 const char *bus_name)
1168{
1169 free(req->bus_name);
1170 req->_present.bus_name_len = strlen(bus_name);
1171 req->bus_name = malloc(req->_present.bus_name_len + 1);
1172 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1173 req->bus_name[req->_present.bus_name_len] = 0;
1174}
1175static inline void
1176devlink_sb_pool_set_req_set_dev_name(struct devlink_sb_pool_set_req *req,
1177 const char *dev_name)
1178{
1179 free(req->dev_name);
1180 req->_present.dev_name_len = strlen(dev_name);
1181 req->dev_name = malloc(req->_present.dev_name_len + 1);
1182 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1183 req->dev_name[req->_present.dev_name_len] = 0;
1184}
1185static inline void
1186devlink_sb_pool_set_req_set_sb_index(struct devlink_sb_pool_set_req *req,
1187 __u32 sb_index)
1188{
1189 req->_present.sb_index = 1;
1190 req->sb_index = sb_index;
1191}
1192static inline void
1193devlink_sb_pool_set_req_set_sb_pool_index(struct devlink_sb_pool_set_req *req,
1194 __u16 sb_pool_index)
1195{
1196 req->_present.sb_pool_index = 1;
1197 req->sb_pool_index = sb_pool_index;
1198}
1199static inline void
1200devlink_sb_pool_set_req_set_sb_pool_threshold_type(struct devlink_sb_pool_set_req *req,
1201 enum devlink_sb_threshold_type sb_pool_threshold_type)
1202{
1203 req->_present.sb_pool_threshold_type = 1;
1204 req->sb_pool_threshold_type = sb_pool_threshold_type;
1205}
1206static inline void
1207devlink_sb_pool_set_req_set_sb_pool_size(struct devlink_sb_pool_set_req *req,
1208 __u32 sb_pool_size)
1209{
1210 req->_present.sb_pool_size = 1;
1211 req->sb_pool_size = sb_pool_size;
1212}
1213
1214/*
1215 * Set shared buffer pool instances.
1216 */
1217int devlink_sb_pool_set(struct ynl_sock *ys,
1218 struct devlink_sb_pool_set_req *req);
1219
1220/* ============== DEVLINK_CMD_SB_PORT_POOL_GET ============== */
1221/* DEVLINK_CMD_SB_PORT_POOL_GET - do */
1222struct devlink_sb_port_pool_get_req {
1223 struct {
1224 __u32 bus_name_len;
1225 __u32 dev_name_len;
1226 __u32 port_index:1;
1227 __u32 sb_index:1;
1228 __u32 sb_pool_index:1;
1229 } _present;
1230
1231 char *bus_name;
1232 char *dev_name;
1233 __u32 port_index;
1234 __u32 sb_index;
1235 __u16 sb_pool_index;
1236};
1237
1238static inline struct devlink_sb_port_pool_get_req *
1239devlink_sb_port_pool_get_req_alloc(void)
1240{
1241 return calloc(1, sizeof(struct devlink_sb_port_pool_get_req));
1242}
1243void
1244devlink_sb_port_pool_get_req_free(struct devlink_sb_port_pool_get_req *req);
1245
1246static inline void
1247devlink_sb_port_pool_get_req_set_bus_name(struct devlink_sb_port_pool_get_req *req,
1248 const char *bus_name)
1249{
1250 free(req->bus_name);
1251 req->_present.bus_name_len = strlen(bus_name);
1252 req->bus_name = malloc(req->_present.bus_name_len + 1);
1253 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1254 req->bus_name[req->_present.bus_name_len] = 0;
1255}
1256static inline void
1257devlink_sb_port_pool_get_req_set_dev_name(struct devlink_sb_port_pool_get_req *req,
1258 const char *dev_name)
1259{
1260 free(req->dev_name);
1261 req->_present.dev_name_len = strlen(dev_name);
1262 req->dev_name = malloc(req->_present.dev_name_len + 1);
1263 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1264 req->dev_name[req->_present.dev_name_len] = 0;
1265}
1266static inline void
1267devlink_sb_port_pool_get_req_set_port_index(struct devlink_sb_port_pool_get_req *req,
1268 __u32 port_index)
1269{
1270 req->_present.port_index = 1;
1271 req->port_index = port_index;
1272}
1273static inline void
1274devlink_sb_port_pool_get_req_set_sb_index(struct devlink_sb_port_pool_get_req *req,
1275 __u32 sb_index)
1276{
1277 req->_present.sb_index = 1;
1278 req->sb_index = sb_index;
1279}
1280static inline void
1281devlink_sb_port_pool_get_req_set_sb_pool_index(struct devlink_sb_port_pool_get_req *req,
1282 __u16 sb_pool_index)
1283{
1284 req->_present.sb_pool_index = 1;
1285 req->sb_pool_index = sb_pool_index;
1286}
1287
1288struct devlink_sb_port_pool_get_rsp {
1289 struct {
1290 __u32 bus_name_len;
1291 __u32 dev_name_len;
1292 __u32 port_index:1;
1293 __u32 sb_index:1;
1294 __u32 sb_pool_index:1;
1295 } _present;
1296
1297 char *bus_name;
1298 char *dev_name;
1299 __u32 port_index;
1300 __u32 sb_index;
1301 __u16 sb_pool_index;
1302};
1303
1304void
1305devlink_sb_port_pool_get_rsp_free(struct devlink_sb_port_pool_get_rsp *rsp);
1306
1307/*
1308 * Get shared buffer port-pool combinations and threshold.
1309 */
1310struct devlink_sb_port_pool_get_rsp *
1311devlink_sb_port_pool_get(struct ynl_sock *ys,
1312 struct devlink_sb_port_pool_get_req *req);
1313
1314/* DEVLINK_CMD_SB_PORT_POOL_GET - dump */
1315struct devlink_sb_port_pool_get_req_dump {
1316 struct {
1317 __u32 bus_name_len;
1318 __u32 dev_name_len;
1319 } _present;
1320
1321 char *bus_name;
1322 char *dev_name;
1323};
1324
1325static inline struct devlink_sb_port_pool_get_req_dump *
1326devlink_sb_port_pool_get_req_dump_alloc(void)
1327{
1328 return calloc(1, sizeof(struct devlink_sb_port_pool_get_req_dump));
1329}
1330void
1331devlink_sb_port_pool_get_req_dump_free(struct devlink_sb_port_pool_get_req_dump *req);
1332
1333static inline void
1334devlink_sb_port_pool_get_req_dump_set_bus_name(struct devlink_sb_port_pool_get_req_dump *req,
1335 const char *bus_name)
1336{
1337 free(req->bus_name);
1338 req->_present.bus_name_len = strlen(bus_name);
1339 req->bus_name = malloc(req->_present.bus_name_len + 1);
1340 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1341 req->bus_name[req->_present.bus_name_len] = 0;
1342}
1343static inline void
1344devlink_sb_port_pool_get_req_dump_set_dev_name(struct devlink_sb_port_pool_get_req_dump *req,
1345 const char *dev_name)
1346{
1347 free(req->dev_name);
1348 req->_present.dev_name_len = strlen(dev_name);
1349 req->dev_name = malloc(req->_present.dev_name_len + 1);
1350 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1351 req->dev_name[req->_present.dev_name_len] = 0;
1352}
1353
1354struct devlink_sb_port_pool_get_list {
1355 struct devlink_sb_port_pool_get_list *next;
1356 struct devlink_sb_port_pool_get_rsp obj __attribute__((aligned(8)));
1357};
1358
1359void
1360devlink_sb_port_pool_get_list_free(struct devlink_sb_port_pool_get_list *rsp);
1361
1362struct devlink_sb_port_pool_get_list *
1363devlink_sb_port_pool_get_dump(struct ynl_sock *ys,
1364 struct devlink_sb_port_pool_get_req_dump *req);
1365
1366/* ============== DEVLINK_CMD_SB_PORT_POOL_SET ============== */
1367/* DEVLINK_CMD_SB_PORT_POOL_SET - do */
1368struct devlink_sb_port_pool_set_req {
1369 struct {
1370 __u32 bus_name_len;
1371 __u32 dev_name_len;
1372 __u32 port_index:1;
1373 __u32 sb_index:1;
1374 __u32 sb_pool_index:1;
1375 __u32 sb_threshold:1;
1376 } _present;
1377
1378 char *bus_name;
1379 char *dev_name;
1380 __u32 port_index;
1381 __u32 sb_index;
1382 __u16 sb_pool_index;
1383 __u32 sb_threshold;
1384};
1385
1386static inline struct devlink_sb_port_pool_set_req *
1387devlink_sb_port_pool_set_req_alloc(void)
1388{
1389 return calloc(1, sizeof(struct devlink_sb_port_pool_set_req));
1390}
1391void
1392devlink_sb_port_pool_set_req_free(struct devlink_sb_port_pool_set_req *req);
1393
1394static inline void
1395devlink_sb_port_pool_set_req_set_bus_name(struct devlink_sb_port_pool_set_req *req,
1396 const char *bus_name)
1397{
1398 free(req->bus_name);
1399 req->_present.bus_name_len = strlen(bus_name);
1400 req->bus_name = malloc(req->_present.bus_name_len + 1);
1401 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1402 req->bus_name[req->_present.bus_name_len] = 0;
1403}
1404static inline void
1405devlink_sb_port_pool_set_req_set_dev_name(struct devlink_sb_port_pool_set_req *req,
1406 const char *dev_name)
1407{
1408 free(req->dev_name);
1409 req->_present.dev_name_len = strlen(dev_name);
1410 req->dev_name = malloc(req->_present.dev_name_len + 1);
1411 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1412 req->dev_name[req->_present.dev_name_len] = 0;
1413}
1414static inline void
1415devlink_sb_port_pool_set_req_set_port_index(struct devlink_sb_port_pool_set_req *req,
1416 __u32 port_index)
1417{
1418 req->_present.port_index = 1;
1419 req->port_index = port_index;
1420}
1421static inline void
1422devlink_sb_port_pool_set_req_set_sb_index(struct devlink_sb_port_pool_set_req *req,
1423 __u32 sb_index)
1424{
1425 req->_present.sb_index = 1;
1426 req->sb_index = sb_index;
1427}
1428static inline void
1429devlink_sb_port_pool_set_req_set_sb_pool_index(struct devlink_sb_port_pool_set_req *req,
1430 __u16 sb_pool_index)
1431{
1432 req->_present.sb_pool_index = 1;
1433 req->sb_pool_index = sb_pool_index;
1434}
1435static inline void
1436devlink_sb_port_pool_set_req_set_sb_threshold(struct devlink_sb_port_pool_set_req *req,
1437 __u32 sb_threshold)
1438{
1439 req->_present.sb_threshold = 1;
1440 req->sb_threshold = sb_threshold;
1441}
1442
1443/*
1444 * Set shared buffer port-pool combinations and threshold.
1445 */
1446int devlink_sb_port_pool_set(struct ynl_sock *ys,
1447 struct devlink_sb_port_pool_set_req *req);
1448
1449/* ============== DEVLINK_CMD_SB_TC_POOL_BIND_GET ============== */
1450/* DEVLINK_CMD_SB_TC_POOL_BIND_GET - do */
1451struct devlink_sb_tc_pool_bind_get_req {
1452 struct {
1453 __u32 bus_name_len;
1454 __u32 dev_name_len;
1455 __u32 port_index:1;
1456 __u32 sb_index:1;
1457 __u32 sb_pool_type:1;
1458 __u32 sb_tc_index:1;
1459 } _present;
1460
1461 char *bus_name;
1462 char *dev_name;
1463 __u32 port_index;
1464 __u32 sb_index;
1465 enum devlink_sb_pool_type sb_pool_type;
1466 __u16 sb_tc_index;
1467};
1468
1469static inline struct devlink_sb_tc_pool_bind_get_req *
1470devlink_sb_tc_pool_bind_get_req_alloc(void)
1471{
1472 return calloc(1, sizeof(struct devlink_sb_tc_pool_bind_get_req));
1473}
1474void
1475devlink_sb_tc_pool_bind_get_req_free(struct devlink_sb_tc_pool_bind_get_req *req);
1476
1477static inline void
1478devlink_sb_tc_pool_bind_get_req_set_bus_name(struct devlink_sb_tc_pool_bind_get_req *req,
1479 const char *bus_name)
1480{
1481 free(req->bus_name);
1482 req->_present.bus_name_len = strlen(bus_name);
1483 req->bus_name = malloc(req->_present.bus_name_len + 1);
1484 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1485 req->bus_name[req->_present.bus_name_len] = 0;
1486}
1487static inline void
1488devlink_sb_tc_pool_bind_get_req_set_dev_name(struct devlink_sb_tc_pool_bind_get_req *req,
1489 const char *dev_name)
1490{
1491 free(req->dev_name);
1492 req->_present.dev_name_len = strlen(dev_name);
1493 req->dev_name = malloc(req->_present.dev_name_len + 1);
1494 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1495 req->dev_name[req->_present.dev_name_len] = 0;
1496}
1497static inline void
1498devlink_sb_tc_pool_bind_get_req_set_port_index(struct devlink_sb_tc_pool_bind_get_req *req,
1499 __u32 port_index)
1500{
1501 req->_present.port_index = 1;
1502 req->port_index = port_index;
1503}
1504static inline void
1505devlink_sb_tc_pool_bind_get_req_set_sb_index(struct devlink_sb_tc_pool_bind_get_req *req,
1506 __u32 sb_index)
1507{
1508 req->_present.sb_index = 1;
1509 req->sb_index = sb_index;
1510}
1511static inline void
1512devlink_sb_tc_pool_bind_get_req_set_sb_pool_type(struct devlink_sb_tc_pool_bind_get_req *req,
1513 enum devlink_sb_pool_type sb_pool_type)
1514{
1515 req->_present.sb_pool_type = 1;
1516 req->sb_pool_type = sb_pool_type;
1517}
1518static inline void
1519devlink_sb_tc_pool_bind_get_req_set_sb_tc_index(struct devlink_sb_tc_pool_bind_get_req *req,
1520 __u16 sb_tc_index)
1521{
1522 req->_present.sb_tc_index = 1;
1523 req->sb_tc_index = sb_tc_index;
1524}
1525
1526struct devlink_sb_tc_pool_bind_get_rsp {
1527 struct {
1528 __u32 bus_name_len;
1529 __u32 dev_name_len;
1530 __u32 port_index:1;
1531 __u32 sb_index:1;
1532 __u32 sb_pool_type:1;
1533 __u32 sb_tc_index:1;
1534 } _present;
1535
1536 char *bus_name;
1537 char *dev_name;
1538 __u32 port_index;
1539 __u32 sb_index;
1540 enum devlink_sb_pool_type sb_pool_type;
1541 __u16 sb_tc_index;
1542};
1543
1544void
1545devlink_sb_tc_pool_bind_get_rsp_free(struct devlink_sb_tc_pool_bind_get_rsp *rsp);
1546
1547/*
1548 * Get shared buffer port-TC to pool bindings and threshold.
1549 */
1550struct devlink_sb_tc_pool_bind_get_rsp *
1551devlink_sb_tc_pool_bind_get(struct ynl_sock *ys,
1552 struct devlink_sb_tc_pool_bind_get_req *req);
1553
1554/* DEVLINK_CMD_SB_TC_POOL_BIND_GET - dump */
1555struct devlink_sb_tc_pool_bind_get_req_dump {
1556 struct {
1557 __u32 bus_name_len;
1558 __u32 dev_name_len;
1559 } _present;
1560
1561 char *bus_name;
1562 char *dev_name;
1563};
1564
1565static inline struct devlink_sb_tc_pool_bind_get_req_dump *
1566devlink_sb_tc_pool_bind_get_req_dump_alloc(void)
1567{
1568 return calloc(1, sizeof(struct devlink_sb_tc_pool_bind_get_req_dump));
1569}
1570void
1571devlink_sb_tc_pool_bind_get_req_dump_free(struct devlink_sb_tc_pool_bind_get_req_dump *req);
1572
1573static inline void
1574devlink_sb_tc_pool_bind_get_req_dump_set_bus_name(struct devlink_sb_tc_pool_bind_get_req_dump *req,
1575 const char *bus_name)
1576{
1577 free(req->bus_name);
1578 req->_present.bus_name_len = strlen(bus_name);
1579 req->bus_name = malloc(req->_present.bus_name_len + 1);
1580 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1581 req->bus_name[req->_present.bus_name_len] = 0;
1582}
1583static inline void
1584devlink_sb_tc_pool_bind_get_req_dump_set_dev_name(struct devlink_sb_tc_pool_bind_get_req_dump *req,
1585 const char *dev_name)
1586{
1587 free(req->dev_name);
1588 req->_present.dev_name_len = strlen(dev_name);
1589 req->dev_name = malloc(req->_present.dev_name_len + 1);
1590 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1591 req->dev_name[req->_present.dev_name_len] = 0;
1592}
1593
1594struct devlink_sb_tc_pool_bind_get_list {
1595 struct devlink_sb_tc_pool_bind_get_list *next;
1596 struct devlink_sb_tc_pool_bind_get_rsp obj __attribute__((aligned(8)));
1597};
1598
1599void
1600devlink_sb_tc_pool_bind_get_list_free(struct devlink_sb_tc_pool_bind_get_list *rsp);
1601
1602struct devlink_sb_tc_pool_bind_get_list *
1603devlink_sb_tc_pool_bind_get_dump(struct ynl_sock *ys,
1604 struct devlink_sb_tc_pool_bind_get_req_dump *req);
1605
1606/* ============== DEVLINK_CMD_SB_TC_POOL_BIND_SET ============== */
1607/* DEVLINK_CMD_SB_TC_POOL_BIND_SET - do */
1608struct devlink_sb_tc_pool_bind_set_req {
1609 struct {
1610 __u32 bus_name_len;
1611 __u32 dev_name_len;
1612 __u32 port_index:1;
1613 __u32 sb_index:1;
1614 __u32 sb_pool_index:1;
1615 __u32 sb_pool_type:1;
1616 __u32 sb_tc_index:1;
1617 __u32 sb_threshold:1;
1618 } _present;
1619
1620 char *bus_name;
1621 char *dev_name;
1622 __u32 port_index;
1623 __u32 sb_index;
1624 __u16 sb_pool_index;
1625 enum devlink_sb_pool_type sb_pool_type;
1626 __u16 sb_tc_index;
1627 __u32 sb_threshold;
1628};
1629
1630static inline struct devlink_sb_tc_pool_bind_set_req *
1631devlink_sb_tc_pool_bind_set_req_alloc(void)
1632{
1633 return calloc(1, sizeof(struct devlink_sb_tc_pool_bind_set_req));
1634}
1635void
1636devlink_sb_tc_pool_bind_set_req_free(struct devlink_sb_tc_pool_bind_set_req *req);
1637
1638static inline void
1639devlink_sb_tc_pool_bind_set_req_set_bus_name(struct devlink_sb_tc_pool_bind_set_req *req,
1640 const char *bus_name)
1641{
1642 free(req->bus_name);
1643 req->_present.bus_name_len = strlen(bus_name);
1644 req->bus_name = malloc(req->_present.bus_name_len + 1);
1645 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1646 req->bus_name[req->_present.bus_name_len] = 0;
1647}
1648static inline void
1649devlink_sb_tc_pool_bind_set_req_set_dev_name(struct devlink_sb_tc_pool_bind_set_req *req,
1650 const char *dev_name)
1651{
1652 free(req->dev_name);
1653 req->_present.dev_name_len = strlen(dev_name);
1654 req->dev_name = malloc(req->_present.dev_name_len + 1);
1655 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1656 req->dev_name[req->_present.dev_name_len] = 0;
1657}
1658static inline void
1659devlink_sb_tc_pool_bind_set_req_set_port_index(struct devlink_sb_tc_pool_bind_set_req *req,
1660 __u32 port_index)
1661{
1662 req->_present.port_index = 1;
1663 req->port_index = port_index;
1664}
1665static inline void
1666devlink_sb_tc_pool_bind_set_req_set_sb_index(struct devlink_sb_tc_pool_bind_set_req *req,
1667 __u32 sb_index)
1668{
1669 req->_present.sb_index = 1;
1670 req->sb_index = sb_index;
1671}
1672static inline void
1673devlink_sb_tc_pool_bind_set_req_set_sb_pool_index(struct devlink_sb_tc_pool_bind_set_req *req,
1674 __u16 sb_pool_index)
1675{
1676 req->_present.sb_pool_index = 1;
1677 req->sb_pool_index = sb_pool_index;
1678}
1679static inline void
1680devlink_sb_tc_pool_bind_set_req_set_sb_pool_type(struct devlink_sb_tc_pool_bind_set_req *req,
1681 enum devlink_sb_pool_type sb_pool_type)
1682{
1683 req->_present.sb_pool_type = 1;
1684 req->sb_pool_type = sb_pool_type;
1685}
1686static inline void
1687devlink_sb_tc_pool_bind_set_req_set_sb_tc_index(struct devlink_sb_tc_pool_bind_set_req *req,
1688 __u16 sb_tc_index)
1689{
1690 req->_present.sb_tc_index = 1;
1691 req->sb_tc_index = sb_tc_index;
1692}
1693static inline void
1694devlink_sb_tc_pool_bind_set_req_set_sb_threshold(struct devlink_sb_tc_pool_bind_set_req *req,
1695 __u32 sb_threshold)
1696{
1697 req->_present.sb_threshold = 1;
1698 req->sb_threshold = sb_threshold;
1699}
1700
1701/*
1702 * Set shared buffer port-TC to pool bindings and threshold.
1703 */
1704int devlink_sb_tc_pool_bind_set(struct ynl_sock *ys,
1705 struct devlink_sb_tc_pool_bind_set_req *req);
1706
1707/* ============== DEVLINK_CMD_SB_OCC_SNAPSHOT ============== */
1708/* DEVLINK_CMD_SB_OCC_SNAPSHOT - do */
1709struct devlink_sb_occ_snapshot_req {
1710 struct {
1711 __u32 bus_name_len;
1712 __u32 dev_name_len;
1713 __u32 sb_index:1;
1714 } _present;
1715
1716 char *bus_name;
1717 char *dev_name;
1718 __u32 sb_index;
1719};
1720
1721static inline struct devlink_sb_occ_snapshot_req *
1722devlink_sb_occ_snapshot_req_alloc(void)
1723{
1724 return calloc(1, sizeof(struct devlink_sb_occ_snapshot_req));
1725}
1726void devlink_sb_occ_snapshot_req_free(struct devlink_sb_occ_snapshot_req *req);
1727
1728static inline void
1729devlink_sb_occ_snapshot_req_set_bus_name(struct devlink_sb_occ_snapshot_req *req,
1730 const char *bus_name)
1731{
1732 free(req->bus_name);
1733 req->_present.bus_name_len = strlen(bus_name);
1734 req->bus_name = malloc(req->_present.bus_name_len + 1);
1735 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1736 req->bus_name[req->_present.bus_name_len] = 0;
1737}
1738static inline void
1739devlink_sb_occ_snapshot_req_set_dev_name(struct devlink_sb_occ_snapshot_req *req,
1740 const char *dev_name)
1741{
1742 free(req->dev_name);
1743 req->_present.dev_name_len = strlen(dev_name);
1744 req->dev_name = malloc(req->_present.dev_name_len + 1);
1745 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1746 req->dev_name[req->_present.dev_name_len] = 0;
1747}
1748static inline void
1749devlink_sb_occ_snapshot_req_set_sb_index(struct devlink_sb_occ_snapshot_req *req,
1750 __u32 sb_index)
1751{
1752 req->_present.sb_index = 1;
1753 req->sb_index = sb_index;
1754}
1755
1756/*
1757 * Take occupancy snapshot of shared buffer.
1758 */
1759int devlink_sb_occ_snapshot(struct ynl_sock *ys,
1760 struct devlink_sb_occ_snapshot_req *req);
1761
1762/* ============== DEVLINK_CMD_SB_OCC_MAX_CLEAR ============== */
1763/* DEVLINK_CMD_SB_OCC_MAX_CLEAR - do */
1764struct devlink_sb_occ_max_clear_req {
1765 struct {
1766 __u32 bus_name_len;
1767 __u32 dev_name_len;
1768 __u32 sb_index:1;
1769 } _present;
1770
1771 char *bus_name;
1772 char *dev_name;
1773 __u32 sb_index;
1774};
1775
1776static inline struct devlink_sb_occ_max_clear_req *
1777devlink_sb_occ_max_clear_req_alloc(void)
1778{
1779 return calloc(1, sizeof(struct devlink_sb_occ_max_clear_req));
1780}
1781void
1782devlink_sb_occ_max_clear_req_free(struct devlink_sb_occ_max_clear_req *req);
1783
1784static inline void
1785devlink_sb_occ_max_clear_req_set_bus_name(struct devlink_sb_occ_max_clear_req *req,
1786 const char *bus_name)
1787{
1788 free(req->bus_name);
1789 req->_present.bus_name_len = strlen(bus_name);
1790 req->bus_name = malloc(req->_present.bus_name_len + 1);
1791 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1792 req->bus_name[req->_present.bus_name_len] = 0;
1793}
1794static inline void
1795devlink_sb_occ_max_clear_req_set_dev_name(struct devlink_sb_occ_max_clear_req *req,
1796 const char *dev_name)
1797{
1798 free(req->dev_name);
1799 req->_present.dev_name_len = strlen(dev_name);
1800 req->dev_name = malloc(req->_present.dev_name_len + 1);
1801 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1802 req->dev_name[req->_present.dev_name_len] = 0;
1803}
1804static inline void
1805devlink_sb_occ_max_clear_req_set_sb_index(struct devlink_sb_occ_max_clear_req *req,
1806 __u32 sb_index)
1807{
1808 req->_present.sb_index = 1;
1809 req->sb_index = sb_index;
1810}
1811
1812/*
1813 * Clear occupancy watermarks of shared buffer.
1814 */
1815int devlink_sb_occ_max_clear(struct ynl_sock *ys,
1816 struct devlink_sb_occ_max_clear_req *req);
1817
1818/* ============== DEVLINK_CMD_ESWITCH_GET ============== */
1819/* DEVLINK_CMD_ESWITCH_GET - do */
1820struct devlink_eswitch_get_req {
1821 struct {
1822 __u32 bus_name_len;
1823 __u32 dev_name_len;
1824 } _present;
1825
1826 char *bus_name;
1827 char *dev_name;
1828};
1829
1830static inline struct devlink_eswitch_get_req *
1831devlink_eswitch_get_req_alloc(void)
1832{
1833 return calloc(1, sizeof(struct devlink_eswitch_get_req));
1834}
1835void devlink_eswitch_get_req_free(struct devlink_eswitch_get_req *req);
1836
1837static inline void
1838devlink_eswitch_get_req_set_bus_name(struct devlink_eswitch_get_req *req,
1839 const char *bus_name)
1840{
1841 free(req->bus_name);
1842 req->_present.bus_name_len = strlen(bus_name);
1843 req->bus_name = malloc(req->_present.bus_name_len + 1);
1844 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1845 req->bus_name[req->_present.bus_name_len] = 0;
1846}
1847static inline void
1848devlink_eswitch_get_req_set_dev_name(struct devlink_eswitch_get_req *req,
1849 const char *dev_name)
1850{
1851 free(req->dev_name);
1852 req->_present.dev_name_len = strlen(dev_name);
1853 req->dev_name = malloc(req->_present.dev_name_len + 1);
1854 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1855 req->dev_name[req->_present.dev_name_len] = 0;
1856}
1857
1858struct devlink_eswitch_get_rsp {
1859 struct {
1860 __u32 bus_name_len;
1861 __u32 dev_name_len;
1862 __u32 eswitch_mode:1;
1863 __u32 eswitch_inline_mode:1;
1864 __u32 eswitch_encap_mode:1;
1865 } _present;
1866
1867 char *bus_name;
1868 char *dev_name;
1869 enum devlink_eswitch_mode eswitch_mode;
1870 enum devlink_eswitch_inline_mode eswitch_inline_mode;
1871 enum devlink_eswitch_encap_mode eswitch_encap_mode;
1872};
1873
1874void devlink_eswitch_get_rsp_free(struct devlink_eswitch_get_rsp *rsp);
1875
1876/*
1877 * Get eswitch attributes.
1878 */
1879struct devlink_eswitch_get_rsp *
1880devlink_eswitch_get(struct ynl_sock *ys, struct devlink_eswitch_get_req *req);
1881
1882/* ============== DEVLINK_CMD_ESWITCH_SET ============== */
1883/* DEVLINK_CMD_ESWITCH_SET - do */
1884struct devlink_eswitch_set_req {
1885 struct {
1886 __u32 bus_name_len;
1887 __u32 dev_name_len;
1888 __u32 eswitch_mode:1;
1889 __u32 eswitch_inline_mode:1;
1890 __u32 eswitch_encap_mode:1;
1891 } _present;
1892
1893 char *bus_name;
1894 char *dev_name;
1895 enum devlink_eswitch_mode eswitch_mode;
1896 enum devlink_eswitch_inline_mode eswitch_inline_mode;
1897 enum devlink_eswitch_encap_mode eswitch_encap_mode;
1898};
1899
1900static inline struct devlink_eswitch_set_req *
1901devlink_eswitch_set_req_alloc(void)
1902{
1903 return calloc(1, sizeof(struct devlink_eswitch_set_req));
1904}
1905void devlink_eswitch_set_req_free(struct devlink_eswitch_set_req *req);
1906
1907static inline void
1908devlink_eswitch_set_req_set_bus_name(struct devlink_eswitch_set_req *req,
1909 const char *bus_name)
1910{
1911 free(req->bus_name);
1912 req->_present.bus_name_len = strlen(bus_name);
1913 req->bus_name = malloc(req->_present.bus_name_len + 1);
1914 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1915 req->bus_name[req->_present.bus_name_len] = 0;
1916}
1917static inline void
1918devlink_eswitch_set_req_set_dev_name(struct devlink_eswitch_set_req *req,
1919 const char *dev_name)
1920{
1921 free(req->dev_name);
1922 req->_present.dev_name_len = strlen(dev_name);
1923 req->dev_name = malloc(req->_present.dev_name_len + 1);
1924 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1925 req->dev_name[req->_present.dev_name_len] = 0;
1926}
1927static inline void
1928devlink_eswitch_set_req_set_eswitch_mode(struct devlink_eswitch_set_req *req,
1929 enum devlink_eswitch_mode eswitch_mode)
1930{
1931 req->_present.eswitch_mode = 1;
1932 req->eswitch_mode = eswitch_mode;
1933}
1934static inline void
1935devlink_eswitch_set_req_set_eswitch_inline_mode(struct devlink_eswitch_set_req *req,
1936 enum devlink_eswitch_inline_mode eswitch_inline_mode)
1937{
1938 req->_present.eswitch_inline_mode = 1;
1939 req->eswitch_inline_mode = eswitch_inline_mode;
1940}
1941static inline void
1942devlink_eswitch_set_req_set_eswitch_encap_mode(struct devlink_eswitch_set_req *req,
1943 enum devlink_eswitch_encap_mode eswitch_encap_mode)
1944{
1945 req->_present.eswitch_encap_mode = 1;
1946 req->eswitch_encap_mode = eswitch_encap_mode;
1947}
1948
1949/*
1950 * Set eswitch attributes.
1951 */
1952int devlink_eswitch_set(struct ynl_sock *ys,
1953 struct devlink_eswitch_set_req *req);
1954
1955/* ============== DEVLINK_CMD_DPIPE_TABLE_GET ============== */
1956/* DEVLINK_CMD_DPIPE_TABLE_GET - do */
1957struct devlink_dpipe_table_get_req {
1958 struct {
1959 __u32 bus_name_len;
1960 __u32 dev_name_len;
1961 __u32 dpipe_table_name_len;
1962 } _present;
1963
1964 char *bus_name;
1965 char *dev_name;
1966 char *dpipe_table_name;
1967};
1968
1969static inline struct devlink_dpipe_table_get_req *
1970devlink_dpipe_table_get_req_alloc(void)
1971{
1972 return calloc(1, sizeof(struct devlink_dpipe_table_get_req));
1973}
1974void devlink_dpipe_table_get_req_free(struct devlink_dpipe_table_get_req *req);
1975
1976static inline void
1977devlink_dpipe_table_get_req_set_bus_name(struct devlink_dpipe_table_get_req *req,
1978 const char *bus_name)
1979{
1980 free(req->bus_name);
1981 req->_present.bus_name_len = strlen(bus_name);
1982 req->bus_name = malloc(req->_present.bus_name_len + 1);
1983 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
1984 req->bus_name[req->_present.bus_name_len] = 0;
1985}
1986static inline void
1987devlink_dpipe_table_get_req_set_dev_name(struct devlink_dpipe_table_get_req *req,
1988 const char *dev_name)
1989{
1990 free(req->dev_name);
1991 req->_present.dev_name_len = strlen(dev_name);
1992 req->dev_name = malloc(req->_present.dev_name_len + 1);
1993 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
1994 req->dev_name[req->_present.dev_name_len] = 0;
1995}
1996static inline void
1997devlink_dpipe_table_get_req_set_dpipe_table_name(struct devlink_dpipe_table_get_req *req,
1998 const char *dpipe_table_name)
1999{
2000 free(req->dpipe_table_name);
2001 req->_present.dpipe_table_name_len = strlen(dpipe_table_name);
2002 req->dpipe_table_name = malloc(req->_present.dpipe_table_name_len + 1);
2003 memcpy(req->dpipe_table_name, dpipe_table_name, req->_present.dpipe_table_name_len);
2004 req->dpipe_table_name[req->_present.dpipe_table_name_len] = 0;
2005}
2006
2007struct devlink_dpipe_table_get_rsp {
2008 struct {
2009 __u32 bus_name_len;
2010 __u32 dev_name_len;
2011 __u32 dpipe_tables:1;
2012 } _present;
2013
2014 char *bus_name;
2015 char *dev_name;
2016 struct devlink_dl_dpipe_tables dpipe_tables;
2017};
2018
2019void devlink_dpipe_table_get_rsp_free(struct devlink_dpipe_table_get_rsp *rsp);
2020
2021/*
2022 * Get dpipe table attributes.
2023 */
2024struct devlink_dpipe_table_get_rsp *
2025devlink_dpipe_table_get(struct ynl_sock *ys,
2026 struct devlink_dpipe_table_get_req *req);
2027
2028/* ============== DEVLINK_CMD_DPIPE_ENTRIES_GET ============== */
2029/* DEVLINK_CMD_DPIPE_ENTRIES_GET - do */
2030struct devlink_dpipe_entries_get_req {
2031 struct {
2032 __u32 bus_name_len;
2033 __u32 dev_name_len;
2034 __u32 dpipe_table_name_len;
2035 } _present;
2036
2037 char *bus_name;
2038 char *dev_name;
2039 char *dpipe_table_name;
2040};
2041
2042static inline struct devlink_dpipe_entries_get_req *
2043devlink_dpipe_entries_get_req_alloc(void)
2044{
2045 return calloc(1, sizeof(struct devlink_dpipe_entries_get_req));
2046}
2047void
2048devlink_dpipe_entries_get_req_free(struct devlink_dpipe_entries_get_req *req);
2049
2050static inline void
2051devlink_dpipe_entries_get_req_set_bus_name(struct devlink_dpipe_entries_get_req *req,
2052 const char *bus_name)
2053{
2054 free(req->bus_name);
2055 req->_present.bus_name_len = strlen(bus_name);
2056 req->bus_name = malloc(req->_present.bus_name_len + 1);
2057 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2058 req->bus_name[req->_present.bus_name_len] = 0;
2059}
2060static inline void
2061devlink_dpipe_entries_get_req_set_dev_name(struct devlink_dpipe_entries_get_req *req,
2062 const char *dev_name)
2063{
2064 free(req->dev_name);
2065 req->_present.dev_name_len = strlen(dev_name);
2066 req->dev_name = malloc(req->_present.dev_name_len + 1);
2067 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
2068 req->dev_name[req->_present.dev_name_len] = 0;
2069}
2070static inline void
2071devlink_dpipe_entries_get_req_set_dpipe_table_name(struct devlink_dpipe_entries_get_req *req,
2072 const char *dpipe_table_name)
2073{
2074 free(req->dpipe_table_name);
2075 req->_present.dpipe_table_name_len = strlen(dpipe_table_name);
2076 req->dpipe_table_name = malloc(req->_present.dpipe_table_name_len + 1);
2077 memcpy(req->dpipe_table_name, dpipe_table_name, req->_present.dpipe_table_name_len);
2078 req->dpipe_table_name[req->_present.dpipe_table_name_len] = 0;
2079}
2080
2081struct devlink_dpipe_entries_get_rsp {
2082 struct {
2083 __u32 bus_name_len;
2084 __u32 dev_name_len;
2085 __u32 dpipe_entries:1;
2086 } _present;
2087
2088 char *bus_name;
2089 char *dev_name;
2090 struct devlink_dl_dpipe_entries dpipe_entries;
2091};
2092
2093void
2094devlink_dpipe_entries_get_rsp_free(struct devlink_dpipe_entries_get_rsp *rsp);
2095
2096/*
2097 * Get dpipe entries attributes.
2098 */
2099struct devlink_dpipe_entries_get_rsp *
2100devlink_dpipe_entries_get(struct ynl_sock *ys,
2101 struct devlink_dpipe_entries_get_req *req);
2102
2103/* ============== DEVLINK_CMD_DPIPE_HEADERS_GET ============== */
2104/* DEVLINK_CMD_DPIPE_HEADERS_GET - do */
2105struct devlink_dpipe_headers_get_req {
2106 struct {
2107 __u32 bus_name_len;
2108 __u32 dev_name_len;
2109 } _present;
2110
2111 char *bus_name;
2112 char *dev_name;
2113};
2114
2115static inline struct devlink_dpipe_headers_get_req *
2116devlink_dpipe_headers_get_req_alloc(void)
2117{
2118 return calloc(1, sizeof(struct devlink_dpipe_headers_get_req));
2119}
2120void
2121devlink_dpipe_headers_get_req_free(struct devlink_dpipe_headers_get_req *req);
2122
2123static inline void
2124devlink_dpipe_headers_get_req_set_bus_name(struct devlink_dpipe_headers_get_req *req,
2125 const char *bus_name)
2126{
2127 free(req->bus_name);
2128 req->_present.bus_name_len = strlen(bus_name);
2129 req->bus_name = malloc(req->_present.bus_name_len + 1);
2130 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2131 req->bus_name[req->_present.bus_name_len] = 0;
2132}
2133static inline void
2134devlink_dpipe_headers_get_req_set_dev_name(struct devlink_dpipe_headers_get_req *req,
2135 const char *dev_name)
2136{
2137 free(req->dev_name);
2138 req->_present.dev_name_len = strlen(dev_name);
2139 req->dev_name = malloc(req->_present.dev_name_len + 1);
2140 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
2141 req->dev_name[req->_present.dev_name_len] = 0;
2142}
2143
2144struct devlink_dpipe_headers_get_rsp {
2145 struct {
2146 __u32 bus_name_len;
2147 __u32 dev_name_len;
2148 __u32 dpipe_headers:1;
2149 } _present;
2150
2151 char *bus_name;
2152 char *dev_name;
2153 struct devlink_dl_dpipe_headers dpipe_headers;
2154};
2155
2156void
2157devlink_dpipe_headers_get_rsp_free(struct devlink_dpipe_headers_get_rsp *rsp);
2158
2159/*
2160 * Get dpipe headers attributes.
2161 */
2162struct devlink_dpipe_headers_get_rsp *
2163devlink_dpipe_headers_get(struct ynl_sock *ys,
2164 struct devlink_dpipe_headers_get_req *req);
2165
2166/* ============== DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET ============== */
2167/* DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET - do */
2168struct devlink_dpipe_table_counters_set_req {
2169 struct {
2170 __u32 bus_name_len;
2171 __u32 dev_name_len;
2172 __u32 dpipe_table_name_len;
2173 __u32 dpipe_table_counters_enabled:1;
2174 } _present;
2175
2176 char *bus_name;
2177 char *dev_name;
2178 char *dpipe_table_name;
2179 __u8 dpipe_table_counters_enabled;
2180};
2181
2182static inline struct devlink_dpipe_table_counters_set_req *
2183devlink_dpipe_table_counters_set_req_alloc(void)
2184{
2185 return calloc(1, sizeof(struct devlink_dpipe_table_counters_set_req));
2186}
2187void
2188devlink_dpipe_table_counters_set_req_free(struct devlink_dpipe_table_counters_set_req *req);
2189
2190static inline void
2191devlink_dpipe_table_counters_set_req_set_bus_name(struct devlink_dpipe_table_counters_set_req *req,
2192 const char *bus_name)
2193{
2194 free(req->bus_name);
2195 req->_present.bus_name_len = strlen(bus_name);
2196 req->bus_name = malloc(req->_present.bus_name_len + 1);
2197 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2198 req->bus_name[req->_present.bus_name_len] = 0;
2199}
2200static inline void
2201devlink_dpipe_table_counters_set_req_set_dev_name(struct devlink_dpipe_table_counters_set_req *req,
2202 const char *dev_name)
2203{
2204 free(req->dev_name);
2205 req->_present.dev_name_len = strlen(dev_name);
2206 req->dev_name = malloc(req->_present.dev_name_len + 1);
2207 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
2208 req->dev_name[req->_present.dev_name_len] = 0;
2209}
2210static inline void
2211devlink_dpipe_table_counters_set_req_set_dpipe_table_name(struct devlink_dpipe_table_counters_set_req *req,
2212 const char *dpipe_table_name)
2213{
2214 free(req->dpipe_table_name);
2215 req->_present.dpipe_table_name_len = strlen(dpipe_table_name);
2216 req->dpipe_table_name = malloc(req->_present.dpipe_table_name_len + 1);
2217 memcpy(req->dpipe_table_name, dpipe_table_name, req->_present.dpipe_table_name_len);
2218 req->dpipe_table_name[req->_present.dpipe_table_name_len] = 0;
2219}
2220static inline void
2221devlink_dpipe_table_counters_set_req_set_dpipe_table_counters_enabled(struct devlink_dpipe_table_counters_set_req *req,
2222 __u8 dpipe_table_counters_enabled)
2223{
2224 req->_present.dpipe_table_counters_enabled = 1;
2225 req->dpipe_table_counters_enabled = dpipe_table_counters_enabled;
2226}
2227
2228/*
2229 * Set dpipe counter attributes.
2230 */
2231int devlink_dpipe_table_counters_set(struct ynl_sock *ys,
2232 struct devlink_dpipe_table_counters_set_req *req);
2233
2234/* ============== DEVLINK_CMD_RESOURCE_SET ============== */
2235/* DEVLINK_CMD_RESOURCE_SET - do */
2236struct devlink_resource_set_req {
2237 struct {
2238 __u32 bus_name_len;
2239 __u32 dev_name_len;
2240 __u32 resource_id:1;
2241 __u32 resource_size:1;
2242 } _present;
2243
2244 char *bus_name;
2245 char *dev_name;
2246 __u64 resource_id;
2247 __u64 resource_size;
2248};
2249
2250static inline struct devlink_resource_set_req *
2251devlink_resource_set_req_alloc(void)
2252{
2253 return calloc(1, sizeof(struct devlink_resource_set_req));
2254}
2255void devlink_resource_set_req_free(struct devlink_resource_set_req *req);
2256
2257static inline void
2258devlink_resource_set_req_set_bus_name(struct devlink_resource_set_req *req,
2259 const char *bus_name)
2260{
2261 free(req->bus_name);
2262 req->_present.bus_name_len = strlen(bus_name);
2263 req->bus_name = malloc(req->_present.bus_name_len + 1);
2264 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2265 req->bus_name[req->_present.bus_name_len] = 0;
2266}
2267static inline void
2268devlink_resource_set_req_set_dev_name(struct devlink_resource_set_req *req,
2269 const char *dev_name)
2270{
2271 free(req->dev_name);
2272 req->_present.dev_name_len = strlen(dev_name);
2273 req->dev_name = malloc(req->_present.dev_name_len + 1);
2274 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
2275 req->dev_name[req->_present.dev_name_len] = 0;
2276}
2277static inline void
2278devlink_resource_set_req_set_resource_id(struct devlink_resource_set_req *req,
2279 __u64 resource_id)
2280{
2281 req->_present.resource_id = 1;
2282 req->resource_id = resource_id;
2283}
2284static inline void
2285devlink_resource_set_req_set_resource_size(struct devlink_resource_set_req *req,
2286 __u64 resource_size)
2287{
2288 req->_present.resource_size = 1;
2289 req->resource_size = resource_size;
2290}
2291
2292/*
2293 * Set resource attributes.
2294 */
2295int devlink_resource_set(struct ynl_sock *ys,
2296 struct devlink_resource_set_req *req);
2297
2298/* ============== DEVLINK_CMD_RESOURCE_DUMP ============== */
2299/* DEVLINK_CMD_RESOURCE_DUMP - do */
2300struct devlink_resource_dump_req {
2301 struct {
2302 __u32 bus_name_len;
2303 __u32 dev_name_len;
2304 } _present;
2305
2306 char *bus_name;
2307 char *dev_name;
2308};
2309
2310static inline struct devlink_resource_dump_req *
2311devlink_resource_dump_req_alloc(void)
2312{
2313 return calloc(1, sizeof(struct devlink_resource_dump_req));
2314}
2315void devlink_resource_dump_req_free(struct devlink_resource_dump_req *req);
2316
2317static inline void
2318devlink_resource_dump_req_set_bus_name(struct devlink_resource_dump_req *req,
2319 const char *bus_name)
2320{
2321 free(req->bus_name);
2322 req->_present.bus_name_len = strlen(bus_name);
2323 req->bus_name = malloc(req->_present.bus_name_len + 1);
2324 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2325 req->bus_name[req->_present.bus_name_len] = 0;
2326}
2327static inline void
2328devlink_resource_dump_req_set_dev_name(struct devlink_resource_dump_req *req,
2329 const char *dev_name)
2330{
2331 free(req->dev_name);
2332 req->_present.dev_name_len = strlen(dev_name);
2333 req->dev_name = malloc(req->_present.dev_name_len + 1);
2334 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
2335 req->dev_name[req->_present.dev_name_len] = 0;
2336}
2337
2338struct devlink_resource_dump_rsp {
2339 struct {
2340 __u32 bus_name_len;
2341 __u32 dev_name_len;
2342 __u32 resource_list:1;
2343 } _present;
2344
2345 char *bus_name;
2346 char *dev_name;
2347 struct devlink_dl_resource_list resource_list;
2348};
2349
2350void devlink_resource_dump_rsp_free(struct devlink_resource_dump_rsp *rsp);
2351
2352/*
2353 * Get resource attributes.
2354 */
2355struct devlink_resource_dump_rsp *
2356devlink_resource_dump(struct ynl_sock *ys,
2357 struct devlink_resource_dump_req *req);
2358
2359/* ============== DEVLINK_CMD_RELOAD ============== */
2360/* DEVLINK_CMD_RELOAD - do */
2361struct devlink_reload_req {
2362 struct {
2363 __u32 bus_name_len;
2364 __u32 dev_name_len;
2365 __u32 reload_action:1;
2366 __u32 reload_limits:1;
2367 __u32 netns_pid:1;
2368 __u32 netns_fd:1;
2369 __u32 netns_id:1;
2370 } _present;
2371
2372 char *bus_name;
2373 char *dev_name;
2374 enum devlink_reload_action reload_action;
2375 struct nla_bitfield32 reload_limits;
2376 __u32 netns_pid;
2377 __u32 netns_fd;
2378 __u32 netns_id;
2379};
2380
2381static inline struct devlink_reload_req *devlink_reload_req_alloc(void)
2382{
2383 return calloc(1, sizeof(struct devlink_reload_req));
2384}
2385void devlink_reload_req_free(struct devlink_reload_req *req);
2386
2387static inline void
2388devlink_reload_req_set_bus_name(struct devlink_reload_req *req,
2389 const char *bus_name)
2390{
2391 free(req->bus_name);
2392 req->_present.bus_name_len = strlen(bus_name);
2393 req->bus_name = malloc(req->_present.bus_name_len + 1);
2394 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2395 req->bus_name[req->_present.bus_name_len] = 0;
2396}
2397static inline void
2398devlink_reload_req_set_dev_name(struct devlink_reload_req *req,
2399 const char *dev_name)
2400{
2401 free(req->dev_name);
2402 req->_present.dev_name_len = strlen(dev_name);
2403 req->dev_name = malloc(req->_present.dev_name_len + 1);
2404 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
2405 req->dev_name[req->_present.dev_name_len] = 0;
2406}
2407static inline void
2408devlink_reload_req_set_reload_action(struct devlink_reload_req *req,
2409 enum devlink_reload_action reload_action)
2410{
2411 req->_present.reload_action = 1;
2412 req->reload_action = reload_action;
2413}
2414static inline void
2415devlink_reload_req_set_reload_limits(struct devlink_reload_req *req,
2416 struct nla_bitfield32 *reload_limits)
2417{
2418 req->_present.reload_limits = 1;
2419 memcpy(&req->reload_limits, reload_limits, sizeof(struct nla_bitfield32));
2420}
2421static inline void
2422devlink_reload_req_set_netns_pid(struct devlink_reload_req *req,
2423 __u32 netns_pid)
2424{
2425 req->_present.netns_pid = 1;
2426 req->netns_pid = netns_pid;
2427}
2428static inline void
2429devlink_reload_req_set_netns_fd(struct devlink_reload_req *req, __u32 netns_fd)
2430{
2431 req->_present.netns_fd = 1;
2432 req->netns_fd = netns_fd;
2433}
2434static inline void
2435devlink_reload_req_set_netns_id(struct devlink_reload_req *req, __u32 netns_id)
2436{
2437 req->_present.netns_id = 1;
2438 req->netns_id = netns_id;
2439}
2440
2441struct devlink_reload_rsp {
2442 struct {
2443 __u32 bus_name_len;
2444 __u32 dev_name_len;
2445 __u32 reload_actions_performed:1;
2446 } _present;
2447
2448 char *bus_name;
2449 char *dev_name;
2450 struct nla_bitfield32 reload_actions_performed;
2451};
2452
2453void devlink_reload_rsp_free(struct devlink_reload_rsp *rsp);
2454
2455/*
2456 * Reload devlink.
2457 */
2458struct devlink_reload_rsp *
2459devlink_reload(struct ynl_sock *ys, struct devlink_reload_req *req);
2460
2461/* ============== DEVLINK_CMD_PARAM_GET ============== */
2462/* DEVLINK_CMD_PARAM_GET - do */
2463struct devlink_param_get_req {
2464 struct {
2465 __u32 bus_name_len;
2466 __u32 dev_name_len;
2467 __u32 param_name_len;
2468 } _present;
2469
2470 char *bus_name;
2471 char *dev_name;
2472 char *param_name;
2473};
2474
2475static inline struct devlink_param_get_req *devlink_param_get_req_alloc(void)
2476{
2477 return calloc(1, sizeof(struct devlink_param_get_req));
2478}
2479void devlink_param_get_req_free(struct devlink_param_get_req *req);
2480
2481static inline void
2482devlink_param_get_req_set_bus_name(struct devlink_param_get_req *req,
2483 const char *bus_name)
2484{
2485 free(req->bus_name);
2486 req->_present.bus_name_len = strlen(bus_name);
2487 req->bus_name = malloc(req->_present.bus_name_len + 1);
2488 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2489 req->bus_name[req->_present.bus_name_len] = 0;
2490}
2491static inline void
2492devlink_param_get_req_set_dev_name(struct devlink_param_get_req *req,
2493 const char *dev_name)
2494{
2495 free(req->dev_name);
2496 req->_present.dev_name_len = strlen(dev_name);
2497 req->dev_name = malloc(req->_present.dev_name_len + 1);
2498 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
2499 req->dev_name[req->_present.dev_name_len] = 0;
2500}
2501static inline void
2502devlink_param_get_req_set_param_name(struct devlink_param_get_req *req,
2503 const char *param_name)
2504{
2505 free(req->param_name);
2506 req->_present.param_name_len = strlen(param_name);
2507 req->param_name = malloc(req->_present.param_name_len + 1);
2508 memcpy(req->param_name, param_name, req->_present.param_name_len);
2509 req->param_name[req->_present.param_name_len] = 0;
2510}
2511
2512struct devlink_param_get_rsp {
2513 struct {
2514 __u32 bus_name_len;
2515 __u32 dev_name_len;
2516 __u32 param_name_len;
2517 } _present;
2518
2519 char *bus_name;
2520 char *dev_name;
2521 char *param_name;
2522};
2523
2524void devlink_param_get_rsp_free(struct devlink_param_get_rsp *rsp);
2525
2526/*
2527 * Get param instances.
2528 */
2529struct devlink_param_get_rsp *
2530devlink_param_get(struct ynl_sock *ys, struct devlink_param_get_req *req);
2531
2532/* DEVLINK_CMD_PARAM_GET - dump */
2533struct devlink_param_get_req_dump {
2534 struct {
2535 __u32 bus_name_len;
2536 __u32 dev_name_len;
2537 } _present;
2538
2539 char *bus_name;
2540 char *dev_name;
2541};
2542
2543static inline struct devlink_param_get_req_dump *
2544devlink_param_get_req_dump_alloc(void)
2545{
2546 return calloc(1, sizeof(struct devlink_param_get_req_dump));
2547}
2548void devlink_param_get_req_dump_free(struct devlink_param_get_req_dump *req);
2549
2550static inline void
2551devlink_param_get_req_dump_set_bus_name(struct devlink_param_get_req_dump *req,
2552 const char *bus_name)
2553{
2554 free(req->bus_name);
2555 req->_present.bus_name_len = strlen(bus_name);
2556 req->bus_name = malloc(req->_present.bus_name_len + 1);
2557 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2558 req->bus_name[req->_present.bus_name_len] = 0;
2559}
2560static inline void
2561devlink_param_get_req_dump_set_dev_name(struct devlink_param_get_req_dump *req,
2562 const char *dev_name)
2563{
2564 free(req->dev_name);
2565 req->_present.dev_name_len = strlen(dev_name);
2566 req->dev_name = malloc(req->_present.dev_name_len + 1);
2567 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
2568 req->dev_name[req->_present.dev_name_len] = 0;
2569}
2570
2571struct devlink_param_get_list {
2572 struct devlink_param_get_list *next;
2573 struct devlink_param_get_rsp obj __attribute__((aligned(8)));
2574};
2575
2576void devlink_param_get_list_free(struct devlink_param_get_list *rsp);
2577
2578struct devlink_param_get_list *
2579devlink_param_get_dump(struct ynl_sock *ys,
2580 struct devlink_param_get_req_dump *req);
2581
2582/* ============== DEVLINK_CMD_PARAM_SET ============== */
2583/* DEVLINK_CMD_PARAM_SET - do */
2584struct devlink_param_set_req {
2585 struct {
2586 __u32 bus_name_len;
2587 __u32 dev_name_len;
2588 __u32 param_name_len;
2589 __u32 param_type:1;
2590 __u32 param_value_cmode:1;
2591 } _present;
2592
2593 char *bus_name;
2594 char *dev_name;
2595 char *param_name;
2596 __u8 param_type;
2597 enum devlink_param_cmode param_value_cmode;
2598};
2599
2600static inline struct devlink_param_set_req *devlink_param_set_req_alloc(void)
2601{
2602 return calloc(1, sizeof(struct devlink_param_set_req));
2603}
2604void devlink_param_set_req_free(struct devlink_param_set_req *req);
2605
2606static inline void
2607devlink_param_set_req_set_bus_name(struct devlink_param_set_req *req,
2608 const char *bus_name)
2609{
2610 free(req->bus_name);
2611 req->_present.bus_name_len = strlen(bus_name);
2612 req->bus_name = malloc(req->_present.bus_name_len + 1);
2613 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2614 req->bus_name[req->_present.bus_name_len] = 0;
2615}
2616static inline void
2617devlink_param_set_req_set_dev_name(struct devlink_param_set_req *req,
2618 const char *dev_name)
2619{
2620 free(req->dev_name);
2621 req->_present.dev_name_len = strlen(dev_name);
2622 req->dev_name = malloc(req->_present.dev_name_len + 1);
2623 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
2624 req->dev_name[req->_present.dev_name_len] = 0;
2625}
2626static inline void
2627devlink_param_set_req_set_param_name(struct devlink_param_set_req *req,
2628 const char *param_name)
2629{
2630 free(req->param_name);
2631 req->_present.param_name_len = strlen(param_name);
2632 req->param_name = malloc(req->_present.param_name_len + 1);
2633 memcpy(req->param_name, param_name, req->_present.param_name_len);
2634 req->param_name[req->_present.param_name_len] = 0;
2635}
2636static inline void
2637devlink_param_set_req_set_param_type(struct devlink_param_set_req *req,
2638 __u8 param_type)
2639{
2640 req->_present.param_type = 1;
2641 req->param_type = param_type;
2642}
2643static inline void
2644devlink_param_set_req_set_param_value_cmode(struct devlink_param_set_req *req,
2645 enum devlink_param_cmode param_value_cmode)
2646{
2647 req->_present.param_value_cmode = 1;
2648 req->param_value_cmode = param_value_cmode;
2649}
2650
2651/*
2652 * Set param instances.
2653 */
2654int devlink_param_set(struct ynl_sock *ys, struct devlink_param_set_req *req);
2655
2656/* ============== DEVLINK_CMD_REGION_GET ============== */
2657/* DEVLINK_CMD_REGION_GET - do */
2658struct devlink_region_get_req {
2659 struct {
2660 __u32 bus_name_len;
2661 __u32 dev_name_len;
2662 __u32 port_index:1;
2663 __u32 region_name_len;
2664 } _present;
2665
2666 char *bus_name;
2667 char *dev_name;
2668 __u32 port_index;
2669 char *region_name;
2670};
2671
2672static inline struct devlink_region_get_req *devlink_region_get_req_alloc(void)
2673{
2674 return calloc(1, sizeof(struct devlink_region_get_req));
2675}
2676void devlink_region_get_req_free(struct devlink_region_get_req *req);
2677
2678static inline void
2679devlink_region_get_req_set_bus_name(struct devlink_region_get_req *req,
2680 const char *bus_name)
2681{
2682 free(req->bus_name);
2683 req->_present.bus_name_len = strlen(bus_name);
2684 req->bus_name = malloc(req->_present.bus_name_len + 1);
2685 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2686 req->bus_name[req->_present.bus_name_len] = 0;
2687}
2688static inline void
2689devlink_region_get_req_set_dev_name(struct devlink_region_get_req *req,
2690 const char *dev_name)
2691{
2692 free(req->dev_name);
2693 req->_present.dev_name_len = strlen(dev_name);
2694 req->dev_name = malloc(req->_present.dev_name_len + 1);
2695 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
2696 req->dev_name[req->_present.dev_name_len] = 0;
2697}
2698static inline void
2699devlink_region_get_req_set_port_index(struct devlink_region_get_req *req,
2700 __u32 port_index)
2701{
2702 req->_present.port_index = 1;
2703 req->port_index = port_index;
2704}
2705static inline void
2706devlink_region_get_req_set_region_name(struct devlink_region_get_req *req,
2707 const char *region_name)
2708{
2709 free(req->region_name);
2710 req->_present.region_name_len = strlen(region_name);
2711 req->region_name = malloc(req->_present.region_name_len + 1);
2712 memcpy(req->region_name, region_name, req->_present.region_name_len);
2713 req->region_name[req->_present.region_name_len] = 0;
2714}
2715
2716struct devlink_region_get_rsp {
2717 struct {
2718 __u32 bus_name_len;
2719 __u32 dev_name_len;
2720 __u32 port_index:1;
2721 __u32 region_name_len;
2722 } _present;
2723
2724 char *bus_name;
2725 char *dev_name;
2726 __u32 port_index;
2727 char *region_name;
2728};
2729
2730void devlink_region_get_rsp_free(struct devlink_region_get_rsp *rsp);
2731
2732/*
2733 * Get region instances.
2734 */
2735struct devlink_region_get_rsp *
2736devlink_region_get(struct ynl_sock *ys, struct devlink_region_get_req *req);
2737
2738/* DEVLINK_CMD_REGION_GET - dump */
2739struct devlink_region_get_req_dump {
2740 struct {
2741 __u32 bus_name_len;
2742 __u32 dev_name_len;
2743 } _present;
2744
2745 char *bus_name;
2746 char *dev_name;
2747};
2748
2749static inline struct devlink_region_get_req_dump *
2750devlink_region_get_req_dump_alloc(void)
2751{
2752 return calloc(1, sizeof(struct devlink_region_get_req_dump));
2753}
2754void devlink_region_get_req_dump_free(struct devlink_region_get_req_dump *req);
2755
2756static inline void
2757devlink_region_get_req_dump_set_bus_name(struct devlink_region_get_req_dump *req,
2758 const char *bus_name)
2759{
2760 free(req->bus_name);
2761 req->_present.bus_name_len = strlen(bus_name);
2762 req->bus_name = malloc(req->_present.bus_name_len + 1);
2763 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2764 req->bus_name[req->_present.bus_name_len] = 0;
2765}
2766static inline void
2767devlink_region_get_req_dump_set_dev_name(struct devlink_region_get_req_dump *req,
2768 const char *dev_name)
2769{
2770 free(req->dev_name);
2771 req->_present.dev_name_len = strlen(dev_name);
2772 req->dev_name = malloc(req->_present.dev_name_len + 1);
2773 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
2774 req->dev_name[req->_present.dev_name_len] = 0;
2775}
2776
2777struct devlink_region_get_list {
2778 struct devlink_region_get_list *next;
2779 struct devlink_region_get_rsp obj __attribute__((aligned(8)));
2780};
2781
2782void devlink_region_get_list_free(struct devlink_region_get_list *rsp);
2783
2784struct devlink_region_get_list *
2785devlink_region_get_dump(struct ynl_sock *ys,
2786 struct devlink_region_get_req_dump *req);
2787
2788/* ============== DEVLINK_CMD_REGION_NEW ============== */
2789/* DEVLINK_CMD_REGION_NEW - do */
2790struct devlink_region_new_req {
2791 struct {
2792 __u32 bus_name_len;
2793 __u32 dev_name_len;
2794 __u32 port_index:1;
2795 __u32 region_name_len;
2796 __u32 region_snapshot_id:1;
2797 } _present;
2798
2799 char *bus_name;
2800 char *dev_name;
2801 __u32 port_index;
2802 char *region_name;
2803 __u32 region_snapshot_id;
2804};
2805
2806static inline struct devlink_region_new_req *devlink_region_new_req_alloc(void)
2807{
2808 return calloc(1, sizeof(struct devlink_region_new_req));
2809}
2810void devlink_region_new_req_free(struct devlink_region_new_req *req);
2811
2812static inline void
2813devlink_region_new_req_set_bus_name(struct devlink_region_new_req *req,
2814 const char *bus_name)
2815{
2816 free(req->bus_name);
2817 req->_present.bus_name_len = strlen(bus_name);
2818 req->bus_name = malloc(req->_present.bus_name_len + 1);
2819 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2820 req->bus_name[req->_present.bus_name_len] = 0;
2821}
2822static inline void
2823devlink_region_new_req_set_dev_name(struct devlink_region_new_req *req,
2824 const char *dev_name)
2825{
2826 free(req->dev_name);
2827 req->_present.dev_name_len = strlen(dev_name);
2828 req->dev_name = malloc(req->_present.dev_name_len + 1);
2829 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
2830 req->dev_name[req->_present.dev_name_len] = 0;
2831}
2832static inline void
2833devlink_region_new_req_set_port_index(struct devlink_region_new_req *req,
2834 __u32 port_index)
2835{
2836 req->_present.port_index = 1;
2837 req->port_index = port_index;
2838}
2839static inline void
2840devlink_region_new_req_set_region_name(struct devlink_region_new_req *req,
2841 const char *region_name)
2842{
2843 free(req->region_name);
2844 req->_present.region_name_len = strlen(region_name);
2845 req->region_name = malloc(req->_present.region_name_len + 1);
2846 memcpy(req->region_name, region_name, req->_present.region_name_len);
2847 req->region_name[req->_present.region_name_len] = 0;
2848}
2849static inline void
2850devlink_region_new_req_set_region_snapshot_id(struct devlink_region_new_req *req,
2851 __u32 region_snapshot_id)
2852{
2853 req->_present.region_snapshot_id = 1;
2854 req->region_snapshot_id = region_snapshot_id;
2855}
2856
2857struct devlink_region_new_rsp {
2858 struct {
2859 __u32 bus_name_len;
2860 __u32 dev_name_len;
2861 __u32 port_index:1;
2862 __u32 region_name_len;
2863 __u32 region_snapshot_id:1;
2864 } _present;
2865
2866 char *bus_name;
2867 char *dev_name;
2868 __u32 port_index;
2869 char *region_name;
2870 __u32 region_snapshot_id;
2871};
2872
2873void devlink_region_new_rsp_free(struct devlink_region_new_rsp *rsp);
2874
2875/*
2876 * Create region snapshot.
2877 */
2878struct devlink_region_new_rsp *
2879devlink_region_new(struct ynl_sock *ys, struct devlink_region_new_req *req);
2880
2881/* ============== DEVLINK_CMD_REGION_DEL ============== */
2882/* DEVLINK_CMD_REGION_DEL - do */
2883struct devlink_region_del_req {
2884 struct {
2885 __u32 bus_name_len;
2886 __u32 dev_name_len;
2887 __u32 port_index:1;
2888 __u32 region_name_len;
2889 __u32 region_snapshot_id:1;
2890 } _present;
2891
2892 char *bus_name;
2893 char *dev_name;
2894 __u32 port_index;
2895 char *region_name;
2896 __u32 region_snapshot_id;
2897};
2898
2899static inline struct devlink_region_del_req *devlink_region_del_req_alloc(void)
2900{
2901 return calloc(1, sizeof(struct devlink_region_del_req));
2902}
2903void devlink_region_del_req_free(struct devlink_region_del_req *req);
2904
2905static inline void
2906devlink_region_del_req_set_bus_name(struct devlink_region_del_req *req,
2907 const char *bus_name)
2908{
2909 free(req->bus_name);
2910 req->_present.bus_name_len = strlen(bus_name);
2911 req->bus_name = malloc(req->_present.bus_name_len + 1);
2912 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2913 req->bus_name[req->_present.bus_name_len] = 0;
2914}
2915static inline void
2916devlink_region_del_req_set_dev_name(struct devlink_region_del_req *req,
2917 const char *dev_name)
2918{
2919 free(req->dev_name);
2920 req->_present.dev_name_len = strlen(dev_name);
2921 req->dev_name = malloc(req->_present.dev_name_len + 1);
2922 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
2923 req->dev_name[req->_present.dev_name_len] = 0;
2924}
2925static inline void
2926devlink_region_del_req_set_port_index(struct devlink_region_del_req *req,
2927 __u32 port_index)
2928{
2929 req->_present.port_index = 1;
2930 req->port_index = port_index;
2931}
2932static inline void
2933devlink_region_del_req_set_region_name(struct devlink_region_del_req *req,
2934 const char *region_name)
2935{
2936 free(req->region_name);
2937 req->_present.region_name_len = strlen(region_name);
2938 req->region_name = malloc(req->_present.region_name_len + 1);
2939 memcpy(req->region_name, region_name, req->_present.region_name_len);
2940 req->region_name[req->_present.region_name_len] = 0;
2941}
2942static inline void
2943devlink_region_del_req_set_region_snapshot_id(struct devlink_region_del_req *req,
2944 __u32 region_snapshot_id)
2945{
2946 req->_present.region_snapshot_id = 1;
2947 req->region_snapshot_id = region_snapshot_id;
2948}
2949
2950/*
2951 * Delete region snapshot.
2952 */
2953int devlink_region_del(struct ynl_sock *ys, struct devlink_region_del_req *req);
2954
2955/* ============== DEVLINK_CMD_REGION_READ ============== */
2956/* DEVLINK_CMD_REGION_READ - dump */
2957struct devlink_region_read_req_dump {
2958 struct {
2959 __u32 bus_name_len;
2960 __u32 dev_name_len;
2961 __u32 port_index:1;
2962 __u32 region_name_len;
2963 __u32 region_snapshot_id:1;
2964 __u32 region_direct:1;
2965 __u32 region_chunk_addr:1;
2966 __u32 region_chunk_len:1;
2967 } _present;
2968
2969 char *bus_name;
2970 char *dev_name;
2971 __u32 port_index;
2972 char *region_name;
2973 __u32 region_snapshot_id;
2974 __u64 region_chunk_addr;
2975 __u64 region_chunk_len;
2976};
2977
2978static inline struct devlink_region_read_req_dump *
2979devlink_region_read_req_dump_alloc(void)
2980{
2981 return calloc(1, sizeof(struct devlink_region_read_req_dump));
2982}
2983void
2984devlink_region_read_req_dump_free(struct devlink_region_read_req_dump *req);
2985
2986static inline void
2987devlink_region_read_req_dump_set_bus_name(struct devlink_region_read_req_dump *req,
2988 const char *bus_name)
2989{
2990 free(req->bus_name);
2991 req->_present.bus_name_len = strlen(bus_name);
2992 req->bus_name = malloc(req->_present.bus_name_len + 1);
2993 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
2994 req->bus_name[req->_present.bus_name_len] = 0;
2995}
2996static inline void
2997devlink_region_read_req_dump_set_dev_name(struct devlink_region_read_req_dump *req,
2998 const char *dev_name)
2999{
3000 free(req->dev_name);
3001 req->_present.dev_name_len = strlen(dev_name);
3002 req->dev_name = malloc(req->_present.dev_name_len + 1);
3003 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
3004 req->dev_name[req->_present.dev_name_len] = 0;
3005}
3006static inline void
3007devlink_region_read_req_dump_set_port_index(struct devlink_region_read_req_dump *req,
3008 __u32 port_index)
3009{
3010 req->_present.port_index = 1;
3011 req->port_index = port_index;
3012}
3013static inline void
3014devlink_region_read_req_dump_set_region_name(struct devlink_region_read_req_dump *req,
3015 const char *region_name)
3016{
3017 free(req->region_name);
3018 req->_present.region_name_len = strlen(region_name);
3019 req->region_name = malloc(req->_present.region_name_len + 1);
3020 memcpy(req->region_name, region_name, req->_present.region_name_len);
3021 req->region_name[req->_present.region_name_len] = 0;
3022}
3023static inline void
3024devlink_region_read_req_dump_set_region_snapshot_id(struct devlink_region_read_req_dump *req,
3025 __u32 region_snapshot_id)
3026{
3027 req->_present.region_snapshot_id = 1;
3028 req->region_snapshot_id = region_snapshot_id;
3029}
3030static inline void
3031devlink_region_read_req_dump_set_region_direct(struct devlink_region_read_req_dump *req)
3032{
3033 req->_present.region_direct = 1;
3034}
3035static inline void
3036devlink_region_read_req_dump_set_region_chunk_addr(struct devlink_region_read_req_dump *req,
3037 __u64 region_chunk_addr)
3038{
3039 req->_present.region_chunk_addr = 1;
3040 req->region_chunk_addr = region_chunk_addr;
3041}
3042static inline void
3043devlink_region_read_req_dump_set_region_chunk_len(struct devlink_region_read_req_dump *req,
3044 __u64 region_chunk_len)
3045{
3046 req->_present.region_chunk_len = 1;
3047 req->region_chunk_len = region_chunk_len;
3048}
3049
3050struct devlink_region_read_rsp_dump {
3051 struct {
3052 __u32 bus_name_len;
3053 __u32 dev_name_len;
3054 __u32 port_index:1;
3055 __u32 region_name_len;
3056 } _present;
3057
3058 char *bus_name;
3059 char *dev_name;
3060 __u32 port_index;
3061 char *region_name;
3062};
3063
3064struct devlink_region_read_rsp_list {
3065 struct devlink_region_read_rsp_list *next;
3066 struct devlink_region_read_rsp_dump obj __attribute__((aligned(8)));
3067};
3068
3069void
3070devlink_region_read_rsp_list_free(struct devlink_region_read_rsp_list *rsp);
3071
3072struct devlink_region_read_rsp_list *
3073devlink_region_read_dump(struct ynl_sock *ys,
3074 struct devlink_region_read_req_dump *req);
3075
3076/* ============== DEVLINK_CMD_PORT_PARAM_GET ============== */
3077/* DEVLINK_CMD_PORT_PARAM_GET - do */
3078struct devlink_port_param_get_req {
3079 struct {
3080 __u32 bus_name_len;
3081 __u32 dev_name_len;
3082 __u32 port_index:1;
3083 } _present;
3084
3085 char *bus_name;
3086 char *dev_name;
3087 __u32 port_index;
3088};
3089
3090static inline struct devlink_port_param_get_req *
3091devlink_port_param_get_req_alloc(void)
3092{
3093 return calloc(1, sizeof(struct devlink_port_param_get_req));
3094}
3095void devlink_port_param_get_req_free(struct devlink_port_param_get_req *req);
3096
3097static inline void
3098devlink_port_param_get_req_set_bus_name(struct devlink_port_param_get_req *req,
3099 const char *bus_name)
3100{
3101 free(req->bus_name);
3102 req->_present.bus_name_len = strlen(bus_name);
3103 req->bus_name = malloc(req->_present.bus_name_len + 1);
3104 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
3105 req->bus_name[req->_present.bus_name_len] = 0;
3106}
3107static inline void
3108devlink_port_param_get_req_set_dev_name(struct devlink_port_param_get_req *req,
3109 const char *dev_name)
3110{
3111 free(req->dev_name);
3112 req->_present.dev_name_len = strlen(dev_name);
3113 req->dev_name = malloc(req->_present.dev_name_len + 1);
3114 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
3115 req->dev_name[req->_present.dev_name_len] = 0;
3116}
3117static inline void
3118devlink_port_param_get_req_set_port_index(struct devlink_port_param_get_req *req,
3119 __u32 port_index)
3120{
3121 req->_present.port_index = 1;
3122 req->port_index = port_index;
3123}
3124
3125struct devlink_port_param_get_rsp {
3126 struct {
3127 __u32 bus_name_len;
3128 __u32 dev_name_len;
3129 __u32 port_index:1;
3130 } _present;
3131
3132 char *bus_name;
3133 char *dev_name;
3134 __u32 port_index;
3135};
3136
3137void devlink_port_param_get_rsp_free(struct devlink_port_param_get_rsp *rsp);
3138
3139/*
3140 * Get port param instances.
3141 */
3142struct devlink_port_param_get_rsp *
3143devlink_port_param_get(struct ynl_sock *ys,
3144 struct devlink_port_param_get_req *req);
3145
3146/* DEVLINK_CMD_PORT_PARAM_GET - dump */
3147struct devlink_port_param_get_list {
3148 struct devlink_port_param_get_list *next;
3149 struct devlink_port_param_get_rsp obj __attribute__((aligned(8)));
3150};
3151
3152void devlink_port_param_get_list_free(struct devlink_port_param_get_list *rsp);
3153
3154struct devlink_port_param_get_list *
3155devlink_port_param_get_dump(struct ynl_sock *ys);
3156
3157/* ============== DEVLINK_CMD_PORT_PARAM_SET ============== */
3158/* DEVLINK_CMD_PORT_PARAM_SET - do */
3159struct devlink_port_param_set_req {
3160 struct {
3161 __u32 bus_name_len;
3162 __u32 dev_name_len;
3163 __u32 port_index:1;
3164 } _present;
3165
3166 char *bus_name;
3167 char *dev_name;
3168 __u32 port_index;
3169};
3170
3171static inline struct devlink_port_param_set_req *
3172devlink_port_param_set_req_alloc(void)
3173{
3174 return calloc(1, sizeof(struct devlink_port_param_set_req));
3175}
3176void devlink_port_param_set_req_free(struct devlink_port_param_set_req *req);
3177
3178static inline void
3179devlink_port_param_set_req_set_bus_name(struct devlink_port_param_set_req *req,
3180 const char *bus_name)
3181{
3182 free(req->bus_name);
3183 req->_present.bus_name_len = strlen(bus_name);
3184 req->bus_name = malloc(req->_present.bus_name_len + 1);
3185 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
3186 req->bus_name[req->_present.bus_name_len] = 0;
3187}
3188static inline void
3189devlink_port_param_set_req_set_dev_name(struct devlink_port_param_set_req *req,
3190 const char *dev_name)
3191{
3192 free(req->dev_name);
3193 req->_present.dev_name_len = strlen(dev_name);
3194 req->dev_name = malloc(req->_present.dev_name_len + 1);
3195 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
3196 req->dev_name[req->_present.dev_name_len] = 0;
3197}
3198static inline void
3199devlink_port_param_set_req_set_port_index(struct devlink_port_param_set_req *req,
3200 __u32 port_index)
3201{
3202 req->_present.port_index = 1;
3203 req->port_index = port_index;
3204}
3205
3206/*
3207 * Set port param instances.
3208 */
3209int devlink_port_param_set(struct ynl_sock *ys,
3210 struct devlink_port_param_set_req *req);
3211
3212/* ============== DEVLINK_CMD_INFO_GET ============== */
3213/* DEVLINK_CMD_INFO_GET - do */
3214struct devlink_info_get_req {
3215 struct {
3216 __u32 bus_name_len;
3217 __u32 dev_name_len;
3218 } _present;
3219
3220 char *bus_name;
3221 char *dev_name;
3222};
3223
3224static inline struct devlink_info_get_req *devlink_info_get_req_alloc(void)
3225{
3226 return calloc(1, sizeof(struct devlink_info_get_req));
3227}
3228void devlink_info_get_req_free(struct devlink_info_get_req *req);
3229
3230static inline void
3231devlink_info_get_req_set_bus_name(struct devlink_info_get_req *req,
3232 const char *bus_name)
3233{
3234 free(req->bus_name);
3235 req->_present.bus_name_len = strlen(bus_name);
3236 req->bus_name = malloc(req->_present.bus_name_len + 1);
3237 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
3238 req->bus_name[req->_present.bus_name_len] = 0;
3239}
3240static inline void
3241devlink_info_get_req_set_dev_name(struct devlink_info_get_req *req,
3242 const char *dev_name)
3243{
3244 free(req->dev_name);
3245 req->_present.dev_name_len = strlen(dev_name);
3246 req->dev_name = malloc(req->_present.dev_name_len + 1);
3247 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
3248 req->dev_name[req->_present.dev_name_len] = 0;
3249}
3250
3251struct devlink_info_get_rsp {
3252 struct {
3253 __u32 bus_name_len;
3254 __u32 dev_name_len;
3255 __u32 info_driver_name_len;
3256 __u32 info_serial_number_len;
3257 } _present;
3258
3259 char *bus_name;
3260 char *dev_name;
3261 char *info_driver_name;
3262 char *info_serial_number;
3263 unsigned int n_info_version_fixed;
3264 struct devlink_dl_info_version *info_version_fixed;
3265 unsigned int n_info_version_running;
3266 struct devlink_dl_info_version *info_version_running;
3267 unsigned int n_info_version_stored;
3268 struct devlink_dl_info_version *info_version_stored;
3269};
3270
3271void devlink_info_get_rsp_free(struct devlink_info_get_rsp *rsp);
3272
3273/*
3274 * Get device information, like driver name, hardware and firmware versions etc.
3275 */
3276struct devlink_info_get_rsp *
3277devlink_info_get(struct ynl_sock *ys, struct devlink_info_get_req *req);
3278
3279/* DEVLINK_CMD_INFO_GET - dump */
3280struct devlink_info_get_list {
3281 struct devlink_info_get_list *next;
3282 struct devlink_info_get_rsp obj __attribute__((aligned(8)));
3283};
3284
3285void devlink_info_get_list_free(struct devlink_info_get_list *rsp);
3286
3287struct devlink_info_get_list *devlink_info_get_dump(struct ynl_sock *ys);
3288
3289/* ============== DEVLINK_CMD_HEALTH_REPORTER_GET ============== */
3290/* DEVLINK_CMD_HEALTH_REPORTER_GET - do */
3291struct devlink_health_reporter_get_req {
3292 struct {
3293 __u32 bus_name_len;
3294 __u32 dev_name_len;
3295 __u32 port_index:1;
3296 __u32 health_reporter_name_len;
3297 } _present;
3298
3299 char *bus_name;
3300 char *dev_name;
3301 __u32 port_index;
3302 char *health_reporter_name;
3303};
3304
3305static inline struct devlink_health_reporter_get_req *
3306devlink_health_reporter_get_req_alloc(void)
3307{
3308 return calloc(1, sizeof(struct devlink_health_reporter_get_req));
3309}
3310void
3311devlink_health_reporter_get_req_free(struct devlink_health_reporter_get_req *req);
3312
3313static inline void
3314devlink_health_reporter_get_req_set_bus_name(struct devlink_health_reporter_get_req *req,
3315 const char *bus_name)
3316{
3317 free(req->bus_name);
3318 req->_present.bus_name_len = strlen(bus_name);
3319 req->bus_name = malloc(req->_present.bus_name_len + 1);
3320 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
3321 req->bus_name[req->_present.bus_name_len] = 0;
3322}
3323static inline void
3324devlink_health_reporter_get_req_set_dev_name(struct devlink_health_reporter_get_req *req,
3325 const char *dev_name)
3326{
3327 free(req->dev_name);
3328 req->_present.dev_name_len = strlen(dev_name);
3329 req->dev_name = malloc(req->_present.dev_name_len + 1);
3330 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
3331 req->dev_name[req->_present.dev_name_len] = 0;
3332}
3333static inline void
3334devlink_health_reporter_get_req_set_port_index(struct devlink_health_reporter_get_req *req,
3335 __u32 port_index)
3336{
3337 req->_present.port_index = 1;
3338 req->port_index = port_index;
3339}
3340static inline void
3341devlink_health_reporter_get_req_set_health_reporter_name(struct devlink_health_reporter_get_req *req,
3342 const char *health_reporter_name)
3343{
3344 free(req->health_reporter_name);
3345 req->_present.health_reporter_name_len = strlen(health_reporter_name);
3346 req->health_reporter_name = malloc(req->_present.health_reporter_name_len + 1);
3347 memcpy(req->health_reporter_name, health_reporter_name, req->_present.health_reporter_name_len);
3348 req->health_reporter_name[req->_present.health_reporter_name_len] = 0;
3349}
3350
3351struct devlink_health_reporter_get_rsp {
3352 struct {
3353 __u32 bus_name_len;
3354 __u32 dev_name_len;
3355 __u32 port_index:1;
3356 __u32 health_reporter_name_len;
3357 } _present;
3358
3359 char *bus_name;
3360 char *dev_name;
3361 __u32 port_index;
3362 char *health_reporter_name;
3363};
3364
3365void
3366devlink_health_reporter_get_rsp_free(struct devlink_health_reporter_get_rsp *rsp);
3367
3368/*
3369 * Get health reporter instances.
3370 */
3371struct devlink_health_reporter_get_rsp *
3372devlink_health_reporter_get(struct ynl_sock *ys,
3373 struct devlink_health_reporter_get_req *req);
3374
3375/* DEVLINK_CMD_HEALTH_REPORTER_GET - dump */
3376struct devlink_health_reporter_get_req_dump {
3377 struct {
3378 __u32 bus_name_len;
3379 __u32 dev_name_len;
3380 __u32 port_index:1;
3381 } _present;
3382
3383 char *bus_name;
3384 char *dev_name;
3385 __u32 port_index;
3386};
3387
3388static inline struct devlink_health_reporter_get_req_dump *
3389devlink_health_reporter_get_req_dump_alloc(void)
3390{
3391 return calloc(1, sizeof(struct devlink_health_reporter_get_req_dump));
3392}
3393void
3394devlink_health_reporter_get_req_dump_free(struct devlink_health_reporter_get_req_dump *req);
3395
3396static inline void
3397devlink_health_reporter_get_req_dump_set_bus_name(struct devlink_health_reporter_get_req_dump *req,
3398 const char *bus_name)
3399{
3400 free(req->bus_name);
3401 req->_present.bus_name_len = strlen(bus_name);
3402 req->bus_name = malloc(req->_present.bus_name_len + 1);
3403 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
3404 req->bus_name[req->_present.bus_name_len] = 0;
3405}
3406static inline void
3407devlink_health_reporter_get_req_dump_set_dev_name(struct devlink_health_reporter_get_req_dump *req,
3408 const char *dev_name)
3409{
3410 free(req->dev_name);
3411 req->_present.dev_name_len = strlen(dev_name);
3412 req->dev_name = malloc(req->_present.dev_name_len + 1);
3413 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
3414 req->dev_name[req->_present.dev_name_len] = 0;
3415}
3416static inline void
3417devlink_health_reporter_get_req_dump_set_port_index(struct devlink_health_reporter_get_req_dump *req,
3418 __u32 port_index)
3419{
3420 req->_present.port_index = 1;
3421 req->port_index = port_index;
3422}
3423
3424struct devlink_health_reporter_get_list {
3425 struct devlink_health_reporter_get_list *next;
3426 struct devlink_health_reporter_get_rsp obj __attribute__((aligned(8)));
3427};
3428
3429void
3430devlink_health_reporter_get_list_free(struct devlink_health_reporter_get_list *rsp);
3431
3432struct devlink_health_reporter_get_list *
3433devlink_health_reporter_get_dump(struct ynl_sock *ys,
3434 struct devlink_health_reporter_get_req_dump *req);
3435
3436/* ============== DEVLINK_CMD_HEALTH_REPORTER_SET ============== */
3437/* DEVLINK_CMD_HEALTH_REPORTER_SET - do */
3438struct devlink_health_reporter_set_req {
3439 struct {
3440 __u32 bus_name_len;
3441 __u32 dev_name_len;
3442 __u32 port_index:1;
3443 __u32 health_reporter_name_len;
3444 __u32 health_reporter_graceful_period:1;
3445 __u32 health_reporter_auto_recover:1;
3446 __u32 health_reporter_auto_dump:1;
3447 } _present;
3448
3449 char *bus_name;
3450 char *dev_name;
3451 __u32 port_index;
3452 char *health_reporter_name;
3453 __u64 health_reporter_graceful_period;
3454 __u8 health_reporter_auto_recover;
3455 __u8 health_reporter_auto_dump;
3456};
3457
3458static inline struct devlink_health_reporter_set_req *
3459devlink_health_reporter_set_req_alloc(void)
3460{
3461 return calloc(1, sizeof(struct devlink_health_reporter_set_req));
3462}
3463void
3464devlink_health_reporter_set_req_free(struct devlink_health_reporter_set_req *req);
3465
3466static inline void
3467devlink_health_reporter_set_req_set_bus_name(struct devlink_health_reporter_set_req *req,
3468 const char *bus_name)
3469{
3470 free(req->bus_name);
3471 req->_present.bus_name_len = strlen(bus_name);
3472 req->bus_name = malloc(req->_present.bus_name_len + 1);
3473 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
3474 req->bus_name[req->_present.bus_name_len] = 0;
3475}
3476static inline void
3477devlink_health_reporter_set_req_set_dev_name(struct devlink_health_reporter_set_req *req,
3478 const char *dev_name)
3479{
3480 free(req->dev_name);
3481 req->_present.dev_name_len = strlen(dev_name);
3482 req->dev_name = malloc(req->_present.dev_name_len + 1);
3483 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
3484 req->dev_name[req->_present.dev_name_len] = 0;
3485}
3486static inline void
3487devlink_health_reporter_set_req_set_port_index(struct devlink_health_reporter_set_req *req,
3488 __u32 port_index)
3489{
3490 req->_present.port_index = 1;
3491 req->port_index = port_index;
3492}
3493static inline void
3494devlink_health_reporter_set_req_set_health_reporter_name(struct devlink_health_reporter_set_req *req,
3495 const char *health_reporter_name)
3496{
3497 free(req->health_reporter_name);
3498 req->_present.health_reporter_name_len = strlen(health_reporter_name);
3499 req->health_reporter_name = malloc(req->_present.health_reporter_name_len + 1);
3500 memcpy(req->health_reporter_name, health_reporter_name, req->_present.health_reporter_name_len);
3501 req->health_reporter_name[req->_present.health_reporter_name_len] = 0;
3502}
3503static inline void
3504devlink_health_reporter_set_req_set_health_reporter_graceful_period(struct devlink_health_reporter_set_req *req,
3505 __u64 health_reporter_graceful_period)
3506{
3507 req->_present.health_reporter_graceful_period = 1;
3508 req->health_reporter_graceful_period = health_reporter_graceful_period;
3509}
3510static inline void
3511devlink_health_reporter_set_req_set_health_reporter_auto_recover(struct devlink_health_reporter_set_req *req,
3512 __u8 health_reporter_auto_recover)
3513{
3514 req->_present.health_reporter_auto_recover = 1;
3515 req->health_reporter_auto_recover = health_reporter_auto_recover;
3516}
3517static inline void
3518devlink_health_reporter_set_req_set_health_reporter_auto_dump(struct devlink_health_reporter_set_req *req,
3519 __u8 health_reporter_auto_dump)
3520{
3521 req->_present.health_reporter_auto_dump = 1;
3522 req->health_reporter_auto_dump = health_reporter_auto_dump;
3523}
3524
3525/*
3526 * Set health reporter instances.
3527 */
3528int devlink_health_reporter_set(struct ynl_sock *ys,
3529 struct devlink_health_reporter_set_req *req);
3530
3531/* ============== DEVLINK_CMD_HEALTH_REPORTER_RECOVER ============== */
3532/* DEVLINK_CMD_HEALTH_REPORTER_RECOVER - do */
3533struct devlink_health_reporter_recover_req {
3534 struct {
3535 __u32 bus_name_len;
3536 __u32 dev_name_len;
3537 __u32 port_index:1;
3538 __u32 health_reporter_name_len;
3539 } _present;
3540
3541 char *bus_name;
3542 char *dev_name;
3543 __u32 port_index;
3544 char *health_reporter_name;
3545};
3546
3547static inline struct devlink_health_reporter_recover_req *
3548devlink_health_reporter_recover_req_alloc(void)
3549{
3550 return calloc(1, sizeof(struct devlink_health_reporter_recover_req));
3551}
3552void
3553devlink_health_reporter_recover_req_free(struct devlink_health_reporter_recover_req *req);
3554
3555static inline void
3556devlink_health_reporter_recover_req_set_bus_name(struct devlink_health_reporter_recover_req *req,
3557 const char *bus_name)
3558{
3559 free(req->bus_name);
3560 req->_present.bus_name_len = strlen(bus_name);
3561 req->bus_name = malloc(req->_present.bus_name_len + 1);
3562 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
3563 req->bus_name[req->_present.bus_name_len] = 0;
3564}
3565static inline void
3566devlink_health_reporter_recover_req_set_dev_name(struct devlink_health_reporter_recover_req *req,
3567 const char *dev_name)
3568{
3569 free(req->dev_name);
3570 req->_present.dev_name_len = strlen(dev_name);
3571 req->dev_name = malloc(req->_present.dev_name_len + 1);
3572 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
3573 req->dev_name[req->_present.dev_name_len] = 0;
3574}
3575static inline void
3576devlink_health_reporter_recover_req_set_port_index(struct devlink_health_reporter_recover_req *req,
3577 __u32 port_index)
3578{
3579 req->_present.port_index = 1;
3580 req->port_index = port_index;
3581}
3582static inline void
3583devlink_health_reporter_recover_req_set_health_reporter_name(struct devlink_health_reporter_recover_req *req,
3584 const char *health_reporter_name)
3585{
3586 free(req->health_reporter_name);
3587 req->_present.health_reporter_name_len = strlen(health_reporter_name);
3588 req->health_reporter_name = malloc(req->_present.health_reporter_name_len + 1);
3589 memcpy(req->health_reporter_name, health_reporter_name, req->_present.health_reporter_name_len);
3590 req->health_reporter_name[req->_present.health_reporter_name_len] = 0;
3591}
3592
3593/*
3594 * Recover health reporter instances.
3595 */
3596int devlink_health_reporter_recover(struct ynl_sock *ys,
3597 struct devlink_health_reporter_recover_req *req);
3598
3599/* ============== DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE ============== */
3600/* DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE - do */
3601struct devlink_health_reporter_diagnose_req {
3602 struct {
3603 __u32 bus_name_len;
3604 __u32 dev_name_len;
3605 __u32 port_index:1;
3606 __u32 health_reporter_name_len;
3607 } _present;
3608
3609 char *bus_name;
3610 char *dev_name;
3611 __u32 port_index;
3612 char *health_reporter_name;
3613};
3614
3615static inline struct devlink_health_reporter_diagnose_req *
3616devlink_health_reporter_diagnose_req_alloc(void)
3617{
3618 return calloc(1, sizeof(struct devlink_health_reporter_diagnose_req));
3619}
3620void
3621devlink_health_reporter_diagnose_req_free(struct devlink_health_reporter_diagnose_req *req);
3622
3623static inline void
3624devlink_health_reporter_diagnose_req_set_bus_name(struct devlink_health_reporter_diagnose_req *req,
3625 const char *bus_name)
3626{
3627 free(req->bus_name);
3628 req->_present.bus_name_len = strlen(bus_name);
3629 req->bus_name = malloc(req->_present.bus_name_len + 1);
3630 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
3631 req->bus_name[req->_present.bus_name_len] = 0;
3632}
3633static inline void
3634devlink_health_reporter_diagnose_req_set_dev_name(struct devlink_health_reporter_diagnose_req *req,
3635 const char *dev_name)
3636{
3637 free(req->dev_name);
3638 req->_present.dev_name_len = strlen(dev_name);
3639 req->dev_name = malloc(req->_present.dev_name_len + 1);
3640 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
3641 req->dev_name[req->_present.dev_name_len] = 0;
3642}
3643static inline void
3644devlink_health_reporter_diagnose_req_set_port_index(struct devlink_health_reporter_diagnose_req *req,
3645 __u32 port_index)
3646{
3647 req->_present.port_index = 1;
3648 req->port_index = port_index;
3649}
3650static inline void
3651devlink_health_reporter_diagnose_req_set_health_reporter_name(struct devlink_health_reporter_diagnose_req *req,
3652 const char *health_reporter_name)
3653{
3654 free(req->health_reporter_name);
3655 req->_present.health_reporter_name_len = strlen(health_reporter_name);
3656 req->health_reporter_name = malloc(req->_present.health_reporter_name_len + 1);
3657 memcpy(req->health_reporter_name, health_reporter_name, req->_present.health_reporter_name_len);
3658 req->health_reporter_name[req->_present.health_reporter_name_len] = 0;
3659}
3660
3661/*
3662 * Diagnose health reporter instances.
3663 */
3664int devlink_health_reporter_diagnose(struct ynl_sock *ys,
3665 struct devlink_health_reporter_diagnose_req *req);
3666
3667/* ============== DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET ============== */
3668/* DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET - dump */
3669struct devlink_health_reporter_dump_get_req_dump {
3670 struct {
3671 __u32 bus_name_len;
3672 __u32 dev_name_len;
3673 __u32 port_index:1;
3674 __u32 health_reporter_name_len;
3675 } _present;
3676
3677 char *bus_name;
3678 char *dev_name;
3679 __u32 port_index;
3680 char *health_reporter_name;
3681};
3682
3683static inline struct devlink_health_reporter_dump_get_req_dump *
3684devlink_health_reporter_dump_get_req_dump_alloc(void)
3685{
3686 return calloc(1, sizeof(struct devlink_health_reporter_dump_get_req_dump));
3687}
3688void
3689devlink_health_reporter_dump_get_req_dump_free(struct devlink_health_reporter_dump_get_req_dump *req);
3690
3691static inline void
3692devlink_health_reporter_dump_get_req_dump_set_bus_name(struct devlink_health_reporter_dump_get_req_dump *req,
3693 const char *bus_name)
3694{
3695 free(req->bus_name);
3696 req->_present.bus_name_len = strlen(bus_name);
3697 req->bus_name = malloc(req->_present.bus_name_len + 1);
3698 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
3699 req->bus_name[req->_present.bus_name_len] = 0;
3700}
3701static inline void
3702devlink_health_reporter_dump_get_req_dump_set_dev_name(struct devlink_health_reporter_dump_get_req_dump *req,
3703 const char *dev_name)
3704{
3705 free(req->dev_name);
3706 req->_present.dev_name_len = strlen(dev_name);
3707 req->dev_name = malloc(req->_present.dev_name_len + 1);
3708 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
3709 req->dev_name[req->_present.dev_name_len] = 0;
3710}
3711static inline void
3712devlink_health_reporter_dump_get_req_dump_set_port_index(struct devlink_health_reporter_dump_get_req_dump *req,
3713 __u32 port_index)
3714{
3715 req->_present.port_index = 1;
3716 req->port_index = port_index;
3717}
3718static inline void
3719devlink_health_reporter_dump_get_req_dump_set_health_reporter_name(struct devlink_health_reporter_dump_get_req_dump *req,
3720 const char *health_reporter_name)
3721{
3722 free(req->health_reporter_name);
3723 req->_present.health_reporter_name_len = strlen(health_reporter_name);
3724 req->health_reporter_name = malloc(req->_present.health_reporter_name_len + 1);
3725 memcpy(req->health_reporter_name, health_reporter_name, req->_present.health_reporter_name_len);
3726 req->health_reporter_name[req->_present.health_reporter_name_len] = 0;
3727}
3728
3729struct devlink_health_reporter_dump_get_rsp_dump {
3730 struct {
3731 __u32 fmsg:1;
3732 } _present;
3733
3734 struct devlink_dl_fmsg fmsg;
3735};
3736
3737struct devlink_health_reporter_dump_get_rsp_list {
3738 struct devlink_health_reporter_dump_get_rsp_list *next;
3739 struct devlink_health_reporter_dump_get_rsp_dump obj __attribute__((aligned(8)));
3740};
3741
3742void
3743devlink_health_reporter_dump_get_rsp_list_free(struct devlink_health_reporter_dump_get_rsp_list *rsp);
3744
3745struct devlink_health_reporter_dump_get_rsp_list *
3746devlink_health_reporter_dump_get_dump(struct ynl_sock *ys,
3747 struct devlink_health_reporter_dump_get_req_dump *req);
3748
3749/* ============== DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR ============== */
3750/* DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR - do */
3751struct devlink_health_reporter_dump_clear_req {
3752 struct {
3753 __u32 bus_name_len;
3754 __u32 dev_name_len;
3755 __u32 port_index:1;
3756 __u32 health_reporter_name_len;
3757 } _present;
3758
3759 char *bus_name;
3760 char *dev_name;
3761 __u32 port_index;
3762 char *health_reporter_name;
3763};
3764
3765static inline struct devlink_health_reporter_dump_clear_req *
3766devlink_health_reporter_dump_clear_req_alloc(void)
3767{
3768 return calloc(1, sizeof(struct devlink_health_reporter_dump_clear_req));
3769}
3770void
3771devlink_health_reporter_dump_clear_req_free(struct devlink_health_reporter_dump_clear_req *req);
3772
3773static inline void
3774devlink_health_reporter_dump_clear_req_set_bus_name(struct devlink_health_reporter_dump_clear_req *req,
3775 const char *bus_name)
3776{
3777 free(req->bus_name);
3778 req->_present.bus_name_len = strlen(bus_name);
3779 req->bus_name = malloc(req->_present.bus_name_len + 1);
3780 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
3781 req->bus_name[req->_present.bus_name_len] = 0;
3782}
3783static inline void
3784devlink_health_reporter_dump_clear_req_set_dev_name(struct devlink_health_reporter_dump_clear_req *req,
3785 const char *dev_name)
3786{
3787 free(req->dev_name);
3788 req->_present.dev_name_len = strlen(dev_name);
3789 req->dev_name = malloc(req->_present.dev_name_len + 1);
3790 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
3791 req->dev_name[req->_present.dev_name_len] = 0;
3792}
3793static inline void
3794devlink_health_reporter_dump_clear_req_set_port_index(struct devlink_health_reporter_dump_clear_req *req,
3795 __u32 port_index)
3796{
3797 req->_present.port_index = 1;
3798 req->port_index = port_index;
3799}
3800static inline void
3801devlink_health_reporter_dump_clear_req_set_health_reporter_name(struct devlink_health_reporter_dump_clear_req *req,
3802 const char *health_reporter_name)
3803{
3804 free(req->health_reporter_name);
3805 req->_present.health_reporter_name_len = strlen(health_reporter_name);
3806 req->health_reporter_name = malloc(req->_present.health_reporter_name_len + 1);
3807 memcpy(req->health_reporter_name, health_reporter_name, req->_present.health_reporter_name_len);
3808 req->health_reporter_name[req->_present.health_reporter_name_len] = 0;
3809}
3810
3811/*
3812 * Clear dump of health reporter instances.
3813 */
3814int devlink_health_reporter_dump_clear(struct ynl_sock *ys,
3815 struct devlink_health_reporter_dump_clear_req *req);
3816
3817/* ============== DEVLINK_CMD_FLASH_UPDATE ============== */
3818/* DEVLINK_CMD_FLASH_UPDATE - do */
3819struct devlink_flash_update_req {
3820 struct {
3821 __u32 bus_name_len;
3822 __u32 dev_name_len;
3823 __u32 flash_update_file_name_len;
3824 __u32 flash_update_component_len;
3825 __u32 flash_update_overwrite_mask:1;
3826 } _present;
3827
3828 char *bus_name;
3829 char *dev_name;
3830 char *flash_update_file_name;
3831 char *flash_update_component;
3832 struct nla_bitfield32 flash_update_overwrite_mask;
3833};
3834
3835static inline struct devlink_flash_update_req *
3836devlink_flash_update_req_alloc(void)
3837{
3838 return calloc(1, sizeof(struct devlink_flash_update_req));
3839}
3840void devlink_flash_update_req_free(struct devlink_flash_update_req *req);
3841
3842static inline void
3843devlink_flash_update_req_set_bus_name(struct devlink_flash_update_req *req,
3844 const char *bus_name)
3845{
3846 free(req->bus_name);
3847 req->_present.bus_name_len = strlen(bus_name);
3848 req->bus_name = malloc(req->_present.bus_name_len + 1);
3849 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
3850 req->bus_name[req->_present.bus_name_len] = 0;
3851}
3852static inline void
3853devlink_flash_update_req_set_dev_name(struct devlink_flash_update_req *req,
3854 const char *dev_name)
3855{
3856 free(req->dev_name);
3857 req->_present.dev_name_len = strlen(dev_name);
3858 req->dev_name = malloc(req->_present.dev_name_len + 1);
3859 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
3860 req->dev_name[req->_present.dev_name_len] = 0;
3861}
3862static inline void
3863devlink_flash_update_req_set_flash_update_file_name(struct devlink_flash_update_req *req,
3864 const char *flash_update_file_name)
3865{
3866 free(req->flash_update_file_name);
3867 req->_present.flash_update_file_name_len = strlen(flash_update_file_name);
3868 req->flash_update_file_name = malloc(req->_present.flash_update_file_name_len + 1);
3869 memcpy(req->flash_update_file_name, flash_update_file_name, req->_present.flash_update_file_name_len);
3870 req->flash_update_file_name[req->_present.flash_update_file_name_len] = 0;
3871}
3872static inline void
3873devlink_flash_update_req_set_flash_update_component(struct devlink_flash_update_req *req,
3874 const char *flash_update_component)
3875{
3876 free(req->flash_update_component);
3877 req->_present.flash_update_component_len = strlen(flash_update_component);
3878 req->flash_update_component = malloc(req->_present.flash_update_component_len + 1);
3879 memcpy(req->flash_update_component, flash_update_component, req->_present.flash_update_component_len);
3880 req->flash_update_component[req->_present.flash_update_component_len] = 0;
3881}
3882static inline void
3883devlink_flash_update_req_set_flash_update_overwrite_mask(struct devlink_flash_update_req *req,
3884 struct nla_bitfield32 *flash_update_overwrite_mask)
3885{
3886 req->_present.flash_update_overwrite_mask = 1;
3887 memcpy(&req->flash_update_overwrite_mask, flash_update_overwrite_mask, sizeof(struct nla_bitfield32));
3888}
3889
3890/*
3891 * Flash update devlink instances.
3892 */
3893int devlink_flash_update(struct ynl_sock *ys,
3894 struct devlink_flash_update_req *req);
3895
3896/* ============== DEVLINK_CMD_TRAP_GET ============== */
3897/* DEVLINK_CMD_TRAP_GET - do */
3898struct devlink_trap_get_req {
3899 struct {
3900 __u32 bus_name_len;
3901 __u32 dev_name_len;
3902 __u32 trap_name_len;
3903 } _present;
3904
3905 char *bus_name;
3906 char *dev_name;
3907 char *trap_name;
3908};
3909
3910static inline struct devlink_trap_get_req *devlink_trap_get_req_alloc(void)
3911{
3912 return calloc(1, sizeof(struct devlink_trap_get_req));
3913}
3914void devlink_trap_get_req_free(struct devlink_trap_get_req *req);
3915
3916static inline void
3917devlink_trap_get_req_set_bus_name(struct devlink_trap_get_req *req,
3918 const char *bus_name)
3919{
3920 free(req->bus_name);
3921 req->_present.bus_name_len = strlen(bus_name);
3922 req->bus_name = malloc(req->_present.bus_name_len + 1);
3923 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
3924 req->bus_name[req->_present.bus_name_len] = 0;
3925}
3926static inline void
3927devlink_trap_get_req_set_dev_name(struct devlink_trap_get_req *req,
3928 const char *dev_name)
3929{
3930 free(req->dev_name);
3931 req->_present.dev_name_len = strlen(dev_name);
3932 req->dev_name = malloc(req->_present.dev_name_len + 1);
3933 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
3934 req->dev_name[req->_present.dev_name_len] = 0;
3935}
3936static inline void
3937devlink_trap_get_req_set_trap_name(struct devlink_trap_get_req *req,
3938 const char *trap_name)
3939{
3940 free(req->trap_name);
3941 req->_present.trap_name_len = strlen(trap_name);
3942 req->trap_name = malloc(req->_present.trap_name_len + 1);
3943 memcpy(req->trap_name, trap_name, req->_present.trap_name_len);
3944 req->trap_name[req->_present.trap_name_len] = 0;
3945}
3946
3947struct devlink_trap_get_rsp {
3948 struct {
3949 __u32 bus_name_len;
3950 __u32 dev_name_len;
3951 __u32 trap_name_len;
3952 } _present;
3953
3954 char *bus_name;
3955 char *dev_name;
3956 char *trap_name;
3957};
3958
3959void devlink_trap_get_rsp_free(struct devlink_trap_get_rsp *rsp);
3960
3961/*
3962 * Get trap instances.
3963 */
3964struct devlink_trap_get_rsp *
3965devlink_trap_get(struct ynl_sock *ys, struct devlink_trap_get_req *req);
3966
3967/* DEVLINK_CMD_TRAP_GET - dump */
3968struct devlink_trap_get_req_dump {
3969 struct {
3970 __u32 bus_name_len;
3971 __u32 dev_name_len;
3972 } _present;
3973
3974 char *bus_name;
3975 char *dev_name;
3976};
3977
3978static inline struct devlink_trap_get_req_dump *
3979devlink_trap_get_req_dump_alloc(void)
3980{
3981 return calloc(1, sizeof(struct devlink_trap_get_req_dump));
3982}
3983void devlink_trap_get_req_dump_free(struct devlink_trap_get_req_dump *req);
3984
3985static inline void
3986devlink_trap_get_req_dump_set_bus_name(struct devlink_trap_get_req_dump *req,
3987 const char *bus_name)
3988{
3989 free(req->bus_name);
3990 req->_present.bus_name_len = strlen(bus_name);
3991 req->bus_name = malloc(req->_present.bus_name_len + 1);
3992 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
3993 req->bus_name[req->_present.bus_name_len] = 0;
3994}
3995static inline void
3996devlink_trap_get_req_dump_set_dev_name(struct devlink_trap_get_req_dump *req,
3997 const char *dev_name)
3998{
3999 free(req->dev_name);
4000 req->_present.dev_name_len = strlen(dev_name);
4001 req->dev_name = malloc(req->_present.dev_name_len + 1);
4002 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4003 req->dev_name[req->_present.dev_name_len] = 0;
4004}
4005
4006struct devlink_trap_get_list {
4007 struct devlink_trap_get_list *next;
4008 struct devlink_trap_get_rsp obj __attribute__((aligned(8)));
4009};
4010
4011void devlink_trap_get_list_free(struct devlink_trap_get_list *rsp);
4012
4013struct devlink_trap_get_list *
4014devlink_trap_get_dump(struct ynl_sock *ys,
4015 struct devlink_trap_get_req_dump *req);
4016
4017/* ============== DEVLINK_CMD_TRAP_SET ============== */
4018/* DEVLINK_CMD_TRAP_SET - do */
4019struct devlink_trap_set_req {
4020 struct {
4021 __u32 bus_name_len;
4022 __u32 dev_name_len;
4023 __u32 trap_name_len;
4024 __u32 trap_action:1;
4025 } _present;
4026
4027 char *bus_name;
4028 char *dev_name;
4029 char *trap_name;
4030 enum devlink_trap_action trap_action;
4031};
4032
4033static inline struct devlink_trap_set_req *devlink_trap_set_req_alloc(void)
4034{
4035 return calloc(1, sizeof(struct devlink_trap_set_req));
4036}
4037void devlink_trap_set_req_free(struct devlink_trap_set_req *req);
4038
4039static inline void
4040devlink_trap_set_req_set_bus_name(struct devlink_trap_set_req *req,
4041 const char *bus_name)
4042{
4043 free(req->bus_name);
4044 req->_present.bus_name_len = strlen(bus_name);
4045 req->bus_name = malloc(req->_present.bus_name_len + 1);
4046 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4047 req->bus_name[req->_present.bus_name_len] = 0;
4048}
4049static inline void
4050devlink_trap_set_req_set_dev_name(struct devlink_trap_set_req *req,
4051 const char *dev_name)
4052{
4053 free(req->dev_name);
4054 req->_present.dev_name_len = strlen(dev_name);
4055 req->dev_name = malloc(req->_present.dev_name_len + 1);
4056 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4057 req->dev_name[req->_present.dev_name_len] = 0;
4058}
4059static inline void
4060devlink_trap_set_req_set_trap_name(struct devlink_trap_set_req *req,
4061 const char *trap_name)
4062{
4063 free(req->trap_name);
4064 req->_present.trap_name_len = strlen(trap_name);
4065 req->trap_name = malloc(req->_present.trap_name_len + 1);
4066 memcpy(req->trap_name, trap_name, req->_present.trap_name_len);
4067 req->trap_name[req->_present.trap_name_len] = 0;
4068}
4069static inline void
4070devlink_trap_set_req_set_trap_action(struct devlink_trap_set_req *req,
4071 enum devlink_trap_action trap_action)
4072{
4073 req->_present.trap_action = 1;
4074 req->trap_action = trap_action;
4075}
4076
4077/*
4078 * Set trap instances.
4079 */
4080int devlink_trap_set(struct ynl_sock *ys, struct devlink_trap_set_req *req);
4081
4082/* ============== DEVLINK_CMD_TRAP_GROUP_GET ============== */
4083/* DEVLINK_CMD_TRAP_GROUP_GET - do */
4084struct devlink_trap_group_get_req {
4085 struct {
4086 __u32 bus_name_len;
4087 __u32 dev_name_len;
4088 __u32 trap_group_name_len;
4089 } _present;
4090
4091 char *bus_name;
4092 char *dev_name;
4093 char *trap_group_name;
4094};
4095
4096static inline struct devlink_trap_group_get_req *
4097devlink_trap_group_get_req_alloc(void)
4098{
4099 return calloc(1, sizeof(struct devlink_trap_group_get_req));
4100}
4101void devlink_trap_group_get_req_free(struct devlink_trap_group_get_req *req);
4102
4103static inline void
4104devlink_trap_group_get_req_set_bus_name(struct devlink_trap_group_get_req *req,
4105 const char *bus_name)
4106{
4107 free(req->bus_name);
4108 req->_present.bus_name_len = strlen(bus_name);
4109 req->bus_name = malloc(req->_present.bus_name_len + 1);
4110 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4111 req->bus_name[req->_present.bus_name_len] = 0;
4112}
4113static inline void
4114devlink_trap_group_get_req_set_dev_name(struct devlink_trap_group_get_req *req,
4115 const char *dev_name)
4116{
4117 free(req->dev_name);
4118 req->_present.dev_name_len = strlen(dev_name);
4119 req->dev_name = malloc(req->_present.dev_name_len + 1);
4120 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4121 req->dev_name[req->_present.dev_name_len] = 0;
4122}
4123static inline void
4124devlink_trap_group_get_req_set_trap_group_name(struct devlink_trap_group_get_req *req,
4125 const char *trap_group_name)
4126{
4127 free(req->trap_group_name);
4128 req->_present.trap_group_name_len = strlen(trap_group_name);
4129 req->trap_group_name = malloc(req->_present.trap_group_name_len + 1);
4130 memcpy(req->trap_group_name, trap_group_name, req->_present.trap_group_name_len);
4131 req->trap_group_name[req->_present.trap_group_name_len] = 0;
4132}
4133
4134struct devlink_trap_group_get_rsp {
4135 struct {
4136 __u32 bus_name_len;
4137 __u32 dev_name_len;
4138 __u32 trap_group_name_len;
4139 } _present;
4140
4141 char *bus_name;
4142 char *dev_name;
4143 char *trap_group_name;
4144};
4145
4146void devlink_trap_group_get_rsp_free(struct devlink_trap_group_get_rsp *rsp);
4147
4148/*
4149 * Get trap group instances.
4150 */
4151struct devlink_trap_group_get_rsp *
4152devlink_trap_group_get(struct ynl_sock *ys,
4153 struct devlink_trap_group_get_req *req);
4154
4155/* DEVLINK_CMD_TRAP_GROUP_GET - dump */
4156struct devlink_trap_group_get_req_dump {
4157 struct {
4158 __u32 bus_name_len;
4159 __u32 dev_name_len;
4160 } _present;
4161
4162 char *bus_name;
4163 char *dev_name;
4164};
4165
4166static inline struct devlink_trap_group_get_req_dump *
4167devlink_trap_group_get_req_dump_alloc(void)
4168{
4169 return calloc(1, sizeof(struct devlink_trap_group_get_req_dump));
4170}
4171void
4172devlink_trap_group_get_req_dump_free(struct devlink_trap_group_get_req_dump *req);
4173
4174static inline void
4175devlink_trap_group_get_req_dump_set_bus_name(struct devlink_trap_group_get_req_dump *req,
4176 const char *bus_name)
4177{
4178 free(req->bus_name);
4179 req->_present.bus_name_len = strlen(bus_name);
4180 req->bus_name = malloc(req->_present.bus_name_len + 1);
4181 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4182 req->bus_name[req->_present.bus_name_len] = 0;
4183}
4184static inline void
4185devlink_trap_group_get_req_dump_set_dev_name(struct devlink_trap_group_get_req_dump *req,
4186 const char *dev_name)
4187{
4188 free(req->dev_name);
4189 req->_present.dev_name_len = strlen(dev_name);
4190 req->dev_name = malloc(req->_present.dev_name_len + 1);
4191 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4192 req->dev_name[req->_present.dev_name_len] = 0;
4193}
4194
4195struct devlink_trap_group_get_list {
4196 struct devlink_trap_group_get_list *next;
4197 struct devlink_trap_group_get_rsp obj __attribute__((aligned(8)));
4198};
4199
4200void devlink_trap_group_get_list_free(struct devlink_trap_group_get_list *rsp);
4201
4202struct devlink_trap_group_get_list *
4203devlink_trap_group_get_dump(struct ynl_sock *ys,
4204 struct devlink_trap_group_get_req_dump *req);
4205
4206/* ============== DEVLINK_CMD_TRAP_GROUP_SET ============== */
4207/* DEVLINK_CMD_TRAP_GROUP_SET - do */
4208struct devlink_trap_group_set_req {
4209 struct {
4210 __u32 bus_name_len;
4211 __u32 dev_name_len;
4212 __u32 trap_group_name_len;
4213 __u32 trap_action:1;
4214 __u32 trap_policer_id:1;
4215 } _present;
4216
4217 char *bus_name;
4218 char *dev_name;
4219 char *trap_group_name;
4220 enum devlink_trap_action trap_action;
4221 __u32 trap_policer_id;
4222};
4223
4224static inline struct devlink_trap_group_set_req *
4225devlink_trap_group_set_req_alloc(void)
4226{
4227 return calloc(1, sizeof(struct devlink_trap_group_set_req));
4228}
4229void devlink_trap_group_set_req_free(struct devlink_trap_group_set_req *req);
4230
4231static inline void
4232devlink_trap_group_set_req_set_bus_name(struct devlink_trap_group_set_req *req,
4233 const char *bus_name)
4234{
4235 free(req->bus_name);
4236 req->_present.bus_name_len = strlen(bus_name);
4237 req->bus_name = malloc(req->_present.bus_name_len + 1);
4238 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4239 req->bus_name[req->_present.bus_name_len] = 0;
4240}
4241static inline void
4242devlink_trap_group_set_req_set_dev_name(struct devlink_trap_group_set_req *req,
4243 const char *dev_name)
4244{
4245 free(req->dev_name);
4246 req->_present.dev_name_len = strlen(dev_name);
4247 req->dev_name = malloc(req->_present.dev_name_len + 1);
4248 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4249 req->dev_name[req->_present.dev_name_len] = 0;
4250}
4251static inline void
4252devlink_trap_group_set_req_set_trap_group_name(struct devlink_trap_group_set_req *req,
4253 const char *trap_group_name)
4254{
4255 free(req->trap_group_name);
4256 req->_present.trap_group_name_len = strlen(trap_group_name);
4257 req->trap_group_name = malloc(req->_present.trap_group_name_len + 1);
4258 memcpy(req->trap_group_name, trap_group_name, req->_present.trap_group_name_len);
4259 req->trap_group_name[req->_present.trap_group_name_len] = 0;
4260}
4261static inline void
4262devlink_trap_group_set_req_set_trap_action(struct devlink_trap_group_set_req *req,
4263 enum devlink_trap_action trap_action)
4264{
4265 req->_present.trap_action = 1;
4266 req->trap_action = trap_action;
4267}
4268static inline void
4269devlink_trap_group_set_req_set_trap_policer_id(struct devlink_trap_group_set_req *req,
4270 __u32 trap_policer_id)
4271{
4272 req->_present.trap_policer_id = 1;
4273 req->trap_policer_id = trap_policer_id;
4274}
4275
4276/*
4277 * Set trap group instances.
4278 */
4279int devlink_trap_group_set(struct ynl_sock *ys,
4280 struct devlink_trap_group_set_req *req);
4281
4282/* ============== DEVLINK_CMD_TRAP_POLICER_GET ============== */
4283/* DEVLINK_CMD_TRAP_POLICER_GET - do */
4284struct devlink_trap_policer_get_req {
4285 struct {
4286 __u32 bus_name_len;
4287 __u32 dev_name_len;
4288 __u32 trap_policer_id:1;
4289 } _present;
4290
4291 char *bus_name;
4292 char *dev_name;
4293 __u32 trap_policer_id;
4294};
4295
4296static inline struct devlink_trap_policer_get_req *
4297devlink_trap_policer_get_req_alloc(void)
4298{
4299 return calloc(1, sizeof(struct devlink_trap_policer_get_req));
4300}
4301void
4302devlink_trap_policer_get_req_free(struct devlink_trap_policer_get_req *req);
4303
4304static inline void
4305devlink_trap_policer_get_req_set_bus_name(struct devlink_trap_policer_get_req *req,
4306 const char *bus_name)
4307{
4308 free(req->bus_name);
4309 req->_present.bus_name_len = strlen(bus_name);
4310 req->bus_name = malloc(req->_present.bus_name_len + 1);
4311 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4312 req->bus_name[req->_present.bus_name_len] = 0;
4313}
4314static inline void
4315devlink_trap_policer_get_req_set_dev_name(struct devlink_trap_policer_get_req *req,
4316 const char *dev_name)
4317{
4318 free(req->dev_name);
4319 req->_present.dev_name_len = strlen(dev_name);
4320 req->dev_name = malloc(req->_present.dev_name_len + 1);
4321 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4322 req->dev_name[req->_present.dev_name_len] = 0;
4323}
4324static inline void
4325devlink_trap_policer_get_req_set_trap_policer_id(struct devlink_trap_policer_get_req *req,
4326 __u32 trap_policer_id)
4327{
4328 req->_present.trap_policer_id = 1;
4329 req->trap_policer_id = trap_policer_id;
4330}
4331
4332struct devlink_trap_policer_get_rsp {
4333 struct {
4334 __u32 bus_name_len;
4335 __u32 dev_name_len;
4336 __u32 trap_policer_id:1;
4337 } _present;
4338
4339 char *bus_name;
4340 char *dev_name;
4341 __u32 trap_policer_id;
4342};
4343
4344void
4345devlink_trap_policer_get_rsp_free(struct devlink_trap_policer_get_rsp *rsp);
4346
4347/*
4348 * Get trap policer instances.
4349 */
4350struct devlink_trap_policer_get_rsp *
4351devlink_trap_policer_get(struct ynl_sock *ys,
4352 struct devlink_trap_policer_get_req *req);
4353
4354/* DEVLINK_CMD_TRAP_POLICER_GET - dump */
4355struct devlink_trap_policer_get_req_dump {
4356 struct {
4357 __u32 bus_name_len;
4358 __u32 dev_name_len;
4359 } _present;
4360
4361 char *bus_name;
4362 char *dev_name;
4363};
4364
4365static inline struct devlink_trap_policer_get_req_dump *
4366devlink_trap_policer_get_req_dump_alloc(void)
4367{
4368 return calloc(1, sizeof(struct devlink_trap_policer_get_req_dump));
4369}
4370void
4371devlink_trap_policer_get_req_dump_free(struct devlink_trap_policer_get_req_dump *req);
4372
4373static inline void
4374devlink_trap_policer_get_req_dump_set_bus_name(struct devlink_trap_policer_get_req_dump *req,
4375 const char *bus_name)
4376{
4377 free(req->bus_name);
4378 req->_present.bus_name_len = strlen(bus_name);
4379 req->bus_name = malloc(req->_present.bus_name_len + 1);
4380 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4381 req->bus_name[req->_present.bus_name_len] = 0;
4382}
4383static inline void
4384devlink_trap_policer_get_req_dump_set_dev_name(struct devlink_trap_policer_get_req_dump *req,
4385 const char *dev_name)
4386{
4387 free(req->dev_name);
4388 req->_present.dev_name_len = strlen(dev_name);
4389 req->dev_name = malloc(req->_present.dev_name_len + 1);
4390 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4391 req->dev_name[req->_present.dev_name_len] = 0;
4392}
4393
4394struct devlink_trap_policer_get_list {
4395 struct devlink_trap_policer_get_list *next;
4396 struct devlink_trap_policer_get_rsp obj __attribute__((aligned(8)));
4397};
4398
4399void
4400devlink_trap_policer_get_list_free(struct devlink_trap_policer_get_list *rsp);
4401
4402struct devlink_trap_policer_get_list *
4403devlink_trap_policer_get_dump(struct ynl_sock *ys,
4404 struct devlink_trap_policer_get_req_dump *req);
4405
4406/* ============== DEVLINK_CMD_TRAP_POLICER_SET ============== */
4407/* DEVLINK_CMD_TRAP_POLICER_SET - do */
4408struct devlink_trap_policer_set_req {
4409 struct {
4410 __u32 bus_name_len;
4411 __u32 dev_name_len;
4412 __u32 trap_policer_id:1;
4413 __u32 trap_policer_rate:1;
4414 __u32 trap_policer_burst:1;
4415 } _present;
4416
4417 char *bus_name;
4418 char *dev_name;
4419 __u32 trap_policer_id;
4420 __u64 trap_policer_rate;
4421 __u64 trap_policer_burst;
4422};
4423
4424static inline struct devlink_trap_policer_set_req *
4425devlink_trap_policer_set_req_alloc(void)
4426{
4427 return calloc(1, sizeof(struct devlink_trap_policer_set_req));
4428}
4429void
4430devlink_trap_policer_set_req_free(struct devlink_trap_policer_set_req *req);
4431
4432static inline void
4433devlink_trap_policer_set_req_set_bus_name(struct devlink_trap_policer_set_req *req,
4434 const char *bus_name)
4435{
4436 free(req->bus_name);
4437 req->_present.bus_name_len = strlen(bus_name);
4438 req->bus_name = malloc(req->_present.bus_name_len + 1);
4439 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4440 req->bus_name[req->_present.bus_name_len] = 0;
4441}
4442static inline void
4443devlink_trap_policer_set_req_set_dev_name(struct devlink_trap_policer_set_req *req,
4444 const char *dev_name)
4445{
4446 free(req->dev_name);
4447 req->_present.dev_name_len = strlen(dev_name);
4448 req->dev_name = malloc(req->_present.dev_name_len + 1);
4449 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4450 req->dev_name[req->_present.dev_name_len] = 0;
4451}
4452static inline void
4453devlink_trap_policer_set_req_set_trap_policer_id(struct devlink_trap_policer_set_req *req,
4454 __u32 trap_policer_id)
4455{
4456 req->_present.trap_policer_id = 1;
4457 req->trap_policer_id = trap_policer_id;
4458}
4459static inline void
4460devlink_trap_policer_set_req_set_trap_policer_rate(struct devlink_trap_policer_set_req *req,
4461 __u64 trap_policer_rate)
4462{
4463 req->_present.trap_policer_rate = 1;
4464 req->trap_policer_rate = trap_policer_rate;
4465}
4466static inline void
4467devlink_trap_policer_set_req_set_trap_policer_burst(struct devlink_trap_policer_set_req *req,
4468 __u64 trap_policer_burst)
4469{
4470 req->_present.trap_policer_burst = 1;
4471 req->trap_policer_burst = trap_policer_burst;
4472}
4473
4474/*
4475 * Get trap policer instances.
4476 */
4477int devlink_trap_policer_set(struct ynl_sock *ys,
4478 struct devlink_trap_policer_set_req *req);
4479
4480/* ============== DEVLINK_CMD_HEALTH_REPORTER_TEST ============== */
4481/* DEVLINK_CMD_HEALTH_REPORTER_TEST - do */
4482struct devlink_health_reporter_test_req {
4483 struct {
4484 __u32 bus_name_len;
4485 __u32 dev_name_len;
4486 __u32 port_index:1;
4487 __u32 health_reporter_name_len;
4488 } _present;
4489
4490 char *bus_name;
4491 char *dev_name;
4492 __u32 port_index;
4493 char *health_reporter_name;
4494};
4495
4496static inline struct devlink_health_reporter_test_req *
4497devlink_health_reporter_test_req_alloc(void)
4498{
4499 return calloc(1, sizeof(struct devlink_health_reporter_test_req));
4500}
4501void
4502devlink_health_reporter_test_req_free(struct devlink_health_reporter_test_req *req);
4503
4504static inline void
4505devlink_health_reporter_test_req_set_bus_name(struct devlink_health_reporter_test_req *req,
4506 const char *bus_name)
4507{
4508 free(req->bus_name);
4509 req->_present.bus_name_len = strlen(bus_name);
4510 req->bus_name = malloc(req->_present.bus_name_len + 1);
4511 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4512 req->bus_name[req->_present.bus_name_len] = 0;
4513}
4514static inline void
4515devlink_health_reporter_test_req_set_dev_name(struct devlink_health_reporter_test_req *req,
4516 const char *dev_name)
4517{
4518 free(req->dev_name);
4519 req->_present.dev_name_len = strlen(dev_name);
4520 req->dev_name = malloc(req->_present.dev_name_len + 1);
4521 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4522 req->dev_name[req->_present.dev_name_len] = 0;
4523}
4524static inline void
4525devlink_health_reporter_test_req_set_port_index(struct devlink_health_reporter_test_req *req,
4526 __u32 port_index)
4527{
4528 req->_present.port_index = 1;
4529 req->port_index = port_index;
4530}
4531static inline void
4532devlink_health_reporter_test_req_set_health_reporter_name(struct devlink_health_reporter_test_req *req,
4533 const char *health_reporter_name)
4534{
4535 free(req->health_reporter_name);
4536 req->_present.health_reporter_name_len = strlen(health_reporter_name);
4537 req->health_reporter_name = malloc(req->_present.health_reporter_name_len + 1);
4538 memcpy(req->health_reporter_name, health_reporter_name, req->_present.health_reporter_name_len);
4539 req->health_reporter_name[req->_present.health_reporter_name_len] = 0;
4540}
4541
4542/*
4543 * Test health reporter instances.
4544 */
4545int devlink_health_reporter_test(struct ynl_sock *ys,
4546 struct devlink_health_reporter_test_req *req);
4547
4548/* ============== DEVLINK_CMD_RATE_GET ============== */
4549/* DEVLINK_CMD_RATE_GET - do */
4550struct devlink_rate_get_req {
4551 struct {
4552 __u32 bus_name_len;
4553 __u32 dev_name_len;
4554 __u32 port_index:1;
4555 __u32 rate_node_name_len;
4556 } _present;
4557
4558 char *bus_name;
4559 char *dev_name;
4560 __u32 port_index;
4561 char *rate_node_name;
4562};
4563
4564static inline struct devlink_rate_get_req *devlink_rate_get_req_alloc(void)
4565{
4566 return calloc(1, sizeof(struct devlink_rate_get_req));
4567}
4568void devlink_rate_get_req_free(struct devlink_rate_get_req *req);
4569
4570static inline void
4571devlink_rate_get_req_set_bus_name(struct devlink_rate_get_req *req,
4572 const char *bus_name)
4573{
4574 free(req->bus_name);
4575 req->_present.bus_name_len = strlen(bus_name);
4576 req->bus_name = malloc(req->_present.bus_name_len + 1);
4577 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4578 req->bus_name[req->_present.bus_name_len] = 0;
4579}
4580static inline void
4581devlink_rate_get_req_set_dev_name(struct devlink_rate_get_req *req,
4582 const char *dev_name)
4583{
4584 free(req->dev_name);
4585 req->_present.dev_name_len = strlen(dev_name);
4586 req->dev_name = malloc(req->_present.dev_name_len + 1);
4587 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4588 req->dev_name[req->_present.dev_name_len] = 0;
4589}
4590static inline void
4591devlink_rate_get_req_set_port_index(struct devlink_rate_get_req *req,
4592 __u32 port_index)
4593{
4594 req->_present.port_index = 1;
4595 req->port_index = port_index;
4596}
4597static inline void
4598devlink_rate_get_req_set_rate_node_name(struct devlink_rate_get_req *req,
4599 const char *rate_node_name)
4600{
4601 free(req->rate_node_name);
4602 req->_present.rate_node_name_len = strlen(rate_node_name);
4603 req->rate_node_name = malloc(req->_present.rate_node_name_len + 1);
4604 memcpy(req->rate_node_name, rate_node_name, req->_present.rate_node_name_len);
4605 req->rate_node_name[req->_present.rate_node_name_len] = 0;
4606}
4607
4608struct devlink_rate_get_rsp {
4609 struct {
4610 __u32 bus_name_len;
4611 __u32 dev_name_len;
4612 __u32 port_index:1;
4613 __u32 rate_node_name_len;
4614 } _present;
4615
4616 char *bus_name;
4617 char *dev_name;
4618 __u32 port_index;
4619 char *rate_node_name;
4620};
4621
4622void devlink_rate_get_rsp_free(struct devlink_rate_get_rsp *rsp);
4623
4624/*
4625 * Get rate instances.
4626 */
4627struct devlink_rate_get_rsp *
4628devlink_rate_get(struct ynl_sock *ys, struct devlink_rate_get_req *req);
4629
4630/* DEVLINK_CMD_RATE_GET - dump */
4631struct devlink_rate_get_req_dump {
4632 struct {
4633 __u32 bus_name_len;
4634 __u32 dev_name_len;
4635 } _present;
4636
4637 char *bus_name;
4638 char *dev_name;
4639};
4640
4641static inline struct devlink_rate_get_req_dump *
4642devlink_rate_get_req_dump_alloc(void)
4643{
4644 return calloc(1, sizeof(struct devlink_rate_get_req_dump));
4645}
4646void devlink_rate_get_req_dump_free(struct devlink_rate_get_req_dump *req);
4647
4648static inline void
4649devlink_rate_get_req_dump_set_bus_name(struct devlink_rate_get_req_dump *req,
4650 const char *bus_name)
4651{
4652 free(req->bus_name);
4653 req->_present.bus_name_len = strlen(bus_name);
4654 req->bus_name = malloc(req->_present.bus_name_len + 1);
4655 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4656 req->bus_name[req->_present.bus_name_len] = 0;
4657}
4658static inline void
4659devlink_rate_get_req_dump_set_dev_name(struct devlink_rate_get_req_dump *req,
4660 const char *dev_name)
4661{
4662 free(req->dev_name);
4663 req->_present.dev_name_len = strlen(dev_name);
4664 req->dev_name = malloc(req->_present.dev_name_len + 1);
4665 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4666 req->dev_name[req->_present.dev_name_len] = 0;
4667}
4668
4669struct devlink_rate_get_list {
4670 struct devlink_rate_get_list *next;
4671 struct devlink_rate_get_rsp obj __attribute__((aligned(8)));
4672};
4673
4674void devlink_rate_get_list_free(struct devlink_rate_get_list *rsp);
4675
4676struct devlink_rate_get_list *
4677devlink_rate_get_dump(struct ynl_sock *ys,
4678 struct devlink_rate_get_req_dump *req);
4679
4680/* ============== DEVLINK_CMD_RATE_SET ============== */
4681/* DEVLINK_CMD_RATE_SET - do */
4682struct devlink_rate_set_req {
4683 struct {
4684 __u32 bus_name_len;
4685 __u32 dev_name_len;
4686 __u32 rate_node_name_len;
4687 __u32 rate_tx_share:1;
4688 __u32 rate_tx_max:1;
4689 __u32 rate_tx_priority:1;
4690 __u32 rate_tx_weight:1;
4691 __u32 rate_parent_node_name_len;
4692 } _present;
4693
4694 char *bus_name;
4695 char *dev_name;
4696 char *rate_node_name;
4697 __u64 rate_tx_share;
4698 __u64 rate_tx_max;
4699 __u32 rate_tx_priority;
4700 __u32 rate_tx_weight;
4701 char *rate_parent_node_name;
4702};
4703
4704static inline struct devlink_rate_set_req *devlink_rate_set_req_alloc(void)
4705{
4706 return calloc(1, sizeof(struct devlink_rate_set_req));
4707}
4708void devlink_rate_set_req_free(struct devlink_rate_set_req *req);
4709
4710static inline void
4711devlink_rate_set_req_set_bus_name(struct devlink_rate_set_req *req,
4712 const char *bus_name)
4713{
4714 free(req->bus_name);
4715 req->_present.bus_name_len = strlen(bus_name);
4716 req->bus_name = malloc(req->_present.bus_name_len + 1);
4717 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4718 req->bus_name[req->_present.bus_name_len] = 0;
4719}
4720static inline void
4721devlink_rate_set_req_set_dev_name(struct devlink_rate_set_req *req,
4722 const char *dev_name)
4723{
4724 free(req->dev_name);
4725 req->_present.dev_name_len = strlen(dev_name);
4726 req->dev_name = malloc(req->_present.dev_name_len + 1);
4727 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4728 req->dev_name[req->_present.dev_name_len] = 0;
4729}
4730static inline void
4731devlink_rate_set_req_set_rate_node_name(struct devlink_rate_set_req *req,
4732 const char *rate_node_name)
4733{
4734 free(req->rate_node_name);
4735 req->_present.rate_node_name_len = strlen(rate_node_name);
4736 req->rate_node_name = malloc(req->_present.rate_node_name_len + 1);
4737 memcpy(req->rate_node_name, rate_node_name, req->_present.rate_node_name_len);
4738 req->rate_node_name[req->_present.rate_node_name_len] = 0;
4739}
4740static inline void
4741devlink_rate_set_req_set_rate_tx_share(struct devlink_rate_set_req *req,
4742 __u64 rate_tx_share)
4743{
4744 req->_present.rate_tx_share = 1;
4745 req->rate_tx_share = rate_tx_share;
4746}
4747static inline void
4748devlink_rate_set_req_set_rate_tx_max(struct devlink_rate_set_req *req,
4749 __u64 rate_tx_max)
4750{
4751 req->_present.rate_tx_max = 1;
4752 req->rate_tx_max = rate_tx_max;
4753}
4754static inline void
4755devlink_rate_set_req_set_rate_tx_priority(struct devlink_rate_set_req *req,
4756 __u32 rate_tx_priority)
4757{
4758 req->_present.rate_tx_priority = 1;
4759 req->rate_tx_priority = rate_tx_priority;
4760}
4761static inline void
4762devlink_rate_set_req_set_rate_tx_weight(struct devlink_rate_set_req *req,
4763 __u32 rate_tx_weight)
4764{
4765 req->_present.rate_tx_weight = 1;
4766 req->rate_tx_weight = rate_tx_weight;
4767}
4768static inline void
4769devlink_rate_set_req_set_rate_parent_node_name(struct devlink_rate_set_req *req,
4770 const char *rate_parent_node_name)
4771{
4772 free(req->rate_parent_node_name);
4773 req->_present.rate_parent_node_name_len = strlen(rate_parent_node_name);
4774 req->rate_parent_node_name = malloc(req->_present.rate_parent_node_name_len + 1);
4775 memcpy(req->rate_parent_node_name, rate_parent_node_name, req->_present.rate_parent_node_name_len);
4776 req->rate_parent_node_name[req->_present.rate_parent_node_name_len] = 0;
4777}
4778
4779/*
4780 * Set rate instances.
4781 */
4782int devlink_rate_set(struct ynl_sock *ys, struct devlink_rate_set_req *req);
4783
4784/* ============== DEVLINK_CMD_RATE_NEW ============== */
4785/* DEVLINK_CMD_RATE_NEW - do */
4786struct devlink_rate_new_req {
4787 struct {
4788 __u32 bus_name_len;
4789 __u32 dev_name_len;
4790 __u32 rate_node_name_len;
4791 __u32 rate_tx_share:1;
4792 __u32 rate_tx_max:1;
4793 __u32 rate_tx_priority:1;
4794 __u32 rate_tx_weight:1;
4795 __u32 rate_parent_node_name_len;
4796 } _present;
4797
4798 char *bus_name;
4799 char *dev_name;
4800 char *rate_node_name;
4801 __u64 rate_tx_share;
4802 __u64 rate_tx_max;
4803 __u32 rate_tx_priority;
4804 __u32 rate_tx_weight;
4805 char *rate_parent_node_name;
4806};
4807
4808static inline struct devlink_rate_new_req *devlink_rate_new_req_alloc(void)
4809{
4810 return calloc(1, sizeof(struct devlink_rate_new_req));
4811}
4812void devlink_rate_new_req_free(struct devlink_rate_new_req *req);
4813
4814static inline void
4815devlink_rate_new_req_set_bus_name(struct devlink_rate_new_req *req,
4816 const char *bus_name)
4817{
4818 free(req->bus_name);
4819 req->_present.bus_name_len = strlen(bus_name);
4820 req->bus_name = malloc(req->_present.bus_name_len + 1);
4821 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4822 req->bus_name[req->_present.bus_name_len] = 0;
4823}
4824static inline void
4825devlink_rate_new_req_set_dev_name(struct devlink_rate_new_req *req,
4826 const char *dev_name)
4827{
4828 free(req->dev_name);
4829 req->_present.dev_name_len = strlen(dev_name);
4830 req->dev_name = malloc(req->_present.dev_name_len + 1);
4831 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4832 req->dev_name[req->_present.dev_name_len] = 0;
4833}
4834static inline void
4835devlink_rate_new_req_set_rate_node_name(struct devlink_rate_new_req *req,
4836 const char *rate_node_name)
4837{
4838 free(req->rate_node_name);
4839 req->_present.rate_node_name_len = strlen(rate_node_name);
4840 req->rate_node_name = malloc(req->_present.rate_node_name_len + 1);
4841 memcpy(req->rate_node_name, rate_node_name, req->_present.rate_node_name_len);
4842 req->rate_node_name[req->_present.rate_node_name_len] = 0;
4843}
4844static inline void
4845devlink_rate_new_req_set_rate_tx_share(struct devlink_rate_new_req *req,
4846 __u64 rate_tx_share)
4847{
4848 req->_present.rate_tx_share = 1;
4849 req->rate_tx_share = rate_tx_share;
4850}
4851static inline void
4852devlink_rate_new_req_set_rate_tx_max(struct devlink_rate_new_req *req,
4853 __u64 rate_tx_max)
4854{
4855 req->_present.rate_tx_max = 1;
4856 req->rate_tx_max = rate_tx_max;
4857}
4858static inline void
4859devlink_rate_new_req_set_rate_tx_priority(struct devlink_rate_new_req *req,
4860 __u32 rate_tx_priority)
4861{
4862 req->_present.rate_tx_priority = 1;
4863 req->rate_tx_priority = rate_tx_priority;
4864}
4865static inline void
4866devlink_rate_new_req_set_rate_tx_weight(struct devlink_rate_new_req *req,
4867 __u32 rate_tx_weight)
4868{
4869 req->_present.rate_tx_weight = 1;
4870 req->rate_tx_weight = rate_tx_weight;
4871}
4872static inline void
4873devlink_rate_new_req_set_rate_parent_node_name(struct devlink_rate_new_req *req,
4874 const char *rate_parent_node_name)
4875{
4876 free(req->rate_parent_node_name);
4877 req->_present.rate_parent_node_name_len = strlen(rate_parent_node_name);
4878 req->rate_parent_node_name = malloc(req->_present.rate_parent_node_name_len + 1);
4879 memcpy(req->rate_parent_node_name, rate_parent_node_name, req->_present.rate_parent_node_name_len);
4880 req->rate_parent_node_name[req->_present.rate_parent_node_name_len] = 0;
4881}
4882
4883/*
4884 * Create rate instances.
4885 */
4886int devlink_rate_new(struct ynl_sock *ys, struct devlink_rate_new_req *req);
4887
4888/* ============== DEVLINK_CMD_RATE_DEL ============== */
4889/* DEVLINK_CMD_RATE_DEL - do */
4890struct devlink_rate_del_req {
4891 struct {
4892 __u32 bus_name_len;
4893 __u32 dev_name_len;
4894 __u32 rate_node_name_len;
4895 } _present;
4896
4897 char *bus_name;
4898 char *dev_name;
4899 char *rate_node_name;
4900};
4901
4902static inline struct devlink_rate_del_req *devlink_rate_del_req_alloc(void)
4903{
4904 return calloc(1, sizeof(struct devlink_rate_del_req));
4905}
4906void devlink_rate_del_req_free(struct devlink_rate_del_req *req);
4907
4908static inline void
4909devlink_rate_del_req_set_bus_name(struct devlink_rate_del_req *req,
4910 const char *bus_name)
4911{
4912 free(req->bus_name);
4913 req->_present.bus_name_len = strlen(bus_name);
4914 req->bus_name = malloc(req->_present.bus_name_len + 1);
4915 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4916 req->bus_name[req->_present.bus_name_len] = 0;
4917}
4918static inline void
4919devlink_rate_del_req_set_dev_name(struct devlink_rate_del_req *req,
4920 const char *dev_name)
4921{
4922 free(req->dev_name);
4923 req->_present.dev_name_len = strlen(dev_name);
4924 req->dev_name = malloc(req->_present.dev_name_len + 1);
4925 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4926 req->dev_name[req->_present.dev_name_len] = 0;
4927}
4928static inline void
4929devlink_rate_del_req_set_rate_node_name(struct devlink_rate_del_req *req,
4930 const char *rate_node_name)
4931{
4932 free(req->rate_node_name);
4933 req->_present.rate_node_name_len = strlen(rate_node_name);
4934 req->rate_node_name = malloc(req->_present.rate_node_name_len + 1);
4935 memcpy(req->rate_node_name, rate_node_name, req->_present.rate_node_name_len);
4936 req->rate_node_name[req->_present.rate_node_name_len] = 0;
4937}
4938
4939/*
4940 * Delete rate instances.
4941 */
4942int devlink_rate_del(struct ynl_sock *ys, struct devlink_rate_del_req *req);
4943
4944/* ============== DEVLINK_CMD_LINECARD_GET ============== */
4945/* DEVLINK_CMD_LINECARD_GET - do */
4946struct devlink_linecard_get_req {
4947 struct {
4948 __u32 bus_name_len;
4949 __u32 dev_name_len;
4950 __u32 linecard_index:1;
4951 } _present;
4952
4953 char *bus_name;
4954 char *dev_name;
4955 __u32 linecard_index;
4956};
4957
4958static inline struct devlink_linecard_get_req *
4959devlink_linecard_get_req_alloc(void)
4960{
4961 return calloc(1, sizeof(struct devlink_linecard_get_req));
4962}
4963void devlink_linecard_get_req_free(struct devlink_linecard_get_req *req);
4964
4965static inline void
4966devlink_linecard_get_req_set_bus_name(struct devlink_linecard_get_req *req,
4967 const char *bus_name)
4968{
4969 free(req->bus_name);
4970 req->_present.bus_name_len = strlen(bus_name);
4971 req->bus_name = malloc(req->_present.bus_name_len + 1);
4972 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
4973 req->bus_name[req->_present.bus_name_len] = 0;
4974}
4975static inline void
4976devlink_linecard_get_req_set_dev_name(struct devlink_linecard_get_req *req,
4977 const char *dev_name)
4978{
4979 free(req->dev_name);
4980 req->_present.dev_name_len = strlen(dev_name);
4981 req->dev_name = malloc(req->_present.dev_name_len + 1);
4982 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
4983 req->dev_name[req->_present.dev_name_len] = 0;
4984}
4985static inline void
4986devlink_linecard_get_req_set_linecard_index(struct devlink_linecard_get_req *req,
4987 __u32 linecard_index)
4988{
4989 req->_present.linecard_index = 1;
4990 req->linecard_index = linecard_index;
4991}
4992
4993struct devlink_linecard_get_rsp {
4994 struct {
4995 __u32 bus_name_len;
4996 __u32 dev_name_len;
4997 __u32 linecard_index:1;
4998 } _present;
4999
5000 char *bus_name;
5001 char *dev_name;
5002 __u32 linecard_index;
5003};
5004
5005void devlink_linecard_get_rsp_free(struct devlink_linecard_get_rsp *rsp);
5006
5007/*
5008 * Get line card instances.
5009 */
5010struct devlink_linecard_get_rsp *
5011devlink_linecard_get(struct ynl_sock *ys, struct devlink_linecard_get_req *req);
5012
5013/* DEVLINK_CMD_LINECARD_GET - dump */
5014struct devlink_linecard_get_req_dump {
5015 struct {
5016 __u32 bus_name_len;
5017 __u32 dev_name_len;
5018 } _present;
5019
5020 char *bus_name;
5021 char *dev_name;
5022};
5023
5024static inline struct devlink_linecard_get_req_dump *
5025devlink_linecard_get_req_dump_alloc(void)
5026{
5027 return calloc(1, sizeof(struct devlink_linecard_get_req_dump));
5028}
5029void
5030devlink_linecard_get_req_dump_free(struct devlink_linecard_get_req_dump *req);
5031
5032static inline void
5033devlink_linecard_get_req_dump_set_bus_name(struct devlink_linecard_get_req_dump *req,
5034 const char *bus_name)
5035{
5036 free(req->bus_name);
5037 req->_present.bus_name_len = strlen(bus_name);
5038 req->bus_name = malloc(req->_present.bus_name_len + 1);
5039 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
5040 req->bus_name[req->_present.bus_name_len] = 0;
5041}
5042static inline void
5043devlink_linecard_get_req_dump_set_dev_name(struct devlink_linecard_get_req_dump *req,
5044 const char *dev_name)
5045{
5046 free(req->dev_name);
5047 req->_present.dev_name_len = strlen(dev_name);
5048 req->dev_name = malloc(req->_present.dev_name_len + 1);
5049 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
5050 req->dev_name[req->_present.dev_name_len] = 0;
5051}
5052
5053struct devlink_linecard_get_list {
5054 struct devlink_linecard_get_list *next;
5055 struct devlink_linecard_get_rsp obj __attribute__((aligned(8)));
5056};
5057
5058void devlink_linecard_get_list_free(struct devlink_linecard_get_list *rsp);
5059
5060struct devlink_linecard_get_list *
5061devlink_linecard_get_dump(struct ynl_sock *ys,
5062 struct devlink_linecard_get_req_dump *req);
5063
5064/* ============== DEVLINK_CMD_LINECARD_SET ============== */
5065/* DEVLINK_CMD_LINECARD_SET - do */
5066struct devlink_linecard_set_req {
5067 struct {
5068 __u32 bus_name_len;
5069 __u32 dev_name_len;
5070 __u32 linecard_index:1;
5071 __u32 linecard_type_len;
5072 } _present;
5073
5074 char *bus_name;
5075 char *dev_name;
5076 __u32 linecard_index;
5077 char *linecard_type;
5078};
5079
5080static inline struct devlink_linecard_set_req *
5081devlink_linecard_set_req_alloc(void)
5082{
5083 return calloc(1, sizeof(struct devlink_linecard_set_req));
5084}
5085void devlink_linecard_set_req_free(struct devlink_linecard_set_req *req);
5086
5087static inline void
5088devlink_linecard_set_req_set_bus_name(struct devlink_linecard_set_req *req,
5089 const char *bus_name)
5090{
5091 free(req->bus_name);
5092 req->_present.bus_name_len = strlen(bus_name);
5093 req->bus_name = malloc(req->_present.bus_name_len + 1);
5094 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
5095 req->bus_name[req->_present.bus_name_len] = 0;
5096}
5097static inline void
5098devlink_linecard_set_req_set_dev_name(struct devlink_linecard_set_req *req,
5099 const char *dev_name)
5100{
5101 free(req->dev_name);
5102 req->_present.dev_name_len = strlen(dev_name);
5103 req->dev_name = malloc(req->_present.dev_name_len + 1);
5104 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
5105 req->dev_name[req->_present.dev_name_len] = 0;
5106}
5107static inline void
5108devlink_linecard_set_req_set_linecard_index(struct devlink_linecard_set_req *req,
5109 __u32 linecard_index)
5110{
5111 req->_present.linecard_index = 1;
5112 req->linecard_index = linecard_index;
5113}
5114static inline void
5115devlink_linecard_set_req_set_linecard_type(struct devlink_linecard_set_req *req,
5116 const char *linecard_type)
5117{
5118 free(req->linecard_type);
5119 req->_present.linecard_type_len = strlen(linecard_type);
5120 req->linecard_type = malloc(req->_present.linecard_type_len + 1);
5121 memcpy(req->linecard_type, linecard_type, req->_present.linecard_type_len);
5122 req->linecard_type[req->_present.linecard_type_len] = 0;
5123}
5124
5125/*
5126 * Set line card instances.
5127 */
5128int devlink_linecard_set(struct ynl_sock *ys,
5129 struct devlink_linecard_set_req *req);
5130
5131/* ============== DEVLINK_CMD_SELFTESTS_GET ============== */
5132/* DEVLINK_CMD_SELFTESTS_GET - do */
5133struct devlink_selftests_get_req {
5134 struct {
5135 __u32 bus_name_len;
5136 __u32 dev_name_len;
5137 } _present;
5138
5139 char *bus_name;
5140 char *dev_name;
5141};
5142
5143static inline struct devlink_selftests_get_req *
5144devlink_selftests_get_req_alloc(void)
5145{
5146 return calloc(1, sizeof(struct devlink_selftests_get_req));
5147}
5148void devlink_selftests_get_req_free(struct devlink_selftests_get_req *req);
5149
5150static inline void
5151devlink_selftests_get_req_set_bus_name(struct devlink_selftests_get_req *req,
5152 const char *bus_name)
5153{
5154 free(req->bus_name);
5155 req->_present.bus_name_len = strlen(bus_name);
5156 req->bus_name = malloc(req->_present.bus_name_len + 1);
5157 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
5158 req->bus_name[req->_present.bus_name_len] = 0;
5159}
5160static inline void
5161devlink_selftests_get_req_set_dev_name(struct devlink_selftests_get_req *req,
5162 const char *dev_name)
5163{
5164 free(req->dev_name);
5165 req->_present.dev_name_len = strlen(dev_name);
5166 req->dev_name = malloc(req->_present.dev_name_len + 1);
5167 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
5168 req->dev_name[req->_present.dev_name_len] = 0;
5169}
5170
5171struct devlink_selftests_get_rsp {
5172 struct {
5173 __u32 bus_name_len;
5174 __u32 dev_name_len;
5175 } _present;
5176
5177 char *bus_name;
5178 char *dev_name;
5179};
5180
5181void devlink_selftests_get_rsp_free(struct devlink_selftests_get_rsp *rsp);
5182
5183/*
5184 * Get device selftest instances.
5185 */
5186struct devlink_selftests_get_rsp *
5187devlink_selftests_get(struct ynl_sock *ys,
5188 struct devlink_selftests_get_req *req);
5189
5190/* DEVLINK_CMD_SELFTESTS_GET - dump */
5191struct devlink_selftests_get_list {
5192 struct devlink_selftests_get_list *next;
5193 struct devlink_selftests_get_rsp obj __attribute__((aligned(8)));
5194};
5195
5196void devlink_selftests_get_list_free(struct devlink_selftests_get_list *rsp);
5197
5198struct devlink_selftests_get_list *
5199devlink_selftests_get_dump(struct ynl_sock *ys);
5200
5201/* ============== DEVLINK_CMD_SELFTESTS_RUN ============== */
5202/* DEVLINK_CMD_SELFTESTS_RUN - do */
5203struct devlink_selftests_run_req {
5204 struct {
5205 __u32 bus_name_len;
5206 __u32 dev_name_len;
5207 __u32 selftests:1;
5208 } _present;
5209
5210 char *bus_name;
5211 char *dev_name;
5212 struct devlink_dl_selftest_id selftests;
5213};
5214
5215static inline struct devlink_selftests_run_req *
5216devlink_selftests_run_req_alloc(void)
5217{
5218 return calloc(1, sizeof(struct devlink_selftests_run_req));
5219}
5220void devlink_selftests_run_req_free(struct devlink_selftests_run_req *req);
5221
5222static inline void
5223devlink_selftests_run_req_set_bus_name(struct devlink_selftests_run_req *req,
5224 const char *bus_name)
5225{
5226 free(req->bus_name);
5227 req->_present.bus_name_len = strlen(bus_name);
5228 req->bus_name = malloc(req->_present.bus_name_len + 1);
5229 memcpy(req->bus_name, bus_name, req->_present.bus_name_len);
5230 req->bus_name[req->_present.bus_name_len] = 0;
5231}
5232static inline void
5233devlink_selftests_run_req_set_dev_name(struct devlink_selftests_run_req *req,
5234 const char *dev_name)
5235{
5236 free(req->dev_name);
5237 req->_present.dev_name_len = strlen(dev_name);
5238 req->dev_name = malloc(req->_present.dev_name_len + 1);
5239 memcpy(req->dev_name, dev_name, req->_present.dev_name_len);
5240 req->dev_name[req->_present.dev_name_len] = 0;
5241}
5242static inline void
5243devlink_selftests_run_req_set_selftests_flash(struct devlink_selftests_run_req *req)
5244{
5245 req->_present.selftests = 1;
5246 req->selftests._present.flash = 1;
5247}
5248
5249/*
5250 * Run device selftest instances.
5251 */
5252int devlink_selftests_run(struct ynl_sock *ys,
5253 struct devlink_selftests_run_req *req);
5254
5255#endif /* _LINUX_DEVLINK_GEN_H */