Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
fork
Configure Feed
Select the types of activity you want to include in your feed.
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/ethtool.yaml */
4/* YNL-GEN user header */
5/* YNL-ARG --user-header linux/ethtool_netlink.h --exclude-op stats-get */
6
7#ifndef _LINUX_ETHTOOL_GEN_H
8#define _LINUX_ETHTOOL_GEN_H
9
10#include <stdlib.h>
11#include <string.h>
12#include <linux/types.h>
13#include <linux/ethtool.h>
14
15struct ynl_sock;
16
17extern const struct ynl_family ynl_ethtool_family;
18
19/* Enums */
20const char *ethtool_op_str(int op);
21const char *ethtool_udp_tunnel_type_str(int value);
22const char *ethtool_stringset_str(enum ethtool_stringset value);
23
24/* Common nested types */
25struct ethtool_header {
26 struct {
27 __u32 dev_index:1;
28 __u32 dev_name_len;
29 __u32 flags:1;
30 } _present;
31
32 __u32 dev_index;
33 char *dev_name;
34 __u32 flags;
35};
36
37struct ethtool_pause_stat {
38 struct {
39 __u32 tx_frames:1;
40 __u32 rx_frames:1;
41 } _present;
42
43 __u64 tx_frames;
44 __u64 rx_frames;
45};
46
47struct ethtool_cable_test_tdr_cfg {
48 struct {
49 __u32 first:1;
50 __u32 last:1;
51 __u32 step:1;
52 __u32 pair:1;
53 } _present;
54
55 __u32 first;
56 __u32 last;
57 __u32 step;
58 __u8 pair;
59};
60
61struct ethtool_fec_stat {
62 struct {
63 __u32 corrected_len;
64 __u32 uncorr_len;
65 __u32 corr_bits_len;
66 } _present;
67
68 void *corrected;
69 void *uncorr;
70 void *corr_bits;
71};
72
73struct ethtool_mm_stat {
74 struct {
75 __u32 reassembly_errors:1;
76 __u32 smd_errors:1;
77 __u32 reassembly_ok:1;
78 __u32 rx_frag_count:1;
79 __u32 tx_frag_count:1;
80 __u32 hold_count:1;
81 } _present;
82
83 __u64 reassembly_errors;
84 __u64 smd_errors;
85 __u64 reassembly_ok;
86 __u64 rx_frag_count;
87 __u64 tx_frag_count;
88 __u64 hold_count;
89};
90
91struct ethtool_cable_result {
92 struct {
93 __u32 pair:1;
94 __u32 code:1;
95 } _present;
96
97 __u8 pair;
98 __u8 code;
99};
100
101struct ethtool_cable_fault_length {
102 struct {
103 __u32 pair:1;
104 __u32 cm:1;
105 } _present;
106
107 __u8 pair;
108 __u32 cm;
109};
110
111struct ethtool_bitset_bit {
112 struct {
113 __u32 index:1;
114 __u32 name_len;
115 __u32 value:1;
116 } _present;
117
118 __u32 index;
119 char *name;
120};
121
122struct ethtool_tunnel_udp_entry {
123 struct {
124 __u32 port:1;
125 __u32 type:1;
126 } _present;
127
128 __u16 port /* big-endian */;
129 __u32 type;
130};
131
132struct ethtool_string {
133 struct {
134 __u32 index:1;
135 __u32 value_len;
136 } _present;
137
138 __u32 index;
139 char *value;
140};
141
142struct ethtool_cable_nest {
143 struct {
144 __u32 result:1;
145 __u32 fault_length:1;
146 } _present;
147
148 struct ethtool_cable_result result;
149 struct ethtool_cable_fault_length fault_length;
150};
151
152struct ethtool_bitset_bits {
153 unsigned int n_bit;
154 struct ethtool_bitset_bit *bit;
155};
156
157struct ethtool_strings {
158 unsigned int n_string;
159 struct ethtool_string *string;
160};
161
162struct ethtool_bitset {
163 struct {
164 __u32 nomask:1;
165 __u32 size:1;
166 __u32 bits:1;
167 } _present;
168
169 __u32 size;
170 struct ethtool_bitset_bits bits;
171};
172
173struct ethtool_stringset_ {
174 struct {
175 __u32 id:1;
176 __u32 count:1;
177 } _present;
178
179 __u32 id;
180 __u32 count;
181 unsigned int n_strings;
182 struct ethtool_strings *strings;
183};
184
185struct ethtool_tunnel_udp_table {
186 struct {
187 __u32 size:1;
188 __u32 types:1;
189 } _present;
190
191 __u32 size;
192 struct ethtool_bitset types;
193 unsigned int n_entry;
194 struct ethtool_tunnel_udp_entry *entry;
195};
196
197struct ethtool_stringsets {
198 unsigned int n_stringset;
199 struct ethtool_stringset_ *stringset;
200};
201
202struct ethtool_tunnel_udp {
203 struct {
204 __u32 table:1;
205 } _present;
206
207 struct ethtool_tunnel_udp_table table;
208};
209
210/* ============== ETHTOOL_MSG_STRSET_GET ============== */
211/* ETHTOOL_MSG_STRSET_GET - do */
212struct ethtool_strset_get_req {
213 struct {
214 __u32 header:1;
215 __u32 stringsets:1;
216 __u32 counts_only:1;
217 } _present;
218
219 struct ethtool_header header;
220 struct ethtool_stringsets stringsets;
221};
222
223static inline struct ethtool_strset_get_req *ethtool_strset_get_req_alloc(void)
224{
225 return calloc(1, sizeof(struct ethtool_strset_get_req));
226}
227void ethtool_strset_get_req_free(struct ethtool_strset_get_req *req);
228
229static inline void
230ethtool_strset_get_req_set_header_dev_index(struct ethtool_strset_get_req *req,
231 __u32 dev_index)
232{
233 req->_present.header = 1;
234 req->header._present.dev_index = 1;
235 req->header.dev_index = dev_index;
236}
237static inline void
238ethtool_strset_get_req_set_header_dev_name(struct ethtool_strset_get_req *req,
239 const char *dev_name)
240{
241 free(req->header.dev_name);
242 req->header._present.dev_name_len = strlen(dev_name);
243 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
244 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
245 req->header.dev_name[req->header._present.dev_name_len] = 0;
246}
247static inline void
248ethtool_strset_get_req_set_header_flags(struct ethtool_strset_get_req *req,
249 __u32 flags)
250{
251 req->_present.header = 1;
252 req->header._present.flags = 1;
253 req->header.flags = flags;
254}
255static inline void
256__ethtool_strset_get_req_set_stringsets_stringset(struct ethtool_strset_get_req *req,
257 struct ethtool_stringset_ *stringset,
258 unsigned int n_stringset)
259{
260 free(req->stringsets.stringset);
261 req->stringsets.stringset = stringset;
262 req->stringsets.n_stringset = n_stringset;
263}
264static inline void
265ethtool_strset_get_req_set_counts_only(struct ethtool_strset_get_req *req)
266{
267 req->_present.counts_only = 1;
268}
269
270struct ethtool_strset_get_rsp {
271 struct {
272 __u32 header:1;
273 __u32 stringsets:1;
274 } _present;
275
276 struct ethtool_header header;
277 struct ethtool_stringsets stringsets;
278};
279
280void ethtool_strset_get_rsp_free(struct ethtool_strset_get_rsp *rsp);
281
282/*
283 * Get string set from the kernel.
284 */
285struct ethtool_strset_get_rsp *
286ethtool_strset_get(struct ynl_sock *ys, struct ethtool_strset_get_req *req);
287
288/* ETHTOOL_MSG_STRSET_GET - dump */
289struct ethtool_strset_get_req_dump {
290 struct {
291 __u32 header:1;
292 __u32 stringsets:1;
293 __u32 counts_only:1;
294 } _present;
295
296 struct ethtool_header header;
297 struct ethtool_stringsets stringsets;
298};
299
300static inline struct ethtool_strset_get_req_dump *
301ethtool_strset_get_req_dump_alloc(void)
302{
303 return calloc(1, sizeof(struct ethtool_strset_get_req_dump));
304}
305void ethtool_strset_get_req_dump_free(struct ethtool_strset_get_req_dump *req);
306
307static inline void
308ethtool_strset_get_req_dump_set_header_dev_index(struct ethtool_strset_get_req_dump *req,
309 __u32 dev_index)
310{
311 req->_present.header = 1;
312 req->header._present.dev_index = 1;
313 req->header.dev_index = dev_index;
314}
315static inline void
316ethtool_strset_get_req_dump_set_header_dev_name(struct ethtool_strset_get_req_dump *req,
317 const char *dev_name)
318{
319 free(req->header.dev_name);
320 req->header._present.dev_name_len = strlen(dev_name);
321 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
322 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
323 req->header.dev_name[req->header._present.dev_name_len] = 0;
324}
325static inline void
326ethtool_strset_get_req_dump_set_header_flags(struct ethtool_strset_get_req_dump *req,
327 __u32 flags)
328{
329 req->_present.header = 1;
330 req->header._present.flags = 1;
331 req->header.flags = flags;
332}
333static inline void
334__ethtool_strset_get_req_dump_set_stringsets_stringset(struct ethtool_strset_get_req_dump *req,
335 struct ethtool_stringset_ *stringset,
336 unsigned int n_stringset)
337{
338 free(req->stringsets.stringset);
339 req->stringsets.stringset = stringset;
340 req->stringsets.n_stringset = n_stringset;
341}
342static inline void
343ethtool_strset_get_req_dump_set_counts_only(struct ethtool_strset_get_req_dump *req)
344{
345 req->_present.counts_only = 1;
346}
347
348struct ethtool_strset_get_list {
349 struct ethtool_strset_get_list *next;
350 struct ethtool_strset_get_rsp obj __attribute__ ((aligned (8)));
351};
352
353void ethtool_strset_get_list_free(struct ethtool_strset_get_list *rsp);
354
355struct ethtool_strset_get_list *
356ethtool_strset_get_dump(struct ynl_sock *ys,
357 struct ethtool_strset_get_req_dump *req);
358
359/* ============== ETHTOOL_MSG_LINKINFO_GET ============== */
360/* ETHTOOL_MSG_LINKINFO_GET - do */
361struct ethtool_linkinfo_get_req {
362 struct {
363 __u32 header:1;
364 } _present;
365
366 struct ethtool_header header;
367};
368
369static inline struct ethtool_linkinfo_get_req *
370ethtool_linkinfo_get_req_alloc(void)
371{
372 return calloc(1, sizeof(struct ethtool_linkinfo_get_req));
373}
374void ethtool_linkinfo_get_req_free(struct ethtool_linkinfo_get_req *req);
375
376static inline void
377ethtool_linkinfo_get_req_set_header_dev_index(struct ethtool_linkinfo_get_req *req,
378 __u32 dev_index)
379{
380 req->_present.header = 1;
381 req->header._present.dev_index = 1;
382 req->header.dev_index = dev_index;
383}
384static inline void
385ethtool_linkinfo_get_req_set_header_dev_name(struct ethtool_linkinfo_get_req *req,
386 const char *dev_name)
387{
388 free(req->header.dev_name);
389 req->header._present.dev_name_len = strlen(dev_name);
390 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
391 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
392 req->header.dev_name[req->header._present.dev_name_len] = 0;
393}
394static inline void
395ethtool_linkinfo_get_req_set_header_flags(struct ethtool_linkinfo_get_req *req,
396 __u32 flags)
397{
398 req->_present.header = 1;
399 req->header._present.flags = 1;
400 req->header.flags = flags;
401}
402
403struct ethtool_linkinfo_get_rsp {
404 struct {
405 __u32 header:1;
406 __u32 port:1;
407 __u32 phyaddr:1;
408 __u32 tp_mdix:1;
409 __u32 tp_mdix_ctrl:1;
410 __u32 transceiver:1;
411 } _present;
412
413 struct ethtool_header header;
414 __u8 port;
415 __u8 phyaddr;
416 __u8 tp_mdix;
417 __u8 tp_mdix_ctrl;
418 __u8 transceiver;
419};
420
421void ethtool_linkinfo_get_rsp_free(struct ethtool_linkinfo_get_rsp *rsp);
422
423/*
424 * Get link info.
425 */
426struct ethtool_linkinfo_get_rsp *
427ethtool_linkinfo_get(struct ynl_sock *ys, struct ethtool_linkinfo_get_req *req);
428
429/* ETHTOOL_MSG_LINKINFO_GET - dump */
430struct ethtool_linkinfo_get_req_dump {
431 struct {
432 __u32 header:1;
433 } _present;
434
435 struct ethtool_header header;
436};
437
438static inline struct ethtool_linkinfo_get_req_dump *
439ethtool_linkinfo_get_req_dump_alloc(void)
440{
441 return calloc(1, sizeof(struct ethtool_linkinfo_get_req_dump));
442}
443void
444ethtool_linkinfo_get_req_dump_free(struct ethtool_linkinfo_get_req_dump *req);
445
446static inline void
447ethtool_linkinfo_get_req_dump_set_header_dev_index(struct ethtool_linkinfo_get_req_dump *req,
448 __u32 dev_index)
449{
450 req->_present.header = 1;
451 req->header._present.dev_index = 1;
452 req->header.dev_index = dev_index;
453}
454static inline void
455ethtool_linkinfo_get_req_dump_set_header_dev_name(struct ethtool_linkinfo_get_req_dump *req,
456 const char *dev_name)
457{
458 free(req->header.dev_name);
459 req->header._present.dev_name_len = strlen(dev_name);
460 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
461 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
462 req->header.dev_name[req->header._present.dev_name_len] = 0;
463}
464static inline void
465ethtool_linkinfo_get_req_dump_set_header_flags(struct ethtool_linkinfo_get_req_dump *req,
466 __u32 flags)
467{
468 req->_present.header = 1;
469 req->header._present.flags = 1;
470 req->header.flags = flags;
471}
472
473struct ethtool_linkinfo_get_list {
474 struct ethtool_linkinfo_get_list *next;
475 struct ethtool_linkinfo_get_rsp obj __attribute__ ((aligned (8)));
476};
477
478void ethtool_linkinfo_get_list_free(struct ethtool_linkinfo_get_list *rsp);
479
480struct ethtool_linkinfo_get_list *
481ethtool_linkinfo_get_dump(struct ynl_sock *ys,
482 struct ethtool_linkinfo_get_req_dump *req);
483
484/* ETHTOOL_MSG_LINKINFO_GET - notify */
485struct ethtool_linkinfo_get_ntf {
486 __u16 family;
487 __u8 cmd;
488 struct ynl_ntf_base_type *next;
489 void (*free)(struct ethtool_linkinfo_get_ntf *ntf);
490 struct ethtool_linkinfo_get_rsp obj __attribute__ ((aligned (8)));
491};
492
493void ethtool_linkinfo_get_ntf_free(struct ethtool_linkinfo_get_ntf *rsp);
494
495/* ============== ETHTOOL_MSG_LINKINFO_SET ============== */
496/* ETHTOOL_MSG_LINKINFO_SET - do */
497struct ethtool_linkinfo_set_req {
498 struct {
499 __u32 header:1;
500 __u32 port:1;
501 __u32 phyaddr:1;
502 __u32 tp_mdix:1;
503 __u32 tp_mdix_ctrl:1;
504 __u32 transceiver:1;
505 } _present;
506
507 struct ethtool_header header;
508 __u8 port;
509 __u8 phyaddr;
510 __u8 tp_mdix;
511 __u8 tp_mdix_ctrl;
512 __u8 transceiver;
513};
514
515static inline struct ethtool_linkinfo_set_req *
516ethtool_linkinfo_set_req_alloc(void)
517{
518 return calloc(1, sizeof(struct ethtool_linkinfo_set_req));
519}
520void ethtool_linkinfo_set_req_free(struct ethtool_linkinfo_set_req *req);
521
522static inline void
523ethtool_linkinfo_set_req_set_header_dev_index(struct ethtool_linkinfo_set_req *req,
524 __u32 dev_index)
525{
526 req->_present.header = 1;
527 req->header._present.dev_index = 1;
528 req->header.dev_index = dev_index;
529}
530static inline void
531ethtool_linkinfo_set_req_set_header_dev_name(struct ethtool_linkinfo_set_req *req,
532 const char *dev_name)
533{
534 free(req->header.dev_name);
535 req->header._present.dev_name_len = strlen(dev_name);
536 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
537 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
538 req->header.dev_name[req->header._present.dev_name_len] = 0;
539}
540static inline void
541ethtool_linkinfo_set_req_set_header_flags(struct ethtool_linkinfo_set_req *req,
542 __u32 flags)
543{
544 req->_present.header = 1;
545 req->header._present.flags = 1;
546 req->header.flags = flags;
547}
548static inline void
549ethtool_linkinfo_set_req_set_port(struct ethtool_linkinfo_set_req *req,
550 __u8 port)
551{
552 req->_present.port = 1;
553 req->port = port;
554}
555static inline void
556ethtool_linkinfo_set_req_set_phyaddr(struct ethtool_linkinfo_set_req *req,
557 __u8 phyaddr)
558{
559 req->_present.phyaddr = 1;
560 req->phyaddr = phyaddr;
561}
562static inline void
563ethtool_linkinfo_set_req_set_tp_mdix(struct ethtool_linkinfo_set_req *req,
564 __u8 tp_mdix)
565{
566 req->_present.tp_mdix = 1;
567 req->tp_mdix = tp_mdix;
568}
569static inline void
570ethtool_linkinfo_set_req_set_tp_mdix_ctrl(struct ethtool_linkinfo_set_req *req,
571 __u8 tp_mdix_ctrl)
572{
573 req->_present.tp_mdix_ctrl = 1;
574 req->tp_mdix_ctrl = tp_mdix_ctrl;
575}
576static inline void
577ethtool_linkinfo_set_req_set_transceiver(struct ethtool_linkinfo_set_req *req,
578 __u8 transceiver)
579{
580 req->_present.transceiver = 1;
581 req->transceiver = transceiver;
582}
583
584/*
585 * Set link info.
586 */
587int ethtool_linkinfo_set(struct ynl_sock *ys,
588 struct ethtool_linkinfo_set_req *req);
589
590/* ============== ETHTOOL_MSG_LINKMODES_GET ============== */
591/* ETHTOOL_MSG_LINKMODES_GET - do */
592struct ethtool_linkmodes_get_req {
593 struct {
594 __u32 header:1;
595 } _present;
596
597 struct ethtool_header header;
598};
599
600static inline struct ethtool_linkmodes_get_req *
601ethtool_linkmodes_get_req_alloc(void)
602{
603 return calloc(1, sizeof(struct ethtool_linkmodes_get_req));
604}
605void ethtool_linkmodes_get_req_free(struct ethtool_linkmodes_get_req *req);
606
607static inline void
608ethtool_linkmodes_get_req_set_header_dev_index(struct ethtool_linkmodes_get_req *req,
609 __u32 dev_index)
610{
611 req->_present.header = 1;
612 req->header._present.dev_index = 1;
613 req->header.dev_index = dev_index;
614}
615static inline void
616ethtool_linkmodes_get_req_set_header_dev_name(struct ethtool_linkmodes_get_req *req,
617 const char *dev_name)
618{
619 free(req->header.dev_name);
620 req->header._present.dev_name_len = strlen(dev_name);
621 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
622 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
623 req->header.dev_name[req->header._present.dev_name_len] = 0;
624}
625static inline void
626ethtool_linkmodes_get_req_set_header_flags(struct ethtool_linkmodes_get_req *req,
627 __u32 flags)
628{
629 req->_present.header = 1;
630 req->header._present.flags = 1;
631 req->header.flags = flags;
632}
633
634struct ethtool_linkmodes_get_rsp {
635 struct {
636 __u32 header:1;
637 __u32 autoneg:1;
638 __u32 ours:1;
639 __u32 peer:1;
640 __u32 speed:1;
641 __u32 duplex:1;
642 __u32 master_slave_cfg:1;
643 __u32 master_slave_state:1;
644 __u32 lanes:1;
645 __u32 rate_matching:1;
646 } _present;
647
648 struct ethtool_header header;
649 __u8 autoneg;
650 struct ethtool_bitset ours;
651 struct ethtool_bitset peer;
652 __u32 speed;
653 __u8 duplex;
654 __u8 master_slave_cfg;
655 __u8 master_slave_state;
656 __u32 lanes;
657 __u8 rate_matching;
658};
659
660void ethtool_linkmodes_get_rsp_free(struct ethtool_linkmodes_get_rsp *rsp);
661
662/*
663 * Get link modes.
664 */
665struct ethtool_linkmodes_get_rsp *
666ethtool_linkmodes_get(struct ynl_sock *ys,
667 struct ethtool_linkmodes_get_req *req);
668
669/* ETHTOOL_MSG_LINKMODES_GET - dump */
670struct ethtool_linkmodes_get_req_dump {
671 struct {
672 __u32 header:1;
673 } _present;
674
675 struct ethtool_header header;
676};
677
678static inline struct ethtool_linkmodes_get_req_dump *
679ethtool_linkmodes_get_req_dump_alloc(void)
680{
681 return calloc(1, sizeof(struct ethtool_linkmodes_get_req_dump));
682}
683void
684ethtool_linkmodes_get_req_dump_free(struct ethtool_linkmodes_get_req_dump *req);
685
686static inline void
687ethtool_linkmodes_get_req_dump_set_header_dev_index(struct ethtool_linkmodes_get_req_dump *req,
688 __u32 dev_index)
689{
690 req->_present.header = 1;
691 req->header._present.dev_index = 1;
692 req->header.dev_index = dev_index;
693}
694static inline void
695ethtool_linkmodes_get_req_dump_set_header_dev_name(struct ethtool_linkmodes_get_req_dump *req,
696 const char *dev_name)
697{
698 free(req->header.dev_name);
699 req->header._present.dev_name_len = strlen(dev_name);
700 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
701 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
702 req->header.dev_name[req->header._present.dev_name_len] = 0;
703}
704static inline void
705ethtool_linkmodes_get_req_dump_set_header_flags(struct ethtool_linkmodes_get_req_dump *req,
706 __u32 flags)
707{
708 req->_present.header = 1;
709 req->header._present.flags = 1;
710 req->header.flags = flags;
711}
712
713struct ethtool_linkmodes_get_list {
714 struct ethtool_linkmodes_get_list *next;
715 struct ethtool_linkmodes_get_rsp obj __attribute__ ((aligned (8)));
716};
717
718void ethtool_linkmodes_get_list_free(struct ethtool_linkmodes_get_list *rsp);
719
720struct ethtool_linkmodes_get_list *
721ethtool_linkmodes_get_dump(struct ynl_sock *ys,
722 struct ethtool_linkmodes_get_req_dump *req);
723
724/* ETHTOOL_MSG_LINKMODES_GET - notify */
725struct ethtool_linkmodes_get_ntf {
726 __u16 family;
727 __u8 cmd;
728 struct ynl_ntf_base_type *next;
729 void (*free)(struct ethtool_linkmodes_get_ntf *ntf);
730 struct ethtool_linkmodes_get_rsp obj __attribute__ ((aligned (8)));
731};
732
733void ethtool_linkmodes_get_ntf_free(struct ethtool_linkmodes_get_ntf *rsp);
734
735/* ============== ETHTOOL_MSG_LINKMODES_SET ============== */
736/* ETHTOOL_MSG_LINKMODES_SET - do */
737struct ethtool_linkmodes_set_req {
738 struct {
739 __u32 header:1;
740 __u32 autoneg:1;
741 __u32 ours:1;
742 __u32 peer:1;
743 __u32 speed:1;
744 __u32 duplex:1;
745 __u32 master_slave_cfg:1;
746 __u32 master_slave_state:1;
747 __u32 lanes:1;
748 __u32 rate_matching:1;
749 } _present;
750
751 struct ethtool_header header;
752 __u8 autoneg;
753 struct ethtool_bitset ours;
754 struct ethtool_bitset peer;
755 __u32 speed;
756 __u8 duplex;
757 __u8 master_slave_cfg;
758 __u8 master_slave_state;
759 __u32 lanes;
760 __u8 rate_matching;
761};
762
763static inline struct ethtool_linkmodes_set_req *
764ethtool_linkmodes_set_req_alloc(void)
765{
766 return calloc(1, sizeof(struct ethtool_linkmodes_set_req));
767}
768void ethtool_linkmodes_set_req_free(struct ethtool_linkmodes_set_req *req);
769
770static inline void
771ethtool_linkmodes_set_req_set_header_dev_index(struct ethtool_linkmodes_set_req *req,
772 __u32 dev_index)
773{
774 req->_present.header = 1;
775 req->header._present.dev_index = 1;
776 req->header.dev_index = dev_index;
777}
778static inline void
779ethtool_linkmodes_set_req_set_header_dev_name(struct ethtool_linkmodes_set_req *req,
780 const char *dev_name)
781{
782 free(req->header.dev_name);
783 req->header._present.dev_name_len = strlen(dev_name);
784 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
785 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
786 req->header.dev_name[req->header._present.dev_name_len] = 0;
787}
788static inline void
789ethtool_linkmodes_set_req_set_header_flags(struct ethtool_linkmodes_set_req *req,
790 __u32 flags)
791{
792 req->_present.header = 1;
793 req->header._present.flags = 1;
794 req->header.flags = flags;
795}
796static inline void
797ethtool_linkmodes_set_req_set_autoneg(struct ethtool_linkmodes_set_req *req,
798 __u8 autoneg)
799{
800 req->_present.autoneg = 1;
801 req->autoneg = autoneg;
802}
803static inline void
804ethtool_linkmodes_set_req_set_ours_nomask(struct ethtool_linkmodes_set_req *req)
805{
806 req->_present.ours = 1;
807 req->ours._present.nomask = 1;
808}
809static inline void
810ethtool_linkmodes_set_req_set_ours_size(struct ethtool_linkmodes_set_req *req,
811 __u32 size)
812{
813 req->_present.ours = 1;
814 req->ours._present.size = 1;
815 req->ours.size = size;
816}
817static inline void
818__ethtool_linkmodes_set_req_set_ours_bits_bit(struct ethtool_linkmodes_set_req *req,
819 struct ethtool_bitset_bit *bit,
820 unsigned int n_bit)
821{
822 free(req->ours.bits.bit);
823 req->ours.bits.bit = bit;
824 req->ours.bits.n_bit = n_bit;
825}
826static inline void
827ethtool_linkmodes_set_req_set_peer_nomask(struct ethtool_linkmodes_set_req *req)
828{
829 req->_present.peer = 1;
830 req->peer._present.nomask = 1;
831}
832static inline void
833ethtool_linkmodes_set_req_set_peer_size(struct ethtool_linkmodes_set_req *req,
834 __u32 size)
835{
836 req->_present.peer = 1;
837 req->peer._present.size = 1;
838 req->peer.size = size;
839}
840static inline void
841__ethtool_linkmodes_set_req_set_peer_bits_bit(struct ethtool_linkmodes_set_req *req,
842 struct ethtool_bitset_bit *bit,
843 unsigned int n_bit)
844{
845 free(req->peer.bits.bit);
846 req->peer.bits.bit = bit;
847 req->peer.bits.n_bit = n_bit;
848}
849static inline void
850ethtool_linkmodes_set_req_set_speed(struct ethtool_linkmodes_set_req *req,
851 __u32 speed)
852{
853 req->_present.speed = 1;
854 req->speed = speed;
855}
856static inline void
857ethtool_linkmodes_set_req_set_duplex(struct ethtool_linkmodes_set_req *req,
858 __u8 duplex)
859{
860 req->_present.duplex = 1;
861 req->duplex = duplex;
862}
863static inline void
864ethtool_linkmodes_set_req_set_master_slave_cfg(struct ethtool_linkmodes_set_req *req,
865 __u8 master_slave_cfg)
866{
867 req->_present.master_slave_cfg = 1;
868 req->master_slave_cfg = master_slave_cfg;
869}
870static inline void
871ethtool_linkmodes_set_req_set_master_slave_state(struct ethtool_linkmodes_set_req *req,
872 __u8 master_slave_state)
873{
874 req->_present.master_slave_state = 1;
875 req->master_slave_state = master_slave_state;
876}
877static inline void
878ethtool_linkmodes_set_req_set_lanes(struct ethtool_linkmodes_set_req *req,
879 __u32 lanes)
880{
881 req->_present.lanes = 1;
882 req->lanes = lanes;
883}
884static inline void
885ethtool_linkmodes_set_req_set_rate_matching(struct ethtool_linkmodes_set_req *req,
886 __u8 rate_matching)
887{
888 req->_present.rate_matching = 1;
889 req->rate_matching = rate_matching;
890}
891
892/*
893 * Set link modes.
894 */
895int ethtool_linkmodes_set(struct ynl_sock *ys,
896 struct ethtool_linkmodes_set_req *req);
897
898/* ============== ETHTOOL_MSG_LINKSTATE_GET ============== */
899/* ETHTOOL_MSG_LINKSTATE_GET - do */
900struct ethtool_linkstate_get_req {
901 struct {
902 __u32 header:1;
903 } _present;
904
905 struct ethtool_header header;
906};
907
908static inline struct ethtool_linkstate_get_req *
909ethtool_linkstate_get_req_alloc(void)
910{
911 return calloc(1, sizeof(struct ethtool_linkstate_get_req));
912}
913void ethtool_linkstate_get_req_free(struct ethtool_linkstate_get_req *req);
914
915static inline void
916ethtool_linkstate_get_req_set_header_dev_index(struct ethtool_linkstate_get_req *req,
917 __u32 dev_index)
918{
919 req->_present.header = 1;
920 req->header._present.dev_index = 1;
921 req->header.dev_index = dev_index;
922}
923static inline void
924ethtool_linkstate_get_req_set_header_dev_name(struct ethtool_linkstate_get_req *req,
925 const char *dev_name)
926{
927 free(req->header.dev_name);
928 req->header._present.dev_name_len = strlen(dev_name);
929 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
930 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
931 req->header.dev_name[req->header._present.dev_name_len] = 0;
932}
933static inline void
934ethtool_linkstate_get_req_set_header_flags(struct ethtool_linkstate_get_req *req,
935 __u32 flags)
936{
937 req->_present.header = 1;
938 req->header._present.flags = 1;
939 req->header.flags = flags;
940}
941
942struct ethtool_linkstate_get_rsp {
943 struct {
944 __u32 header:1;
945 __u32 link:1;
946 __u32 sqi:1;
947 __u32 sqi_max:1;
948 __u32 ext_state:1;
949 __u32 ext_substate:1;
950 __u32 ext_down_cnt:1;
951 } _present;
952
953 struct ethtool_header header;
954 __u8 link;
955 __u32 sqi;
956 __u32 sqi_max;
957 __u8 ext_state;
958 __u8 ext_substate;
959 __u32 ext_down_cnt;
960};
961
962void ethtool_linkstate_get_rsp_free(struct ethtool_linkstate_get_rsp *rsp);
963
964/*
965 * Get link state.
966 */
967struct ethtool_linkstate_get_rsp *
968ethtool_linkstate_get(struct ynl_sock *ys,
969 struct ethtool_linkstate_get_req *req);
970
971/* ETHTOOL_MSG_LINKSTATE_GET - dump */
972struct ethtool_linkstate_get_req_dump {
973 struct {
974 __u32 header:1;
975 } _present;
976
977 struct ethtool_header header;
978};
979
980static inline struct ethtool_linkstate_get_req_dump *
981ethtool_linkstate_get_req_dump_alloc(void)
982{
983 return calloc(1, sizeof(struct ethtool_linkstate_get_req_dump));
984}
985void
986ethtool_linkstate_get_req_dump_free(struct ethtool_linkstate_get_req_dump *req);
987
988static inline void
989ethtool_linkstate_get_req_dump_set_header_dev_index(struct ethtool_linkstate_get_req_dump *req,
990 __u32 dev_index)
991{
992 req->_present.header = 1;
993 req->header._present.dev_index = 1;
994 req->header.dev_index = dev_index;
995}
996static inline void
997ethtool_linkstate_get_req_dump_set_header_dev_name(struct ethtool_linkstate_get_req_dump *req,
998 const char *dev_name)
999{
1000 free(req->header.dev_name);
1001 req->header._present.dev_name_len = strlen(dev_name);
1002 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1003 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1004 req->header.dev_name[req->header._present.dev_name_len] = 0;
1005}
1006static inline void
1007ethtool_linkstate_get_req_dump_set_header_flags(struct ethtool_linkstate_get_req_dump *req,
1008 __u32 flags)
1009{
1010 req->_present.header = 1;
1011 req->header._present.flags = 1;
1012 req->header.flags = flags;
1013}
1014
1015struct ethtool_linkstate_get_list {
1016 struct ethtool_linkstate_get_list *next;
1017 struct ethtool_linkstate_get_rsp obj __attribute__ ((aligned (8)));
1018};
1019
1020void ethtool_linkstate_get_list_free(struct ethtool_linkstate_get_list *rsp);
1021
1022struct ethtool_linkstate_get_list *
1023ethtool_linkstate_get_dump(struct ynl_sock *ys,
1024 struct ethtool_linkstate_get_req_dump *req);
1025
1026/* ============== ETHTOOL_MSG_DEBUG_GET ============== */
1027/* ETHTOOL_MSG_DEBUG_GET - do */
1028struct ethtool_debug_get_req {
1029 struct {
1030 __u32 header:1;
1031 } _present;
1032
1033 struct ethtool_header header;
1034};
1035
1036static inline struct ethtool_debug_get_req *ethtool_debug_get_req_alloc(void)
1037{
1038 return calloc(1, sizeof(struct ethtool_debug_get_req));
1039}
1040void ethtool_debug_get_req_free(struct ethtool_debug_get_req *req);
1041
1042static inline void
1043ethtool_debug_get_req_set_header_dev_index(struct ethtool_debug_get_req *req,
1044 __u32 dev_index)
1045{
1046 req->_present.header = 1;
1047 req->header._present.dev_index = 1;
1048 req->header.dev_index = dev_index;
1049}
1050static inline void
1051ethtool_debug_get_req_set_header_dev_name(struct ethtool_debug_get_req *req,
1052 const char *dev_name)
1053{
1054 free(req->header.dev_name);
1055 req->header._present.dev_name_len = strlen(dev_name);
1056 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1057 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1058 req->header.dev_name[req->header._present.dev_name_len] = 0;
1059}
1060static inline void
1061ethtool_debug_get_req_set_header_flags(struct ethtool_debug_get_req *req,
1062 __u32 flags)
1063{
1064 req->_present.header = 1;
1065 req->header._present.flags = 1;
1066 req->header.flags = flags;
1067}
1068
1069struct ethtool_debug_get_rsp {
1070 struct {
1071 __u32 header:1;
1072 __u32 msgmask:1;
1073 } _present;
1074
1075 struct ethtool_header header;
1076 struct ethtool_bitset msgmask;
1077};
1078
1079void ethtool_debug_get_rsp_free(struct ethtool_debug_get_rsp *rsp);
1080
1081/*
1082 * Get debug message mask.
1083 */
1084struct ethtool_debug_get_rsp *
1085ethtool_debug_get(struct ynl_sock *ys, struct ethtool_debug_get_req *req);
1086
1087/* ETHTOOL_MSG_DEBUG_GET - dump */
1088struct ethtool_debug_get_req_dump {
1089 struct {
1090 __u32 header:1;
1091 } _present;
1092
1093 struct ethtool_header header;
1094};
1095
1096static inline struct ethtool_debug_get_req_dump *
1097ethtool_debug_get_req_dump_alloc(void)
1098{
1099 return calloc(1, sizeof(struct ethtool_debug_get_req_dump));
1100}
1101void ethtool_debug_get_req_dump_free(struct ethtool_debug_get_req_dump *req);
1102
1103static inline void
1104ethtool_debug_get_req_dump_set_header_dev_index(struct ethtool_debug_get_req_dump *req,
1105 __u32 dev_index)
1106{
1107 req->_present.header = 1;
1108 req->header._present.dev_index = 1;
1109 req->header.dev_index = dev_index;
1110}
1111static inline void
1112ethtool_debug_get_req_dump_set_header_dev_name(struct ethtool_debug_get_req_dump *req,
1113 const char *dev_name)
1114{
1115 free(req->header.dev_name);
1116 req->header._present.dev_name_len = strlen(dev_name);
1117 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1118 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1119 req->header.dev_name[req->header._present.dev_name_len] = 0;
1120}
1121static inline void
1122ethtool_debug_get_req_dump_set_header_flags(struct ethtool_debug_get_req_dump *req,
1123 __u32 flags)
1124{
1125 req->_present.header = 1;
1126 req->header._present.flags = 1;
1127 req->header.flags = flags;
1128}
1129
1130struct ethtool_debug_get_list {
1131 struct ethtool_debug_get_list *next;
1132 struct ethtool_debug_get_rsp obj __attribute__ ((aligned (8)));
1133};
1134
1135void ethtool_debug_get_list_free(struct ethtool_debug_get_list *rsp);
1136
1137struct ethtool_debug_get_list *
1138ethtool_debug_get_dump(struct ynl_sock *ys,
1139 struct ethtool_debug_get_req_dump *req);
1140
1141/* ETHTOOL_MSG_DEBUG_GET - notify */
1142struct ethtool_debug_get_ntf {
1143 __u16 family;
1144 __u8 cmd;
1145 struct ynl_ntf_base_type *next;
1146 void (*free)(struct ethtool_debug_get_ntf *ntf);
1147 struct ethtool_debug_get_rsp obj __attribute__ ((aligned (8)));
1148};
1149
1150void ethtool_debug_get_ntf_free(struct ethtool_debug_get_ntf *rsp);
1151
1152/* ============== ETHTOOL_MSG_DEBUG_SET ============== */
1153/* ETHTOOL_MSG_DEBUG_SET - do */
1154struct ethtool_debug_set_req {
1155 struct {
1156 __u32 header:1;
1157 __u32 msgmask:1;
1158 } _present;
1159
1160 struct ethtool_header header;
1161 struct ethtool_bitset msgmask;
1162};
1163
1164static inline struct ethtool_debug_set_req *ethtool_debug_set_req_alloc(void)
1165{
1166 return calloc(1, sizeof(struct ethtool_debug_set_req));
1167}
1168void ethtool_debug_set_req_free(struct ethtool_debug_set_req *req);
1169
1170static inline void
1171ethtool_debug_set_req_set_header_dev_index(struct ethtool_debug_set_req *req,
1172 __u32 dev_index)
1173{
1174 req->_present.header = 1;
1175 req->header._present.dev_index = 1;
1176 req->header.dev_index = dev_index;
1177}
1178static inline void
1179ethtool_debug_set_req_set_header_dev_name(struct ethtool_debug_set_req *req,
1180 const char *dev_name)
1181{
1182 free(req->header.dev_name);
1183 req->header._present.dev_name_len = strlen(dev_name);
1184 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1185 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1186 req->header.dev_name[req->header._present.dev_name_len] = 0;
1187}
1188static inline void
1189ethtool_debug_set_req_set_header_flags(struct ethtool_debug_set_req *req,
1190 __u32 flags)
1191{
1192 req->_present.header = 1;
1193 req->header._present.flags = 1;
1194 req->header.flags = flags;
1195}
1196static inline void
1197ethtool_debug_set_req_set_msgmask_nomask(struct ethtool_debug_set_req *req)
1198{
1199 req->_present.msgmask = 1;
1200 req->msgmask._present.nomask = 1;
1201}
1202static inline void
1203ethtool_debug_set_req_set_msgmask_size(struct ethtool_debug_set_req *req,
1204 __u32 size)
1205{
1206 req->_present.msgmask = 1;
1207 req->msgmask._present.size = 1;
1208 req->msgmask.size = size;
1209}
1210static inline void
1211__ethtool_debug_set_req_set_msgmask_bits_bit(struct ethtool_debug_set_req *req,
1212 struct ethtool_bitset_bit *bit,
1213 unsigned int n_bit)
1214{
1215 free(req->msgmask.bits.bit);
1216 req->msgmask.bits.bit = bit;
1217 req->msgmask.bits.n_bit = n_bit;
1218}
1219
1220/*
1221 * Set debug message mask.
1222 */
1223int ethtool_debug_set(struct ynl_sock *ys, struct ethtool_debug_set_req *req);
1224
1225/* ============== ETHTOOL_MSG_WOL_GET ============== */
1226/* ETHTOOL_MSG_WOL_GET - do */
1227struct ethtool_wol_get_req {
1228 struct {
1229 __u32 header:1;
1230 } _present;
1231
1232 struct ethtool_header header;
1233};
1234
1235static inline struct ethtool_wol_get_req *ethtool_wol_get_req_alloc(void)
1236{
1237 return calloc(1, sizeof(struct ethtool_wol_get_req));
1238}
1239void ethtool_wol_get_req_free(struct ethtool_wol_get_req *req);
1240
1241static inline void
1242ethtool_wol_get_req_set_header_dev_index(struct ethtool_wol_get_req *req,
1243 __u32 dev_index)
1244{
1245 req->_present.header = 1;
1246 req->header._present.dev_index = 1;
1247 req->header.dev_index = dev_index;
1248}
1249static inline void
1250ethtool_wol_get_req_set_header_dev_name(struct ethtool_wol_get_req *req,
1251 const char *dev_name)
1252{
1253 free(req->header.dev_name);
1254 req->header._present.dev_name_len = strlen(dev_name);
1255 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1256 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1257 req->header.dev_name[req->header._present.dev_name_len] = 0;
1258}
1259static inline void
1260ethtool_wol_get_req_set_header_flags(struct ethtool_wol_get_req *req,
1261 __u32 flags)
1262{
1263 req->_present.header = 1;
1264 req->header._present.flags = 1;
1265 req->header.flags = flags;
1266}
1267
1268struct ethtool_wol_get_rsp {
1269 struct {
1270 __u32 header:1;
1271 __u32 modes:1;
1272 __u32 sopass_len;
1273 } _present;
1274
1275 struct ethtool_header header;
1276 struct ethtool_bitset modes;
1277 void *sopass;
1278};
1279
1280void ethtool_wol_get_rsp_free(struct ethtool_wol_get_rsp *rsp);
1281
1282/*
1283 * Get WOL params.
1284 */
1285struct ethtool_wol_get_rsp *
1286ethtool_wol_get(struct ynl_sock *ys, struct ethtool_wol_get_req *req);
1287
1288/* ETHTOOL_MSG_WOL_GET - dump */
1289struct ethtool_wol_get_req_dump {
1290 struct {
1291 __u32 header:1;
1292 } _present;
1293
1294 struct ethtool_header header;
1295};
1296
1297static inline struct ethtool_wol_get_req_dump *
1298ethtool_wol_get_req_dump_alloc(void)
1299{
1300 return calloc(1, sizeof(struct ethtool_wol_get_req_dump));
1301}
1302void ethtool_wol_get_req_dump_free(struct ethtool_wol_get_req_dump *req);
1303
1304static inline void
1305ethtool_wol_get_req_dump_set_header_dev_index(struct ethtool_wol_get_req_dump *req,
1306 __u32 dev_index)
1307{
1308 req->_present.header = 1;
1309 req->header._present.dev_index = 1;
1310 req->header.dev_index = dev_index;
1311}
1312static inline void
1313ethtool_wol_get_req_dump_set_header_dev_name(struct ethtool_wol_get_req_dump *req,
1314 const char *dev_name)
1315{
1316 free(req->header.dev_name);
1317 req->header._present.dev_name_len = strlen(dev_name);
1318 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1319 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1320 req->header.dev_name[req->header._present.dev_name_len] = 0;
1321}
1322static inline void
1323ethtool_wol_get_req_dump_set_header_flags(struct ethtool_wol_get_req_dump *req,
1324 __u32 flags)
1325{
1326 req->_present.header = 1;
1327 req->header._present.flags = 1;
1328 req->header.flags = flags;
1329}
1330
1331struct ethtool_wol_get_list {
1332 struct ethtool_wol_get_list *next;
1333 struct ethtool_wol_get_rsp obj __attribute__ ((aligned (8)));
1334};
1335
1336void ethtool_wol_get_list_free(struct ethtool_wol_get_list *rsp);
1337
1338struct ethtool_wol_get_list *
1339ethtool_wol_get_dump(struct ynl_sock *ys, struct ethtool_wol_get_req_dump *req);
1340
1341/* ETHTOOL_MSG_WOL_GET - notify */
1342struct ethtool_wol_get_ntf {
1343 __u16 family;
1344 __u8 cmd;
1345 struct ynl_ntf_base_type *next;
1346 void (*free)(struct ethtool_wol_get_ntf *ntf);
1347 struct ethtool_wol_get_rsp obj __attribute__ ((aligned (8)));
1348};
1349
1350void ethtool_wol_get_ntf_free(struct ethtool_wol_get_ntf *rsp);
1351
1352/* ============== ETHTOOL_MSG_WOL_SET ============== */
1353/* ETHTOOL_MSG_WOL_SET - do */
1354struct ethtool_wol_set_req {
1355 struct {
1356 __u32 header:1;
1357 __u32 modes:1;
1358 __u32 sopass_len;
1359 } _present;
1360
1361 struct ethtool_header header;
1362 struct ethtool_bitset modes;
1363 void *sopass;
1364};
1365
1366static inline struct ethtool_wol_set_req *ethtool_wol_set_req_alloc(void)
1367{
1368 return calloc(1, sizeof(struct ethtool_wol_set_req));
1369}
1370void ethtool_wol_set_req_free(struct ethtool_wol_set_req *req);
1371
1372static inline void
1373ethtool_wol_set_req_set_header_dev_index(struct ethtool_wol_set_req *req,
1374 __u32 dev_index)
1375{
1376 req->_present.header = 1;
1377 req->header._present.dev_index = 1;
1378 req->header.dev_index = dev_index;
1379}
1380static inline void
1381ethtool_wol_set_req_set_header_dev_name(struct ethtool_wol_set_req *req,
1382 const char *dev_name)
1383{
1384 free(req->header.dev_name);
1385 req->header._present.dev_name_len = strlen(dev_name);
1386 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1387 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1388 req->header.dev_name[req->header._present.dev_name_len] = 0;
1389}
1390static inline void
1391ethtool_wol_set_req_set_header_flags(struct ethtool_wol_set_req *req,
1392 __u32 flags)
1393{
1394 req->_present.header = 1;
1395 req->header._present.flags = 1;
1396 req->header.flags = flags;
1397}
1398static inline void
1399ethtool_wol_set_req_set_modes_nomask(struct ethtool_wol_set_req *req)
1400{
1401 req->_present.modes = 1;
1402 req->modes._present.nomask = 1;
1403}
1404static inline void
1405ethtool_wol_set_req_set_modes_size(struct ethtool_wol_set_req *req, __u32 size)
1406{
1407 req->_present.modes = 1;
1408 req->modes._present.size = 1;
1409 req->modes.size = size;
1410}
1411static inline void
1412__ethtool_wol_set_req_set_modes_bits_bit(struct ethtool_wol_set_req *req,
1413 struct ethtool_bitset_bit *bit,
1414 unsigned int n_bit)
1415{
1416 free(req->modes.bits.bit);
1417 req->modes.bits.bit = bit;
1418 req->modes.bits.n_bit = n_bit;
1419}
1420static inline void
1421ethtool_wol_set_req_set_sopass(struct ethtool_wol_set_req *req,
1422 const void *sopass, size_t len)
1423{
1424 free(req->sopass);
1425 req->_present.sopass_len = len;
1426 req->sopass = malloc(req->_present.sopass_len);
1427 memcpy(req->sopass, sopass, req->_present.sopass_len);
1428}
1429
1430/*
1431 * Set WOL params.
1432 */
1433int ethtool_wol_set(struct ynl_sock *ys, struct ethtool_wol_set_req *req);
1434
1435/* ============== ETHTOOL_MSG_FEATURES_GET ============== */
1436/* ETHTOOL_MSG_FEATURES_GET - do */
1437struct ethtool_features_get_req {
1438 struct {
1439 __u32 header:1;
1440 } _present;
1441
1442 struct ethtool_header header;
1443};
1444
1445static inline struct ethtool_features_get_req *
1446ethtool_features_get_req_alloc(void)
1447{
1448 return calloc(1, sizeof(struct ethtool_features_get_req));
1449}
1450void ethtool_features_get_req_free(struct ethtool_features_get_req *req);
1451
1452static inline void
1453ethtool_features_get_req_set_header_dev_index(struct ethtool_features_get_req *req,
1454 __u32 dev_index)
1455{
1456 req->_present.header = 1;
1457 req->header._present.dev_index = 1;
1458 req->header.dev_index = dev_index;
1459}
1460static inline void
1461ethtool_features_get_req_set_header_dev_name(struct ethtool_features_get_req *req,
1462 const char *dev_name)
1463{
1464 free(req->header.dev_name);
1465 req->header._present.dev_name_len = strlen(dev_name);
1466 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1467 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1468 req->header.dev_name[req->header._present.dev_name_len] = 0;
1469}
1470static inline void
1471ethtool_features_get_req_set_header_flags(struct ethtool_features_get_req *req,
1472 __u32 flags)
1473{
1474 req->_present.header = 1;
1475 req->header._present.flags = 1;
1476 req->header.flags = flags;
1477}
1478
1479struct ethtool_features_get_rsp {
1480 struct {
1481 __u32 header:1;
1482 __u32 hw:1;
1483 __u32 wanted:1;
1484 __u32 active:1;
1485 __u32 nochange:1;
1486 } _present;
1487
1488 struct ethtool_header header;
1489 struct ethtool_bitset hw;
1490 struct ethtool_bitset wanted;
1491 struct ethtool_bitset active;
1492 struct ethtool_bitset nochange;
1493};
1494
1495void ethtool_features_get_rsp_free(struct ethtool_features_get_rsp *rsp);
1496
1497/*
1498 * Get features.
1499 */
1500struct ethtool_features_get_rsp *
1501ethtool_features_get(struct ynl_sock *ys, struct ethtool_features_get_req *req);
1502
1503/* ETHTOOL_MSG_FEATURES_GET - dump */
1504struct ethtool_features_get_req_dump {
1505 struct {
1506 __u32 header:1;
1507 } _present;
1508
1509 struct ethtool_header header;
1510};
1511
1512static inline struct ethtool_features_get_req_dump *
1513ethtool_features_get_req_dump_alloc(void)
1514{
1515 return calloc(1, sizeof(struct ethtool_features_get_req_dump));
1516}
1517void
1518ethtool_features_get_req_dump_free(struct ethtool_features_get_req_dump *req);
1519
1520static inline void
1521ethtool_features_get_req_dump_set_header_dev_index(struct ethtool_features_get_req_dump *req,
1522 __u32 dev_index)
1523{
1524 req->_present.header = 1;
1525 req->header._present.dev_index = 1;
1526 req->header.dev_index = dev_index;
1527}
1528static inline void
1529ethtool_features_get_req_dump_set_header_dev_name(struct ethtool_features_get_req_dump *req,
1530 const char *dev_name)
1531{
1532 free(req->header.dev_name);
1533 req->header._present.dev_name_len = strlen(dev_name);
1534 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1535 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1536 req->header.dev_name[req->header._present.dev_name_len] = 0;
1537}
1538static inline void
1539ethtool_features_get_req_dump_set_header_flags(struct ethtool_features_get_req_dump *req,
1540 __u32 flags)
1541{
1542 req->_present.header = 1;
1543 req->header._present.flags = 1;
1544 req->header.flags = flags;
1545}
1546
1547struct ethtool_features_get_list {
1548 struct ethtool_features_get_list *next;
1549 struct ethtool_features_get_rsp obj __attribute__ ((aligned (8)));
1550};
1551
1552void ethtool_features_get_list_free(struct ethtool_features_get_list *rsp);
1553
1554struct ethtool_features_get_list *
1555ethtool_features_get_dump(struct ynl_sock *ys,
1556 struct ethtool_features_get_req_dump *req);
1557
1558/* ETHTOOL_MSG_FEATURES_GET - notify */
1559struct ethtool_features_get_ntf {
1560 __u16 family;
1561 __u8 cmd;
1562 struct ynl_ntf_base_type *next;
1563 void (*free)(struct ethtool_features_get_ntf *ntf);
1564 struct ethtool_features_get_rsp obj __attribute__ ((aligned (8)));
1565};
1566
1567void ethtool_features_get_ntf_free(struct ethtool_features_get_ntf *rsp);
1568
1569/* ============== ETHTOOL_MSG_FEATURES_SET ============== */
1570/* ETHTOOL_MSG_FEATURES_SET - do */
1571struct ethtool_features_set_req {
1572 struct {
1573 __u32 header:1;
1574 __u32 hw:1;
1575 __u32 wanted:1;
1576 __u32 active:1;
1577 __u32 nochange:1;
1578 } _present;
1579
1580 struct ethtool_header header;
1581 struct ethtool_bitset hw;
1582 struct ethtool_bitset wanted;
1583 struct ethtool_bitset active;
1584 struct ethtool_bitset nochange;
1585};
1586
1587static inline struct ethtool_features_set_req *
1588ethtool_features_set_req_alloc(void)
1589{
1590 return calloc(1, sizeof(struct ethtool_features_set_req));
1591}
1592void ethtool_features_set_req_free(struct ethtool_features_set_req *req);
1593
1594static inline void
1595ethtool_features_set_req_set_header_dev_index(struct ethtool_features_set_req *req,
1596 __u32 dev_index)
1597{
1598 req->_present.header = 1;
1599 req->header._present.dev_index = 1;
1600 req->header.dev_index = dev_index;
1601}
1602static inline void
1603ethtool_features_set_req_set_header_dev_name(struct ethtool_features_set_req *req,
1604 const char *dev_name)
1605{
1606 free(req->header.dev_name);
1607 req->header._present.dev_name_len = strlen(dev_name);
1608 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1609 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1610 req->header.dev_name[req->header._present.dev_name_len] = 0;
1611}
1612static inline void
1613ethtool_features_set_req_set_header_flags(struct ethtool_features_set_req *req,
1614 __u32 flags)
1615{
1616 req->_present.header = 1;
1617 req->header._present.flags = 1;
1618 req->header.flags = flags;
1619}
1620static inline void
1621ethtool_features_set_req_set_hw_nomask(struct ethtool_features_set_req *req)
1622{
1623 req->_present.hw = 1;
1624 req->hw._present.nomask = 1;
1625}
1626static inline void
1627ethtool_features_set_req_set_hw_size(struct ethtool_features_set_req *req,
1628 __u32 size)
1629{
1630 req->_present.hw = 1;
1631 req->hw._present.size = 1;
1632 req->hw.size = size;
1633}
1634static inline void
1635__ethtool_features_set_req_set_hw_bits_bit(struct ethtool_features_set_req *req,
1636 struct ethtool_bitset_bit *bit,
1637 unsigned int n_bit)
1638{
1639 free(req->hw.bits.bit);
1640 req->hw.bits.bit = bit;
1641 req->hw.bits.n_bit = n_bit;
1642}
1643static inline void
1644ethtool_features_set_req_set_wanted_nomask(struct ethtool_features_set_req *req)
1645{
1646 req->_present.wanted = 1;
1647 req->wanted._present.nomask = 1;
1648}
1649static inline void
1650ethtool_features_set_req_set_wanted_size(struct ethtool_features_set_req *req,
1651 __u32 size)
1652{
1653 req->_present.wanted = 1;
1654 req->wanted._present.size = 1;
1655 req->wanted.size = size;
1656}
1657static inline void
1658__ethtool_features_set_req_set_wanted_bits_bit(struct ethtool_features_set_req *req,
1659 struct ethtool_bitset_bit *bit,
1660 unsigned int n_bit)
1661{
1662 free(req->wanted.bits.bit);
1663 req->wanted.bits.bit = bit;
1664 req->wanted.bits.n_bit = n_bit;
1665}
1666static inline void
1667ethtool_features_set_req_set_active_nomask(struct ethtool_features_set_req *req)
1668{
1669 req->_present.active = 1;
1670 req->active._present.nomask = 1;
1671}
1672static inline void
1673ethtool_features_set_req_set_active_size(struct ethtool_features_set_req *req,
1674 __u32 size)
1675{
1676 req->_present.active = 1;
1677 req->active._present.size = 1;
1678 req->active.size = size;
1679}
1680static inline void
1681__ethtool_features_set_req_set_active_bits_bit(struct ethtool_features_set_req *req,
1682 struct ethtool_bitset_bit *bit,
1683 unsigned int n_bit)
1684{
1685 free(req->active.bits.bit);
1686 req->active.bits.bit = bit;
1687 req->active.bits.n_bit = n_bit;
1688}
1689static inline void
1690ethtool_features_set_req_set_nochange_nomask(struct ethtool_features_set_req *req)
1691{
1692 req->_present.nochange = 1;
1693 req->nochange._present.nomask = 1;
1694}
1695static inline void
1696ethtool_features_set_req_set_nochange_size(struct ethtool_features_set_req *req,
1697 __u32 size)
1698{
1699 req->_present.nochange = 1;
1700 req->nochange._present.size = 1;
1701 req->nochange.size = size;
1702}
1703static inline void
1704__ethtool_features_set_req_set_nochange_bits_bit(struct ethtool_features_set_req *req,
1705 struct ethtool_bitset_bit *bit,
1706 unsigned int n_bit)
1707{
1708 free(req->nochange.bits.bit);
1709 req->nochange.bits.bit = bit;
1710 req->nochange.bits.n_bit = n_bit;
1711}
1712
1713struct ethtool_features_set_rsp {
1714 struct {
1715 __u32 header:1;
1716 __u32 hw:1;
1717 __u32 wanted:1;
1718 __u32 active:1;
1719 __u32 nochange:1;
1720 } _present;
1721
1722 struct ethtool_header header;
1723 struct ethtool_bitset hw;
1724 struct ethtool_bitset wanted;
1725 struct ethtool_bitset active;
1726 struct ethtool_bitset nochange;
1727};
1728
1729void ethtool_features_set_rsp_free(struct ethtool_features_set_rsp *rsp);
1730
1731/*
1732 * Set features.
1733 */
1734struct ethtool_features_set_rsp *
1735ethtool_features_set(struct ynl_sock *ys, struct ethtool_features_set_req *req);
1736
1737/* ============== ETHTOOL_MSG_PRIVFLAGS_GET ============== */
1738/* ETHTOOL_MSG_PRIVFLAGS_GET - do */
1739struct ethtool_privflags_get_req {
1740 struct {
1741 __u32 header:1;
1742 } _present;
1743
1744 struct ethtool_header header;
1745};
1746
1747static inline struct ethtool_privflags_get_req *
1748ethtool_privflags_get_req_alloc(void)
1749{
1750 return calloc(1, sizeof(struct ethtool_privflags_get_req));
1751}
1752void ethtool_privflags_get_req_free(struct ethtool_privflags_get_req *req);
1753
1754static inline void
1755ethtool_privflags_get_req_set_header_dev_index(struct ethtool_privflags_get_req *req,
1756 __u32 dev_index)
1757{
1758 req->_present.header = 1;
1759 req->header._present.dev_index = 1;
1760 req->header.dev_index = dev_index;
1761}
1762static inline void
1763ethtool_privflags_get_req_set_header_dev_name(struct ethtool_privflags_get_req *req,
1764 const char *dev_name)
1765{
1766 free(req->header.dev_name);
1767 req->header._present.dev_name_len = strlen(dev_name);
1768 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1769 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1770 req->header.dev_name[req->header._present.dev_name_len] = 0;
1771}
1772static inline void
1773ethtool_privflags_get_req_set_header_flags(struct ethtool_privflags_get_req *req,
1774 __u32 flags)
1775{
1776 req->_present.header = 1;
1777 req->header._present.flags = 1;
1778 req->header.flags = flags;
1779}
1780
1781struct ethtool_privflags_get_rsp {
1782 struct {
1783 __u32 header:1;
1784 __u32 flags:1;
1785 } _present;
1786
1787 struct ethtool_header header;
1788 struct ethtool_bitset flags;
1789};
1790
1791void ethtool_privflags_get_rsp_free(struct ethtool_privflags_get_rsp *rsp);
1792
1793/*
1794 * Get device private flags.
1795 */
1796struct ethtool_privflags_get_rsp *
1797ethtool_privflags_get(struct ynl_sock *ys,
1798 struct ethtool_privflags_get_req *req);
1799
1800/* ETHTOOL_MSG_PRIVFLAGS_GET - dump */
1801struct ethtool_privflags_get_req_dump {
1802 struct {
1803 __u32 header:1;
1804 } _present;
1805
1806 struct ethtool_header header;
1807};
1808
1809static inline struct ethtool_privflags_get_req_dump *
1810ethtool_privflags_get_req_dump_alloc(void)
1811{
1812 return calloc(1, sizeof(struct ethtool_privflags_get_req_dump));
1813}
1814void
1815ethtool_privflags_get_req_dump_free(struct ethtool_privflags_get_req_dump *req);
1816
1817static inline void
1818ethtool_privflags_get_req_dump_set_header_dev_index(struct ethtool_privflags_get_req_dump *req,
1819 __u32 dev_index)
1820{
1821 req->_present.header = 1;
1822 req->header._present.dev_index = 1;
1823 req->header.dev_index = dev_index;
1824}
1825static inline void
1826ethtool_privflags_get_req_dump_set_header_dev_name(struct ethtool_privflags_get_req_dump *req,
1827 const char *dev_name)
1828{
1829 free(req->header.dev_name);
1830 req->header._present.dev_name_len = strlen(dev_name);
1831 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1832 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1833 req->header.dev_name[req->header._present.dev_name_len] = 0;
1834}
1835static inline void
1836ethtool_privflags_get_req_dump_set_header_flags(struct ethtool_privflags_get_req_dump *req,
1837 __u32 flags)
1838{
1839 req->_present.header = 1;
1840 req->header._present.flags = 1;
1841 req->header.flags = flags;
1842}
1843
1844struct ethtool_privflags_get_list {
1845 struct ethtool_privflags_get_list *next;
1846 struct ethtool_privflags_get_rsp obj __attribute__ ((aligned (8)));
1847};
1848
1849void ethtool_privflags_get_list_free(struct ethtool_privflags_get_list *rsp);
1850
1851struct ethtool_privflags_get_list *
1852ethtool_privflags_get_dump(struct ynl_sock *ys,
1853 struct ethtool_privflags_get_req_dump *req);
1854
1855/* ETHTOOL_MSG_PRIVFLAGS_GET - notify */
1856struct ethtool_privflags_get_ntf {
1857 __u16 family;
1858 __u8 cmd;
1859 struct ynl_ntf_base_type *next;
1860 void (*free)(struct ethtool_privflags_get_ntf *ntf);
1861 struct ethtool_privflags_get_rsp obj __attribute__ ((aligned (8)));
1862};
1863
1864void ethtool_privflags_get_ntf_free(struct ethtool_privflags_get_ntf *rsp);
1865
1866/* ============== ETHTOOL_MSG_PRIVFLAGS_SET ============== */
1867/* ETHTOOL_MSG_PRIVFLAGS_SET - do */
1868struct ethtool_privflags_set_req {
1869 struct {
1870 __u32 header:1;
1871 __u32 flags:1;
1872 } _present;
1873
1874 struct ethtool_header header;
1875 struct ethtool_bitset flags;
1876};
1877
1878static inline struct ethtool_privflags_set_req *
1879ethtool_privflags_set_req_alloc(void)
1880{
1881 return calloc(1, sizeof(struct ethtool_privflags_set_req));
1882}
1883void ethtool_privflags_set_req_free(struct ethtool_privflags_set_req *req);
1884
1885static inline void
1886ethtool_privflags_set_req_set_header_dev_index(struct ethtool_privflags_set_req *req,
1887 __u32 dev_index)
1888{
1889 req->_present.header = 1;
1890 req->header._present.dev_index = 1;
1891 req->header.dev_index = dev_index;
1892}
1893static inline void
1894ethtool_privflags_set_req_set_header_dev_name(struct ethtool_privflags_set_req *req,
1895 const char *dev_name)
1896{
1897 free(req->header.dev_name);
1898 req->header._present.dev_name_len = strlen(dev_name);
1899 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1900 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1901 req->header.dev_name[req->header._present.dev_name_len] = 0;
1902}
1903static inline void
1904ethtool_privflags_set_req_set_header_flags(struct ethtool_privflags_set_req *req,
1905 __u32 flags)
1906{
1907 req->_present.header = 1;
1908 req->header._present.flags = 1;
1909 req->header.flags = flags;
1910}
1911static inline void
1912ethtool_privflags_set_req_set_flags_nomask(struct ethtool_privflags_set_req *req)
1913{
1914 req->_present.flags = 1;
1915 req->flags._present.nomask = 1;
1916}
1917static inline void
1918ethtool_privflags_set_req_set_flags_size(struct ethtool_privflags_set_req *req,
1919 __u32 size)
1920{
1921 req->_present.flags = 1;
1922 req->flags._present.size = 1;
1923 req->flags.size = size;
1924}
1925static inline void
1926__ethtool_privflags_set_req_set_flags_bits_bit(struct ethtool_privflags_set_req *req,
1927 struct ethtool_bitset_bit *bit,
1928 unsigned int n_bit)
1929{
1930 free(req->flags.bits.bit);
1931 req->flags.bits.bit = bit;
1932 req->flags.bits.n_bit = n_bit;
1933}
1934
1935/*
1936 * Set device private flags.
1937 */
1938int ethtool_privflags_set(struct ynl_sock *ys,
1939 struct ethtool_privflags_set_req *req);
1940
1941/* ============== ETHTOOL_MSG_RINGS_GET ============== */
1942/* ETHTOOL_MSG_RINGS_GET - do */
1943struct ethtool_rings_get_req {
1944 struct {
1945 __u32 header:1;
1946 } _present;
1947
1948 struct ethtool_header header;
1949};
1950
1951static inline struct ethtool_rings_get_req *ethtool_rings_get_req_alloc(void)
1952{
1953 return calloc(1, sizeof(struct ethtool_rings_get_req));
1954}
1955void ethtool_rings_get_req_free(struct ethtool_rings_get_req *req);
1956
1957static inline void
1958ethtool_rings_get_req_set_header_dev_index(struct ethtool_rings_get_req *req,
1959 __u32 dev_index)
1960{
1961 req->_present.header = 1;
1962 req->header._present.dev_index = 1;
1963 req->header.dev_index = dev_index;
1964}
1965static inline void
1966ethtool_rings_get_req_set_header_dev_name(struct ethtool_rings_get_req *req,
1967 const char *dev_name)
1968{
1969 free(req->header.dev_name);
1970 req->header._present.dev_name_len = strlen(dev_name);
1971 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
1972 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
1973 req->header.dev_name[req->header._present.dev_name_len] = 0;
1974}
1975static inline void
1976ethtool_rings_get_req_set_header_flags(struct ethtool_rings_get_req *req,
1977 __u32 flags)
1978{
1979 req->_present.header = 1;
1980 req->header._present.flags = 1;
1981 req->header.flags = flags;
1982}
1983
1984struct ethtool_rings_get_rsp {
1985 struct {
1986 __u32 header:1;
1987 __u32 rx_max:1;
1988 __u32 rx_mini_max:1;
1989 __u32 rx_jumbo_max:1;
1990 __u32 tx_max:1;
1991 __u32 rx:1;
1992 __u32 rx_mini:1;
1993 __u32 rx_jumbo:1;
1994 __u32 tx:1;
1995 __u32 rx_buf_len:1;
1996 __u32 tcp_data_split:1;
1997 __u32 cqe_size:1;
1998 __u32 tx_push:1;
1999 __u32 rx_push:1;
2000 __u32 tx_push_buf_len:1;
2001 __u32 tx_push_buf_len_max:1;
2002 } _present;
2003
2004 struct ethtool_header header;
2005 __u32 rx_max;
2006 __u32 rx_mini_max;
2007 __u32 rx_jumbo_max;
2008 __u32 tx_max;
2009 __u32 rx;
2010 __u32 rx_mini;
2011 __u32 rx_jumbo;
2012 __u32 tx;
2013 __u32 rx_buf_len;
2014 __u8 tcp_data_split;
2015 __u32 cqe_size;
2016 __u8 tx_push;
2017 __u8 rx_push;
2018 __u32 tx_push_buf_len;
2019 __u32 tx_push_buf_len_max;
2020};
2021
2022void ethtool_rings_get_rsp_free(struct ethtool_rings_get_rsp *rsp);
2023
2024/*
2025 * Get ring params.
2026 */
2027struct ethtool_rings_get_rsp *
2028ethtool_rings_get(struct ynl_sock *ys, struct ethtool_rings_get_req *req);
2029
2030/* ETHTOOL_MSG_RINGS_GET - dump */
2031struct ethtool_rings_get_req_dump {
2032 struct {
2033 __u32 header:1;
2034 } _present;
2035
2036 struct ethtool_header header;
2037};
2038
2039static inline struct ethtool_rings_get_req_dump *
2040ethtool_rings_get_req_dump_alloc(void)
2041{
2042 return calloc(1, sizeof(struct ethtool_rings_get_req_dump));
2043}
2044void ethtool_rings_get_req_dump_free(struct ethtool_rings_get_req_dump *req);
2045
2046static inline void
2047ethtool_rings_get_req_dump_set_header_dev_index(struct ethtool_rings_get_req_dump *req,
2048 __u32 dev_index)
2049{
2050 req->_present.header = 1;
2051 req->header._present.dev_index = 1;
2052 req->header.dev_index = dev_index;
2053}
2054static inline void
2055ethtool_rings_get_req_dump_set_header_dev_name(struct ethtool_rings_get_req_dump *req,
2056 const char *dev_name)
2057{
2058 free(req->header.dev_name);
2059 req->header._present.dev_name_len = strlen(dev_name);
2060 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
2061 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
2062 req->header.dev_name[req->header._present.dev_name_len] = 0;
2063}
2064static inline void
2065ethtool_rings_get_req_dump_set_header_flags(struct ethtool_rings_get_req_dump *req,
2066 __u32 flags)
2067{
2068 req->_present.header = 1;
2069 req->header._present.flags = 1;
2070 req->header.flags = flags;
2071}
2072
2073struct ethtool_rings_get_list {
2074 struct ethtool_rings_get_list *next;
2075 struct ethtool_rings_get_rsp obj __attribute__ ((aligned (8)));
2076};
2077
2078void ethtool_rings_get_list_free(struct ethtool_rings_get_list *rsp);
2079
2080struct ethtool_rings_get_list *
2081ethtool_rings_get_dump(struct ynl_sock *ys,
2082 struct ethtool_rings_get_req_dump *req);
2083
2084/* ETHTOOL_MSG_RINGS_GET - notify */
2085struct ethtool_rings_get_ntf {
2086 __u16 family;
2087 __u8 cmd;
2088 struct ynl_ntf_base_type *next;
2089 void (*free)(struct ethtool_rings_get_ntf *ntf);
2090 struct ethtool_rings_get_rsp obj __attribute__ ((aligned (8)));
2091};
2092
2093void ethtool_rings_get_ntf_free(struct ethtool_rings_get_ntf *rsp);
2094
2095/* ============== ETHTOOL_MSG_RINGS_SET ============== */
2096/* ETHTOOL_MSG_RINGS_SET - do */
2097struct ethtool_rings_set_req {
2098 struct {
2099 __u32 header:1;
2100 __u32 rx_max:1;
2101 __u32 rx_mini_max:1;
2102 __u32 rx_jumbo_max:1;
2103 __u32 tx_max:1;
2104 __u32 rx:1;
2105 __u32 rx_mini:1;
2106 __u32 rx_jumbo:1;
2107 __u32 tx:1;
2108 __u32 rx_buf_len:1;
2109 __u32 tcp_data_split:1;
2110 __u32 cqe_size:1;
2111 __u32 tx_push:1;
2112 __u32 rx_push:1;
2113 __u32 tx_push_buf_len:1;
2114 __u32 tx_push_buf_len_max:1;
2115 } _present;
2116
2117 struct ethtool_header header;
2118 __u32 rx_max;
2119 __u32 rx_mini_max;
2120 __u32 rx_jumbo_max;
2121 __u32 tx_max;
2122 __u32 rx;
2123 __u32 rx_mini;
2124 __u32 rx_jumbo;
2125 __u32 tx;
2126 __u32 rx_buf_len;
2127 __u8 tcp_data_split;
2128 __u32 cqe_size;
2129 __u8 tx_push;
2130 __u8 rx_push;
2131 __u32 tx_push_buf_len;
2132 __u32 tx_push_buf_len_max;
2133};
2134
2135static inline struct ethtool_rings_set_req *ethtool_rings_set_req_alloc(void)
2136{
2137 return calloc(1, sizeof(struct ethtool_rings_set_req));
2138}
2139void ethtool_rings_set_req_free(struct ethtool_rings_set_req *req);
2140
2141static inline void
2142ethtool_rings_set_req_set_header_dev_index(struct ethtool_rings_set_req *req,
2143 __u32 dev_index)
2144{
2145 req->_present.header = 1;
2146 req->header._present.dev_index = 1;
2147 req->header.dev_index = dev_index;
2148}
2149static inline void
2150ethtool_rings_set_req_set_header_dev_name(struct ethtool_rings_set_req *req,
2151 const char *dev_name)
2152{
2153 free(req->header.dev_name);
2154 req->header._present.dev_name_len = strlen(dev_name);
2155 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
2156 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
2157 req->header.dev_name[req->header._present.dev_name_len] = 0;
2158}
2159static inline void
2160ethtool_rings_set_req_set_header_flags(struct ethtool_rings_set_req *req,
2161 __u32 flags)
2162{
2163 req->_present.header = 1;
2164 req->header._present.flags = 1;
2165 req->header.flags = flags;
2166}
2167static inline void
2168ethtool_rings_set_req_set_rx_max(struct ethtool_rings_set_req *req,
2169 __u32 rx_max)
2170{
2171 req->_present.rx_max = 1;
2172 req->rx_max = rx_max;
2173}
2174static inline void
2175ethtool_rings_set_req_set_rx_mini_max(struct ethtool_rings_set_req *req,
2176 __u32 rx_mini_max)
2177{
2178 req->_present.rx_mini_max = 1;
2179 req->rx_mini_max = rx_mini_max;
2180}
2181static inline void
2182ethtool_rings_set_req_set_rx_jumbo_max(struct ethtool_rings_set_req *req,
2183 __u32 rx_jumbo_max)
2184{
2185 req->_present.rx_jumbo_max = 1;
2186 req->rx_jumbo_max = rx_jumbo_max;
2187}
2188static inline void
2189ethtool_rings_set_req_set_tx_max(struct ethtool_rings_set_req *req,
2190 __u32 tx_max)
2191{
2192 req->_present.tx_max = 1;
2193 req->tx_max = tx_max;
2194}
2195static inline void
2196ethtool_rings_set_req_set_rx(struct ethtool_rings_set_req *req, __u32 rx)
2197{
2198 req->_present.rx = 1;
2199 req->rx = rx;
2200}
2201static inline void
2202ethtool_rings_set_req_set_rx_mini(struct ethtool_rings_set_req *req,
2203 __u32 rx_mini)
2204{
2205 req->_present.rx_mini = 1;
2206 req->rx_mini = rx_mini;
2207}
2208static inline void
2209ethtool_rings_set_req_set_rx_jumbo(struct ethtool_rings_set_req *req,
2210 __u32 rx_jumbo)
2211{
2212 req->_present.rx_jumbo = 1;
2213 req->rx_jumbo = rx_jumbo;
2214}
2215static inline void
2216ethtool_rings_set_req_set_tx(struct ethtool_rings_set_req *req, __u32 tx)
2217{
2218 req->_present.tx = 1;
2219 req->tx = tx;
2220}
2221static inline void
2222ethtool_rings_set_req_set_rx_buf_len(struct ethtool_rings_set_req *req,
2223 __u32 rx_buf_len)
2224{
2225 req->_present.rx_buf_len = 1;
2226 req->rx_buf_len = rx_buf_len;
2227}
2228static inline void
2229ethtool_rings_set_req_set_tcp_data_split(struct ethtool_rings_set_req *req,
2230 __u8 tcp_data_split)
2231{
2232 req->_present.tcp_data_split = 1;
2233 req->tcp_data_split = tcp_data_split;
2234}
2235static inline void
2236ethtool_rings_set_req_set_cqe_size(struct ethtool_rings_set_req *req,
2237 __u32 cqe_size)
2238{
2239 req->_present.cqe_size = 1;
2240 req->cqe_size = cqe_size;
2241}
2242static inline void
2243ethtool_rings_set_req_set_tx_push(struct ethtool_rings_set_req *req,
2244 __u8 tx_push)
2245{
2246 req->_present.tx_push = 1;
2247 req->tx_push = tx_push;
2248}
2249static inline void
2250ethtool_rings_set_req_set_rx_push(struct ethtool_rings_set_req *req,
2251 __u8 rx_push)
2252{
2253 req->_present.rx_push = 1;
2254 req->rx_push = rx_push;
2255}
2256static inline void
2257ethtool_rings_set_req_set_tx_push_buf_len(struct ethtool_rings_set_req *req,
2258 __u32 tx_push_buf_len)
2259{
2260 req->_present.tx_push_buf_len = 1;
2261 req->tx_push_buf_len = tx_push_buf_len;
2262}
2263static inline void
2264ethtool_rings_set_req_set_tx_push_buf_len_max(struct ethtool_rings_set_req *req,
2265 __u32 tx_push_buf_len_max)
2266{
2267 req->_present.tx_push_buf_len_max = 1;
2268 req->tx_push_buf_len_max = tx_push_buf_len_max;
2269}
2270
2271/*
2272 * Set ring params.
2273 */
2274int ethtool_rings_set(struct ynl_sock *ys, struct ethtool_rings_set_req *req);
2275
2276/* ============== ETHTOOL_MSG_CHANNELS_GET ============== */
2277/* ETHTOOL_MSG_CHANNELS_GET - do */
2278struct ethtool_channels_get_req {
2279 struct {
2280 __u32 header:1;
2281 } _present;
2282
2283 struct ethtool_header header;
2284};
2285
2286static inline struct ethtool_channels_get_req *
2287ethtool_channels_get_req_alloc(void)
2288{
2289 return calloc(1, sizeof(struct ethtool_channels_get_req));
2290}
2291void ethtool_channels_get_req_free(struct ethtool_channels_get_req *req);
2292
2293static inline void
2294ethtool_channels_get_req_set_header_dev_index(struct ethtool_channels_get_req *req,
2295 __u32 dev_index)
2296{
2297 req->_present.header = 1;
2298 req->header._present.dev_index = 1;
2299 req->header.dev_index = dev_index;
2300}
2301static inline void
2302ethtool_channels_get_req_set_header_dev_name(struct ethtool_channels_get_req *req,
2303 const char *dev_name)
2304{
2305 free(req->header.dev_name);
2306 req->header._present.dev_name_len = strlen(dev_name);
2307 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
2308 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
2309 req->header.dev_name[req->header._present.dev_name_len] = 0;
2310}
2311static inline void
2312ethtool_channels_get_req_set_header_flags(struct ethtool_channels_get_req *req,
2313 __u32 flags)
2314{
2315 req->_present.header = 1;
2316 req->header._present.flags = 1;
2317 req->header.flags = flags;
2318}
2319
2320struct ethtool_channels_get_rsp {
2321 struct {
2322 __u32 header:1;
2323 __u32 rx_max:1;
2324 __u32 tx_max:1;
2325 __u32 other_max:1;
2326 __u32 combined_max:1;
2327 __u32 rx_count:1;
2328 __u32 tx_count:1;
2329 __u32 other_count:1;
2330 __u32 combined_count:1;
2331 } _present;
2332
2333 struct ethtool_header header;
2334 __u32 rx_max;
2335 __u32 tx_max;
2336 __u32 other_max;
2337 __u32 combined_max;
2338 __u32 rx_count;
2339 __u32 tx_count;
2340 __u32 other_count;
2341 __u32 combined_count;
2342};
2343
2344void ethtool_channels_get_rsp_free(struct ethtool_channels_get_rsp *rsp);
2345
2346/*
2347 * Get channel params.
2348 */
2349struct ethtool_channels_get_rsp *
2350ethtool_channels_get(struct ynl_sock *ys, struct ethtool_channels_get_req *req);
2351
2352/* ETHTOOL_MSG_CHANNELS_GET - dump */
2353struct ethtool_channels_get_req_dump {
2354 struct {
2355 __u32 header:1;
2356 } _present;
2357
2358 struct ethtool_header header;
2359};
2360
2361static inline struct ethtool_channels_get_req_dump *
2362ethtool_channels_get_req_dump_alloc(void)
2363{
2364 return calloc(1, sizeof(struct ethtool_channels_get_req_dump));
2365}
2366void
2367ethtool_channels_get_req_dump_free(struct ethtool_channels_get_req_dump *req);
2368
2369static inline void
2370ethtool_channels_get_req_dump_set_header_dev_index(struct ethtool_channels_get_req_dump *req,
2371 __u32 dev_index)
2372{
2373 req->_present.header = 1;
2374 req->header._present.dev_index = 1;
2375 req->header.dev_index = dev_index;
2376}
2377static inline void
2378ethtool_channels_get_req_dump_set_header_dev_name(struct ethtool_channels_get_req_dump *req,
2379 const char *dev_name)
2380{
2381 free(req->header.dev_name);
2382 req->header._present.dev_name_len = strlen(dev_name);
2383 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
2384 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
2385 req->header.dev_name[req->header._present.dev_name_len] = 0;
2386}
2387static inline void
2388ethtool_channels_get_req_dump_set_header_flags(struct ethtool_channels_get_req_dump *req,
2389 __u32 flags)
2390{
2391 req->_present.header = 1;
2392 req->header._present.flags = 1;
2393 req->header.flags = flags;
2394}
2395
2396struct ethtool_channels_get_list {
2397 struct ethtool_channels_get_list *next;
2398 struct ethtool_channels_get_rsp obj __attribute__ ((aligned (8)));
2399};
2400
2401void ethtool_channels_get_list_free(struct ethtool_channels_get_list *rsp);
2402
2403struct ethtool_channels_get_list *
2404ethtool_channels_get_dump(struct ynl_sock *ys,
2405 struct ethtool_channels_get_req_dump *req);
2406
2407/* ETHTOOL_MSG_CHANNELS_GET - notify */
2408struct ethtool_channels_get_ntf {
2409 __u16 family;
2410 __u8 cmd;
2411 struct ynl_ntf_base_type *next;
2412 void (*free)(struct ethtool_channels_get_ntf *ntf);
2413 struct ethtool_channels_get_rsp obj __attribute__ ((aligned (8)));
2414};
2415
2416void ethtool_channels_get_ntf_free(struct ethtool_channels_get_ntf *rsp);
2417
2418/* ============== ETHTOOL_MSG_CHANNELS_SET ============== */
2419/* ETHTOOL_MSG_CHANNELS_SET - do */
2420struct ethtool_channels_set_req {
2421 struct {
2422 __u32 header:1;
2423 __u32 rx_max:1;
2424 __u32 tx_max:1;
2425 __u32 other_max:1;
2426 __u32 combined_max:1;
2427 __u32 rx_count:1;
2428 __u32 tx_count:1;
2429 __u32 other_count:1;
2430 __u32 combined_count:1;
2431 } _present;
2432
2433 struct ethtool_header header;
2434 __u32 rx_max;
2435 __u32 tx_max;
2436 __u32 other_max;
2437 __u32 combined_max;
2438 __u32 rx_count;
2439 __u32 tx_count;
2440 __u32 other_count;
2441 __u32 combined_count;
2442};
2443
2444static inline struct ethtool_channels_set_req *
2445ethtool_channels_set_req_alloc(void)
2446{
2447 return calloc(1, sizeof(struct ethtool_channels_set_req));
2448}
2449void ethtool_channels_set_req_free(struct ethtool_channels_set_req *req);
2450
2451static inline void
2452ethtool_channels_set_req_set_header_dev_index(struct ethtool_channels_set_req *req,
2453 __u32 dev_index)
2454{
2455 req->_present.header = 1;
2456 req->header._present.dev_index = 1;
2457 req->header.dev_index = dev_index;
2458}
2459static inline void
2460ethtool_channels_set_req_set_header_dev_name(struct ethtool_channels_set_req *req,
2461 const char *dev_name)
2462{
2463 free(req->header.dev_name);
2464 req->header._present.dev_name_len = strlen(dev_name);
2465 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
2466 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
2467 req->header.dev_name[req->header._present.dev_name_len] = 0;
2468}
2469static inline void
2470ethtool_channels_set_req_set_header_flags(struct ethtool_channels_set_req *req,
2471 __u32 flags)
2472{
2473 req->_present.header = 1;
2474 req->header._present.flags = 1;
2475 req->header.flags = flags;
2476}
2477static inline void
2478ethtool_channels_set_req_set_rx_max(struct ethtool_channels_set_req *req,
2479 __u32 rx_max)
2480{
2481 req->_present.rx_max = 1;
2482 req->rx_max = rx_max;
2483}
2484static inline void
2485ethtool_channels_set_req_set_tx_max(struct ethtool_channels_set_req *req,
2486 __u32 tx_max)
2487{
2488 req->_present.tx_max = 1;
2489 req->tx_max = tx_max;
2490}
2491static inline void
2492ethtool_channels_set_req_set_other_max(struct ethtool_channels_set_req *req,
2493 __u32 other_max)
2494{
2495 req->_present.other_max = 1;
2496 req->other_max = other_max;
2497}
2498static inline void
2499ethtool_channels_set_req_set_combined_max(struct ethtool_channels_set_req *req,
2500 __u32 combined_max)
2501{
2502 req->_present.combined_max = 1;
2503 req->combined_max = combined_max;
2504}
2505static inline void
2506ethtool_channels_set_req_set_rx_count(struct ethtool_channels_set_req *req,
2507 __u32 rx_count)
2508{
2509 req->_present.rx_count = 1;
2510 req->rx_count = rx_count;
2511}
2512static inline void
2513ethtool_channels_set_req_set_tx_count(struct ethtool_channels_set_req *req,
2514 __u32 tx_count)
2515{
2516 req->_present.tx_count = 1;
2517 req->tx_count = tx_count;
2518}
2519static inline void
2520ethtool_channels_set_req_set_other_count(struct ethtool_channels_set_req *req,
2521 __u32 other_count)
2522{
2523 req->_present.other_count = 1;
2524 req->other_count = other_count;
2525}
2526static inline void
2527ethtool_channels_set_req_set_combined_count(struct ethtool_channels_set_req *req,
2528 __u32 combined_count)
2529{
2530 req->_present.combined_count = 1;
2531 req->combined_count = combined_count;
2532}
2533
2534/*
2535 * Set channel params.
2536 */
2537int ethtool_channels_set(struct ynl_sock *ys,
2538 struct ethtool_channels_set_req *req);
2539
2540/* ============== ETHTOOL_MSG_COALESCE_GET ============== */
2541/* ETHTOOL_MSG_COALESCE_GET - do */
2542struct ethtool_coalesce_get_req {
2543 struct {
2544 __u32 header:1;
2545 } _present;
2546
2547 struct ethtool_header header;
2548};
2549
2550static inline struct ethtool_coalesce_get_req *
2551ethtool_coalesce_get_req_alloc(void)
2552{
2553 return calloc(1, sizeof(struct ethtool_coalesce_get_req));
2554}
2555void ethtool_coalesce_get_req_free(struct ethtool_coalesce_get_req *req);
2556
2557static inline void
2558ethtool_coalesce_get_req_set_header_dev_index(struct ethtool_coalesce_get_req *req,
2559 __u32 dev_index)
2560{
2561 req->_present.header = 1;
2562 req->header._present.dev_index = 1;
2563 req->header.dev_index = dev_index;
2564}
2565static inline void
2566ethtool_coalesce_get_req_set_header_dev_name(struct ethtool_coalesce_get_req *req,
2567 const char *dev_name)
2568{
2569 free(req->header.dev_name);
2570 req->header._present.dev_name_len = strlen(dev_name);
2571 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
2572 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
2573 req->header.dev_name[req->header._present.dev_name_len] = 0;
2574}
2575static inline void
2576ethtool_coalesce_get_req_set_header_flags(struct ethtool_coalesce_get_req *req,
2577 __u32 flags)
2578{
2579 req->_present.header = 1;
2580 req->header._present.flags = 1;
2581 req->header.flags = flags;
2582}
2583
2584struct ethtool_coalesce_get_rsp {
2585 struct {
2586 __u32 header:1;
2587 __u32 rx_usecs:1;
2588 __u32 rx_max_frames:1;
2589 __u32 rx_usecs_irq:1;
2590 __u32 rx_max_frames_irq:1;
2591 __u32 tx_usecs:1;
2592 __u32 tx_max_frames:1;
2593 __u32 tx_usecs_irq:1;
2594 __u32 tx_max_frames_irq:1;
2595 __u32 stats_block_usecs:1;
2596 __u32 use_adaptive_rx:1;
2597 __u32 use_adaptive_tx:1;
2598 __u32 pkt_rate_low:1;
2599 __u32 rx_usecs_low:1;
2600 __u32 rx_max_frames_low:1;
2601 __u32 tx_usecs_low:1;
2602 __u32 tx_max_frames_low:1;
2603 __u32 pkt_rate_high:1;
2604 __u32 rx_usecs_high:1;
2605 __u32 rx_max_frames_high:1;
2606 __u32 tx_usecs_high:1;
2607 __u32 tx_max_frames_high:1;
2608 __u32 rate_sample_interval:1;
2609 __u32 use_cqe_mode_tx:1;
2610 __u32 use_cqe_mode_rx:1;
2611 __u32 tx_aggr_max_bytes:1;
2612 __u32 tx_aggr_max_frames:1;
2613 __u32 tx_aggr_time_usecs:1;
2614 } _present;
2615
2616 struct ethtool_header header;
2617 __u32 rx_usecs;
2618 __u32 rx_max_frames;
2619 __u32 rx_usecs_irq;
2620 __u32 rx_max_frames_irq;
2621 __u32 tx_usecs;
2622 __u32 tx_max_frames;
2623 __u32 tx_usecs_irq;
2624 __u32 tx_max_frames_irq;
2625 __u32 stats_block_usecs;
2626 __u8 use_adaptive_rx;
2627 __u8 use_adaptive_tx;
2628 __u32 pkt_rate_low;
2629 __u32 rx_usecs_low;
2630 __u32 rx_max_frames_low;
2631 __u32 tx_usecs_low;
2632 __u32 tx_max_frames_low;
2633 __u32 pkt_rate_high;
2634 __u32 rx_usecs_high;
2635 __u32 rx_max_frames_high;
2636 __u32 tx_usecs_high;
2637 __u32 tx_max_frames_high;
2638 __u32 rate_sample_interval;
2639 __u8 use_cqe_mode_tx;
2640 __u8 use_cqe_mode_rx;
2641 __u32 tx_aggr_max_bytes;
2642 __u32 tx_aggr_max_frames;
2643 __u32 tx_aggr_time_usecs;
2644};
2645
2646void ethtool_coalesce_get_rsp_free(struct ethtool_coalesce_get_rsp *rsp);
2647
2648/*
2649 * Get coalesce params.
2650 */
2651struct ethtool_coalesce_get_rsp *
2652ethtool_coalesce_get(struct ynl_sock *ys, struct ethtool_coalesce_get_req *req);
2653
2654/* ETHTOOL_MSG_COALESCE_GET - dump */
2655struct ethtool_coalesce_get_req_dump {
2656 struct {
2657 __u32 header:1;
2658 } _present;
2659
2660 struct ethtool_header header;
2661};
2662
2663static inline struct ethtool_coalesce_get_req_dump *
2664ethtool_coalesce_get_req_dump_alloc(void)
2665{
2666 return calloc(1, sizeof(struct ethtool_coalesce_get_req_dump));
2667}
2668void
2669ethtool_coalesce_get_req_dump_free(struct ethtool_coalesce_get_req_dump *req);
2670
2671static inline void
2672ethtool_coalesce_get_req_dump_set_header_dev_index(struct ethtool_coalesce_get_req_dump *req,
2673 __u32 dev_index)
2674{
2675 req->_present.header = 1;
2676 req->header._present.dev_index = 1;
2677 req->header.dev_index = dev_index;
2678}
2679static inline void
2680ethtool_coalesce_get_req_dump_set_header_dev_name(struct ethtool_coalesce_get_req_dump *req,
2681 const char *dev_name)
2682{
2683 free(req->header.dev_name);
2684 req->header._present.dev_name_len = strlen(dev_name);
2685 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
2686 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
2687 req->header.dev_name[req->header._present.dev_name_len] = 0;
2688}
2689static inline void
2690ethtool_coalesce_get_req_dump_set_header_flags(struct ethtool_coalesce_get_req_dump *req,
2691 __u32 flags)
2692{
2693 req->_present.header = 1;
2694 req->header._present.flags = 1;
2695 req->header.flags = flags;
2696}
2697
2698struct ethtool_coalesce_get_list {
2699 struct ethtool_coalesce_get_list *next;
2700 struct ethtool_coalesce_get_rsp obj __attribute__ ((aligned (8)));
2701};
2702
2703void ethtool_coalesce_get_list_free(struct ethtool_coalesce_get_list *rsp);
2704
2705struct ethtool_coalesce_get_list *
2706ethtool_coalesce_get_dump(struct ynl_sock *ys,
2707 struct ethtool_coalesce_get_req_dump *req);
2708
2709/* ETHTOOL_MSG_COALESCE_GET - notify */
2710struct ethtool_coalesce_get_ntf {
2711 __u16 family;
2712 __u8 cmd;
2713 struct ynl_ntf_base_type *next;
2714 void (*free)(struct ethtool_coalesce_get_ntf *ntf);
2715 struct ethtool_coalesce_get_rsp obj __attribute__ ((aligned (8)));
2716};
2717
2718void ethtool_coalesce_get_ntf_free(struct ethtool_coalesce_get_ntf *rsp);
2719
2720/* ============== ETHTOOL_MSG_COALESCE_SET ============== */
2721/* ETHTOOL_MSG_COALESCE_SET - do */
2722struct ethtool_coalesce_set_req {
2723 struct {
2724 __u32 header:1;
2725 __u32 rx_usecs:1;
2726 __u32 rx_max_frames:1;
2727 __u32 rx_usecs_irq:1;
2728 __u32 rx_max_frames_irq:1;
2729 __u32 tx_usecs:1;
2730 __u32 tx_max_frames:1;
2731 __u32 tx_usecs_irq:1;
2732 __u32 tx_max_frames_irq:1;
2733 __u32 stats_block_usecs:1;
2734 __u32 use_adaptive_rx:1;
2735 __u32 use_adaptive_tx:1;
2736 __u32 pkt_rate_low:1;
2737 __u32 rx_usecs_low:1;
2738 __u32 rx_max_frames_low:1;
2739 __u32 tx_usecs_low:1;
2740 __u32 tx_max_frames_low:1;
2741 __u32 pkt_rate_high:1;
2742 __u32 rx_usecs_high:1;
2743 __u32 rx_max_frames_high:1;
2744 __u32 tx_usecs_high:1;
2745 __u32 tx_max_frames_high:1;
2746 __u32 rate_sample_interval:1;
2747 __u32 use_cqe_mode_tx:1;
2748 __u32 use_cqe_mode_rx:1;
2749 __u32 tx_aggr_max_bytes:1;
2750 __u32 tx_aggr_max_frames:1;
2751 __u32 tx_aggr_time_usecs:1;
2752 } _present;
2753
2754 struct ethtool_header header;
2755 __u32 rx_usecs;
2756 __u32 rx_max_frames;
2757 __u32 rx_usecs_irq;
2758 __u32 rx_max_frames_irq;
2759 __u32 tx_usecs;
2760 __u32 tx_max_frames;
2761 __u32 tx_usecs_irq;
2762 __u32 tx_max_frames_irq;
2763 __u32 stats_block_usecs;
2764 __u8 use_adaptive_rx;
2765 __u8 use_adaptive_tx;
2766 __u32 pkt_rate_low;
2767 __u32 rx_usecs_low;
2768 __u32 rx_max_frames_low;
2769 __u32 tx_usecs_low;
2770 __u32 tx_max_frames_low;
2771 __u32 pkt_rate_high;
2772 __u32 rx_usecs_high;
2773 __u32 rx_max_frames_high;
2774 __u32 tx_usecs_high;
2775 __u32 tx_max_frames_high;
2776 __u32 rate_sample_interval;
2777 __u8 use_cqe_mode_tx;
2778 __u8 use_cqe_mode_rx;
2779 __u32 tx_aggr_max_bytes;
2780 __u32 tx_aggr_max_frames;
2781 __u32 tx_aggr_time_usecs;
2782};
2783
2784static inline struct ethtool_coalesce_set_req *
2785ethtool_coalesce_set_req_alloc(void)
2786{
2787 return calloc(1, sizeof(struct ethtool_coalesce_set_req));
2788}
2789void ethtool_coalesce_set_req_free(struct ethtool_coalesce_set_req *req);
2790
2791static inline void
2792ethtool_coalesce_set_req_set_header_dev_index(struct ethtool_coalesce_set_req *req,
2793 __u32 dev_index)
2794{
2795 req->_present.header = 1;
2796 req->header._present.dev_index = 1;
2797 req->header.dev_index = dev_index;
2798}
2799static inline void
2800ethtool_coalesce_set_req_set_header_dev_name(struct ethtool_coalesce_set_req *req,
2801 const char *dev_name)
2802{
2803 free(req->header.dev_name);
2804 req->header._present.dev_name_len = strlen(dev_name);
2805 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
2806 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
2807 req->header.dev_name[req->header._present.dev_name_len] = 0;
2808}
2809static inline void
2810ethtool_coalesce_set_req_set_header_flags(struct ethtool_coalesce_set_req *req,
2811 __u32 flags)
2812{
2813 req->_present.header = 1;
2814 req->header._present.flags = 1;
2815 req->header.flags = flags;
2816}
2817static inline void
2818ethtool_coalesce_set_req_set_rx_usecs(struct ethtool_coalesce_set_req *req,
2819 __u32 rx_usecs)
2820{
2821 req->_present.rx_usecs = 1;
2822 req->rx_usecs = rx_usecs;
2823}
2824static inline void
2825ethtool_coalesce_set_req_set_rx_max_frames(struct ethtool_coalesce_set_req *req,
2826 __u32 rx_max_frames)
2827{
2828 req->_present.rx_max_frames = 1;
2829 req->rx_max_frames = rx_max_frames;
2830}
2831static inline void
2832ethtool_coalesce_set_req_set_rx_usecs_irq(struct ethtool_coalesce_set_req *req,
2833 __u32 rx_usecs_irq)
2834{
2835 req->_present.rx_usecs_irq = 1;
2836 req->rx_usecs_irq = rx_usecs_irq;
2837}
2838static inline void
2839ethtool_coalesce_set_req_set_rx_max_frames_irq(struct ethtool_coalesce_set_req *req,
2840 __u32 rx_max_frames_irq)
2841{
2842 req->_present.rx_max_frames_irq = 1;
2843 req->rx_max_frames_irq = rx_max_frames_irq;
2844}
2845static inline void
2846ethtool_coalesce_set_req_set_tx_usecs(struct ethtool_coalesce_set_req *req,
2847 __u32 tx_usecs)
2848{
2849 req->_present.tx_usecs = 1;
2850 req->tx_usecs = tx_usecs;
2851}
2852static inline void
2853ethtool_coalesce_set_req_set_tx_max_frames(struct ethtool_coalesce_set_req *req,
2854 __u32 tx_max_frames)
2855{
2856 req->_present.tx_max_frames = 1;
2857 req->tx_max_frames = tx_max_frames;
2858}
2859static inline void
2860ethtool_coalesce_set_req_set_tx_usecs_irq(struct ethtool_coalesce_set_req *req,
2861 __u32 tx_usecs_irq)
2862{
2863 req->_present.tx_usecs_irq = 1;
2864 req->tx_usecs_irq = tx_usecs_irq;
2865}
2866static inline void
2867ethtool_coalesce_set_req_set_tx_max_frames_irq(struct ethtool_coalesce_set_req *req,
2868 __u32 tx_max_frames_irq)
2869{
2870 req->_present.tx_max_frames_irq = 1;
2871 req->tx_max_frames_irq = tx_max_frames_irq;
2872}
2873static inline void
2874ethtool_coalesce_set_req_set_stats_block_usecs(struct ethtool_coalesce_set_req *req,
2875 __u32 stats_block_usecs)
2876{
2877 req->_present.stats_block_usecs = 1;
2878 req->stats_block_usecs = stats_block_usecs;
2879}
2880static inline void
2881ethtool_coalesce_set_req_set_use_adaptive_rx(struct ethtool_coalesce_set_req *req,
2882 __u8 use_adaptive_rx)
2883{
2884 req->_present.use_adaptive_rx = 1;
2885 req->use_adaptive_rx = use_adaptive_rx;
2886}
2887static inline void
2888ethtool_coalesce_set_req_set_use_adaptive_tx(struct ethtool_coalesce_set_req *req,
2889 __u8 use_adaptive_tx)
2890{
2891 req->_present.use_adaptive_tx = 1;
2892 req->use_adaptive_tx = use_adaptive_tx;
2893}
2894static inline void
2895ethtool_coalesce_set_req_set_pkt_rate_low(struct ethtool_coalesce_set_req *req,
2896 __u32 pkt_rate_low)
2897{
2898 req->_present.pkt_rate_low = 1;
2899 req->pkt_rate_low = pkt_rate_low;
2900}
2901static inline void
2902ethtool_coalesce_set_req_set_rx_usecs_low(struct ethtool_coalesce_set_req *req,
2903 __u32 rx_usecs_low)
2904{
2905 req->_present.rx_usecs_low = 1;
2906 req->rx_usecs_low = rx_usecs_low;
2907}
2908static inline void
2909ethtool_coalesce_set_req_set_rx_max_frames_low(struct ethtool_coalesce_set_req *req,
2910 __u32 rx_max_frames_low)
2911{
2912 req->_present.rx_max_frames_low = 1;
2913 req->rx_max_frames_low = rx_max_frames_low;
2914}
2915static inline void
2916ethtool_coalesce_set_req_set_tx_usecs_low(struct ethtool_coalesce_set_req *req,
2917 __u32 tx_usecs_low)
2918{
2919 req->_present.tx_usecs_low = 1;
2920 req->tx_usecs_low = tx_usecs_low;
2921}
2922static inline void
2923ethtool_coalesce_set_req_set_tx_max_frames_low(struct ethtool_coalesce_set_req *req,
2924 __u32 tx_max_frames_low)
2925{
2926 req->_present.tx_max_frames_low = 1;
2927 req->tx_max_frames_low = tx_max_frames_low;
2928}
2929static inline void
2930ethtool_coalesce_set_req_set_pkt_rate_high(struct ethtool_coalesce_set_req *req,
2931 __u32 pkt_rate_high)
2932{
2933 req->_present.pkt_rate_high = 1;
2934 req->pkt_rate_high = pkt_rate_high;
2935}
2936static inline void
2937ethtool_coalesce_set_req_set_rx_usecs_high(struct ethtool_coalesce_set_req *req,
2938 __u32 rx_usecs_high)
2939{
2940 req->_present.rx_usecs_high = 1;
2941 req->rx_usecs_high = rx_usecs_high;
2942}
2943static inline void
2944ethtool_coalesce_set_req_set_rx_max_frames_high(struct ethtool_coalesce_set_req *req,
2945 __u32 rx_max_frames_high)
2946{
2947 req->_present.rx_max_frames_high = 1;
2948 req->rx_max_frames_high = rx_max_frames_high;
2949}
2950static inline void
2951ethtool_coalesce_set_req_set_tx_usecs_high(struct ethtool_coalesce_set_req *req,
2952 __u32 tx_usecs_high)
2953{
2954 req->_present.tx_usecs_high = 1;
2955 req->tx_usecs_high = tx_usecs_high;
2956}
2957static inline void
2958ethtool_coalesce_set_req_set_tx_max_frames_high(struct ethtool_coalesce_set_req *req,
2959 __u32 tx_max_frames_high)
2960{
2961 req->_present.tx_max_frames_high = 1;
2962 req->tx_max_frames_high = tx_max_frames_high;
2963}
2964static inline void
2965ethtool_coalesce_set_req_set_rate_sample_interval(struct ethtool_coalesce_set_req *req,
2966 __u32 rate_sample_interval)
2967{
2968 req->_present.rate_sample_interval = 1;
2969 req->rate_sample_interval = rate_sample_interval;
2970}
2971static inline void
2972ethtool_coalesce_set_req_set_use_cqe_mode_tx(struct ethtool_coalesce_set_req *req,
2973 __u8 use_cqe_mode_tx)
2974{
2975 req->_present.use_cqe_mode_tx = 1;
2976 req->use_cqe_mode_tx = use_cqe_mode_tx;
2977}
2978static inline void
2979ethtool_coalesce_set_req_set_use_cqe_mode_rx(struct ethtool_coalesce_set_req *req,
2980 __u8 use_cqe_mode_rx)
2981{
2982 req->_present.use_cqe_mode_rx = 1;
2983 req->use_cqe_mode_rx = use_cqe_mode_rx;
2984}
2985static inline void
2986ethtool_coalesce_set_req_set_tx_aggr_max_bytes(struct ethtool_coalesce_set_req *req,
2987 __u32 tx_aggr_max_bytes)
2988{
2989 req->_present.tx_aggr_max_bytes = 1;
2990 req->tx_aggr_max_bytes = tx_aggr_max_bytes;
2991}
2992static inline void
2993ethtool_coalesce_set_req_set_tx_aggr_max_frames(struct ethtool_coalesce_set_req *req,
2994 __u32 tx_aggr_max_frames)
2995{
2996 req->_present.tx_aggr_max_frames = 1;
2997 req->tx_aggr_max_frames = tx_aggr_max_frames;
2998}
2999static inline void
3000ethtool_coalesce_set_req_set_tx_aggr_time_usecs(struct ethtool_coalesce_set_req *req,
3001 __u32 tx_aggr_time_usecs)
3002{
3003 req->_present.tx_aggr_time_usecs = 1;
3004 req->tx_aggr_time_usecs = tx_aggr_time_usecs;
3005}
3006
3007/*
3008 * Set coalesce params.
3009 */
3010int ethtool_coalesce_set(struct ynl_sock *ys,
3011 struct ethtool_coalesce_set_req *req);
3012
3013/* ============== ETHTOOL_MSG_PAUSE_GET ============== */
3014/* ETHTOOL_MSG_PAUSE_GET - do */
3015struct ethtool_pause_get_req {
3016 struct {
3017 __u32 header:1;
3018 } _present;
3019
3020 struct ethtool_header header;
3021};
3022
3023static inline struct ethtool_pause_get_req *ethtool_pause_get_req_alloc(void)
3024{
3025 return calloc(1, sizeof(struct ethtool_pause_get_req));
3026}
3027void ethtool_pause_get_req_free(struct ethtool_pause_get_req *req);
3028
3029static inline void
3030ethtool_pause_get_req_set_header_dev_index(struct ethtool_pause_get_req *req,
3031 __u32 dev_index)
3032{
3033 req->_present.header = 1;
3034 req->header._present.dev_index = 1;
3035 req->header.dev_index = dev_index;
3036}
3037static inline void
3038ethtool_pause_get_req_set_header_dev_name(struct ethtool_pause_get_req *req,
3039 const char *dev_name)
3040{
3041 free(req->header.dev_name);
3042 req->header._present.dev_name_len = strlen(dev_name);
3043 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3044 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3045 req->header.dev_name[req->header._present.dev_name_len] = 0;
3046}
3047static inline void
3048ethtool_pause_get_req_set_header_flags(struct ethtool_pause_get_req *req,
3049 __u32 flags)
3050{
3051 req->_present.header = 1;
3052 req->header._present.flags = 1;
3053 req->header.flags = flags;
3054}
3055
3056struct ethtool_pause_get_rsp {
3057 struct {
3058 __u32 header:1;
3059 __u32 autoneg:1;
3060 __u32 rx:1;
3061 __u32 tx:1;
3062 __u32 stats:1;
3063 __u32 stats_src:1;
3064 } _present;
3065
3066 struct ethtool_header header;
3067 __u8 autoneg;
3068 __u8 rx;
3069 __u8 tx;
3070 struct ethtool_pause_stat stats;
3071 __u32 stats_src;
3072};
3073
3074void ethtool_pause_get_rsp_free(struct ethtool_pause_get_rsp *rsp);
3075
3076/*
3077 * Get pause params.
3078 */
3079struct ethtool_pause_get_rsp *
3080ethtool_pause_get(struct ynl_sock *ys, struct ethtool_pause_get_req *req);
3081
3082/* ETHTOOL_MSG_PAUSE_GET - dump */
3083struct ethtool_pause_get_req_dump {
3084 struct {
3085 __u32 header:1;
3086 } _present;
3087
3088 struct ethtool_header header;
3089};
3090
3091static inline struct ethtool_pause_get_req_dump *
3092ethtool_pause_get_req_dump_alloc(void)
3093{
3094 return calloc(1, sizeof(struct ethtool_pause_get_req_dump));
3095}
3096void ethtool_pause_get_req_dump_free(struct ethtool_pause_get_req_dump *req);
3097
3098static inline void
3099ethtool_pause_get_req_dump_set_header_dev_index(struct ethtool_pause_get_req_dump *req,
3100 __u32 dev_index)
3101{
3102 req->_present.header = 1;
3103 req->header._present.dev_index = 1;
3104 req->header.dev_index = dev_index;
3105}
3106static inline void
3107ethtool_pause_get_req_dump_set_header_dev_name(struct ethtool_pause_get_req_dump *req,
3108 const char *dev_name)
3109{
3110 free(req->header.dev_name);
3111 req->header._present.dev_name_len = strlen(dev_name);
3112 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3113 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3114 req->header.dev_name[req->header._present.dev_name_len] = 0;
3115}
3116static inline void
3117ethtool_pause_get_req_dump_set_header_flags(struct ethtool_pause_get_req_dump *req,
3118 __u32 flags)
3119{
3120 req->_present.header = 1;
3121 req->header._present.flags = 1;
3122 req->header.flags = flags;
3123}
3124
3125struct ethtool_pause_get_list {
3126 struct ethtool_pause_get_list *next;
3127 struct ethtool_pause_get_rsp obj __attribute__ ((aligned (8)));
3128};
3129
3130void ethtool_pause_get_list_free(struct ethtool_pause_get_list *rsp);
3131
3132struct ethtool_pause_get_list *
3133ethtool_pause_get_dump(struct ynl_sock *ys,
3134 struct ethtool_pause_get_req_dump *req);
3135
3136/* ETHTOOL_MSG_PAUSE_GET - notify */
3137struct ethtool_pause_get_ntf {
3138 __u16 family;
3139 __u8 cmd;
3140 struct ynl_ntf_base_type *next;
3141 void (*free)(struct ethtool_pause_get_ntf *ntf);
3142 struct ethtool_pause_get_rsp obj __attribute__ ((aligned (8)));
3143};
3144
3145void ethtool_pause_get_ntf_free(struct ethtool_pause_get_ntf *rsp);
3146
3147/* ============== ETHTOOL_MSG_PAUSE_SET ============== */
3148/* ETHTOOL_MSG_PAUSE_SET - do */
3149struct ethtool_pause_set_req {
3150 struct {
3151 __u32 header:1;
3152 __u32 autoneg:1;
3153 __u32 rx:1;
3154 __u32 tx:1;
3155 __u32 stats:1;
3156 __u32 stats_src:1;
3157 } _present;
3158
3159 struct ethtool_header header;
3160 __u8 autoneg;
3161 __u8 rx;
3162 __u8 tx;
3163 struct ethtool_pause_stat stats;
3164 __u32 stats_src;
3165};
3166
3167static inline struct ethtool_pause_set_req *ethtool_pause_set_req_alloc(void)
3168{
3169 return calloc(1, sizeof(struct ethtool_pause_set_req));
3170}
3171void ethtool_pause_set_req_free(struct ethtool_pause_set_req *req);
3172
3173static inline void
3174ethtool_pause_set_req_set_header_dev_index(struct ethtool_pause_set_req *req,
3175 __u32 dev_index)
3176{
3177 req->_present.header = 1;
3178 req->header._present.dev_index = 1;
3179 req->header.dev_index = dev_index;
3180}
3181static inline void
3182ethtool_pause_set_req_set_header_dev_name(struct ethtool_pause_set_req *req,
3183 const char *dev_name)
3184{
3185 free(req->header.dev_name);
3186 req->header._present.dev_name_len = strlen(dev_name);
3187 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3188 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3189 req->header.dev_name[req->header._present.dev_name_len] = 0;
3190}
3191static inline void
3192ethtool_pause_set_req_set_header_flags(struct ethtool_pause_set_req *req,
3193 __u32 flags)
3194{
3195 req->_present.header = 1;
3196 req->header._present.flags = 1;
3197 req->header.flags = flags;
3198}
3199static inline void
3200ethtool_pause_set_req_set_autoneg(struct ethtool_pause_set_req *req,
3201 __u8 autoneg)
3202{
3203 req->_present.autoneg = 1;
3204 req->autoneg = autoneg;
3205}
3206static inline void
3207ethtool_pause_set_req_set_rx(struct ethtool_pause_set_req *req, __u8 rx)
3208{
3209 req->_present.rx = 1;
3210 req->rx = rx;
3211}
3212static inline void
3213ethtool_pause_set_req_set_tx(struct ethtool_pause_set_req *req, __u8 tx)
3214{
3215 req->_present.tx = 1;
3216 req->tx = tx;
3217}
3218static inline void
3219ethtool_pause_set_req_set_stats_tx_frames(struct ethtool_pause_set_req *req,
3220 __u64 tx_frames)
3221{
3222 req->_present.stats = 1;
3223 req->stats._present.tx_frames = 1;
3224 req->stats.tx_frames = tx_frames;
3225}
3226static inline void
3227ethtool_pause_set_req_set_stats_rx_frames(struct ethtool_pause_set_req *req,
3228 __u64 rx_frames)
3229{
3230 req->_present.stats = 1;
3231 req->stats._present.rx_frames = 1;
3232 req->stats.rx_frames = rx_frames;
3233}
3234static inline void
3235ethtool_pause_set_req_set_stats_src(struct ethtool_pause_set_req *req,
3236 __u32 stats_src)
3237{
3238 req->_present.stats_src = 1;
3239 req->stats_src = stats_src;
3240}
3241
3242/*
3243 * Set pause params.
3244 */
3245int ethtool_pause_set(struct ynl_sock *ys, struct ethtool_pause_set_req *req);
3246
3247/* ============== ETHTOOL_MSG_EEE_GET ============== */
3248/* ETHTOOL_MSG_EEE_GET - do */
3249struct ethtool_eee_get_req {
3250 struct {
3251 __u32 header:1;
3252 } _present;
3253
3254 struct ethtool_header header;
3255};
3256
3257static inline struct ethtool_eee_get_req *ethtool_eee_get_req_alloc(void)
3258{
3259 return calloc(1, sizeof(struct ethtool_eee_get_req));
3260}
3261void ethtool_eee_get_req_free(struct ethtool_eee_get_req *req);
3262
3263static inline void
3264ethtool_eee_get_req_set_header_dev_index(struct ethtool_eee_get_req *req,
3265 __u32 dev_index)
3266{
3267 req->_present.header = 1;
3268 req->header._present.dev_index = 1;
3269 req->header.dev_index = dev_index;
3270}
3271static inline void
3272ethtool_eee_get_req_set_header_dev_name(struct ethtool_eee_get_req *req,
3273 const char *dev_name)
3274{
3275 free(req->header.dev_name);
3276 req->header._present.dev_name_len = strlen(dev_name);
3277 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3278 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3279 req->header.dev_name[req->header._present.dev_name_len] = 0;
3280}
3281static inline void
3282ethtool_eee_get_req_set_header_flags(struct ethtool_eee_get_req *req,
3283 __u32 flags)
3284{
3285 req->_present.header = 1;
3286 req->header._present.flags = 1;
3287 req->header.flags = flags;
3288}
3289
3290struct ethtool_eee_get_rsp {
3291 struct {
3292 __u32 header:1;
3293 __u32 modes_ours:1;
3294 __u32 modes_peer:1;
3295 __u32 active:1;
3296 __u32 enabled:1;
3297 __u32 tx_lpi_enabled:1;
3298 __u32 tx_lpi_timer:1;
3299 } _present;
3300
3301 struct ethtool_header header;
3302 struct ethtool_bitset modes_ours;
3303 struct ethtool_bitset modes_peer;
3304 __u8 active;
3305 __u8 enabled;
3306 __u8 tx_lpi_enabled;
3307 __u32 tx_lpi_timer;
3308};
3309
3310void ethtool_eee_get_rsp_free(struct ethtool_eee_get_rsp *rsp);
3311
3312/*
3313 * Get eee params.
3314 */
3315struct ethtool_eee_get_rsp *
3316ethtool_eee_get(struct ynl_sock *ys, struct ethtool_eee_get_req *req);
3317
3318/* ETHTOOL_MSG_EEE_GET - dump */
3319struct ethtool_eee_get_req_dump {
3320 struct {
3321 __u32 header:1;
3322 } _present;
3323
3324 struct ethtool_header header;
3325};
3326
3327static inline struct ethtool_eee_get_req_dump *
3328ethtool_eee_get_req_dump_alloc(void)
3329{
3330 return calloc(1, sizeof(struct ethtool_eee_get_req_dump));
3331}
3332void ethtool_eee_get_req_dump_free(struct ethtool_eee_get_req_dump *req);
3333
3334static inline void
3335ethtool_eee_get_req_dump_set_header_dev_index(struct ethtool_eee_get_req_dump *req,
3336 __u32 dev_index)
3337{
3338 req->_present.header = 1;
3339 req->header._present.dev_index = 1;
3340 req->header.dev_index = dev_index;
3341}
3342static inline void
3343ethtool_eee_get_req_dump_set_header_dev_name(struct ethtool_eee_get_req_dump *req,
3344 const char *dev_name)
3345{
3346 free(req->header.dev_name);
3347 req->header._present.dev_name_len = strlen(dev_name);
3348 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3349 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3350 req->header.dev_name[req->header._present.dev_name_len] = 0;
3351}
3352static inline void
3353ethtool_eee_get_req_dump_set_header_flags(struct ethtool_eee_get_req_dump *req,
3354 __u32 flags)
3355{
3356 req->_present.header = 1;
3357 req->header._present.flags = 1;
3358 req->header.flags = flags;
3359}
3360
3361struct ethtool_eee_get_list {
3362 struct ethtool_eee_get_list *next;
3363 struct ethtool_eee_get_rsp obj __attribute__ ((aligned (8)));
3364};
3365
3366void ethtool_eee_get_list_free(struct ethtool_eee_get_list *rsp);
3367
3368struct ethtool_eee_get_list *
3369ethtool_eee_get_dump(struct ynl_sock *ys, struct ethtool_eee_get_req_dump *req);
3370
3371/* ETHTOOL_MSG_EEE_GET - notify */
3372struct ethtool_eee_get_ntf {
3373 __u16 family;
3374 __u8 cmd;
3375 struct ynl_ntf_base_type *next;
3376 void (*free)(struct ethtool_eee_get_ntf *ntf);
3377 struct ethtool_eee_get_rsp obj __attribute__ ((aligned (8)));
3378};
3379
3380void ethtool_eee_get_ntf_free(struct ethtool_eee_get_ntf *rsp);
3381
3382/* ============== ETHTOOL_MSG_EEE_SET ============== */
3383/* ETHTOOL_MSG_EEE_SET - do */
3384struct ethtool_eee_set_req {
3385 struct {
3386 __u32 header:1;
3387 __u32 modes_ours:1;
3388 __u32 modes_peer:1;
3389 __u32 active:1;
3390 __u32 enabled:1;
3391 __u32 tx_lpi_enabled:1;
3392 __u32 tx_lpi_timer:1;
3393 } _present;
3394
3395 struct ethtool_header header;
3396 struct ethtool_bitset modes_ours;
3397 struct ethtool_bitset modes_peer;
3398 __u8 active;
3399 __u8 enabled;
3400 __u8 tx_lpi_enabled;
3401 __u32 tx_lpi_timer;
3402};
3403
3404static inline struct ethtool_eee_set_req *ethtool_eee_set_req_alloc(void)
3405{
3406 return calloc(1, sizeof(struct ethtool_eee_set_req));
3407}
3408void ethtool_eee_set_req_free(struct ethtool_eee_set_req *req);
3409
3410static inline void
3411ethtool_eee_set_req_set_header_dev_index(struct ethtool_eee_set_req *req,
3412 __u32 dev_index)
3413{
3414 req->_present.header = 1;
3415 req->header._present.dev_index = 1;
3416 req->header.dev_index = dev_index;
3417}
3418static inline void
3419ethtool_eee_set_req_set_header_dev_name(struct ethtool_eee_set_req *req,
3420 const char *dev_name)
3421{
3422 free(req->header.dev_name);
3423 req->header._present.dev_name_len = strlen(dev_name);
3424 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3425 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3426 req->header.dev_name[req->header._present.dev_name_len] = 0;
3427}
3428static inline void
3429ethtool_eee_set_req_set_header_flags(struct ethtool_eee_set_req *req,
3430 __u32 flags)
3431{
3432 req->_present.header = 1;
3433 req->header._present.flags = 1;
3434 req->header.flags = flags;
3435}
3436static inline void
3437ethtool_eee_set_req_set_modes_ours_nomask(struct ethtool_eee_set_req *req)
3438{
3439 req->_present.modes_ours = 1;
3440 req->modes_ours._present.nomask = 1;
3441}
3442static inline void
3443ethtool_eee_set_req_set_modes_ours_size(struct ethtool_eee_set_req *req,
3444 __u32 size)
3445{
3446 req->_present.modes_ours = 1;
3447 req->modes_ours._present.size = 1;
3448 req->modes_ours.size = size;
3449}
3450static inline void
3451__ethtool_eee_set_req_set_modes_ours_bits_bit(struct ethtool_eee_set_req *req,
3452 struct ethtool_bitset_bit *bit,
3453 unsigned int n_bit)
3454{
3455 free(req->modes_ours.bits.bit);
3456 req->modes_ours.bits.bit = bit;
3457 req->modes_ours.bits.n_bit = n_bit;
3458}
3459static inline void
3460ethtool_eee_set_req_set_modes_peer_nomask(struct ethtool_eee_set_req *req)
3461{
3462 req->_present.modes_peer = 1;
3463 req->modes_peer._present.nomask = 1;
3464}
3465static inline void
3466ethtool_eee_set_req_set_modes_peer_size(struct ethtool_eee_set_req *req,
3467 __u32 size)
3468{
3469 req->_present.modes_peer = 1;
3470 req->modes_peer._present.size = 1;
3471 req->modes_peer.size = size;
3472}
3473static inline void
3474__ethtool_eee_set_req_set_modes_peer_bits_bit(struct ethtool_eee_set_req *req,
3475 struct ethtool_bitset_bit *bit,
3476 unsigned int n_bit)
3477{
3478 free(req->modes_peer.bits.bit);
3479 req->modes_peer.bits.bit = bit;
3480 req->modes_peer.bits.n_bit = n_bit;
3481}
3482static inline void
3483ethtool_eee_set_req_set_active(struct ethtool_eee_set_req *req, __u8 active)
3484{
3485 req->_present.active = 1;
3486 req->active = active;
3487}
3488static inline void
3489ethtool_eee_set_req_set_enabled(struct ethtool_eee_set_req *req, __u8 enabled)
3490{
3491 req->_present.enabled = 1;
3492 req->enabled = enabled;
3493}
3494static inline void
3495ethtool_eee_set_req_set_tx_lpi_enabled(struct ethtool_eee_set_req *req,
3496 __u8 tx_lpi_enabled)
3497{
3498 req->_present.tx_lpi_enabled = 1;
3499 req->tx_lpi_enabled = tx_lpi_enabled;
3500}
3501static inline void
3502ethtool_eee_set_req_set_tx_lpi_timer(struct ethtool_eee_set_req *req,
3503 __u32 tx_lpi_timer)
3504{
3505 req->_present.tx_lpi_timer = 1;
3506 req->tx_lpi_timer = tx_lpi_timer;
3507}
3508
3509/*
3510 * Set eee params.
3511 */
3512int ethtool_eee_set(struct ynl_sock *ys, struct ethtool_eee_set_req *req);
3513
3514/* ============== ETHTOOL_MSG_TSINFO_GET ============== */
3515/* ETHTOOL_MSG_TSINFO_GET - do */
3516struct ethtool_tsinfo_get_req {
3517 struct {
3518 __u32 header:1;
3519 } _present;
3520
3521 struct ethtool_header header;
3522};
3523
3524static inline struct ethtool_tsinfo_get_req *ethtool_tsinfo_get_req_alloc(void)
3525{
3526 return calloc(1, sizeof(struct ethtool_tsinfo_get_req));
3527}
3528void ethtool_tsinfo_get_req_free(struct ethtool_tsinfo_get_req *req);
3529
3530static inline void
3531ethtool_tsinfo_get_req_set_header_dev_index(struct ethtool_tsinfo_get_req *req,
3532 __u32 dev_index)
3533{
3534 req->_present.header = 1;
3535 req->header._present.dev_index = 1;
3536 req->header.dev_index = dev_index;
3537}
3538static inline void
3539ethtool_tsinfo_get_req_set_header_dev_name(struct ethtool_tsinfo_get_req *req,
3540 const char *dev_name)
3541{
3542 free(req->header.dev_name);
3543 req->header._present.dev_name_len = strlen(dev_name);
3544 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3545 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3546 req->header.dev_name[req->header._present.dev_name_len] = 0;
3547}
3548static inline void
3549ethtool_tsinfo_get_req_set_header_flags(struct ethtool_tsinfo_get_req *req,
3550 __u32 flags)
3551{
3552 req->_present.header = 1;
3553 req->header._present.flags = 1;
3554 req->header.flags = flags;
3555}
3556
3557struct ethtool_tsinfo_get_rsp {
3558 struct {
3559 __u32 header:1;
3560 __u32 timestamping:1;
3561 __u32 tx_types:1;
3562 __u32 rx_filters:1;
3563 __u32 phc_index:1;
3564 } _present;
3565
3566 struct ethtool_header header;
3567 struct ethtool_bitset timestamping;
3568 struct ethtool_bitset tx_types;
3569 struct ethtool_bitset rx_filters;
3570 __u32 phc_index;
3571};
3572
3573void ethtool_tsinfo_get_rsp_free(struct ethtool_tsinfo_get_rsp *rsp);
3574
3575/*
3576 * Get tsinfo params.
3577 */
3578struct ethtool_tsinfo_get_rsp *
3579ethtool_tsinfo_get(struct ynl_sock *ys, struct ethtool_tsinfo_get_req *req);
3580
3581/* ETHTOOL_MSG_TSINFO_GET - dump */
3582struct ethtool_tsinfo_get_req_dump {
3583 struct {
3584 __u32 header:1;
3585 } _present;
3586
3587 struct ethtool_header header;
3588};
3589
3590static inline struct ethtool_tsinfo_get_req_dump *
3591ethtool_tsinfo_get_req_dump_alloc(void)
3592{
3593 return calloc(1, sizeof(struct ethtool_tsinfo_get_req_dump));
3594}
3595void ethtool_tsinfo_get_req_dump_free(struct ethtool_tsinfo_get_req_dump *req);
3596
3597static inline void
3598ethtool_tsinfo_get_req_dump_set_header_dev_index(struct ethtool_tsinfo_get_req_dump *req,
3599 __u32 dev_index)
3600{
3601 req->_present.header = 1;
3602 req->header._present.dev_index = 1;
3603 req->header.dev_index = dev_index;
3604}
3605static inline void
3606ethtool_tsinfo_get_req_dump_set_header_dev_name(struct ethtool_tsinfo_get_req_dump *req,
3607 const char *dev_name)
3608{
3609 free(req->header.dev_name);
3610 req->header._present.dev_name_len = strlen(dev_name);
3611 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3612 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3613 req->header.dev_name[req->header._present.dev_name_len] = 0;
3614}
3615static inline void
3616ethtool_tsinfo_get_req_dump_set_header_flags(struct ethtool_tsinfo_get_req_dump *req,
3617 __u32 flags)
3618{
3619 req->_present.header = 1;
3620 req->header._present.flags = 1;
3621 req->header.flags = flags;
3622}
3623
3624struct ethtool_tsinfo_get_list {
3625 struct ethtool_tsinfo_get_list *next;
3626 struct ethtool_tsinfo_get_rsp obj __attribute__ ((aligned (8)));
3627};
3628
3629void ethtool_tsinfo_get_list_free(struct ethtool_tsinfo_get_list *rsp);
3630
3631struct ethtool_tsinfo_get_list *
3632ethtool_tsinfo_get_dump(struct ynl_sock *ys,
3633 struct ethtool_tsinfo_get_req_dump *req);
3634
3635/* ============== ETHTOOL_MSG_CABLE_TEST_ACT ============== */
3636/* ETHTOOL_MSG_CABLE_TEST_ACT - do */
3637struct ethtool_cable_test_act_req {
3638 struct {
3639 __u32 header:1;
3640 } _present;
3641
3642 struct ethtool_header header;
3643};
3644
3645static inline struct ethtool_cable_test_act_req *
3646ethtool_cable_test_act_req_alloc(void)
3647{
3648 return calloc(1, sizeof(struct ethtool_cable_test_act_req));
3649}
3650void ethtool_cable_test_act_req_free(struct ethtool_cable_test_act_req *req);
3651
3652static inline void
3653ethtool_cable_test_act_req_set_header_dev_index(struct ethtool_cable_test_act_req *req,
3654 __u32 dev_index)
3655{
3656 req->_present.header = 1;
3657 req->header._present.dev_index = 1;
3658 req->header.dev_index = dev_index;
3659}
3660static inline void
3661ethtool_cable_test_act_req_set_header_dev_name(struct ethtool_cable_test_act_req *req,
3662 const char *dev_name)
3663{
3664 free(req->header.dev_name);
3665 req->header._present.dev_name_len = strlen(dev_name);
3666 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3667 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3668 req->header.dev_name[req->header._present.dev_name_len] = 0;
3669}
3670static inline void
3671ethtool_cable_test_act_req_set_header_flags(struct ethtool_cable_test_act_req *req,
3672 __u32 flags)
3673{
3674 req->_present.header = 1;
3675 req->header._present.flags = 1;
3676 req->header.flags = flags;
3677}
3678
3679/*
3680 * Cable test.
3681 */
3682int ethtool_cable_test_act(struct ynl_sock *ys,
3683 struct ethtool_cable_test_act_req *req);
3684
3685/* ============== ETHTOOL_MSG_CABLE_TEST_TDR_ACT ============== */
3686/* ETHTOOL_MSG_CABLE_TEST_TDR_ACT - do */
3687struct ethtool_cable_test_tdr_act_req {
3688 struct {
3689 __u32 header:1;
3690 } _present;
3691
3692 struct ethtool_header header;
3693};
3694
3695static inline struct ethtool_cable_test_tdr_act_req *
3696ethtool_cable_test_tdr_act_req_alloc(void)
3697{
3698 return calloc(1, sizeof(struct ethtool_cable_test_tdr_act_req));
3699}
3700void
3701ethtool_cable_test_tdr_act_req_free(struct ethtool_cable_test_tdr_act_req *req);
3702
3703static inline void
3704ethtool_cable_test_tdr_act_req_set_header_dev_index(struct ethtool_cable_test_tdr_act_req *req,
3705 __u32 dev_index)
3706{
3707 req->_present.header = 1;
3708 req->header._present.dev_index = 1;
3709 req->header.dev_index = dev_index;
3710}
3711static inline void
3712ethtool_cable_test_tdr_act_req_set_header_dev_name(struct ethtool_cable_test_tdr_act_req *req,
3713 const char *dev_name)
3714{
3715 free(req->header.dev_name);
3716 req->header._present.dev_name_len = strlen(dev_name);
3717 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3718 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3719 req->header.dev_name[req->header._present.dev_name_len] = 0;
3720}
3721static inline void
3722ethtool_cable_test_tdr_act_req_set_header_flags(struct ethtool_cable_test_tdr_act_req *req,
3723 __u32 flags)
3724{
3725 req->_present.header = 1;
3726 req->header._present.flags = 1;
3727 req->header.flags = flags;
3728}
3729
3730/*
3731 * Cable test TDR.
3732 */
3733int ethtool_cable_test_tdr_act(struct ynl_sock *ys,
3734 struct ethtool_cable_test_tdr_act_req *req);
3735
3736/* ============== ETHTOOL_MSG_TUNNEL_INFO_GET ============== */
3737/* ETHTOOL_MSG_TUNNEL_INFO_GET - do */
3738struct ethtool_tunnel_info_get_req {
3739 struct {
3740 __u32 header:1;
3741 } _present;
3742
3743 struct ethtool_header header;
3744};
3745
3746static inline struct ethtool_tunnel_info_get_req *
3747ethtool_tunnel_info_get_req_alloc(void)
3748{
3749 return calloc(1, sizeof(struct ethtool_tunnel_info_get_req));
3750}
3751void ethtool_tunnel_info_get_req_free(struct ethtool_tunnel_info_get_req *req);
3752
3753static inline void
3754ethtool_tunnel_info_get_req_set_header_dev_index(struct ethtool_tunnel_info_get_req *req,
3755 __u32 dev_index)
3756{
3757 req->_present.header = 1;
3758 req->header._present.dev_index = 1;
3759 req->header.dev_index = dev_index;
3760}
3761static inline void
3762ethtool_tunnel_info_get_req_set_header_dev_name(struct ethtool_tunnel_info_get_req *req,
3763 const char *dev_name)
3764{
3765 free(req->header.dev_name);
3766 req->header._present.dev_name_len = strlen(dev_name);
3767 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3768 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3769 req->header.dev_name[req->header._present.dev_name_len] = 0;
3770}
3771static inline void
3772ethtool_tunnel_info_get_req_set_header_flags(struct ethtool_tunnel_info_get_req *req,
3773 __u32 flags)
3774{
3775 req->_present.header = 1;
3776 req->header._present.flags = 1;
3777 req->header.flags = flags;
3778}
3779
3780struct ethtool_tunnel_info_get_rsp {
3781 struct {
3782 __u32 header:1;
3783 __u32 udp_ports:1;
3784 } _present;
3785
3786 struct ethtool_header header;
3787 struct ethtool_tunnel_udp udp_ports;
3788};
3789
3790void ethtool_tunnel_info_get_rsp_free(struct ethtool_tunnel_info_get_rsp *rsp);
3791
3792/*
3793 * Get tsinfo params.
3794 */
3795struct ethtool_tunnel_info_get_rsp *
3796ethtool_tunnel_info_get(struct ynl_sock *ys,
3797 struct ethtool_tunnel_info_get_req *req);
3798
3799/* ETHTOOL_MSG_TUNNEL_INFO_GET - dump */
3800struct ethtool_tunnel_info_get_req_dump {
3801 struct {
3802 __u32 header:1;
3803 } _present;
3804
3805 struct ethtool_header header;
3806};
3807
3808static inline struct ethtool_tunnel_info_get_req_dump *
3809ethtool_tunnel_info_get_req_dump_alloc(void)
3810{
3811 return calloc(1, sizeof(struct ethtool_tunnel_info_get_req_dump));
3812}
3813void
3814ethtool_tunnel_info_get_req_dump_free(struct ethtool_tunnel_info_get_req_dump *req);
3815
3816static inline void
3817ethtool_tunnel_info_get_req_dump_set_header_dev_index(struct ethtool_tunnel_info_get_req_dump *req,
3818 __u32 dev_index)
3819{
3820 req->_present.header = 1;
3821 req->header._present.dev_index = 1;
3822 req->header.dev_index = dev_index;
3823}
3824static inline void
3825ethtool_tunnel_info_get_req_dump_set_header_dev_name(struct ethtool_tunnel_info_get_req_dump *req,
3826 const char *dev_name)
3827{
3828 free(req->header.dev_name);
3829 req->header._present.dev_name_len = strlen(dev_name);
3830 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3831 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3832 req->header.dev_name[req->header._present.dev_name_len] = 0;
3833}
3834static inline void
3835ethtool_tunnel_info_get_req_dump_set_header_flags(struct ethtool_tunnel_info_get_req_dump *req,
3836 __u32 flags)
3837{
3838 req->_present.header = 1;
3839 req->header._present.flags = 1;
3840 req->header.flags = flags;
3841}
3842
3843struct ethtool_tunnel_info_get_list {
3844 struct ethtool_tunnel_info_get_list *next;
3845 struct ethtool_tunnel_info_get_rsp obj __attribute__ ((aligned (8)));
3846};
3847
3848void
3849ethtool_tunnel_info_get_list_free(struct ethtool_tunnel_info_get_list *rsp);
3850
3851struct ethtool_tunnel_info_get_list *
3852ethtool_tunnel_info_get_dump(struct ynl_sock *ys,
3853 struct ethtool_tunnel_info_get_req_dump *req);
3854
3855/* ============== ETHTOOL_MSG_FEC_GET ============== */
3856/* ETHTOOL_MSG_FEC_GET - do */
3857struct ethtool_fec_get_req {
3858 struct {
3859 __u32 header:1;
3860 } _present;
3861
3862 struct ethtool_header header;
3863};
3864
3865static inline struct ethtool_fec_get_req *ethtool_fec_get_req_alloc(void)
3866{
3867 return calloc(1, sizeof(struct ethtool_fec_get_req));
3868}
3869void ethtool_fec_get_req_free(struct ethtool_fec_get_req *req);
3870
3871static inline void
3872ethtool_fec_get_req_set_header_dev_index(struct ethtool_fec_get_req *req,
3873 __u32 dev_index)
3874{
3875 req->_present.header = 1;
3876 req->header._present.dev_index = 1;
3877 req->header.dev_index = dev_index;
3878}
3879static inline void
3880ethtool_fec_get_req_set_header_dev_name(struct ethtool_fec_get_req *req,
3881 const char *dev_name)
3882{
3883 free(req->header.dev_name);
3884 req->header._present.dev_name_len = strlen(dev_name);
3885 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3886 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3887 req->header.dev_name[req->header._present.dev_name_len] = 0;
3888}
3889static inline void
3890ethtool_fec_get_req_set_header_flags(struct ethtool_fec_get_req *req,
3891 __u32 flags)
3892{
3893 req->_present.header = 1;
3894 req->header._present.flags = 1;
3895 req->header.flags = flags;
3896}
3897
3898struct ethtool_fec_get_rsp {
3899 struct {
3900 __u32 header:1;
3901 __u32 modes:1;
3902 __u32 auto_:1;
3903 __u32 active:1;
3904 __u32 stats:1;
3905 } _present;
3906
3907 struct ethtool_header header;
3908 struct ethtool_bitset modes;
3909 __u8 auto_;
3910 __u32 active;
3911 struct ethtool_fec_stat stats;
3912};
3913
3914void ethtool_fec_get_rsp_free(struct ethtool_fec_get_rsp *rsp);
3915
3916/*
3917 * Get FEC params.
3918 */
3919struct ethtool_fec_get_rsp *
3920ethtool_fec_get(struct ynl_sock *ys, struct ethtool_fec_get_req *req);
3921
3922/* ETHTOOL_MSG_FEC_GET - dump */
3923struct ethtool_fec_get_req_dump {
3924 struct {
3925 __u32 header:1;
3926 } _present;
3927
3928 struct ethtool_header header;
3929};
3930
3931static inline struct ethtool_fec_get_req_dump *
3932ethtool_fec_get_req_dump_alloc(void)
3933{
3934 return calloc(1, sizeof(struct ethtool_fec_get_req_dump));
3935}
3936void ethtool_fec_get_req_dump_free(struct ethtool_fec_get_req_dump *req);
3937
3938static inline void
3939ethtool_fec_get_req_dump_set_header_dev_index(struct ethtool_fec_get_req_dump *req,
3940 __u32 dev_index)
3941{
3942 req->_present.header = 1;
3943 req->header._present.dev_index = 1;
3944 req->header.dev_index = dev_index;
3945}
3946static inline void
3947ethtool_fec_get_req_dump_set_header_dev_name(struct ethtool_fec_get_req_dump *req,
3948 const char *dev_name)
3949{
3950 free(req->header.dev_name);
3951 req->header._present.dev_name_len = strlen(dev_name);
3952 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
3953 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
3954 req->header.dev_name[req->header._present.dev_name_len] = 0;
3955}
3956static inline void
3957ethtool_fec_get_req_dump_set_header_flags(struct ethtool_fec_get_req_dump *req,
3958 __u32 flags)
3959{
3960 req->_present.header = 1;
3961 req->header._present.flags = 1;
3962 req->header.flags = flags;
3963}
3964
3965struct ethtool_fec_get_list {
3966 struct ethtool_fec_get_list *next;
3967 struct ethtool_fec_get_rsp obj __attribute__ ((aligned (8)));
3968};
3969
3970void ethtool_fec_get_list_free(struct ethtool_fec_get_list *rsp);
3971
3972struct ethtool_fec_get_list *
3973ethtool_fec_get_dump(struct ynl_sock *ys, struct ethtool_fec_get_req_dump *req);
3974
3975/* ETHTOOL_MSG_FEC_GET - notify */
3976struct ethtool_fec_get_ntf {
3977 __u16 family;
3978 __u8 cmd;
3979 struct ynl_ntf_base_type *next;
3980 void (*free)(struct ethtool_fec_get_ntf *ntf);
3981 struct ethtool_fec_get_rsp obj __attribute__ ((aligned (8)));
3982};
3983
3984void ethtool_fec_get_ntf_free(struct ethtool_fec_get_ntf *rsp);
3985
3986/* ============== ETHTOOL_MSG_FEC_SET ============== */
3987/* ETHTOOL_MSG_FEC_SET - do */
3988struct ethtool_fec_set_req {
3989 struct {
3990 __u32 header:1;
3991 __u32 modes:1;
3992 __u32 auto_:1;
3993 __u32 active:1;
3994 __u32 stats:1;
3995 } _present;
3996
3997 struct ethtool_header header;
3998 struct ethtool_bitset modes;
3999 __u8 auto_;
4000 __u32 active;
4001 struct ethtool_fec_stat stats;
4002};
4003
4004static inline struct ethtool_fec_set_req *ethtool_fec_set_req_alloc(void)
4005{
4006 return calloc(1, sizeof(struct ethtool_fec_set_req));
4007}
4008void ethtool_fec_set_req_free(struct ethtool_fec_set_req *req);
4009
4010static inline void
4011ethtool_fec_set_req_set_header_dev_index(struct ethtool_fec_set_req *req,
4012 __u32 dev_index)
4013{
4014 req->_present.header = 1;
4015 req->header._present.dev_index = 1;
4016 req->header.dev_index = dev_index;
4017}
4018static inline void
4019ethtool_fec_set_req_set_header_dev_name(struct ethtool_fec_set_req *req,
4020 const char *dev_name)
4021{
4022 free(req->header.dev_name);
4023 req->header._present.dev_name_len = strlen(dev_name);
4024 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4025 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4026 req->header.dev_name[req->header._present.dev_name_len] = 0;
4027}
4028static inline void
4029ethtool_fec_set_req_set_header_flags(struct ethtool_fec_set_req *req,
4030 __u32 flags)
4031{
4032 req->_present.header = 1;
4033 req->header._present.flags = 1;
4034 req->header.flags = flags;
4035}
4036static inline void
4037ethtool_fec_set_req_set_modes_nomask(struct ethtool_fec_set_req *req)
4038{
4039 req->_present.modes = 1;
4040 req->modes._present.nomask = 1;
4041}
4042static inline void
4043ethtool_fec_set_req_set_modes_size(struct ethtool_fec_set_req *req, __u32 size)
4044{
4045 req->_present.modes = 1;
4046 req->modes._present.size = 1;
4047 req->modes.size = size;
4048}
4049static inline void
4050__ethtool_fec_set_req_set_modes_bits_bit(struct ethtool_fec_set_req *req,
4051 struct ethtool_bitset_bit *bit,
4052 unsigned int n_bit)
4053{
4054 free(req->modes.bits.bit);
4055 req->modes.bits.bit = bit;
4056 req->modes.bits.n_bit = n_bit;
4057}
4058static inline void
4059ethtool_fec_set_req_set_auto_(struct ethtool_fec_set_req *req, __u8 auto_)
4060{
4061 req->_present.auto_ = 1;
4062 req->auto_ = auto_;
4063}
4064static inline void
4065ethtool_fec_set_req_set_active(struct ethtool_fec_set_req *req, __u32 active)
4066{
4067 req->_present.active = 1;
4068 req->active = active;
4069}
4070static inline void
4071ethtool_fec_set_req_set_stats_corrected(struct ethtool_fec_set_req *req,
4072 const void *corrected, size_t len)
4073{
4074 free(req->stats.corrected);
4075 req->stats._present.corrected_len = len;
4076 req->stats.corrected = malloc(req->stats._present.corrected_len);
4077 memcpy(req->stats.corrected, corrected, req->stats._present.corrected_len);
4078}
4079static inline void
4080ethtool_fec_set_req_set_stats_uncorr(struct ethtool_fec_set_req *req,
4081 const void *uncorr, size_t len)
4082{
4083 free(req->stats.uncorr);
4084 req->stats._present.uncorr_len = len;
4085 req->stats.uncorr = malloc(req->stats._present.uncorr_len);
4086 memcpy(req->stats.uncorr, uncorr, req->stats._present.uncorr_len);
4087}
4088static inline void
4089ethtool_fec_set_req_set_stats_corr_bits(struct ethtool_fec_set_req *req,
4090 const void *corr_bits, size_t len)
4091{
4092 free(req->stats.corr_bits);
4093 req->stats._present.corr_bits_len = len;
4094 req->stats.corr_bits = malloc(req->stats._present.corr_bits_len);
4095 memcpy(req->stats.corr_bits, corr_bits, req->stats._present.corr_bits_len);
4096}
4097
4098/*
4099 * Set FEC params.
4100 */
4101int ethtool_fec_set(struct ynl_sock *ys, struct ethtool_fec_set_req *req);
4102
4103/* ============== ETHTOOL_MSG_MODULE_EEPROM_GET ============== */
4104/* ETHTOOL_MSG_MODULE_EEPROM_GET - do */
4105struct ethtool_module_eeprom_get_req {
4106 struct {
4107 __u32 header:1;
4108 } _present;
4109
4110 struct ethtool_header header;
4111};
4112
4113static inline struct ethtool_module_eeprom_get_req *
4114ethtool_module_eeprom_get_req_alloc(void)
4115{
4116 return calloc(1, sizeof(struct ethtool_module_eeprom_get_req));
4117}
4118void
4119ethtool_module_eeprom_get_req_free(struct ethtool_module_eeprom_get_req *req);
4120
4121static inline void
4122ethtool_module_eeprom_get_req_set_header_dev_index(struct ethtool_module_eeprom_get_req *req,
4123 __u32 dev_index)
4124{
4125 req->_present.header = 1;
4126 req->header._present.dev_index = 1;
4127 req->header.dev_index = dev_index;
4128}
4129static inline void
4130ethtool_module_eeprom_get_req_set_header_dev_name(struct ethtool_module_eeprom_get_req *req,
4131 const char *dev_name)
4132{
4133 free(req->header.dev_name);
4134 req->header._present.dev_name_len = strlen(dev_name);
4135 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4136 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4137 req->header.dev_name[req->header._present.dev_name_len] = 0;
4138}
4139static inline void
4140ethtool_module_eeprom_get_req_set_header_flags(struct ethtool_module_eeprom_get_req *req,
4141 __u32 flags)
4142{
4143 req->_present.header = 1;
4144 req->header._present.flags = 1;
4145 req->header.flags = flags;
4146}
4147
4148struct ethtool_module_eeprom_get_rsp {
4149 struct {
4150 __u32 header:1;
4151 __u32 offset:1;
4152 __u32 length:1;
4153 __u32 page:1;
4154 __u32 bank:1;
4155 __u32 i2c_address:1;
4156 __u32 data_len;
4157 } _present;
4158
4159 struct ethtool_header header;
4160 __u32 offset;
4161 __u32 length;
4162 __u8 page;
4163 __u8 bank;
4164 __u8 i2c_address;
4165 void *data;
4166};
4167
4168void
4169ethtool_module_eeprom_get_rsp_free(struct ethtool_module_eeprom_get_rsp *rsp);
4170
4171/*
4172 * Get module EEPROM params.
4173 */
4174struct ethtool_module_eeprom_get_rsp *
4175ethtool_module_eeprom_get(struct ynl_sock *ys,
4176 struct ethtool_module_eeprom_get_req *req);
4177
4178/* ETHTOOL_MSG_MODULE_EEPROM_GET - dump */
4179struct ethtool_module_eeprom_get_req_dump {
4180 struct {
4181 __u32 header:1;
4182 } _present;
4183
4184 struct ethtool_header header;
4185};
4186
4187static inline struct ethtool_module_eeprom_get_req_dump *
4188ethtool_module_eeprom_get_req_dump_alloc(void)
4189{
4190 return calloc(1, sizeof(struct ethtool_module_eeprom_get_req_dump));
4191}
4192void
4193ethtool_module_eeprom_get_req_dump_free(struct ethtool_module_eeprom_get_req_dump *req);
4194
4195static inline void
4196ethtool_module_eeprom_get_req_dump_set_header_dev_index(struct ethtool_module_eeprom_get_req_dump *req,
4197 __u32 dev_index)
4198{
4199 req->_present.header = 1;
4200 req->header._present.dev_index = 1;
4201 req->header.dev_index = dev_index;
4202}
4203static inline void
4204ethtool_module_eeprom_get_req_dump_set_header_dev_name(struct ethtool_module_eeprom_get_req_dump *req,
4205 const char *dev_name)
4206{
4207 free(req->header.dev_name);
4208 req->header._present.dev_name_len = strlen(dev_name);
4209 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4210 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4211 req->header.dev_name[req->header._present.dev_name_len] = 0;
4212}
4213static inline void
4214ethtool_module_eeprom_get_req_dump_set_header_flags(struct ethtool_module_eeprom_get_req_dump *req,
4215 __u32 flags)
4216{
4217 req->_present.header = 1;
4218 req->header._present.flags = 1;
4219 req->header.flags = flags;
4220}
4221
4222struct ethtool_module_eeprom_get_list {
4223 struct ethtool_module_eeprom_get_list *next;
4224 struct ethtool_module_eeprom_get_rsp obj __attribute__ ((aligned (8)));
4225};
4226
4227void
4228ethtool_module_eeprom_get_list_free(struct ethtool_module_eeprom_get_list *rsp);
4229
4230struct ethtool_module_eeprom_get_list *
4231ethtool_module_eeprom_get_dump(struct ynl_sock *ys,
4232 struct ethtool_module_eeprom_get_req_dump *req);
4233
4234/* ============== ETHTOOL_MSG_PHC_VCLOCKS_GET ============== */
4235/* ETHTOOL_MSG_PHC_VCLOCKS_GET - do */
4236struct ethtool_phc_vclocks_get_req {
4237 struct {
4238 __u32 header:1;
4239 } _present;
4240
4241 struct ethtool_header header;
4242};
4243
4244static inline struct ethtool_phc_vclocks_get_req *
4245ethtool_phc_vclocks_get_req_alloc(void)
4246{
4247 return calloc(1, sizeof(struct ethtool_phc_vclocks_get_req));
4248}
4249void ethtool_phc_vclocks_get_req_free(struct ethtool_phc_vclocks_get_req *req);
4250
4251static inline void
4252ethtool_phc_vclocks_get_req_set_header_dev_index(struct ethtool_phc_vclocks_get_req *req,
4253 __u32 dev_index)
4254{
4255 req->_present.header = 1;
4256 req->header._present.dev_index = 1;
4257 req->header.dev_index = dev_index;
4258}
4259static inline void
4260ethtool_phc_vclocks_get_req_set_header_dev_name(struct ethtool_phc_vclocks_get_req *req,
4261 const char *dev_name)
4262{
4263 free(req->header.dev_name);
4264 req->header._present.dev_name_len = strlen(dev_name);
4265 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4266 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4267 req->header.dev_name[req->header._present.dev_name_len] = 0;
4268}
4269static inline void
4270ethtool_phc_vclocks_get_req_set_header_flags(struct ethtool_phc_vclocks_get_req *req,
4271 __u32 flags)
4272{
4273 req->_present.header = 1;
4274 req->header._present.flags = 1;
4275 req->header.flags = flags;
4276}
4277
4278struct ethtool_phc_vclocks_get_rsp {
4279 struct {
4280 __u32 header:1;
4281 __u32 num:1;
4282 } _present;
4283
4284 struct ethtool_header header;
4285 __u32 num;
4286};
4287
4288void ethtool_phc_vclocks_get_rsp_free(struct ethtool_phc_vclocks_get_rsp *rsp);
4289
4290/*
4291 * Get PHC VCLOCKs.
4292 */
4293struct ethtool_phc_vclocks_get_rsp *
4294ethtool_phc_vclocks_get(struct ynl_sock *ys,
4295 struct ethtool_phc_vclocks_get_req *req);
4296
4297/* ETHTOOL_MSG_PHC_VCLOCKS_GET - dump */
4298struct ethtool_phc_vclocks_get_req_dump {
4299 struct {
4300 __u32 header:1;
4301 } _present;
4302
4303 struct ethtool_header header;
4304};
4305
4306static inline struct ethtool_phc_vclocks_get_req_dump *
4307ethtool_phc_vclocks_get_req_dump_alloc(void)
4308{
4309 return calloc(1, sizeof(struct ethtool_phc_vclocks_get_req_dump));
4310}
4311void
4312ethtool_phc_vclocks_get_req_dump_free(struct ethtool_phc_vclocks_get_req_dump *req);
4313
4314static inline void
4315ethtool_phc_vclocks_get_req_dump_set_header_dev_index(struct ethtool_phc_vclocks_get_req_dump *req,
4316 __u32 dev_index)
4317{
4318 req->_present.header = 1;
4319 req->header._present.dev_index = 1;
4320 req->header.dev_index = dev_index;
4321}
4322static inline void
4323ethtool_phc_vclocks_get_req_dump_set_header_dev_name(struct ethtool_phc_vclocks_get_req_dump *req,
4324 const char *dev_name)
4325{
4326 free(req->header.dev_name);
4327 req->header._present.dev_name_len = strlen(dev_name);
4328 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4329 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4330 req->header.dev_name[req->header._present.dev_name_len] = 0;
4331}
4332static inline void
4333ethtool_phc_vclocks_get_req_dump_set_header_flags(struct ethtool_phc_vclocks_get_req_dump *req,
4334 __u32 flags)
4335{
4336 req->_present.header = 1;
4337 req->header._present.flags = 1;
4338 req->header.flags = flags;
4339}
4340
4341struct ethtool_phc_vclocks_get_list {
4342 struct ethtool_phc_vclocks_get_list *next;
4343 struct ethtool_phc_vclocks_get_rsp obj __attribute__ ((aligned (8)));
4344};
4345
4346void
4347ethtool_phc_vclocks_get_list_free(struct ethtool_phc_vclocks_get_list *rsp);
4348
4349struct ethtool_phc_vclocks_get_list *
4350ethtool_phc_vclocks_get_dump(struct ynl_sock *ys,
4351 struct ethtool_phc_vclocks_get_req_dump *req);
4352
4353/* ============== ETHTOOL_MSG_MODULE_GET ============== */
4354/* ETHTOOL_MSG_MODULE_GET - do */
4355struct ethtool_module_get_req {
4356 struct {
4357 __u32 header:1;
4358 } _present;
4359
4360 struct ethtool_header header;
4361};
4362
4363static inline struct ethtool_module_get_req *ethtool_module_get_req_alloc(void)
4364{
4365 return calloc(1, sizeof(struct ethtool_module_get_req));
4366}
4367void ethtool_module_get_req_free(struct ethtool_module_get_req *req);
4368
4369static inline void
4370ethtool_module_get_req_set_header_dev_index(struct ethtool_module_get_req *req,
4371 __u32 dev_index)
4372{
4373 req->_present.header = 1;
4374 req->header._present.dev_index = 1;
4375 req->header.dev_index = dev_index;
4376}
4377static inline void
4378ethtool_module_get_req_set_header_dev_name(struct ethtool_module_get_req *req,
4379 const char *dev_name)
4380{
4381 free(req->header.dev_name);
4382 req->header._present.dev_name_len = strlen(dev_name);
4383 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4384 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4385 req->header.dev_name[req->header._present.dev_name_len] = 0;
4386}
4387static inline void
4388ethtool_module_get_req_set_header_flags(struct ethtool_module_get_req *req,
4389 __u32 flags)
4390{
4391 req->_present.header = 1;
4392 req->header._present.flags = 1;
4393 req->header.flags = flags;
4394}
4395
4396struct ethtool_module_get_rsp {
4397 struct {
4398 __u32 header:1;
4399 __u32 power_mode_policy:1;
4400 __u32 power_mode:1;
4401 } _present;
4402
4403 struct ethtool_header header;
4404 __u8 power_mode_policy;
4405 __u8 power_mode;
4406};
4407
4408void ethtool_module_get_rsp_free(struct ethtool_module_get_rsp *rsp);
4409
4410/*
4411 * Get module params.
4412 */
4413struct ethtool_module_get_rsp *
4414ethtool_module_get(struct ynl_sock *ys, struct ethtool_module_get_req *req);
4415
4416/* ETHTOOL_MSG_MODULE_GET - dump */
4417struct ethtool_module_get_req_dump {
4418 struct {
4419 __u32 header:1;
4420 } _present;
4421
4422 struct ethtool_header header;
4423};
4424
4425static inline struct ethtool_module_get_req_dump *
4426ethtool_module_get_req_dump_alloc(void)
4427{
4428 return calloc(1, sizeof(struct ethtool_module_get_req_dump));
4429}
4430void ethtool_module_get_req_dump_free(struct ethtool_module_get_req_dump *req);
4431
4432static inline void
4433ethtool_module_get_req_dump_set_header_dev_index(struct ethtool_module_get_req_dump *req,
4434 __u32 dev_index)
4435{
4436 req->_present.header = 1;
4437 req->header._present.dev_index = 1;
4438 req->header.dev_index = dev_index;
4439}
4440static inline void
4441ethtool_module_get_req_dump_set_header_dev_name(struct ethtool_module_get_req_dump *req,
4442 const char *dev_name)
4443{
4444 free(req->header.dev_name);
4445 req->header._present.dev_name_len = strlen(dev_name);
4446 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4447 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4448 req->header.dev_name[req->header._present.dev_name_len] = 0;
4449}
4450static inline void
4451ethtool_module_get_req_dump_set_header_flags(struct ethtool_module_get_req_dump *req,
4452 __u32 flags)
4453{
4454 req->_present.header = 1;
4455 req->header._present.flags = 1;
4456 req->header.flags = flags;
4457}
4458
4459struct ethtool_module_get_list {
4460 struct ethtool_module_get_list *next;
4461 struct ethtool_module_get_rsp obj __attribute__ ((aligned (8)));
4462};
4463
4464void ethtool_module_get_list_free(struct ethtool_module_get_list *rsp);
4465
4466struct ethtool_module_get_list *
4467ethtool_module_get_dump(struct ynl_sock *ys,
4468 struct ethtool_module_get_req_dump *req);
4469
4470/* ETHTOOL_MSG_MODULE_GET - notify */
4471struct ethtool_module_get_ntf {
4472 __u16 family;
4473 __u8 cmd;
4474 struct ynl_ntf_base_type *next;
4475 void (*free)(struct ethtool_module_get_ntf *ntf);
4476 struct ethtool_module_get_rsp obj __attribute__ ((aligned (8)));
4477};
4478
4479void ethtool_module_get_ntf_free(struct ethtool_module_get_ntf *rsp);
4480
4481/* ============== ETHTOOL_MSG_MODULE_SET ============== */
4482/* ETHTOOL_MSG_MODULE_SET - do */
4483struct ethtool_module_set_req {
4484 struct {
4485 __u32 header:1;
4486 __u32 power_mode_policy:1;
4487 __u32 power_mode:1;
4488 } _present;
4489
4490 struct ethtool_header header;
4491 __u8 power_mode_policy;
4492 __u8 power_mode;
4493};
4494
4495static inline struct ethtool_module_set_req *ethtool_module_set_req_alloc(void)
4496{
4497 return calloc(1, sizeof(struct ethtool_module_set_req));
4498}
4499void ethtool_module_set_req_free(struct ethtool_module_set_req *req);
4500
4501static inline void
4502ethtool_module_set_req_set_header_dev_index(struct ethtool_module_set_req *req,
4503 __u32 dev_index)
4504{
4505 req->_present.header = 1;
4506 req->header._present.dev_index = 1;
4507 req->header.dev_index = dev_index;
4508}
4509static inline void
4510ethtool_module_set_req_set_header_dev_name(struct ethtool_module_set_req *req,
4511 const char *dev_name)
4512{
4513 free(req->header.dev_name);
4514 req->header._present.dev_name_len = strlen(dev_name);
4515 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4516 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4517 req->header.dev_name[req->header._present.dev_name_len] = 0;
4518}
4519static inline void
4520ethtool_module_set_req_set_header_flags(struct ethtool_module_set_req *req,
4521 __u32 flags)
4522{
4523 req->_present.header = 1;
4524 req->header._present.flags = 1;
4525 req->header.flags = flags;
4526}
4527static inline void
4528ethtool_module_set_req_set_power_mode_policy(struct ethtool_module_set_req *req,
4529 __u8 power_mode_policy)
4530{
4531 req->_present.power_mode_policy = 1;
4532 req->power_mode_policy = power_mode_policy;
4533}
4534static inline void
4535ethtool_module_set_req_set_power_mode(struct ethtool_module_set_req *req,
4536 __u8 power_mode)
4537{
4538 req->_present.power_mode = 1;
4539 req->power_mode = power_mode;
4540}
4541
4542/*
4543 * Set module params.
4544 */
4545int ethtool_module_set(struct ynl_sock *ys, struct ethtool_module_set_req *req);
4546
4547/* ============== ETHTOOL_MSG_PSE_GET ============== */
4548/* ETHTOOL_MSG_PSE_GET - do */
4549struct ethtool_pse_get_req {
4550 struct {
4551 __u32 header:1;
4552 } _present;
4553
4554 struct ethtool_header header;
4555};
4556
4557static inline struct ethtool_pse_get_req *ethtool_pse_get_req_alloc(void)
4558{
4559 return calloc(1, sizeof(struct ethtool_pse_get_req));
4560}
4561void ethtool_pse_get_req_free(struct ethtool_pse_get_req *req);
4562
4563static inline void
4564ethtool_pse_get_req_set_header_dev_index(struct ethtool_pse_get_req *req,
4565 __u32 dev_index)
4566{
4567 req->_present.header = 1;
4568 req->header._present.dev_index = 1;
4569 req->header.dev_index = dev_index;
4570}
4571static inline void
4572ethtool_pse_get_req_set_header_dev_name(struct ethtool_pse_get_req *req,
4573 const char *dev_name)
4574{
4575 free(req->header.dev_name);
4576 req->header._present.dev_name_len = strlen(dev_name);
4577 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4578 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4579 req->header.dev_name[req->header._present.dev_name_len] = 0;
4580}
4581static inline void
4582ethtool_pse_get_req_set_header_flags(struct ethtool_pse_get_req *req,
4583 __u32 flags)
4584{
4585 req->_present.header = 1;
4586 req->header._present.flags = 1;
4587 req->header.flags = flags;
4588}
4589
4590struct ethtool_pse_get_rsp {
4591 struct {
4592 __u32 header:1;
4593 __u32 admin_state:1;
4594 __u32 admin_control:1;
4595 __u32 pw_d_status:1;
4596 } _present;
4597
4598 struct ethtool_header header;
4599 __u32 admin_state;
4600 __u32 admin_control;
4601 __u32 pw_d_status;
4602};
4603
4604void ethtool_pse_get_rsp_free(struct ethtool_pse_get_rsp *rsp);
4605
4606/*
4607 * Get Power Sourcing Equipment params.
4608 */
4609struct ethtool_pse_get_rsp *
4610ethtool_pse_get(struct ynl_sock *ys, struct ethtool_pse_get_req *req);
4611
4612/* ETHTOOL_MSG_PSE_GET - dump */
4613struct ethtool_pse_get_req_dump {
4614 struct {
4615 __u32 header:1;
4616 } _present;
4617
4618 struct ethtool_header header;
4619};
4620
4621static inline struct ethtool_pse_get_req_dump *
4622ethtool_pse_get_req_dump_alloc(void)
4623{
4624 return calloc(1, sizeof(struct ethtool_pse_get_req_dump));
4625}
4626void ethtool_pse_get_req_dump_free(struct ethtool_pse_get_req_dump *req);
4627
4628static inline void
4629ethtool_pse_get_req_dump_set_header_dev_index(struct ethtool_pse_get_req_dump *req,
4630 __u32 dev_index)
4631{
4632 req->_present.header = 1;
4633 req->header._present.dev_index = 1;
4634 req->header.dev_index = dev_index;
4635}
4636static inline void
4637ethtool_pse_get_req_dump_set_header_dev_name(struct ethtool_pse_get_req_dump *req,
4638 const char *dev_name)
4639{
4640 free(req->header.dev_name);
4641 req->header._present.dev_name_len = strlen(dev_name);
4642 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4643 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4644 req->header.dev_name[req->header._present.dev_name_len] = 0;
4645}
4646static inline void
4647ethtool_pse_get_req_dump_set_header_flags(struct ethtool_pse_get_req_dump *req,
4648 __u32 flags)
4649{
4650 req->_present.header = 1;
4651 req->header._present.flags = 1;
4652 req->header.flags = flags;
4653}
4654
4655struct ethtool_pse_get_list {
4656 struct ethtool_pse_get_list *next;
4657 struct ethtool_pse_get_rsp obj __attribute__ ((aligned (8)));
4658};
4659
4660void ethtool_pse_get_list_free(struct ethtool_pse_get_list *rsp);
4661
4662struct ethtool_pse_get_list *
4663ethtool_pse_get_dump(struct ynl_sock *ys, struct ethtool_pse_get_req_dump *req);
4664
4665/* ============== ETHTOOL_MSG_PSE_SET ============== */
4666/* ETHTOOL_MSG_PSE_SET - do */
4667struct ethtool_pse_set_req {
4668 struct {
4669 __u32 header:1;
4670 __u32 admin_state:1;
4671 __u32 admin_control:1;
4672 __u32 pw_d_status:1;
4673 } _present;
4674
4675 struct ethtool_header header;
4676 __u32 admin_state;
4677 __u32 admin_control;
4678 __u32 pw_d_status;
4679};
4680
4681static inline struct ethtool_pse_set_req *ethtool_pse_set_req_alloc(void)
4682{
4683 return calloc(1, sizeof(struct ethtool_pse_set_req));
4684}
4685void ethtool_pse_set_req_free(struct ethtool_pse_set_req *req);
4686
4687static inline void
4688ethtool_pse_set_req_set_header_dev_index(struct ethtool_pse_set_req *req,
4689 __u32 dev_index)
4690{
4691 req->_present.header = 1;
4692 req->header._present.dev_index = 1;
4693 req->header.dev_index = dev_index;
4694}
4695static inline void
4696ethtool_pse_set_req_set_header_dev_name(struct ethtool_pse_set_req *req,
4697 const char *dev_name)
4698{
4699 free(req->header.dev_name);
4700 req->header._present.dev_name_len = strlen(dev_name);
4701 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4702 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4703 req->header.dev_name[req->header._present.dev_name_len] = 0;
4704}
4705static inline void
4706ethtool_pse_set_req_set_header_flags(struct ethtool_pse_set_req *req,
4707 __u32 flags)
4708{
4709 req->_present.header = 1;
4710 req->header._present.flags = 1;
4711 req->header.flags = flags;
4712}
4713static inline void
4714ethtool_pse_set_req_set_admin_state(struct ethtool_pse_set_req *req,
4715 __u32 admin_state)
4716{
4717 req->_present.admin_state = 1;
4718 req->admin_state = admin_state;
4719}
4720static inline void
4721ethtool_pse_set_req_set_admin_control(struct ethtool_pse_set_req *req,
4722 __u32 admin_control)
4723{
4724 req->_present.admin_control = 1;
4725 req->admin_control = admin_control;
4726}
4727static inline void
4728ethtool_pse_set_req_set_pw_d_status(struct ethtool_pse_set_req *req,
4729 __u32 pw_d_status)
4730{
4731 req->_present.pw_d_status = 1;
4732 req->pw_d_status = pw_d_status;
4733}
4734
4735/*
4736 * Set Power Sourcing Equipment params.
4737 */
4738int ethtool_pse_set(struct ynl_sock *ys, struct ethtool_pse_set_req *req);
4739
4740/* ============== ETHTOOL_MSG_RSS_GET ============== */
4741/* ETHTOOL_MSG_RSS_GET - do */
4742struct ethtool_rss_get_req {
4743 struct {
4744 __u32 header:1;
4745 } _present;
4746
4747 struct ethtool_header header;
4748};
4749
4750static inline struct ethtool_rss_get_req *ethtool_rss_get_req_alloc(void)
4751{
4752 return calloc(1, sizeof(struct ethtool_rss_get_req));
4753}
4754void ethtool_rss_get_req_free(struct ethtool_rss_get_req *req);
4755
4756static inline void
4757ethtool_rss_get_req_set_header_dev_index(struct ethtool_rss_get_req *req,
4758 __u32 dev_index)
4759{
4760 req->_present.header = 1;
4761 req->header._present.dev_index = 1;
4762 req->header.dev_index = dev_index;
4763}
4764static inline void
4765ethtool_rss_get_req_set_header_dev_name(struct ethtool_rss_get_req *req,
4766 const char *dev_name)
4767{
4768 free(req->header.dev_name);
4769 req->header._present.dev_name_len = strlen(dev_name);
4770 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4771 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4772 req->header.dev_name[req->header._present.dev_name_len] = 0;
4773}
4774static inline void
4775ethtool_rss_get_req_set_header_flags(struct ethtool_rss_get_req *req,
4776 __u32 flags)
4777{
4778 req->_present.header = 1;
4779 req->header._present.flags = 1;
4780 req->header.flags = flags;
4781}
4782
4783struct ethtool_rss_get_rsp {
4784 struct {
4785 __u32 header:1;
4786 __u32 context:1;
4787 __u32 hfunc:1;
4788 __u32 indir_len;
4789 __u32 hkey_len;
4790 } _present;
4791
4792 struct ethtool_header header;
4793 __u32 context;
4794 __u32 hfunc;
4795 void *indir;
4796 void *hkey;
4797};
4798
4799void ethtool_rss_get_rsp_free(struct ethtool_rss_get_rsp *rsp);
4800
4801/*
4802 * Get RSS params.
4803 */
4804struct ethtool_rss_get_rsp *
4805ethtool_rss_get(struct ynl_sock *ys, struct ethtool_rss_get_req *req);
4806
4807/* ETHTOOL_MSG_RSS_GET - dump */
4808struct ethtool_rss_get_req_dump {
4809 struct {
4810 __u32 header:1;
4811 } _present;
4812
4813 struct ethtool_header header;
4814};
4815
4816static inline struct ethtool_rss_get_req_dump *
4817ethtool_rss_get_req_dump_alloc(void)
4818{
4819 return calloc(1, sizeof(struct ethtool_rss_get_req_dump));
4820}
4821void ethtool_rss_get_req_dump_free(struct ethtool_rss_get_req_dump *req);
4822
4823static inline void
4824ethtool_rss_get_req_dump_set_header_dev_index(struct ethtool_rss_get_req_dump *req,
4825 __u32 dev_index)
4826{
4827 req->_present.header = 1;
4828 req->header._present.dev_index = 1;
4829 req->header.dev_index = dev_index;
4830}
4831static inline void
4832ethtool_rss_get_req_dump_set_header_dev_name(struct ethtool_rss_get_req_dump *req,
4833 const char *dev_name)
4834{
4835 free(req->header.dev_name);
4836 req->header._present.dev_name_len = strlen(dev_name);
4837 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4838 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4839 req->header.dev_name[req->header._present.dev_name_len] = 0;
4840}
4841static inline void
4842ethtool_rss_get_req_dump_set_header_flags(struct ethtool_rss_get_req_dump *req,
4843 __u32 flags)
4844{
4845 req->_present.header = 1;
4846 req->header._present.flags = 1;
4847 req->header.flags = flags;
4848}
4849
4850struct ethtool_rss_get_list {
4851 struct ethtool_rss_get_list *next;
4852 struct ethtool_rss_get_rsp obj __attribute__ ((aligned (8)));
4853};
4854
4855void ethtool_rss_get_list_free(struct ethtool_rss_get_list *rsp);
4856
4857struct ethtool_rss_get_list *
4858ethtool_rss_get_dump(struct ynl_sock *ys, struct ethtool_rss_get_req_dump *req);
4859
4860/* ============== ETHTOOL_MSG_PLCA_GET_CFG ============== */
4861/* ETHTOOL_MSG_PLCA_GET_CFG - do */
4862struct ethtool_plca_get_cfg_req {
4863 struct {
4864 __u32 header:1;
4865 } _present;
4866
4867 struct ethtool_header header;
4868};
4869
4870static inline struct ethtool_plca_get_cfg_req *
4871ethtool_plca_get_cfg_req_alloc(void)
4872{
4873 return calloc(1, sizeof(struct ethtool_plca_get_cfg_req));
4874}
4875void ethtool_plca_get_cfg_req_free(struct ethtool_plca_get_cfg_req *req);
4876
4877static inline void
4878ethtool_plca_get_cfg_req_set_header_dev_index(struct ethtool_plca_get_cfg_req *req,
4879 __u32 dev_index)
4880{
4881 req->_present.header = 1;
4882 req->header._present.dev_index = 1;
4883 req->header.dev_index = dev_index;
4884}
4885static inline void
4886ethtool_plca_get_cfg_req_set_header_dev_name(struct ethtool_plca_get_cfg_req *req,
4887 const char *dev_name)
4888{
4889 free(req->header.dev_name);
4890 req->header._present.dev_name_len = strlen(dev_name);
4891 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4892 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4893 req->header.dev_name[req->header._present.dev_name_len] = 0;
4894}
4895static inline void
4896ethtool_plca_get_cfg_req_set_header_flags(struct ethtool_plca_get_cfg_req *req,
4897 __u32 flags)
4898{
4899 req->_present.header = 1;
4900 req->header._present.flags = 1;
4901 req->header.flags = flags;
4902}
4903
4904struct ethtool_plca_get_cfg_rsp {
4905 struct {
4906 __u32 header:1;
4907 __u32 version:1;
4908 __u32 enabled:1;
4909 __u32 status:1;
4910 __u32 node_cnt:1;
4911 __u32 node_id:1;
4912 __u32 to_tmr:1;
4913 __u32 burst_cnt:1;
4914 __u32 burst_tmr:1;
4915 } _present;
4916
4917 struct ethtool_header header;
4918 __u16 version;
4919 __u8 enabled;
4920 __u8 status;
4921 __u32 node_cnt;
4922 __u32 node_id;
4923 __u32 to_tmr;
4924 __u32 burst_cnt;
4925 __u32 burst_tmr;
4926};
4927
4928void ethtool_plca_get_cfg_rsp_free(struct ethtool_plca_get_cfg_rsp *rsp);
4929
4930/*
4931 * Get PLCA params.
4932 */
4933struct ethtool_plca_get_cfg_rsp *
4934ethtool_plca_get_cfg(struct ynl_sock *ys, struct ethtool_plca_get_cfg_req *req);
4935
4936/* ETHTOOL_MSG_PLCA_GET_CFG - dump */
4937struct ethtool_plca_get_cfg_req_dump {
4938 struct {
4939 __u32 header:1;
4940 } _present;
4941
4942 struct ethtool_header header;
4943};
4944
4945static inline struct ethtool_plca_get_cfg_req_dump *
4946ethtool_plca_get_cfg_req_dump_alloc(void)
4947{
4948 return calloc(1, sizeof(struct ethtool_plca_get_cfg_req_dump));
4949}
4950void
4951ethtool_plca_get_cfg_req_dump_free(struct ethtool_plca_get_cfg_req_dump *req);
4952
4953static inline void
4954ethtool_plca_get_cfg_req_dump_set_header_dev_index(struct ethtool_plca_get_cfg_req_dump *req,
4955 __u32 dev_index)
4956{
4957 req->_present.header = 1;
4958 req->header._present.dev_index = 1;
4959 req->header.dev_index = dev_index;
4960}
4961static inline void
4962ethtool_plca_get_cfg_req_dump_set_header_dev_name(struct ethtool_plca_get_cfg_req_dump *req,
4963 const char *dev_name)
4964{
4965 free(req->header.dev_name);
4966 req->header._present.dev_name_len = strlen(dev_name);
4967 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
4968 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
4969 req->header.dev_name[req->header._present.dev_name_len] = 0;
4970}
4971static inline void
4972ethtool_plca_get_cfg_req_dump_set_header_flags(struct ethtool_plca_get_cfg_req_dump *req,
4973 __u32 flags)
4974{
4975 req->_present.header = 1;
4976 req->header._present.flags = 1;
4977 req->header.flags = flags;
4978}
4979
4980struct ethtool_plca_get_cfg_list {
4981 struct ethtool_plca_get_cfg_list *next;
4982 struct ethtool_plca_get_cfg_rsp obj __attribute__ ((aligned (8)));
4983};
4984
4985void ethtool_plca_get_cfg_list_free(struct ethtool_plca_get_cfg_list *rsp);
4986
4987struct ethtool_plca_get_cfg_list *
4988ethtool_plca_get_cfg_dump(struct ynl_sock *ys,
4989 struct ethtool_plca_get_cfg_req_dump *req);
4990
4991/* ETHTOOL_MSG_PLCA_GET_CFG - notify */
4992struct ethtool_plca_get_cfg_ntf {
4993 __u16 family;
4994 __u8 cmd;
4995 struct ynl_ntf_base_type *next;
4996 void (*free)(struct ethtool_plca_get_cfg_ntf *ntf);
4997 struct ethtool_plca_get_cfg_rsp obj __attribute__ ((aligned (8)));
4998};
4999
5000void ethtool_plca_get_cfg_ntf_free(struct ethtool_plca_get_cfg_ntf *rsp);
5001
5002/* ============== ETHTOOL_MSG_PLCA_SET_CFG ============== */
5003/* ETHTOOL_MSG_PLCA_SET_CFG - do */
5004struct ethtool_plca_set_cfg_req {
5005 struct {
5006 __u32 header:1;
5007 __u32 version:1;
5008 __u32 enabled:1;
5009 __u32 status:1;
5010 __u32 node_cnt:1;
5011 __u32 node_id:1;
5012 __u32 to_tmr:1;
5013 __u32 burst_cnt:1;
5014 __u32 burst_tmr:1;
5015 } _present;
5016
5017 struct ethtool_header header;
5018 __u16 version;
5019 __u8 enabled;
5020 __u8 status;
5021 __u32 node_cnt;
5022 __u32 node_id;
5023 __u32 to_tmr;
5024 __u32 burst_cnt;
5025 __u32 burst_tmr;
5026};
5027
5028static inline struct ethtool_plca_set_cfg_req *
5029ethtool_plca_set_cfg_req_alloc(void)
5030{
5031 return calloc(1, sizeof(struct ethtool_plca_set_cfg_req));
5032}
5033void ethtool_plca_set_cfg_req_free(struct ethtool_plca_set_cfg_req *req);
5034
5035static inline void
5036ethtool_plca_set_cfg_req_set_header_dev_index(struct ethtool_plca_set_cfg_req *req,
5037 __u32 dev_index)
5038{
5039 req->_present.header = 1;
5040 req->header._present.dev_index = 1;
5041 req->header.dev_index = dev_index;
5042}
5043static inline void
5044ethtool_plca_set_cfg_req_set_header_dev_name(struct ethtool_plca_set_cfg_req *req,
5045 const char *dev_name)
5046{
5047 free(req->header.dev_name);
5048 req->header._present.dev_name_len = strlen(dev_name);
5049 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
5050 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
5051 req->header.dev_name[req->header._present.dev_name_len] = 0;
5052}
5053static inline void
5054ethtool_plca_set_cfg_req_set_header_flags(struct ethtool_plca_set_cfg_req *req,
5055 __u32 flags)
5056{
5057 req->_present.header = 1;
5058 req->header._present.flags = 1;
5059 req->header.flags = flags;
5060}
5061static inline void
5062ethtool_plca_set_cfg_req_set_version(struct ethtool_plca_set_cfg_req *req,
5063 __u16 version)
5064{
5065 req->_present.version = 1;
5066 req->version = version;
5067}
5068static inline void
5069ethtool_plca_set_cfg_req_set_enabled(struct ethtool_plca_set_cfg_req *req,
5070 __u8 enabled)
5071{
5072 req->_present.enabled = 1;
5073 req->enabled = enabled;
5074}
5075static inline void
5076ethtool_plca_set_cfg_req_set_status(struct ethtool_plca_set_cfg_req *req,
5077 __u8 status)
5078{
5079 req->_present.status = 1;
5080 req->status = status;
5081}
5082static inline void
5083ethtool_plca_set_cfg_req_set_node_cnt(struct ethtool_plca_set_cfg_req *req,
5084 __u32 node_cnt)
5085{
5086 req->_present.node_cnt = 1;
5087 req->node_cnt = node_cnt;
5088}
5089static inline void
5090ethtool_plca_set_cfg_req_set_node_id(struct ethtool_plca_set_cfg_req *req,
5091 __u32 node_id)
5092{
5093 req->_present.node_id = 1;
5094 req->node_id = node_id;
5095}
5096static inline void
5097ethtool_plca_set_cfg_req_set_to_tmr(struct ethtool_plca_set_cfg_req *req,
5098 __u32 to_tmr)
5099{
5100 req->_present.to_tmr = 1;
5101 req->to_tmr = to_tmr;
5102}
5103static inline void
5104ethtool_plca_set_cfg_req_set_burst_cnt(struct ethtool_plca_set_cfg_req *req,
5105 __u32 burst_cnt)
5106{
5107 req->_present.burst_cnt = 1;
5108 req->burst_cnt = burst_cnt;
5109}
5110static inline void
5111ethtool_plca_set_cfg_req_set_burst_tmr(struct ethtool_plca_set_cfg_req *req,
5112 __u32 burst_tmr)
5113{
5114 req->_present.burst_tmr = 1;
5115 req->burst_tmr = burst_tmr;
5116}
5117
5118/*
5119 * Set PLCA params.
5120 */
5121int ethtool_plca_set_cfg(struct ynl_sock *ys,
5122 struct ethtool_plca_set_cfg_req *req);
5123
5124/* ============== ETHTOOL_MSG_PLCA_GET_STATUS ============== */
5125/* ETHTOOL_MSG_PLCA_GET_STATUS - do */
5126struct ethtool_plca_get_status_req {
5127 struct {
5128 __u32 header:1;
5129 } _present;
5130
5131 struct ethtool_header header;
5132};
5133
5134static inline struct ethtool_plca_get_status_req *
5135ethtool_plca_get_status_req_alloc(void)
5136{
5137 return calloc(1, sizeof(struct ethtool_plca_get_status_req));
5138}
5139void ethtool_plca_get_status_req_free(struct ethtool_plca_get_status_req *req);
5140
5141static inline void
5142ethtool_plca_get_status_req_set_header_dev_index(struct ethtool_plca_get_status_req *req,
5143 __u32 dev_index)
5144{
5145 req->_present.header = 1;
5146 req->header._present.dev_index = 1;
5147 req->header.dev_index = dev_index;
5148}
5149static inline void
5150ethtool_plca_get_status_req_set_header_dev_name(struct ethtool_plca_get_status_req *req,
5151 const char *dev_name)
5152{
5153 free(req->header.dev_name);
5154 req->header._present.dev_name_len = strlen(dev_name);
5155 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
5156 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
5157 req->header.dev_name[req->header._present.dev_name_len] = 0;
5158}
5159static inline void
5160ethtool_plca_get_status_req_set_header_flags(struct ethtool_plca_get_status_req *req,
5161 __u32 flags)
5162{
5163 req->_present.header = 1;
5164 req->header._present.flags = 1;
5165 req->header.flags = flags;
5166}
5167
5168struct ethtool_plca_get_status_rsp {
5169 struct {
5170 __u32 header:1;
5171 __u32 version:1;
5172 __u32 enabled:1;
5173 __u32 status:1;
5174 __u32 node_cnt:1;
5175 __u32 node_id:1;
5176 __u32 to_tmr:1;
5177 __u32 burst_cnt:1;
5178 __u32 burst_tmr:1;
5179 } _present;
5180
5181 struct ethtool_header header;
5182 __u16 version;
5183 __u8 enabled;
5184 __u8 status;
5185 __u32 node_cnt;
5186 __u32 node_id;
5187 __u32 to_tmr;
5188 __u32 burst_cnt;
5189 __u32 burst_tmr;
5190};
5191
5192void ethtool_plca_get_status_rsp_free(struct ethtool_plca_get_status_rsp *rsp);
5193
5194/*
5195 * Get PLCA status params.
5196 */
5197struct ethtool_plca_get_status_rsp *
5198ethtool_plca_get_status(struct ynl_sock *ys,
5199 struct ethtool_plca_get_status_req *req);
5200
5201/* ETHTOOL_MSG_PLCA_GET_STATUS - dump */
5202struct ethtool_plca_get_status_req_dump {
5203 struct {
5204 __u32 header:1;
5205 } _present;
5206
5207 struct ethtool_header header;
5208};
5209
5210static inline struct ethtool_plca_get_status_req_dump *
5211ethtool_plca_get_status_req_dump_alloc(void)
5212{
5213 return calloc(1, sizeof(struct ethtool_plca_get_status_req_dump));
5214}
5215void
5216ethtool_plca_get_status_req_dump_free(struct ethtool_plca_get_status_req_dump *req);
5217
5218static inline void
5219ethtool_plca_get_status_req_dump_set_header_dev_index(struct ethtool_plca_get_status_req_dump *req,
5220 __u32 dev_index)
5221{
5222 req->_present.header = 1;
5223 req->header._present.dev_index = 1;
5224 req->header.dev_index = dev_index;
5225}
5226static inline void
5227ethtool_plca_get_status_req_dump_set_header_dev_name(struct ethtool_plca_get_status_req_dump *req,
5228 const char *dev_name)
5229{
5230 free(req->header.dev_name);
5231 req->header._present.dev_name_len = strlen(dev_name);
5232 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
5233 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
5234 req->header.dev_name[req->header._present.dev_name_len] = 0;
5235}
5236static inline void
5237ethtool_plca_get_status_req_dump_set_header_flags(struct ethtool_plca_get_status_req_dump *req,
5238 __u32 flags)
5239{
5240 req->_present.header = 1;
5241 req->header._present.flags = 1;
5242 req->header.flags = flags;
5243}
5244
5245struct ethtool_plca_get_status_list {
5246 struct ethtool_plca_get_status_list *next;
5247 struct ethtool_plca_get_status_rsp obj __attribute__ ((aligned (8)));
5248};
5249
5250void
5251ethtool_plca_get_status_list_free(struct ethtool_plca_get_status_list *rsp);
5252
5253struct ethtool_plca_get_status_list *
5254ethtool_plca_get_status_dump(struct ynl_sock *ys,
5255 struct ethtool_plca_get_status_req_dump *req);
5256
5257/* ============== ETHTOOL_MSG_MM_GET ============== */
5258/* ETHTOOL_MSG_MM_GET - do */
5259struct ethtool_mm_get_req {
5260 struct {
5261 __u32 header:1;
5262 } _present;
5263
5264 struct ethtool_header header;
5265};
5266
5267static inline struct ethtool_mm_get_req *ethtool_mm_get_req_alloc(void)
5268{
5269 return calloc(1, sizeof(struct ethtool_mm_get_req));
5270}
5271void ethtool_mm_get_req_free(struct ethtool_mm_get_req *req);
5272
5273static inline void
5274ethtool_mm_get_req_set_header_dev_index(struct ethtool_mm_get_req *req,
5275 __u32 dev_index)
5276{
5277 req->_present.header = 1;
5278 req->header._present.dev_index = 1;
5279 req->header.dev_index = dev_index;
5280}
5281static inline void
5282ethtool_mm_get_req_set_header_dev_name(struct ethtool_mm_get_req *req,
5283 const char *dev_name)
5284{
5285 free(req->header.dev_name);
5286 req->header._present.dev_name_len = strlen(dev_name);
5287 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
5288 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
5289 req->header.dev_name[req->header._present.dev_name_len] = 0;
5290}
5291static inline void
5292ethtool_mm_get_req_set_header_flags(struct ethtool_mm_get_req *req,
5293 __u32 flags)
5294{
5295 req->_present.header = 1;
5296 req->header._present.flags = 1;
5297 req->header.flags = flags;
5298}
5299
5300struct ethtool_mm_get_rsp {
5301 struct {
5302 __u32 header:1;
5303 __u32 pmac_enabled:1;
5304 __u32 tx_enabled:1;
5305 __u32 tx_active:1;
5306 __u32 tx_min_frag_size:1;
5307 __u32 rx_min_frag_size:1;
5308 __u32 verify_enabled:1;
5309 __u32 verify_time:1;
5310 __u32 max_verify_time:1;
5311 __u32 stats:1;
5312 } _present;
5313
5314 struct ethtool_header header;
5315 __u8 pmac_enabled;
5316 __u8 tx_enabled;
5317 __u8 tx_active;
5318 __u32 tx_min_frag_size;
5319 __u32 rx_min_frag_size;
5320 __u8 verify_enabled;
5321 __u32 verify_time;
5322 __u32 max_verify_time;
5323 struct ethtool_mm_stat stats;
5324};
5325
5326void ethtool_mm_get_rsp_free(struct ethtool_mm_get_rsp *rsp);
5327
5328/*
5329 * Get MAC Merge configuration and state
5330 */
5331struct ethtool_mm_get_rsp *
5332ethtool_mm_get(struct ynl_sock *ys, struct ethtool_mm_get_req *req);
5333
5334/* ETHTOOL_MSG_MM_GET - dump */
5335struct ethtool_mm_get_req_dump {
5336 struct {
5337 __u32 header:1;
5338 } _present;
5339
5340 struct ethtool_header header;
5341};
5342
5343static inline struct ethtool_mm_get_req_dump *
5344ethtool_mm_get_req_dump_alloc(void)
5345{
5346 return calloc(1, sizeof(struct ethtool_mm_get_req_dump));
5347}
5348void ethtool_mm_get_req_dump_free(struct ethtool_mm_get_req_dump *req);
5349
5350static inline void
5351ethtool_mm_get_req_dump_set_header_dev_index(struct ethtool_mm_get_req_dump *req,
5352 __u32 dev_index)
5353{
5354 req->_present.header = 1;
5355 req->header._present.dev_index = 1;
5356 req->header.dev_index = dev_index;
5357}
5358static inline void
5359ethtool_mm_get_req_dump_set_header_dev_name(struct ethtool_mm_get_req_dump *req,
5360 const char *dev_name)
5361{
5362 free(req->header.dev_name);
5363 req->header._present.dev_name_len = strlen(dev_name);
5364 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
5365 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
5366 req->header.dev_name[req->header._present.dev_name_len] = 0;
5367}
5368static inline void
5369ethtool_mm_get_req_dump_set_header_flags(struct ethtool_mm_get_req_dump *req,
5370 __u32 flags)
5371{
5372 req->_present.header = 1;
5373 req->header._present.flags = 1;
5374 req->header.flags = flags;
5375}
5376
5377struct ethtool_mm_get_list {
5378 struct ethtool_mm_get_list *next;
5379 struct ethtool_mm_get_rsp obj __attribute__ ((aligned (8)));
5380};
5381
5382void ethtool_mm_get_list_free(struct ethtool_mm_get_list *rsp);
5383
5384struct ethtool_mm_get_list *
5385ethtool_mm_get_dump(struct ynl_sock *ys, struct ethtool_mm_get_req_dump *req);
5386
5387/* ETHTOOL_MSG_MM_GET - notify */
5388struct ethtool_mm_get_ntf {
5389 __u16 family;
5390 __u8 cmd;
5391 struct ynl_ntf_base_type *next;
5392 void (*free)(struct ethtool_mm_get_ntf *ntf);
5393 struct ethtool_mm_get_rsp obj __attribute__ ((aligned (8)));
5394};
5395
5396void ethtool_mm_get_ntf_free(struct ethtool_mm_get_ntf *rsp);
5397
5398/* ============== ETHTOOL_MSG_MM_SET ============== */
5399/* ETHTOOL_MSG_MM_SET - do */
5400struct ethtool_mm_set_req {
5401 struct {
5402 __u32 header:1;
5403 __u32 verify_enabled:1;
5404 __u32 verify_time:1;
5405 __u32 tx_enabled:1;
5406 __u32 pmac_enabled:1;
5407 __u32 tx_min_frag_size:1;
5408 } _present;
5409
5410 struct ethtool_header header;
5411 __u8 verify_enabled;
5412 __u32 verify_time;
5413 __u8 tx_enabled;
5414 __u8 pmac_enabled;
5415 __u32 tx_min_frag_size;
5416};
5417
5418static inline struct ethtool_mm_set_req *ethtool_mm_set_req_alloc(void)
5419{
5420 return calloc(1, sizeof(struct ethtool_mm_set_req));
5421}
5422void ethtool_mm_set_req_free(struct ethtool_mm_set_req *req);
5423
5424static inline void
5425ethtool_mm_set_req_set_header_dev_index(struct ethtool_mm_set_req *req,
5426 __u32 dev_index)
5427{
5428 req->_present.header = 1;
5429 req->header._present.dev_index = 1;
5430 req->header.dev_index = dev_index;
5431}
5432static inline void
5433ethtool_mm_set_req_set_header_dev_name(struct ethtool_mm_set_req *req,
5434 const char *dev_name)
5435{
5436 free(req->header.dev_name);
5437 req->header._present.dev_name_len = strlen(dev_name);
5438 req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
5439 memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
5440 req->header.dev_name[req->header._present.dev_name_len] = 0;
5441}
5442static inline void
5443ethtool_mm_set_req_set_header_flags(struct ethtool_mm_set_req *req,
5444 __u32 flags)
5445{
5446 req->_present.header = 1;
5447 req->header._present.flags = 1;
5448 req->header.flags = flags;
5449}
5450static inline void
5451ethtool_mm_set_req_set_verify_enabled(struct ethtool_mm_set_req *req,
5452 __u8 verify_enabled)
5453{
5454 req->_present.verify_enabled = 1;
5455 req->verify_enabled = verify_enabled;
5456}
5457static inline void
5458ethtool_mm_set_req_set_verify_time(struct ethtool_mm_set_req *req,
5459 __u32 verify_time)
5460{
5461 req->_present.verify_time = 1;
5462 req->verify_time = verify_time;
5463}
5464static inline void
5465ethtool_mm_set_req_set_tx_enabled(struct ethtool_mm_set_req *req,
5466 __u8 tx_enabled)
5467{
5468 req->_present.tx_enabled = 1;
5469 req->tx_enabled = tx_enabled;
5470}
5471static inline void
5472ethtool_mm_set_req_set_pmac_enabled(struct ethtool_mm_set_req *req,
5473 __u8 pmac_enabled)
5474{
5475 req->_present.pmac_enabled = 1;
5476 req->pmac_enabled = pmac_enabled;
5477}
5478static inline void
5479ethtool_mm_set_req_set_tx_min_frag_size(struct ethtool_mm_set_req *req,
5480 __u32 tx_min_frag_size)
5481{
5482 req->_present.tx_min_frag_size = 1;
5483 req->tx_min_frag_size = tx_min_frag_size;
5484}
5485
5486/*
5487 * Set MAC Merge configuration
5488 */
5489int ethtool_mm_set(struct ynl_sock *ys, struct ethtool_mm_set_req *req);
5490
5491/* ETHTOOL_MSG_CABLE_TEST_NTF - event */
5492struct ethtool_cable_test_ntf_rsp {
5493 struct {
5494 __u32 header:1;
5495 __u32 status:1;
5496 } _present;
5497
5498 struct ethtool_header header;
5499 __u8 status;
5500};
5501
5502struct ethtool_cable_test_ntf {
5503 __u16 family;
5504 __u8 cmd;
5505 struct ynl_ntf_base_type *next;
5506 void (*free)(struct ethtool_cable_test_ntf *ntf);
5507 struct ethtool_cable_test_ntf_rsp obj __attribute__ ((aligned (8)));
5508};
5509
5510void ethtool_cable_test_ntf_free(struct ethtool_cable_test_ntf *rsp);
5511
5512/* ETHTOOL_MSG_CABLE_TEST_TDR_NTF - event */
5513struct ethtool_cable_test_tdr_ntf_rsp {
5514 struct {
5515 __u32 header:1;
5516 __u32 status:1;
5517 __u32 nest:1;
5518 } _present;
5519
5520 struct ethtool_header header;
5521 __u8 status;
5522 struct ethtool_cable_nest nest;
5523};
5524
5525struct ethtool_cable_test_tdr_ntf {
5526 __u16 family;
5527 __u8 cmd;
5528 struct ynl_ntf_base_type *next;
5529 void (*free)(struct ethtool_cable_test_tdr_ntf *ntf);
5530 struct ethtool_cable_test_tdr_ntf_rsp obj __attribute__ ((aligned (8)));
5531};
5532
5533void ethtool_cable_test_tdr_ntf_free(struct ethtool_cable_test_tdr_ntf *rsp);
5534
5535#endif /* _LINUX_ETHTOOL_GEN_H */