162306a36Sopenharmony_ci/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
262306a36Sopenharmony_ci/* Do not edit directly, auto-generated from: */
362306a36Sopenharmony_ci/*	Documentation/netlink/specs/ethtool.yaml */
462306a36Sopenharmony_ci/* YNL-GEN user header */
562306a36Sopenharmony_ci/* YNL-ARG --user-header linux/ethtool_netlink.h --exclude-op stats-get */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#ifndef _LINUX_ETHTOOL_GEN_H
862306a36Sopenharmony_ci#define _LINUX_ETHTOOL_GEN_H
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <stdlib.h>
1162306a36Sopenharmony_ci#include <string.h>
1262306a36Sopenharmony_ci#include <linux/types.h>
1362306a36Sopenharmony_ci#include <linux/ethtool.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistruct ynl_sock;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciextern const struct ynl_family ynl_ethtool_family;
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci/* Enums */
2062306a36Sopenharmony_ciconst char *ethtool_op_str(int op);
2162306a36Sopenharmony_ciconst char *ethtool_udp_tunnel_type_str(int value);
2262306a36Sopenharmony_ciconst char *ethtool_stringset_str(enum ethtool_stringset value);
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci/* Common nested types */
2562306a36Sopenharmony_cistruct ethtool_header {
2662306a36Sopenharmony_ci	struct {
2762306a36Sopenharmony_ci		__u32 dev_index:1;
2862306a36Sopenharmony_ci		__u32 dev_name_len;
2962306a36Sopenharmony_ci		__u32 flags:1;
3062306a36Sopenharmony_ci	} _present;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	__u32 dev_index;
3362306a36Sopenharmony_ci	char *dev_name;
3462306a36Sopenharmony_ci	__u32 flags;
3562306a36Sopenharmony_ci};
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cistruct ethtool_pause_stat {
3862306a36Sopenharmony_ci	struct {
3962306a36Sopenharmony_ci		__u32 tx_frames:1;
4062306a36Sopenharmony_ci		__u32 rx_frames:1;
4162306a36Sopenharmony_ci	} _present;
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	__u64 tx_frames;
4462306a36Sopenharmony_ci	__u64 rx_frames;
4562306a36Sopenharmony_ci};
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_cistruct ethtool_cable_test_tdr_cfg {
4862306a36Sopenharmony_ci	struct {
4962306a36Sopenharmony_ci		__u32 first:1;
5062306a36Sopenharmony_ci		__u32 last:1;
5162306a36Sopenharmony_ci		__u32 step:1;
5262306a36Sopenharmony_ci		__u32 pair:1;
5362306a36Sopenharmony_ci	} _present;
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci	__u32 first;
5662306a36Sopenharmony_ci	__u32 last;
5762306a36Sopenharmony_ci	__u32 step;
5862306a36Sopenharmony_ci	__u8 pair;
5962306a36Sopenharmony_ci};
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_cistruct ethtool_fec_stat {
6262306a36Sopenharmony_ci	struct {
6362306a36Sopenharmony_ci		__u32 corrected_len;
6462306a36Sopenharmony_ci		__u32 uncorr_len;
6562306a36Sopenharmony_ci		__u32 corr_bits_len;
6662306a36Sopenharmony_ci	} _present;
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci	void *corrected;
6962306a36Sopenharmony_ci	void *uncorr;
7062306a36Sopenharmony_ci	void *corr_bits;
7162306a36Sopenharmony_ci};
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_cistruct ethtool_mm_stat {
7462306a36Sopenharmony_ci	struct {
7562306a36Sopenharmony_ci		__u32 reassembly_errors:1;
7662306a36Sopenharmony_ci		__u32 smd_errors:1;
7762306a36Sopenharmony_ci		__u32 reassembly_ok:1;
7862306a36Sopenharmony_ci		__u32 rx_frag_count:1;
7962306a36Sopenharmony_ci		__u32 tx_frag_count:1;
8062306a36Sopenharmony_ci		__u32 hold_count:1;
8162306a36Sopenharmony_ci	} _present;
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci	__u64 reassembly_errors;
8462306a36Sopenharmony_ci	__u64 smd_errors;
8562306a36Sopenharmony_ci	__u64 reassembly_ok;
8662306a36Sopenharmony_ci	__u64 rx_frag_count;
8762306a36Sopenharmony_ci	__u64 tx_frag_count;
8862306a36Sopenharmony_ci	__u64 hold_count;
8962306a36Sopenharmony_ci};
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_cistruct ethtool_cable_result {
9262306a36Sopenharmony_ci	struct {
9362306a36Sopenharmony_ci		__u32 pair:1;
9462306a36Sopenharmony_ci		__u32 code:1;
9562306a36Sopenharmony_ci	} _present;
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci	__u8 pair;
9862306a36Sopenharmony_ci	__u8 code;
9962306a36Sopenharmony_ci};
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_cistruct ethtool_cable_fault_length {
10262306a36Sopenharmony_ci	struct {
10362306a36Sopenharmony_ci		__u32 pair:1;
10462306a36Sopenharmony_ci		__u32 cm:1;
10562306a36Sopenharmony_ci	} _present;
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci	__u8 pair;
10862306a36Sopenharmony_ci	__u32 cm;
10962306a36Sopenharmony_ci};
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_cistruct ethtool_bitset_bit {
11262306a36Sopenharmony_ci	struct {
11362306a36Sopenharmony_ci		__u32 index:1;
11462306a36Sopenharmony_ci		__u32 name_len;
11562306a36Sopenharmony_ci		__u32 value:1;
11662306a36Sopenharmony_ci	} _present;
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ci	__u32 index;
11962306a36Sopenharmony_ci	char *name;
12062306a36Sopenharmony_ci};
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_cistruct ethtool_tunnel_udp_entry {
12362306a36Sopenharmony_ci	struct {
12462306a36Sopenharmony_ci		__u32 port:1;
12562306a36Sopenharmony_ci		__u32 type:1;
12662306a36Sopenharmony_ci	} _present;
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci	__u16 port /* big-endian */;
12962306a36Sopenharmony_ci	__u32 type;
13062306a36Sopenharmony_ci};
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_cistruct ethtool_string {
13362306a36Sopenharmony_ci	struct {
13462306a36Sopenharmony_ci		__u32 index:1;
13562306a36Sopenharmony_ci		__u32 value_len;
13662306a36Sopenharmony_ci	} _present;
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci	__u32 index;
13962306a36Sopenharmony_ci	char *value;
14062306a36Sopenharmony_ci};
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_cistruct ethtool_cable_nest {
14362306a36Sopenharmony_ci	struct {
14462306a36Sopenharmony_ci		__u32 result:1;
14562306a36Sopenharmony_ci		__u32 fault_length:1;
14662306a36Sopenharmony_ci	} _present;
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci	struct ethtool_cable_result result;
14962306a36Sopenharmony_ci	struct ethtool_cable_fault_length fault_length;
15062306a36Sopenharmony_ci};
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_cistruct ethtool_bitset_bits {
15362306a36Sopenharmony_ci	unsigned int n_bit;
15462306a36Sopenharmony_ci	struct ethtool_bitset_bit *bit;
15562306a36Sopenharmony_ci};
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_cistruct ethtool_strings {
15862306a36Sopenharmony_ci	unsigned int n_string;
15962306a36Sopenharmony_ci	struct ethtool_string *string;
16062306a36Sopenharmony_ci};
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_cistruct ethtool_bitset {
16362306a36Sopenharmony_ci	struct {
16462306a36Sopenharmony_ci		__u32 nomask:1;
16562306a36Sopenharmony_ci		__u32 size:1;
16662306a36Sopenharmony_ci		__u32 bits:1;
16762306a36Sopenharmony_ci	} _present;
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci	__u32 size;
17062306a36Sopenharmony_ci	struct ethtool_bitset_bits bits;
17162306a36Sopenharmony_ci};
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_cistruct ethtool_stringset_ {
17462306a36Sopenharmony_ci	struct {
17562306a36Sopenharmony_ci		__u32 id:1;
17662306a36Sopenharmony_ci		__u32 count:1;
17762306a36Sopenharmony_ci	} _present;
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci	__u32 id;
18062306a36Sopenharmony_ci	__u32 count;
18162306a36Sopenharmony_ci	unsigned int n_strings;
18262306a36Sopenharmony_ci	struct ethtool_strings *strings;
18362306a36Sopenharmony_ci};
18462306a36Sopenharmony_ci
18562306a36Sopenharmony_cistruct ethtool_tunnel_udp_table {
18662306a36Sopenharmony_ci	struct {
18762306a36Sopenharmony_ci		__u32 size:1;
18862306a36Sopenharmony_ci		__u32 types:1;
18962306a36Sopenharmony_ci	} _present;
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci	__u32 size;
19262306a36Sopenharmony_ci	struct ethtool_bitset types;
19362306a36Sopenharmony_ci	unsigned int n_entry;
19462306a36Sopenharmony_ci	struct ethtool_tunnel_udp_entry *entry;
19562306a36Sopenharmony_ci};
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_cistruct ethtool_stringsets {
19862306a36Sopenharmony_ci	unsigned int n_stringset;
19962306a36Sopenharmony_ci	struct ethtool_stringset_ *stringset;
20062306a36Sopenharmony_ci};
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_cistruct ethtool_tunnel_udp {
20362306a36Sopenharmony_ci	struct {
20462306a36Sopenharmony_ci		__u32 table:1;
20562306a36Sopenharmony_ci	} _present;
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_ci	struct ethtool_tunnel_udp_table table;
20862306a36Sopenharmony_ci};
20962306a36Sopenharmony_ci
21062306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_STRSET_GET ============== */
21162306a36Sopenharmony_ci/* ETHTOOL_MSG_STRSET_GET - do */
21262306a36Sopenharmony_cistruct ethtool_strset_get_req {
21362306a36Sopenharmony_ci	struct {
21462306a36Sopenharmony_ci		__u32 header:1;
21562306a36Sopenharmony_ci		__u32 stringsets:1;
21662306a36Sopenharmony_ci		__u32 counts_only:1;
21762306a36Sopenharmony_ci	} _present;
21862306a36Sopenharmony_ci
21962306a36Sopenharmony_ci	struct ethtool_header header;
22062306a36Sopenharmony_ci	struct ethtool_stringsets stringsets;
22162306a36Sopenharmony_ci};
22262306a36Sopenharmony_ci
22362306a36Sopenharmony_cistatic inline struct ethtool_strset_get_req *ethtool_strset_get_req_alloc(void)
22462306a36Sopenharmony_ci{
22562306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_strset_get_req));
22662306a36Sopenharmony_ci}
22762306a36Sopenharmony_civoid ethtool_strset_get_req_free(struct ethtool_strset_get_req *req);
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_cistatic inline void
23062306a36Sopenharmony_ciethtool_strset_get_req_set_header_dev_index(struct ethtool_strset_get_req *req,
23162306a36Sopenharmony_ci					    __u32 dev_index)
23262306a36Sopenharmony_ci{
23362306a36Sopenharmony_ci	req->_present.header = 1;
23462306a36Sopenharmony_ci	req->header._present.dev_index = 1;
23562306a36Sopenharmony_ci	req->header.dev_index = dev_index;
23662306a36Sopenharmony_ci}
23762306a36Sopenharmony_cistatic inline void
23862306a36Sopenharmony_ciethtool_strset_get_req_set_header_dev_name(struct ethtool_strset_get_req *req,
23962306a36Sopenharmony_ci					   const char *dev_name)
24062306a36Sopenharmony_ci{
24162306a36Sopenharmony_ci	free(req->header.dev_name);
24262306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
24362306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
24462306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
24562306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
24662306a36Sopenharmony_ci}
24762306a36Sopenharmony_cistatic inline void
24862306a36Sopenharmony_ciethtool_strset_get_req_set_header_flags(struct ethtool_strset_get_req *req,
24962306a36Sopenharmony_ci					__u32 flags)
25062306a36Sopenharmony_ci{
25162306a36Sopenharmony_ci	req->_present.header = 1;
25262306a36Sopenharmony_ci	req->header._present.flags = 1;
25362306a36Sopenharmony_ci	req->header.flags = flags;
25462306a36Sopenharmony_ci}
25562306a36Sopenharmony_cistatic inline void
25662306a36Sopenharmony_ci__ethtool_strset_get_req_set_stringsets_stringset(struct ethtool_strset_get_req *req,
25762306a36Sopenharmony_ci						  struct ethtool_stringset_ *stringset,
25862306a36Sopenharmony_ci						  unsigned int n_stringset)
25962306a36Sopenharmony_ci{
26062306a36Sopenharmony_ci	free(req->stringsets.stringset);
26162306a36Sopenharmony_ci	req->stringsets.stringset = stringset;
26262306a36Sopenharmony_ci	req->stringsets.n_stringset = n_stringset;
26362306a36Sopenharmony_ci}
26462306a36Sopenharmony_cistatic inline void
26562306a36Sopenharmony_ciethtool_strset_get_req_set_counts_only(struct ethtool_strset_get_req *req)
26662306a36Sopenharmony_ci{
26762306a36Sopenharmony_ci	req->_present.counts_only = 1;
26862306a36Sopenharmony_ci}
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_cistruct ethtool_strset_get_rsp {
27162306a36Sopenharmony_ci	struct {
27262306a36Sopenharmony_ci		__u32 header:1;
27362306a36Sopenharmony_ci		__u32 stringsets:1;
27462306a36Sopenharmony_ci	} _present;
27562306a36Sopenharmony_ci
27662306a36Sopenharmony_ci	struct ethtool_header header;
27762306a36Sopenharmony_ci	struct ethtool_stringsets stringsets;
27862306a36Sopenharmony_ci};
27962306a36Sopenharmony_ci
28062306a36Sopenharmony_civoid ethtool_strset_get_rsp_free(struct ethtool_strset_get_rsp *rsp);
28162306a36Sopenharmony_ci
28262306a36Sopenharmony_ci/*
28362306a36Sopenharmony_ci * Get string set from the kernel.
28462306a36Sopenharmony_ci */
28562306a36Sopenharmony_cistruct ethtool_strset_get_rsp *
28662306a36Sopenharmony_ciethtool_strset_get(struct ynl_sock *ys, struct ethtool_strset_get_req *req);
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_ci/* ETHTOOL_MSG_STRSET_GET - dump */
28962306a36Sopenharmony_cistruct ethtool_strset_get_req_dump {
29062306a36Sopenharmony_ci	struct {
29162306a36Sopenharmony_ci		__u32 header:1;
29262306a36Sopenharmony_ci		__u32 stringsets:1;
29362306a36Sopenharmony_ci		__u32 counts_only:1;
29462306a36Sopenharmony_ci	} _present;
29562306a36Sopenharmony_ci
29662306a36Sopenharmony_ci	struct ethtool_header header;
29762306a36Sopenharmony_ci	struct ethtool_stringsets stringsets;
29862306a36Sopenharmony_ci};
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_cistatic inline struct ethtool_strset_get_req_dump *
30162306a36Sopenharmony_ciethtool_strset_get_req_dump_alloc(void)
30262306a36Sopenharmony_ci{
30362306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_strset_get_req_dump));
30462306a36Sopenharmony_ci}
30562306a36Sopenharmony_civoid ethtool_strset_get_req_dump_free(struct ethtool_strset_get_req_dump *req);
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_cistatic inline void
30862306a36Sopenharmony_ciethtool_strset_get_req_dump_set_header_dev_index(struct ethtool_strset_get_req_dump *req,
30962306a36Sopenharmony_ci						 __u32 dev_index)
31062306a36Sopenharmony_ci{
31162306a36Sopenharmony_ci	req->_present.header = 1;
31262306a36Sopenharmony_ci	req->header._present.dev_index = 1;
31362306a36Sopenharmony_ci	req->header.dev_index = dev_index;
31462306a36Sopenharmony_ci}
31562306a36Sopenharmony_cistatic inline void
31662306a36Sopenharmony_ciethtool_strset_get_req_dump_set_header_dev_name(struct ethtool_strset_get_req_dump *req,
31762306a36Sopenharmony_ci						const char *dev_name)
31862306a36Sopenharmony_ci{
31962306a36Sopenharmony_ci	free(req->header.dev_name);
32062306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
32162306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
32262306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
32362306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
32462306a36Sopenharmony_ci}
32562306a36Sopenharmony_cistatic inline void
32662306a36Sopenharmony_ciethtool_strset_get_req_dump_set_header_flags(struct ethtool_strset_get_req_dump *req,
32762306a36Sopenharmony_ci					     __u32 flags)
32862306a36Sopenharmony_ci{
32962306a36Sopenharmony_ci	req->_present.header = 1;
33062306a36Sopenharmony_ci	req->header._present.flags = 1;
33162306a36Sopenharmony_ci	req->header.flags = flags;
33262306a36Sopenharmony_ci}
33362306a36Sopenharmony_cistatic inline void
33462306a36Sopenharmony_ci__ethtool_strset_get_req_dump_set_stringsets_stringset(struct ethtool_strset_get_req_dump *req,
33562306a36Sopenharmony_ci						       struct ethtool_stringset_ *stringset,
33662306a36Sopenharmony_ci						       unsigned int n_stringset)
33762306a36Sopenharmony_ci{
33862306a36Sopenharmony_ci	free(req->stringsets.stringset);
33962306a36Sopenharmony_ci	req->stringsets.stringset = stringset;
34062306a36Sopenharmony_ci	req->stringsets.n_stringset = n_stringset;
34162306a36Sopenharmony_ci}
34262306a36Sopenharmony_cistatic inline void
34362306a36Sopenharmony_ciethtool_strset_get_req_dump_set_counts_only(struct ethtool_strset_get_req_dump *req)
34462306a36Sopenharmony_ci{
34562306a36Sopenharmony_ci	req->_present.counts_only = 1;
34662306a36Sopenharmony_ci}
34762306a36Sopenharmony_ci
34862306a36Sopenharmony_cistruct ethtool_strset_get_list {
34962306a36Sopenharmony_ci	struct ethtool_strset_get_list *next;
35062306a36Sopenharmony_ci	struct ethtool_strset_get_rsp obj __attribute__ ((aligned (8)));
35162306a36Sopenharmony_ci};
35262306a36Sopenharmony_ci
35362306a36Sopenharmony_civoid ethtool_strset_get_list_free(struct ethtool_strset_get_list *rsp);
35462306a36Sopenharmony_ci
35562306a36Sopenharmony_cistruct ethtool_strset_get_list *
35662306a36Sopenharmony_ciethtool_strset_get_dump(struct ynl_sock *ys,
35762306a36Sopenharmony_ci			struct ethtool_strset_get_req_dump *req);
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_LINKINFO_GET ============== */
36062306a36Sopenharmony_ci/* ETHTOOL_MSG_LINKINFO_GET - do */
36162306a36Sopenharmony_cistruct ethtool_linkinfo_get_req {
36262306a36Sopenharmony_ci	struct {
36362306a36Sopenharmony_ci		__u32 header:1;
36462306a36Sopenharmony_ci	} _present;
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ci	struct ethtool_header header;
36762306a36Sopenharmony_ci};
36862306a36Sopenharmony_ci
36962306a36Sopenharmony_cistatic inline struct ethtool_linkinfo_get_req *
37062306a36Sopenharmony_ciethtool_linkinfo_get_req_alloc(void)
37162306a36Sopenharmony_ci{
37262306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_linkinfo_get_req));
37362306a36Sopenharmony_ci}
37462306a36Sopenharmony_civoid ethtool_linkinfo_get_req_free(struct ethtool_linkinfo_get_req *req);
37562306a36Sopenharmony_ci
37662306a36Sopenharmony_cistatic inline void
37762306a36Sopenharmony_ciethtool_linkinfo_get_req_set_header_dev_index(struct ethtool_linkinfo_get_req *req,
37862306a36Sopenharmony_ci					      __u32 dev_index)
37962306a36Sopenharmony_ci{
38062306a36Sopenharmony_ci	req->_present.header = 1;
38162306a36Sopenharmony_ci	req->header._present.dev_index = 1;
38262306a36Sopenharmony_ci	req->header.dev_index = dev_index;
38362306a36Sopenharmony_ci}
38462306a36Sopenharmony_cistatic inline void
38562306a36Sopenharmony_ciethtool_linkinfo_get_req_set_header_dev_name(struct ethtool_linkinfo_get_req *req,
38662306a36Sopenharmony_ci					     const char *dev_name)
38762306a36Sopenharmony_ci{
38862306a36Sopenharmony_ci	free(req->header.dev_name);
38962306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
39062306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
39162306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
39262306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
39362306a36Sopenharmony_ci}
39462306a36Sopenharmony_cistatic inline void
39562306a36Sopenharmony_ciethtool_linkinfo_get_req_set_header_flags(struct ethtool_linkinfo_get_req *req,
39662306a36Sopenharmony_ci					  __u32 flags)
39762306a36Sopenharmony_ci{
39862306a36Sopenharmony_ci	req->_present.header = 1;
39962306a36Sopenharmony_ci	req->header._present.flags = 1;
40062306a36Sopenharmony_ci	req->header.flags = flags;
40162306a36Sopenharmony_ci}
40262306a36Sopenharmony_ci
40362306a36Sopenharmony_cistruct ethtool_linkinfo_get_rsp {
40462306a36Sopenharmony_ci	struct {
40562306a36Sopenharmony_ci		__u32 header:1;
40662306a36Sopenharmony_ci		__u32 port:1;
40762306a36Sopenharmony_ci		__u32 phyaddr:1;
40862306a36Sopenharmony_ci		__u32 tp_mdix:1;
40962306a36Sopenharmony_ci		__u32 tp_mdix_ctrl:1;
41062306a36Sopenharmony_ci		__u32 transceiver:1;
41162306a36Sopenharmony_ci	} _present;
41262306a36Sopenharmony_ci
41362306a36Sopenharmony_ci	struct ethtool_header header;
41462306a36Sopenharmony_ci	__u8 port;
41562306a36Sopenharmony_ci	__u8 phyaddr;
41662306a36Sopenharmony_ci	__u8 tp_mdix;
41762306a36Sopenharmony_ci	__u8 tp_mdix_ctrl;
41862306a36Sopenharmony_ci	__u8 transceiver;
41962306a36Sopenharmony_ci};
42062306a36Sopenharmony_ci
42162306a36Sopenharmony_civoid ethtool_linkinfo_get_rsp_free(struct ethtool_linkinfo_get_rsp *rsp);
42262306a36Sopenharmony_ci
42362306a36Sopenharmony_ci/*
42462306a36Sopenharmony_ci * Get link info.
42562306a36Sopenharmony_ci */
42662306a36Sopenharmony_cistruct ethtool_linkinfo_get_rsp *
42762306a36Sopenharmony_ciethtool_linkinfo_get(struct ynl_sock *ys, struct ethtool_linkinfo_get_req *req);
42862306a36Sopenharmony_ci
42962306a36Sopenharmony_ci/* ETHTOOL_MSG_LINKINFO_GET - dump */
43062306a36Sopenharmony_cistruct ethtool_linkinfo_get_req_dump {
43162306a36Sopenharmony_ci	struct {
43262306a36Sopenharmony_ci		__u32 header:1;
43362306a36Sopenharmony_ci	} _present;
43462306a36Sopenharmony_ci
43562306a36Sopenharmony_ci	struct ethtool_header header;
43662306a36Sopenharmony_ci};
43762306a36Sopenharmony_ci
43862306a36Sopenharmony_cistatic inline struct ethtool_linkinfo_get_req_dump *
43962306a36Sopenharmony_ciethtool_linkinfo_get_req_dump_alloc(void)
44062306a36Sopenharmony_ci{
44162306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_linkinfo_get_req_dump));
44262306a36Sopenharmony_ci}
44362306a36Sopenharmony_civoid
44462306a36Sopenharmony_ciethtool_linkinfo_get_req_dump_free(struct ethtool_linkinfo_get_req_dump *req);
44562306a36Sopenharmony_ci
44662306a36Sopenharmony_cistatic inline void
44762306a36Sopenharmony_ciethtool_linkinfo_get_req_dump_set_header_dev_index(struct ethtool_linkinfo_get_req_dump *req,
44862306a36Sopenharmony_ci						   __u32 dev_index)
44962306a36Sopenharmony_ci{
45062306a36Sopenharmony_ci	req->_present.header = 1;
45162306a36Sopenharmony_ci	req->header._present.dev_index = 1;
45262306a36Sopenharmony_ci	req->header.dev_index = dev_index;
45362306a36Sopenharmony_ci}
45462306a36Sopenharmony_cistatic inline void
45562306a36Sopenharmony_ciethtool_linkinfo_get_req_dump_set_header_dev_name(struct ethtool_linkinfo_get_req_dump *req,
45662306a36Sopenharmony_ci						  const char *dev_name)
45762306a36Sopenharmony_ci{
45862306a36Sopenharmony_ci	free(req->header.dev_name);
45962306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
46062306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
46162306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
46262306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
46362306a36Sopenharmony_ci}
46462306a36Sopenharmony_cistatic inline void
46562306a36Sopenharmony_ciethtool_linkinfo_get_req_dump_set_header_flags(struct ethtool_linkinfo_get_req_dump *req,
46662306a36Sopenharmony_ci					       __u32 flags)
46762306a36Sopenharmony_ci{
46862306a36Sopenharmony_ci	req->_present.header = 1;
46962306a36Sopenharmony_ci	req->header._present.flags = 1;
47062306a36Sopenharmony_ci	req->header.flags = flags;
47162306a36Sopenharmony_ci}
47262306a36Sopenharmony_ci
47362306a36Sopenharmony_cistruct ethtool_linkinfo_get_list {
47462306a36Sopenharmony_ci	struct ethtool_linkinfo_get_list *next;
47562306a36Sopenharmony_ci	struct ethtool_linkinfo_get_rsp obj __attribute__ ((aligned (8)));
47662306a36Sopenharmony_ci};
47762306a36Sopenharmony_ci
47862306a36Sopenharmony_civoid ethtool_linkinfo_get_list_free(struct ethtool_linkinfo_get_list *rsp);
47962306a36Sopenharmony_ci
48062306a36Sopenharmony_cistruct ethtool_linkinfo_get_list *
48162306a36Sopenharmony_ciethtool_linkinfo_get_dump(struct ynl_sock *ys,
48262306a36Sopenharmony_ci			  struct ethtool_linkinfo_get_req_dump *req);
48362306a36Sopenharmony_ci
48462306a36Sopenharmony_ci/* ETHTOOL_MSG_LINKINFO_GET - notify */
48562306a36Sopenharmony_cistruct ethtool_linkinfo_get_ntf {
48662306a36Sopenharmony_ci	__u16 family;
48762306a36Sopenharmony_ci	__u8 cmd;
48862306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
48962306a36Sopenharmony_ci	void (*free)(struct ethtool_linkinfo_get_ntf *ntf);
49062306a36Sopenharmony_ci	struct ethtool_linkinfo_get_rsp obj __attribute__ ((aligned (8)));
49162306a36Sopenharmony_ci};
49262306a36Sopenharmony_ci
49362306a36Sopenharmony_civoid ethtool_linkinfo_get_ntf_free(struct ethtool_linkinfo_get_ntf *rsp);
49462306a36Sopenharmony_ci
49562306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_LINKINFO_SET ============== */
49662306a36Sopenharmony_ci/* ETHTOOL_MSG_LINKINFO_SET - do */
49762306a36Sopenharmony_cistruct ethtool_linkinfo_set_req {
49862306a36Sopenharmony_ci	struct {
49962306a36Sopenharmony_ci		__u32 header:1;
50062306a36Sopenharmony_ci		__u32 port:1;
50162306a36Sopenharmony_ci		__u32 phyaddr:1;
50262306a36Sopenharmony_ci		__u32 tp_mdix:1;
50362306a36Sopenharmony_ci		__u32 tp_mdix_ctrl:1;
50462306a36Sopenharmony_ci		__u32 transceiver:1;
50562306a36Sopenharmony_ci	} _present;
50662306a36Sopenharmony_ci
50762306a36Sopenharmony_ci	struct ethtool_header header;
50862306a36Sopenharmony_ci	__u8 port;
50962306a36Sopenharmony_ci	__u8 phyaddr;
51062306a36Sopenharmony_ci	__u8 tp_mdix;
51162306a36Sopenharmony_ci	__u8 tp_mdix_ctrl;
51262306a36Sopenharmony_ci	__u8 transceiver;
51362306a36Sopenharmony_ci};
51462306a36Sopenharmony_ci
51562306a36Sopenharmony_cistatic inline struct ethtool_linkinfo_set_req *
51662306a36Sopenharmony_ciethtool_linkinfo_set_req_alloc(void)
51762306a36Sopenharmony_ci{
51862306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_linkinfo_set_req));
51962306a36Sopenharmony_ci}
52062306a36Sopenharmony_civoid ethtool_linkinfo_set_req_free(struct ethtool_linkinfo_set_req *req);
52162306a36Sopenharmony_ci
52262306a36Sopenharmony_cistatic inline void
52362306a36Sopenharmony_ciethtool_linkinfo_set_req_set_header_dev_index(struct ethtool_linkinfo_set_req *req,
52462306a36Sopenharmony_ci					      __u32 dev_index)
52562306a36Sopenharmony_ci{
52662306a36Sopenharmony_ci	req->_present.header = 1;
52762306a36Sopenharmony_ci	req->header._present.dev_index = 1;
52862306a36Sopenharmony_ci	req->header.dev_index = dev_index;
52962306a36Sopenharmony_ci}
53062306a36Sopenharmony_cistatic inline void
53162306a36Sopenharmony_ciethtool_linkinfo_set_req_set_header_dev_name(struct ethtool_linkinfo_set_req *req,
53262306a36Sopenharmony_ci					     const char *dev_name)
53362306a36Sopenharmony_ci{
53462306a36Sopenharmony_ci	free(req->header.dev_name);
53562306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
53662306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
53762306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
53862306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
53962306a36Sopenharmony_ci}
54062306a36Sopenharmony_cistatic inline void
54162306a36Sopenharmony_ciethtool_linkinfo_set_req_set_header_flags(struct ethtool_linkinfo_set_req *req,
54262306a36Sopenharmony_ci					  __u32 flags)
54362306a36Sopenharmony_ci{
54462306a36Sopenharmony_ci	req->_present.header = 1;
54562306a36Sopenharmony_ci	req->header._present.flags = 1;
54662306a36Sopenharmony_ci	req->header.flags = flags;
54762306a36Sopenharmony_ci}
54862306a36Sopenharmony_cistatic inline void
54962306a36Sopenharmony_ciethtool_linkinfo_set_req_set_port(struct ethtool_linkinfo_set_req *req,
55062306a36Sopenharmony_ci				  __u8 port)
55162306a36Sopenharmony_ci{
55262306a36Sopenharmony_ci	req->_present.port = 1;
55362306a36Sopenharmony_ci	req->port = port;
55462306a36Sopenharmony_ci}
55562306a36Sopenharmony_cistatic inline void
55662306a36Sopenharmony_ciethtool_linkinfo_set_req_set_phyaddr(struct ethtool_linkinfo_set_req *req,
55762306a36Sopenharmony_ci				     __u8 phyaddr)
55862306a36Sopenharmony_ci{
55962306a36Sopenharmony_ci	req->_present.phyaddr = 1;
56062306a36Sopenharmony_ci	req->phyaddr = phyaddr;
56162306a36Sopenharmony_ci}
56262306a36Sopenharmony_cistatic inline void
56362306a36Sopenharmony_ciethtool_linkinfo_set_req_set_tp_mdix(struct ethtool_linkinfo_set_req *req,
56462306a36Sopenharmony_ci				     __u8 tp_mdix)
56562306a36Sopenharmony_ci{
56662306a36Sopenharmony_ci	req->_present.tp_mdix = 1;
56762306a36Sopenharmony_ci	req->tp_mdix = tp_mdix;
56862306a36Sopenharmony_ci}
56962306a36Sopenharmony_cistatic inline void
57062306a36Sopenharmony_ciethtool_linkinfo_set_req_set_tp_mdix_ctrl(struct ethtool_linkinfo_set_req *req,
57162306a36Sopenharmony_ci					  __u8 tp_mdix_ctrl)
57262306a36Sopenharmony_ci{
57362306a36Sopenharmony_ci	req->_present.tp_mdix_ctrl = 1;
57462306a36Sopenharmony_ci	req->tp_mdix_ctrl = tp_mdix_ctrl;
57562306a36Sopenharmony_ci}
57662306a36Sopenharmony_cistatic inline void
57762306a36Sopenharmony_ciethtool_linkinfo_set_req_set_transceiver(struct ethtool_linkinfo_set_req *req,
57862306a36Sopenharmony_ci					 __u8 transceiver)
57962306a36Sopenharmony_ci{
58062306a36Sopenharmony_ci	req->_present.transceiver = 1;
58162306a36Sopenharmony_ci	req->transceiver = transceiver;
58262306a36Sopenharmony_ci}
58362306a36Sopenharmony_ci
58462306a36Sopenharmony_ci/*
58562306a36Sopenharmony_ci * Set link info.
58662306a36Sopenharmony_ci */
58762306a36Sopenharmony_ciint ethtool_linkinfo_set(struct ynl_sock *ys,
58862306a36Sopenharmony_ci			 struct ethtool_linkinfo_set_req *req);
58962306a36Sopenharmony_ci
59062306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_LINKMODES_GET ============== */
59162306a36Sopenharmony_ci/* ETHTOOL_MSG_LINKMODES_GET - do */
59262306a36Sopenharmony_cistruct ethtool_linkmodes_get_req {
59362306a36Sopenharmony_ci	struct {
59462306a36Sopenharmony_ci		__u32 header:1;
59562306a36Sopenharmony_ci	} _present;
59662306a36Sopenharmony_ci
59762306a36Sopenharmony_ci	struct ethtool_header header;
59862306a36Sopenharmony_ci};
59962306a36Sopenharmony_ci
60062306a36Sopenharmony_cistatic inline struct ethtool_linkmodes_get_req *
60162306a36Sopenharmony_ciethtool_linkmodes_get_req_alloc(void)
60262306a36Sopenharmony_ci{
60362306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_linkmodes_get_req));
60462306a36Sopenharmony_ci}
60562306a36Sopenharmony_civoid ethtool_linkmodes_get_req_free(struct ethtool_linkmodes_get_req *req);
60662306a36Sopenharmony_ci
60762306a36Sopenharmony_cistatic inline void
60862306a36Sopenharmony_ciethtool_linkmodes_get_req_set_header_dev_index(struct ethtool_linkmodes_get_req *req,
60962306a36Sopenharmony_ci					       __u32 dev_index)
61062306a36Sopenharmony_ci{
61162306a36Sopenharmony_ci	req->_present.header = 1;
61262306a36Sopenharmony_ci	req->header._present.dev_index = 1;
61362306a36Sopenharmony_ci	req->header.dev_index = dev_index;
61462306a36Sopenharmony_ci}
61562306a36Sopenharmony_cistatic inline void
61662306a36Sopenharmony_ciethtool_linkmodes_get_req_set_header_dev_name(struct ethtool_linkmodes_get_req *req,
61762306a36Sopenharmony_ci					      const char *dev_name)
61862306a36Sopenharmony_ci{
61962306a36Sopenharmony_ci	free(req->header.dev_name);
62062306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
62162306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
62262306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
62362306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
62462306a36Sopenharmony_ci}
62562306a36Sopenharmony_cistatic inline void
62662306a36Sopenharmony_ciethtool_linkmodes_get_req_set_header_flags(struct ethtool_linkmodes_get_req *req,
62762306a36Sopenharmony_ci					   __u32 flags)
62862306a36Sopenharmony_ci{
62962306a36Sopenharmony_ci	req->_present.header = 1;
63062306a36Sopenharmony_ci	req->header._present.flags = 1;
63162306a36Sopenharmony_ci	req->header.flags = flags;
63262306a36Sopenharmony_ci}
63362306a36Sopenharmony_ci
63462306a36Sopenharmony_cistruct ethtool_linkmodes_get_rsp {
63562306a36Sopenharmony_ci	struct {
63662306a36Sopenharmony_ci		__u32 header:1;
63762306a36Sopenharmony_ci		__u32 autoneg:1;
63862306a36Sopenharmony_ci		__u32 ours:1;
63962306a36Sopenharmony_ci		__u32 peer:1;
64062306a36Sopenharmony_ci		__u32 speed:1;
64162306a36Sopenharmony_ci		__u32 duplex:1;
64262306a36Sopenharmony_ci		__u32 master_slave_cfg:1;
64362306a36Sopenharmony_ci		__u32 master_slave_state:1;
64462306a36Sopenharmony_ci		__u32 lanes:1;
64562306a36Sopenharmony_ci		__u32 rate_matching:1;
64662306a36Sopenharmony_ci	} _present;
64762306a36Sopenharmony_ci
64862306a36Sopenharmony_ci	struct ethtool_header header;
64962306a36Sopenharmony_ci	__u8 autoneg;
65062306a36Sopenharmony_ci	struct ethtool_bitset ours;
65162306a36Sopenharmony_ci	struct ethtool_bitset peer;
65262306a36Sopenharmony_ci	__u32 speed;
65362306a36Sopenharmony_ci	__u8 duplex;
65462306a36Sopenharmony_ci	__u8 master_slave_cfg;
65562306a36Sopenharmony_ci	__u8 master_slave_state;
65662306a36Sopenharmony_ci	__u32 lanes;
65762306a36Sopenharmony_ci	__u8 rate_matching;
65862306a36Sopenharmony_ci};
65962306a36Sopenharmony_ci
66062306a36Sopenharmony_civoid ethtool_linkmodes_get_rsp_free(struct ethtool_linkmodes_get_rsp *rsp);
66162306a36Sopenharmony_ci
66262306a36Sopenharmony_ci/*
66362306a36Sopenharmony_ci * Get link modes.
66462306a36Sopenharmony_ci */
66562306a36Sopenharmony_cistruct ethtool_linkmodes_get_rsp *
66662306a36Sopenharmony_ciethtool_linkmodes_get(struct ynl_sock *ys,
66762306a36Sopenharmony_ci		      struct ethtool_linkmodes_get_req *req);
66862306a36Sopenharmony_ci
66962306a36Sopenharmony_ci/* ETHTOOL_MSG_LINKMODES_GET - dump */
67062306a36Sopenharmony_cistruct ethtool_linkmodes_get_req_dump {
67162306a36Sopenharmony_ci	struct {
67262306a36Sopenharmony_ci		__u32 header:1;
67362306a36Sopenharmony_ci	} _present;
67462306a36Sopenharmony_ci
67562306a36Sopenharmony_ci	struct ethtool_header header;
67662306a36Sopenharmony_ci};
67762306a36Sopenharmony_ci
67862306a36Sopenharmony_cistatic inline struct ethtool_linkmodes_get_req_dump *
67962306a36Sopenharmony_ciethtool_linkmodes_get_req_dump_alloc(void)
68062306a36Sopenharmony_ci{
68162306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_linkmodes_get_req_dump));
68262306a36Sopenharmony_ci}
68362306a36Sopenharmony_civoid
68462306a36Sopenharmony_ciethtool_linkmodes_get_req_dump_free(struct ethtool_linkmodes_get_req_dump *req);
68562306a36Sopenharmony_ci
68662306a36Sopenharmony_cistatic inline void
68762306a36Sopenharmony_ciethtool_linkmodes_get_req_dump_set_header_dev_index(struct ethtool_linkmodes_get_req_dump *req,
68862306a36Sopenharmony_ci						    __u32 dev_index)
68962306a36Sopenharmony_ci{
69062306a36Sopenharmony_ci	req->_present.header = 1;
69162306a36Sopenharmony_ci	req->header._present.dev_index = 1;
69262306a36Sopenharmony_ci	req->header.dev_index = dev_index;
69362306a36Sopenharmony_ci}
69462306a36Sopenharmony_cistatic inline void
69562306a36Sopenharmony_ciethtool_linkmodes_get_req_dump_set_header_dev_name(struct ethtool_linkmodes_get_req_dump *req,
69662306a36Sopenharmony_ci						   const char *dev_name)
69762306a36Sopenharmony_ci{
69862306a36Sopenharmony_ci	free(req->header.dev_name);
69962306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
70062306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
70162306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
70262306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
70362306a36Sopenharmony_ci}
70462306a36Sopenharmony_cistatic inline void
70562306a36Sopenharmony_ciethtool_linkmodes_get_req_dump_set_header_flags(struct ethtool_linkmodes_get_req_dump *req,
70662306a36Sopenharmony_ci						__u32 flags)
70762306a36Sopenharmony_ci{
70862306a36Sopenharmony_ci	req->_present.header = 1;
70962306a36Sopenharmony_ci	req->header._present.flags = 1;
71062306a36Sopenharmony_ci	req->header.flags = flags;
71162306a36Sopenharmony_ci}
71262306a36Sopenharmony_ci
71362306a36Sopenharmony_cistruct ethtool_linkmodes_get_list {
71462306a36Sopenharmony_ci	struct ethtool_linkmodes_get_list *next;
71562306a36Sopenharmony_ci	struct ethtool_linkmodes_get_rsp obj __attribute__ ((aligned (8)));
71662306a36Sopenharmony_ci};
71762306a36Sopenharmony_ci
71862306a36Sopenharmony_civoid ethtool_linkmodes_get_list_free(struct ethtool_linkmodes_get_list *rsp);
71962306a36Sopenharmony_ci
72062306a36Sopenharmony_cistruct ethtool_linkmodes_get_list *
72162306a36Sopenharmony_ciethtool_linkmodes_get_dump(struct ynl_sock *ys,
72262306a36Sopenharmony_ci			   struct ethtool_linkmodes_get_req_dump *req);
72362306a36Sopenharmony_ci
72462306a36Sopenharmony_ci/* ETHTOOL_MSG_LINKMODES_GET - notify */
72562306a36Sopenharmony_cistruct ethtool_linkmodes_get_ntf {
72662306a36Sopenharmony_ci	__u16 family;
72762306a36Sopenharmony_ci	__u8 cmd;
72862306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
72962306a36Sopenharmony_ci	void (*free)(struct ethtool_linkmodes_get_ntf *ntf);
73062306a36Sopenharmony_ci	struct ethtool_linkmodes_get_rsp obj __attribute__ ((aligned (8)));
73162306a36Sopenharmony_ci};
73262306a36Sopenharmony_ci
73362306a36Sopenharmony_civoid ethtool_linkmodes_get_ntf_free(struct ethtool_linkmodes_get_ntf *rsp);
73462306a36Sopenharmony_ci
73562306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_LINKMODES_SET ============== */
73662306a36Sopenharmony_ci/* ETHTOOL_MSG_LINKMODES_SET - do */
73762306a36Sopenharmony_cistruct ethtool_linkmodes_set_req {
73862306a36Sopenharmony_ci	struct {
73962306a36Sopenharmony_ci		__u32 header:1;
74062306a36Sopenharmony_ci		__u32 autoneg:1;
74162306a36Sopenharmony_ci		__u32 ours:1;
74262306a36Sopenharmony_ci		__u32 peer:1;
74362306a36Sopenharmony_ci		__u32 speed:1;
74462306a36Sopenharmony_ci		__u32 duplex:1;
74562306a36Sopenharmony_ci		__u32 master_slave_cfg:1;
74662306a36Sopenharmony_ci		__u32 master_slave_state:1;
74762306a36Sopenharmony_ci		__u32 lanes:1;
74862306a36Sopenharmony_ci		__u32 rate_matching:1;
74962306a36Sopenharmony_ci	} _present;
75062306a36Sopenharmony_ci
75162306a36Sopenharmony_ci	struct ethtool_header header;
75262306a36Sopenharmony_ci	__u8 autoneg;
75362306a36Sopenharmony_ci	struct ethtool_bitset ours;
75462306a36Sopenharmony_ci	struct ethtool_bitset peer;
75562306a36Sopenharmony_ci	__u32 speed;
75662306a36Sopenharmony_ci	__u8 duplex;
75762306a36Sopenharmony_ci	__u8 master_slave_cfg;
75862306a36Sopenharmony_ci	__u8 master_slave_state;
75962306a36Sopenharmony_ci	__u32 lanes;
76062306a36Sopenharmony_ci	__u8 rate_matching;
76162306a36Sopenharmony_ci};
76262306a36Sopenharmony_ci
76362306a36Sopenharmony_cistatic inline struct ethtool_linkmodes_set_req *
76462306a36Sopenharmony_ciethtool_linkmodes_set_req_alloc(void)
76562306a36Sopenharmony_ci{
76662306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_linkmodes_set_req));
76762306a36Sopenharmony_ci}
76862306a36Sopenharmony_civoid ethtool_linkmodes_set_req_free(struct ethtool_linkmodes_set_req *req);
76962306a36Sopenharmony_ci
77062306a36Sopenharmony_cistatic inline void
77162306a36Sopenharmony_ciethtool_linkmodes_set_req_set_header_dev_index(struct ethtool_linkmodes_set_req *req,
77262306a36Sopenharmony_ci					       __u32 dev_index)
77362306a36Sopenharmony_ci{
77462306a36Sopenharmony_ci	req->_present.header = 1;
77562306a36Sopenharmony_ci	req->header._present.dev_index = 1;
77662306a36Sopenharmony_ci	req->header.dev_index = dev_index;
77762306a36Sopenharmony_ci}
77862306a36Sopenharmony_cistatic inline void
77962306a36Sopenharmony_ciethtool_linkmodes_set_req_set_header_dev_name(struct ethtool_linkmodes_set_req *req,
78062306a36Sopenharmony_ci					      const char *dev_name)
78162306a36Sopenharmony_ci{
78262306a36Sopenharmony_ci	free(req->header.dev_name);
78362306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
78462306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
78562306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
78662306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
78762306a36Sopenharmony_ci}
78862306a36Sopenharmony_cistatic inline void
78962306a36Sopenharmony_ciethtool_linkmodes_set_req_set_header_flags(struct ethtool_linkmodes_set_req *req,
79062306a36Sopenharmony_ci					   __u32 flags)
79162306a36Sopenharmony_ci{
79262306a36Sopenharmony_ci	req->_present.header = 1;
79362306a36Sopenharmony_ci	req->header._present.flags = 1;
79462306a36Sopenharmony_ci	req->header.flags = flags;
79562306a36Sopenharmony_ci}
79662306a36Sopenharmony_cistatic inline void
79762306a36Sopenharmony_ciethtool_linkmodes_set_req_set_autoneg(struct ethtool_linkmodes_set_req *req,
79862306a36Sopenharmony_ci				      __u8 autoneg)
79962306a36Sopenharmony_ci{
80062306a36Sopenharmony_ci	req->_present.autoneg = 1;
80162306a36Sopenharmony_ci	req->autoneg = autoneg;
80262306a36Sopenharmony_ci}
80362306a36Sopenharmony_cistatic inline void
80462306a36Sopenharmony_ciethtool_linkmodes_set_req_set_ours_nomask(struct ethtool_linkmodes_set_req *req)
80562306a36Sopenharmony_ci{
80662306a36Sopenharmony_ci	req->_present.ours = 1;
80762306a36Sopenharmony_ci	req->ours._present.nomask = 1;
80862306a36Sopenharmony_ci}
80962306a36Sopenharmony_cistatic inline void
81062306a36Sopenharmony_ciethtool_linkmodes_set_req_set_ours_size(struct ethtool_linkmodes_set_req *req,
81162306a36Sopenharmony_ci					__u32 size)
81262306a36Sopenharmony_ci{
81362306a36Sopenharmony_ci	req->_present.ours = 1;
81462306a36Sopenharmony_ci	req->ours._present.size = 1;
81562306a36Sopenharmony_ci	req->ours.size = size;
81662306a36Sopenharmony_ci}
81762306a36Sopenharmony_cistatic inline void
81862306a36Sopenharmony_ci__ethtool_linkmodes_set_req_set_ours_bits_bit(struct ethtool_linkmodes_set_req *req,
81962306a36Sopenharmony_ci					      struct ethtool_bitset_bit *bit,
82062306a36Sopenharmony_ci					      unsigned int n_bit)
82162306a36Sopenharmony_ci{
82262306a36Sopenharmony_ci	free(req->ours.bits.bit);
82362306a36Sopenharmony_ci	req->ours.bits.bit = bit;
82462306a36Sopenharmony_ci	req->ours.bits.n_bit = n_bit;
82562306a36Sopenharmony_ci}
82662306a36Sopenharmony_cistatic inline void
82762306a36Sopenharmony_ciethtool_linkmodes_set_req_set_peer_nomask(struct ethtool_linkmodes_set_req *req)
82862306a36Sopenharmony_ci{
82962306a36Sopenharmony_ci	req->_present.peer = 1;
83062306a36Sopenharmony_ci	req->peer._present.nomask = 1;
83162306a36Sopenharmony_ci}
83262306a36Sopenharmony_cistatic inline void
83362306a36Sopenharmony_ciethtool_linkmodes_set_req_set_peer_size(struct ethtool_linkmodes_set_req *req,
83462306a36Sopenharmony_ci					__u32 size)
83562306a36Sopenharmony_ci{
83662306a36Sopenharmony_ci	req->_present.peer = 1;
83762306a36Sopenharmony_ci	req->peer._present.size = 1;
83862306a36Sopenharmony_ci	req->peer.size = size;
83962306a36Sopenharmony_ci}
84062306a36Sopenharmony_cistatic inline void
84162306a36Sopenharmony_ci__ethtool_linkmodes_set_req_set_peer_bits_bit(struct ethtool_linkmodes_set_req *req,
84262306a36Sopenharmony_ci					      struct ethtool_bitset_bit *bit,
84362306a36Sopenharmony_ci					      unsigned int n_bit)
84462306a36Sopenharmony_ci{
84562306a36Sopenharmony_ci	free(req->peer.bits.bit);
84662306a36Sopenharmony_ci	req->peer.bits.bit = bit;
84762306a36Sopenharmony_ci	req->peer.bits.n_bit = n_bit;
84862306a36Sopenharmony_ci}
84962306a36Sopenharmony_cistatic inline void
85062306a36Sopenharmony_ciethtool_linkmodes_set_req_set_speed(struct ethtool_linkmodes_set_req *req,
85162306a36Sopenharmony_ci				    __u32 speed)
85262306a36Sopenharmony_ci{
85362306a36Sopenharmony_ci	req->_present.speed = 1;
85462306a36Sopenharmony_ci	req->speed = speed;
85562306a36Sopenharmony_ci}
85662306a36Sopenharmony_cistatic inline void
85762306a36Sopenharmony_ciethtool_linkmodes_set_req_set_duplex(struct ethtool_linkmodes_set_req *req,
85862306a36Sopenharmony_ci				     __u8 duplex)
85962306a36Sopenharmony_ci{
86062306a36Sopenharmony_ci	req->_present.duplex = 1;
86162306a36Sopenharmony_ci	req->duplex = duplex;
86262306a36Sopenharmony_ci}
86362306a36Sopenharmony_cistatic inline void
86462306a36Sopenharmony_ciethtool_linkmodes_set_req_set_master_slave_cfg(struct ethtool_linkmodes_set_req *req,
86562306a36Sopenharmony_ci					       __u8 master_slave_cfg)
86662306a36Sopenharmony_ci{
86762306a36Sopenharmony_ci	req->_present.master_slave_cfg = 1;
86862306a36Sopenharmony_ci	req->master_slave_cfg = master_slave_cfg;
86962306a36Sopenharmony_ci}
87062306a36Sopenharmony_cistatic inline void
87162306a36Sopenharmony_ciethtool_linkmodes_set_req_set_master_slave_state(struct ethtool_linkmodes_set_req *req,
87262306a36Sopenharmony_ci						 __u8 master_slave_state)
87362306a36Sopenharmony_ci{
87462306a36Sopenharmony_ci	req->_present.master_slave_state = 1;
87562306a36Sopenharmony_ci	req->master_slave_state = master_slave_state;
87662306a36Sopenharmony_ci}
87762306a36Sopenharmony_cistatic inline void
87862306a36Sopenharmony_ciethtool_linkmodes_set_req_set_lanes(struct ethtool_linkmodes_set_req *req,
87962306a36Sopenharmony_ci				    __u32 lanes)
88062306a36Sopenharmony_ci{
88162306a36Sopenharmony_ci	req->_present.lanes = 1;
88262306a36Sopenharmony_ci	req->lanes = lanes;
88362306a36Sopenharmony_ci}
88462306a36Sopenharmony_cistatic inline void
88562306a36Sopenharmony_ciethtool_linkmodes_set_req_set_rate_matching(struct ethtool_linkmodes_set_req *req,
88662306a36Sopenharmony_ci					    __u8 rate_matching)
88762306a36Sopenharmony_ci{
88862306a36Sopenharmony_ci	req->_present.rate_matching = 1;
88962306a36Sopenharmony_ci	req->rate_matching = rate_matching;
89062306a36Sopenharmony_ci}
89162306a36Sopenharmony_ci
89262306a36Sopenharmony_ci/*
89362306a36Sopenharmony_ci * Set link modes.
89462306a36Sopenharmony_ci */
89562306a36Sopenharmony_ciint ethtool_linkmodes_set(struct ynl_sock *ys,
89662306a36Sopenharmony_ci			  struct ethtool_linkmodes_set_req *req);
89762306a36Sopenharmony_ci
89862306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_LINKSTATE_GET ============== */
89962306a36Sopenharmony_ci/* ETHTOOL_MSG_LINKSTATE_GET - do */
90062306a36Sopenharmony_cistruct ethtool_linkstate_get_req {
90162306a36Sopenharmony_ci	struct {
90262306a36Sopenharmony_ci		__u32 header:1;
90362306a36Sopenharmony_ci	} _present;
90462306a36Sopenharmony_ci
90562306a36Sopenharmony_ci	struct ethtool_header header;
90662306a36Sopenharmony_ci};
90762306a36Sopenharmony_ci
90862306a36Sopenharmony_cistatic inline struct ethtool_linkstate_get_req *
90962306a36Sopenharmony_ciethtool_linkstate_get_req_alloc(void)
91062306a36Sopenharmony_ci{
91162306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_linkstate_get_req));
91262306a36Sopenharmony_ci}
91362306a36Sopenharmony_civoid ethtool_linkstate_get_req_free(struct ethtool_linkstate_get_req *req);
91462306a36Sopenharmony_ci
91562306a36Sopenharmony_cistatic inline void
91662306a36Sopenharmony_ciethtool_linkstate_get_req_set_header_dev_index(struct ethtool_linkstate_get_req *req,
91762306a36Sopenharmony_ci					       __u32 dev_index)
91862306a36Sopenharmony_ci{
91962306a36Sopenharmony_ci	req->_present.header = 1;
92062306a36Sopenharmony_ci	req->header._present.dev_index = 1;
92162306a36Sopenharmony_ci	req->header.dev_index = dev_index;
92262306a36Sopenharmony_ci}
92362306a36Sopenharmony_cistatic inline void
92462306a36Sopenharmony_ciethtool_linkstate_get_req_set_header_dev_name(struct ethtool_linkstate_get_req *req,
92562306a36Sopenharmony_ci					      const char *dev_name)
92662306a36Sopenharmony_ci{
92762306a36Sopenharmony_ci	free(req->header.dev_name);
92862306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
92962306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
93062306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
93162306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
93262306a36Sopenharmony_ci}
93362306a36Sopenharmony_cistatic inline void
93462306a36Sopenharmony_ciethtool_linkstate_get_req_set_header_flags(struct ethtool_linkstate_get_req *req,
93562306a36Sopenharmony_ci					   __u32 flags)
93662306a36Sopenharmony_ci{
93762306a36Sopenharmony_ci	req->_present.header = 1;
93862306a36Sopenharmony_ci	req->header._present.flags = 1;
93962306a36Sopenharmony_ci	req->header.flags = flags;
94062306a36Sopenharmony_ci}
94162306a36Sopenharmony_ci
94262306a36Sopenharmony_cistruct ethtool_linkstate_get_rsp {
94362306a36Sopenharmony_ci	struct {
94462306a36Sopenharmony_ci		__u32 header:1;
94562306a36Sopenharmony_ci		__u32 link:1;
94662306a36Sopenharmony_ci		__u32 sqi:1;
94762306a36Sopenharmony_ci		__u32 sqi_max:1;
94862306a36Sopenharmony_ci		__u32 ext_state:1;
94962306a36Sopenharmony_ci		__u32 ext_substate:1;
95062306a36Sopenharmony_ci		__u32 ext_down_cnt:1;
95162306a36Sopenharmony_ci	} _present;
95262306a36Sopenharmony_ci
95362306a36Sopenharmony_ci	struct ethtool_header header;
95462306a36Sopenharmony_ci	__u8 link;
95562306a36Sopenharmony_ci	__u32 sqi;
95662306a36Sopenharmony_ci	__u32 sqi_max;
95762306a36Sopenharmony_ci	__u8 ext_state;
95862306a36Sopenharmony_ci	__u8 ext_substate;
95962306a36Sopenharmony_ci	__u32 ext_down_cnt;
96062306a36Sopenharmony_ci};
96162306a36Sopenharmony_ci
96262306a36Sopenharmony_civoid ethtool_linkstate_get_rsp_free(struct ethtool_linkstate_get_rsp *rsp);
96362306a36Sopenharmony_ci
96462306a36Sopenharmony_ci/*
96562306a36Sopenharmony_ci * Get link state.
96662306a36Sopenharmony_ci */
96762306a36Sopenharmony_cistruct ethtool_linkstate_get_rsp *
96862306a36Sopenharmony_ciethtool_linkstate_get(struct ynl_sock *ys,
96962306a36Sopenharmony_ci		      struct ethtool_linkstate_get_req *req);
97062306a36Sopenharmony_ci
97162306a36Sopenharmony_ci/* ETHTOOL_MSG_LINKSTATE_GET - dump */
97262306a36Sopenharmony_cistruct ethtool_linkstate_get_req_dump {
97362306a36Sopenharmony_ci	struct {
97462306a36Sopenharmony_ci		__u32 header:1;
97562306a36Sopenharmony_ci	} _present;
97662306a36Sopenharmony_ci
97762306a36Sopenharmony_ci	struct ethtool_header header;
97862306a36Sopenharmony_ci};
97962306a36Sopenharmony_ci
98062306a36Sopenharmony_cistatic inline struct ethtool_linkstate_get_req_dump *
98162306a36Sopenharmony_ciethtool_linkstate_get_req_dump_alloc(void)
98262306a36Sopenharmony_ci{
98362306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_linkstate_get_req_dump));
98462306a36Sopenharmony_ci}
98562306a36Sopenharmony_civoid
98662306a36Sopenharmony_ciethtool_linkstate_get_req_dump_free(struct ethtool_linkstate_get_req_dump *req);
98762306a36Sopenharmony_ci
98862306a36Sopenharmony_cistatic inline void
98962306a36Sopenharmony_ciethtool_linkstate_get_req_dump_set_header_dev_index(struct ethtool_linkstate_get_req_dump *req,
99062306a36Sopenharmony_ci						    __u32 dev_index)
99162306a36Sopenharmony_ci{
99262306a36Sopenharmony_ci	req->_present.header = 1;
99362306a36Sopenharmony_ci	req->header._present.dev_index = 1;
99462306a36Sopenharmony_ci	req->header.dev_index = dev_index;
99562306a36Sopenharmony_ci}
99662306a36Sopenharmony_cistatic inline void
99762306a36Sopenharmony_ciethtool_linkstate_get_req_dump_set_header_dev_name(struct ethtool_linkstate_get_req_dump *req,
99862306a36Sopenharmony_ci						   const char *dev_name)
99962306a36Sopenharmony_ci{
100062306a36Sopenharmony_ci	free(req->header.dev_name);
100162306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
100262306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
100362306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
100462306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
100562306a36Sopenharmony_ci}
100662306a36Sopenharmony_cistatic inline void
100762306a36Sopenharmony_ciethtool_linkstate_get_req_dump_set_header_flags(struct ethtool_linkstate_get_req_dump *req,
100862306a36Sopenharmony_ci						__u32 flags)
100962306a36Sopenharmony_ci{
101062306a36Sopenharmony_ci	req->_present.header = 1;
101162306a36Sopenharmony_ci	req->header._present.flags = 1;
101262306a36Sopenharmony_ci	req->header.flags = flags;
101362306a36Sopenharmony_ci}
101462306a36Sopenharmony_ci
101562306a36Sopenharmony_cistruct ethtool_linkstate_get_list {
101662306a36Sopenharmony_ci	struct ethtool_linkstate_get_list *next;
101762306a36Sopenharmony_ci	struct ethtool_linkstate_get_rsp obj __attribute__ ((aligned (8)));
101862306a36Sopenharmony_ci};
101962306a36Sopenharmony_ci
102062306a36Sopenharmony_civoid ethtool_linkstate_get_list_free(struct ethtool_linkstate_get_list *rsp);
102162306a36Sopenharmony_ci
102262306a36Sopenharmony_cistruct ethtool_linkstate_get_list *
102362306a36Sopenharmony_ciethtool_linkstate_get_dump(struct ynl_sock *ys,
102462306a36Sopenharmony_ci			   struct ethtool_linkstate_get_req_dump *req);
102562306a36Sopenharmony_ci
102662306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_DEBUG_GET ============== */
102762306a36Sopenharmony_ci/* ETHTOOL_MSG_DEBUG_GET - do */
102862306a36Sopenharmony_cistruct ethtool_debug_get_req {
102962306a36Sopenharmony_ci	struct {
103062306a36Sopenharmony_ci		__u32 header:1;
103162306a36Sopenharmony_ci	} _present;
103262306a36Sopenharmony_ci
103362306a36Sopenharmony_ci	struct ethtool_header header;
103462306a36Sopenharmony_ci};
103562306a36Sopenharmony_ci
103662306a36Sopenharmony_cistatic inline struct ethtool_debug_get_req *ethtool_debug_get_req_alloc(void)
103762306a36Sopenharmony_ci{
103862306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_debug_get_req));
103962306a36Sopenharmony_ci}
104062306a36Sopenharmony_civoid ethtool_debug_get_req_free(struct ethtool_debug_get_req *req);
104162306a36Sopenharmony_ci
104262306a36Sopenharmony_cistatic inline void
104362306a36Sopenharmony_ciethtool_debug_get_req_set_header_dev_index(struct ethtool_debug_get_req *req,
104462306a36Sopenharmony_ci					   __u32 dev_index)
104562306a36Sopenharmony_ci{
104662306a36Sopenharmony_ci	req->_present.header = 1;
104762306a36Sopenharmony_ci	req->header._present.dev_index = 1;
104862306a36Sopenharmony_ci	req->header.dev_index = dev_index;
104962306a36Sopenharmony_ci}
105062306a36Sopenharmony_cistatic inline void
105162306a36Sopenharmony_ciethtool_debug_get_req_set_header_dev_name(struct ethtool_debug_get_req *req,
105262306a36Sopenharmony_ci					  const char *dev_name)
105362306a36Sopenharmony_ci{
105462306a36Sopenharmony_ci	free(req->header.dev_name);
105562306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
105662306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
105762306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
105862306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
105962306a36Sopenharmony_ci}
106062306a36Sopenharmony_cistatic inline void
106162306a36Sopenharmony_ciethtool_debug_get_req_set_header_flags(struct ethtool_debug_get_req *req,
106262306a36Sopenharmony_ci				       __u32 flags)
106362306a36Sopenharmony_ci{
106462306a36Sopenharmony_ci	req->_present.header = 1;
106562306a36Sopenharmony_ci	req->header._present.flags = 1;
106662306a36Sopenharmony_ci	req->header.flags = flags;
106762306a36Sopenharmony_ci}
106862306a36Sopenharmony_ci
106962306a36Sopenharmony_cistruct ethtool_debug_get_rsp {
107062306a36Sopenharmony_ci	struct {
107162306a36Sopenharmony_ci		__u32 header:1;
107262306a36Sopenharmony_ci		__u32 msgmask:1;
107362306a36Sopenharmony_ci	} _present;
107462306a36Sopenharmony_ci
107562306a36Sopenharmony_ci	struct ethtool_header header;
107662306a36Sopenharmony_ci	struct ethtool_bitset msgmask;
107762306a36Sopenharmony_ci};
107862306a36Sopenharmony_ci
107962306a36Sopenharmony_civoid ethtool_debug_get_rsp_free(struct ethtool_debug_get_rsp *rsp);
108062306a36Sopenharmony_ci
108162306a36Sopenharmony_ci/*
108262306a36Sopenharmony_ci * Get debug message mask.
108362306a36Sopenharmony_ci */
108462306a36Sopenharmony_cistruct ethtool_debug_get_rsp *
108562306a36Sopenharmony_ciethtool_debug_get(struct ynl_sock *ys, struct ethtool_debug_get_req *req);
108662306a36Sopenharmony_ci
108762306a36Sopenharmony_ci/* ETHTOOL_MSG_DEBUG_GET - dump */
108862306a36Sopenharmony_cistruct ethtool_debug_get_req_dump {
108962306a36Sopenharmony_ci	struct {
109062306a36Sopenharmony_ci		__u32 header:1;
109162306a36Sopenharmony_ci	} _present;
109262306a36Sopenharmony_ci
109362306a36Sopenharmony_ci	struct ethtool_header header;
109462306a36Sopenharmony_ci};
109562306a36Sopenharmony_ci
109662306a36Sopenharmony_cistatic inline struct ethtool_debug_get_req_dump *
109762306a36Sopenharmony_ciethtool_debug_get_req_dump_alloc(void)
109862306a36Sopenharmony_ci{
109962306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_debug_get_req_dump));
110062306a36Sopenharmony_ci}
110162306a36Sopenharmony_civoid ethtool_debug_get_req_dump_free(struct ethtool_debug_get_req_dump *req);
110262306a36Sopenharmony_ci
110362306a36Sopenharmony_cistatic inline void
110462306a36Sopenharmony_ciethtool_debug_get_req_dump_set_header_dev_index(struct ethtool_debug_get_req_dump *req,
110562306a36Sopenharmony_ci						__u32 dev_index)
110662306a36Sopenharmony_ci{
110762306a36Sopenharmony_ci	req->_present.header = 1;
110862306a36Sopenharmony_ci	req->header._present.dev_index = 1;
110962306a36Sopenharmony_ci	req->header.dev_index = dev_index;
111062306a36Sopenharmony_ci}
111162306a36Sopenharmony_cistatic inline void
111262306a36Sopenharmony_ciethtool_debug_get_req_dump_set_header_dev_name(struct ethtool_debug_get_req_dump *req,
111362306a36Sopenharmony_ci					       const char *dev_name)
111462306a36Sopenharmony_ci{
111562306a36Sopenharmony_ci	free(req->header.dev_name);
111662306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
111762306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
111862306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
111962306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
112062306a36Sopenharmony_ci}
112162306a36Sopenharmony_cistatic inline void
112262306a36Sopenharmony_ciethtool_debug_get_req_dump_set_header_flags(struct ethtool_debug_get_req_dump *req,
112362306a36Sopenharmony_ci					    __u32 flags)
112462306a36Sopenharmony_ci{
112562306a36Sopenharmony_ci	req->_present.header = 1;
112662306a36Sopenharmony_ci	req->header._present.flags = 1;
112762306a36Sopenharmony_ci	req->header.flags = flags;
112862306a36Sopenharmony_ci}
112962306a36Sopenharmony_ci
113062306a36Sopenharmony_cistruct ethtool_debug_get_list {
113162306a36Sopenharmony_ci	struct ethtool_debug_get_list *next;
113262306a36Sopenharmony_ci	struct ethtool_debug_get_rsp obj __attribute__ ((aligned (8)));
113362306a36Sopenharmony_ci};
113462306a36Sopenharmony_ci
113562306a36Sopenharmony_civoid ethtool_debug_get_list_free(struct ethtool_debug_get_list *rsp);
113662306a36Sopenharmony_ci
113762306a36Sopenharmony_cistruct ethtool_debug_get_list *
113862306a36Sopenharmony_ciethtool_debug_get_dump(struct ynl_sock *ys,
113962306a36Sopenharmony_ci		       struct ethtool_debug_get_req_dump *req);
114062306a36Sopenharmony_ci
114162306a36Sopenharmony_ci/* ETHTOOL_MSG_DEBUG_GET - notify */
114262306a36Sopenharmony_cistruct ethtool_debug_get_ntf {
114362306a36Sopenharmony_ci	__u16 family;
114462306a36Sopenharmony_ci	__u8 cmd;
114562306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
114662306a36Sopenharmony_ci	void (*free)(struct ethtool_debug_get_ntf *ntf);
114762306a36Sopenharmony_ci	struct ethtool_debug_get_rsp obj __attribute__ ((aligned (8)));
114862306a36Sopenharmony_ci};
114962306a36Sopenharmony_ci
115062306a36Sopenharmony_civoid ethtool_debug_get_ntf_free(struct ethtool_debug_get_ntf *rsp);
115162306a36Sopenharmony_ci
115262306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_DEBUG_SET ============== */
115362306a36Sopenharmony_ci/* ETHTOOL_MSG_DEBUG_SET - do */
115462306a36Sopenharmony_cistruct ethtool_debug_set_req {
115562306a36Sopenharmony_ci	struct {
115662306a36Sopenharmony_ci		__u32 header:1;
115762306a36Sopenharmony_ci		__u32 msgmask:1;
115862306a36Sopenharmony_ci	} _present;
115962306a36Sopenharmony_ci
116062306a36Sopenharmony_ci	struct ethtool_header header;
116162306a36Sopenharmony_ci	struct ethtool_bitset msgmask;
116262306a36Sopenharmony_ci};
116362306a36Sopenharmony_ci
116462306a36Sopenharmony_cistatic inline struct ethtool_debug_set_req *ethtool_debug_set_req_alloc(void)
116562306a36Sopenharmony_ci{
116662306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_debug_set_req));
116762306a36Sopenharmony_ci}
116862306a36Sopenharmony_civoid ethtool_debug_set_req_free(struct ethtool_debug_set_req *req);
116962306a36Sopenharmony_ci
117062306a36Sopenharmony_cistatic inline void
117162306a36Sopenharmony_ciethtool_debug_set_req_set_header_dev_index(struct ethtool_debug_set_req *req,
117262306a36Sopenharmony_ci					   __u32 dev_index)
117362306a36Sopenharmony_ci{
117462306a36Sopenharmony_ci	req->_present.header = 1;
117562306a36Sopenharmony_ci	req->header._present.dev_index = 1;
117662306a36Sopenharmony_ci	req->header.dev_index = dev_index;
117762306a36Sopenharmony_ci}
117862306a36Sopenharmony_cistatic inline void
117962306a36Sopenharmony_ciethtool_debug_set_req_set_header_dev_name(struct ethtool_debug_set_req *req,
118062306a36Sopenharmony_ci					  const char *dev_name)
118162306a36Sopenharmony_ci{
118262306a36Sopenharmony_ci	free(req->header.dev_name);
118362306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
118462306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
118562306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
118662306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
118762306a36Sopenharmony_ci}
118862306a36Sopenharmony_cistatic inline void
118962306a36Sopenharmony_ciethtool_debug_set_req_set_header_flags(struct ethtool_debug_set_req *req,
119062306a36Sopenharmony_ci				       __u32 flags)
119162306a36Sopenharmony_ci{
119262306a36Sopenharmony_ci	req->_present.header = 1;
119362306a36Sopenharmony_ci	req->header._present.flags = 1;
119462306a36Sopenharmony_ci	req->header.flags = flags;
119562306a36Sopenharmony_ci}
119662306a36Sopenharmony_cistatic inline void
119762306a36Sopenharmony_ciethtool_debug_set_req_set_msgmask_nomask(struct ethtool_debug_set_req *req)
119862306a36Sopenharmony_ci{
119962306a36Sopenharmony_ci	req->_present.msgmask = 1;
120062306a36Sopenharmony_ci	req->msgmask._present.nomask = 1;
120162306a36Sopenharmony_ci}
120262306a36Sopenharmony_cistatic inline void
120362306a36Sopenharmony_ciethtool_debug_set_req_set_msgmask_size(struct ethtool_debug_set_req *req,
120462306a36Sopenharmony_ci				       __u32 size)
120562306a36Sopenharmony_ci{
120662306a36Sopenharmony_ci	req->_present.msgmask = 1;
120762306a36Sopenharmony_ci	req->msgmask._present.size = 1;
120862306a36Sopenharmony_ci	req->msgmask.size = size;
120962306a36Sopenharmony_ci}
121062306a36Sopenharmony_cistatic inline void
121162306a36Sopenharmony_ci__ethtool_debug_set_req_set_msgmask_bits_bit(struct ethtool_debug_set_req *req,
121262306a36Sopenharmony_ci					     struct ethtool_bitset_bit *bit,
121362306a36Sopenharmony_ci					     unsigned int n_bit)
121462306a36Sopenharmony_ci{
121562306a36Sopenharmony_ci	free(req->msgmask.bits.bit);
121662306a36Sopenharmony_ci	req->msgmask.bits.bit = bit;
121762306a36Sopenharmony_ci	req->msgmask.bits.n_bit = n_bit;
121862306a36Sopenharmony_ci}
121962306a36Sopenharmony_ci
122062306a36Sopenharmony_ci/*
122162306a36Sopenharmony_ci * Set debug message mask.
122262306a36Sopenharmony_ci */
122362306a36Sopenharmony_ciint ethtool_debug_set(struct ynl_sock *ys, struct ethtool_debug_set_req *req);
122462306a36Sopenharmony_ci
122562306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_WOL_GET ============== */
122662306a36Sopenharmony_ci/* ETHTOOL_MSG_WOL_GET - do */
122762306a36Sopenharmony_cistruct ethtool_wol_get_req {
122862306a36Sopenharmony_ci	struct {
122962306a36Sopenharmony_ci		__u32 header:1;
123062306a36Sopenharmony_ci	} _present;
123162306a36Sopenharmony_ci
123262306a36Sopenharmony_ci	struct ethtool_header header;
123362306a36Sopenharmony_ci};
123462306a36Sopenharmony_ci
123562306a36Sopenharmony_cistatic inline struct ethtool_wol_get_req *ethtool_wol_get_req_alloc(void)
123662306a36Sopenharmony_ci{
123762306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_wol_get_req));
123862306a36Sopenharmony_ci}
123962306a36Sopenharmony_civoid ethtool_wol_get_req_free(struct ethtool_wol_get_req *req);
124062306a36Sopenharmony_ci
124162306a36Sopenharmony_cistatic inline void
124262306a36Sopenharmony_ciethtool_wol_get_req_set_header_dev_index(struct ethtool_wol_get_req *req,
124362306a36Sopenharmony_ci					 __u32 dev_index)
124462306a36Sopenharmony_ci{
124562306a36Sopenharmony_ci	req->_present.header = 1;
124662306a36Sopenharmony_ci	req->header._present.dev_index = 1;
124762306a36Sopenharmony_ci	req->header.dev_index = dev_index;
124862306a36Sopenharmony_ci}
124962306a36Sopenharmony_cistatic inline void
125062306a36Sopenharmony_ciethtool_wol_get_req_set_header_dev_name(struct ethtool_wol_get_req *req,
125162306a36Sopenharmony_ci					const char *dev_name)
125262306a36Sopenharmony_ci{
125362306a36Sopenharmony_ci	free(req->header.dev_name);
125462306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
125562306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
125662306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
125762306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
125862306a36Sopenharmony_ci}
125962306a36Sopenharmony_cistatic inline void
126062306a36Sopenharmony_ciethtool_wol_get_req_set_header_flags(struct ethtool_wol_get_req *req,
126162306a36Sopenharmony_ci				     __u32 flags)
126262306a36Sopenharmony_ci{
126362306a36Sopenharmony_ci	req->_present.header = 1;
126462306a36Sopenharmony_ci	req->header._present.flags = 1;
126562306a36Sopenharmony_ci	req->header.flags = flags;
126662306a36Sopenharmony_ci}
126762306a36Sopenharmony_ci
126862306a36Sopenharmony_cistruct ethtool_wol_get_rsp {
126962306a36Sopenharmony_ci	struct {
127062306a36Sopenharmony_ci		__u32 header:1;
127162306a36Sopenharmony_ci		__u32 modes:1;
127262306a36Sopenharmony_ci		__u32 sopass_len;
127362306a36Sopenharmony_ci	} _present;
127462306a36Sopenharmony_ci
127562306a36Sopenharmony_ci	struct ethtool_header header;
127662306a36Sopenharmony_ci	struct ethtool_bitset modes;
127762306a36Sopenharmony_ci	void *sopass;
127862306a36Sopenharmony_ci};
127962306a36Sopenharmony_ci
128062306a36Sopenharmony_civoid ethtool_wol_get_rsp_free(struct ethtool_wol_get_rsp *rsp);
128162306a36Sopenharmony_ci
128262306a36Sopenharmony_ci/*
128362306a36Sopenharmony_ci * Get WOL params.
128462306a36Sopenharmony_ci */
128562306a36Sopenharmony_cistruct ethtool_wol_get_rsp *
128662306a36Sopenharmony_ciethtool_wol_get(struct ynl_sock *ys, struct ethtool_wol_get_req *req);
128762306a36Sopenharmony_ci
128862306a36Sopenharmony_ci/* ETHTOOL_MSG_WOL_GET - dump */
128962306a36Sopenharmony_cistruct ethtool_wol_get_req_dump {
129062306a36Sopenharmony_ci	struct {
129162306a36Sopenharmony_ci		__u32 header:1;
129262306a36Sopenharmony_ci	} _present;
129362306a36Sopenharmony_ci
129462306a36Sopenharmony_ci	struct ethtool_header header;
129562306a36Sopenharmony_ci};
129662306a36Sopenharmony_ci
129762306a36Sopenharmony_cistatic inline struct ethtool_wol_get_req_dump *
129862306a36Sopenharmony_ciethtool_wol_get_req_dump_alloc(void)
129962306a36Sopenharmony_ci{
130062306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_wol_get_req_dump));
130162306a36Sopenharmony_ci}
130262306a36Sopenharmony_civoid ethtool_wol_get_req_dump_free(struct ethtool_wol_get_req_dump *req);
130362306a36Sopenharmony_ci
130462306a36Sopenharmony_cistatic inline void
130562306a36Sopenharmony_ciethtool_wol_get_req_dump_set_header_dev_index(struct ethtool_wol_get_req_dump *req,
130662306a36Sopenharmony_ci					      __u32 dev_index)
130762306a36Sopenharmony_ci{
130862306a36Sopenharmony_ci	req->_present.header = 1;
130962306a36Sopenharmony_ci	req->header._present.dev_index = 1;
131062306a36Sopenharmony_ci	req->header.dev_index = dev_index;
131162306a36Sopenharmony_ci}
131262306a36Sopenharmony_cistatic inline void
131362306a36Sopenharmony_ciethtool_wol_get_req_dump_set_header_dev_name(struct ethtool_wol_get_req_dump *req,
131462306a36Sopenharmony_ci					     const char *dev_name)
131562306a36Sopenharmony_ci{
131662306a36Sopenharmony_ci	free(req->header.dev_name);
131762306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
131862306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
131962306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
132062306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
132162306a36Sopenharmony_ci}
132262306a36Sopenharmony_cistatic inline void
132362306a36Sopenharmony_ciethtool_wol_get_req_dump_set_header_flags(struct ethtool_wol_get_req_dump *req,
132462306a36Sopenharmony_ci					  __u32 flags)
132562306a36Sopenharmony_ci{
132662306a36Sopenharmony_ci	req->_present.header = 1;
132762306a36Sopenharmony_ci	req->header._present.flags = 1;
132862306a36Sopenharmony_ci	req->header.flags = flags;
132962306a36Sopenharmony_ci}
133062306a36Sopenharmony_ci
133162306a36Sopenharmony_cistruct ethtool_wol_get_list {
133262306a36Sopenharmony_ci	struct ethtool_wol_get_list *next;
133362306a36Sopenharmony_ci	struct ethtool_wol_get_rsp obj __attribute__ ((aligned (8)));
133462306a36Sopenharmony_ci};
133562306a36Sopenharmony_ci
133662306a36Sopenharmony_civoid ethtool_wol_get_list_free(struct ethtool_wol_get_list *rsp);
133762306a36Sopenharmony_ci
133862306a36Sopenharmony_cistruct ethtool_wol_get_list *
133962306a36Sopenharmony_ciethtool_wol_get_dump(struct ynl_sock *ys, struct ethtool_wol_get_req_dump *req);
134062306a36Sopenharmony_ci
134162306a36Sopenharmony_ci/* ETHTOOL_MSG_WOL_GET - notify */
134262306a36Sopenharmony_cistruct ethtool_wol_get_ntf {
134362306a36Sopenharmony_ci	__u16 family;
134462306a36Sopenharmony_ci	__u8 cmd;
134562306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
134662306a36Sopenharmony_ci	void (*free)(struct ethtool_wol_get_ntf *ntf);
134762306a36Sopenharmony_ci	struct ethtool_wol_get_rsp obj __attribute__ ((aligned (8)));
134862306a36Sopenharmony_ci};
134962306a36Sopenharmony_ci
135062306a36Sopenharmony_civoid ethtool_wol_get_ntf_free(struct ethtool_wol_get_ntf *rsp);
135162306a36Sopenharmony_ci
135262306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_WOL_SET ============== */
135362306a36Sopenharmony_ci/* ETHTOOL_MSG_WOL_SET - do */
135462306a36Sopenharmony_cistruct ethtool_wol_set_req {
135562306a36Sopenharmony_ci	struct {
135662306a36Sopenharmony_ci		__u32 header:1;
135762306a36Sopenharmony_ci		__u32 modes:1;
135862306a36Sopenharmony_ci		__u32 sopass_len;
135962306a36Sopenharmony_ci	} _present;
136062306a36Sopenharmony_ci
136162306a36Sopenharmony_ci	struct ethtool_header header;
136262306a36Sopenharmony_ci	struct ethtool_bitset modes;
136362306a36Sopenharmony_ci	void *sopass;
136462306a36Sopenharmony_ci};
136562306a36Sopenharmony_ci
136662306a36Sopenharmony_cistatic inline struct ethtool_wol_set_req *ethtool_wol_set_req_alloc(void)
136762306a36Sopenharmony_ci{
136862306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_wol_set_req));
136962306a36Sopenharmony_ci}
137062306a36Sopenharmony_civoid ethtool_wol_set_req_free(struct ethtool_wol_set_req *req);
137162306a36Sopenharmony_ci
137262306a36Sopenharmony_cistatic inline void
137362306a36Sopenharmony_ciethtool_wol_set_req_set_header_dev_index(struct ethtool_wol_set_req *req,
137462306a36Sopenharmony_ci					 __u32 dev_index)
137562306a36Sopenharmony_ci{
137662306a36Sopenharmony_ci	req->_present.header = 1;
137762306a36Sopenharmony_ci	req->header._present.dev_index = 1;
137862306a36Sopenharmony_ci	req->header.dev_index = dev_index;
137962306a36Sopenharmony_ci}
138062306a36Sopenharmony_cistatic inline void
138162306a36Sopenharmony_ciethtool_wol_set_req_set_header_dev_name(struct ethtool_wol_set_req *req,
138262306a36Sopenharmony_ci					const char *dev_name)
138362306a36Sopenharmony_ci{
138462306a36Sopenharmony_ci	free(req->header.dev_name);
138562306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
138662306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
138762306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
138862306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
138962306a36Sopenharmony_ci}
139062306a36Sopenharmony_cistatic inline void
139162306a36Sopenharmony_ciethtool_wol_set_req_set_header_flags(struct ethtool_wol_set_req *req,
139262306a36Sopenharmony_ci				     __u32 flags)
139362306a36Sopenharmony_ci{
139462306a36Sopenharmony_ci	req->_present.header = 1;
139562306a36Sopenharmony_ci	req->header._present.flags = 1;
139662306a36Sopenharmony_ci	req->header.flags = flags;
139762306a36Sopenharmony_ci}
139862306a36Sopenharmony_cistatic inline void
139962306a36Sopenharmony_ciethtool_wol_set_req_set_modes_nomask(struct ethtool_wol_set_req *req)
140062306a36Sopenharmony_ci{
140162306a36Sopenharmony_ci	req->_present.modes = 1;
140262306a36Sopenharmony_ci	req->modes._present.nomask = 1;
140362306a36Sopenharmony_ci}
140462306a36Sopenharmony_cistatic inline void
140562306a36Sopenharmony_ciethtool_wol_set_req_set_modes_size(struct ethtool_wol_set_req *req, __u32 size)
140662306a36Sopenharmony_ci{
140762306a36Sopenharmony_ci	req->_present.modes = 1;
140862306a36Sopenharmony_ci	req->modes._present.size = 1;
140962306a36Sopenharmony_ci	req->modes.size = size;
141062306a36Sopenharmony_ci}
141162306a36Sopenharmony_cistatic inline void
141262306a36Sopenharmony_ci__ethtool_wol_set_req_set_modes_bits_bit(struct ethtool_wol_set_req *req,
141362306a36Sopenharmony_ci					 struct ethtool_bitset_bit *bit,
141462306a36Sopenharmony_ci					 unsigned int n_bit)
141562306a36Sopenharmony_ci{
141662306a36Sopenharmony_ci	free(req->modes.bits.bit);
141762306a36Sopenharmony_ci	req->modes.bits.bit = bit;
141862306a36Sopenharmony_ci	req->modes.bits.n_bit = n_bit;
141962306a36Sopenharmony_ci}
142062306a36Sopenharmony_cistatic inline void
142162306a36Sopenharmony_ciethtool_wol_set_req_set_sopass(struct ethtool_wol_set_req *req,
142262306a36Sopenharmony_ci			       const void *sopass, size_t len)
142362306a36Sopenharmony_ci{
142462306a36Sopenharmony_ci	free(req->sopass);
142562306a36Sopenharmony_ci	req->_present.sopass_len = len;
142662306a36Sopenharmony_ci	req->sopass = malloc(req->_present.sopass_len);
142762306a36Sopenharmony_ci	memcpy(req->sopass, sopass, req->_present.sopass_len);
142862306a36Sopenharmony_ci}
142962306a36Sopenharmony_ci
143062306a36Sopenharmony_ci/*
143162306a36Sopenharmony_ci * Set WOL params.
143262306a36Sopenharmony_ci */
143362306a36Sopenharmony_ciint ethtool_wol_set(struct ynl_sock *ys, struct ethtool_wol_set_req *req);
143462306a36Sopenharmony_ci
143562306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_FEATURES_GET ============== */
143662306a36Sopenharmony_ci/* ETHTOOL_MSG_FEATURES_GET - do */
143762306a36Sopenharmony_cistruct ethtool_features_get_req {
143862306a36Sopenharmony_ci	struct {
143962306a36Sopenharmony_ci		__u32 header:1;
144062306a36Sopenharmony_ci	} _present;
144162306a36Sopenharmony_ci
144262306a36Sopenharmony_ci	struct ethtool_header header;
144362306a36Sopenharmony_ci};
144462306a36Sopenharmony_ci
144562306a36Sopenharmony_cistatic inline struct ethtool_features_get_req *
144662306a36Sopenharmony_ciethtool_features_get_req_alloc(void)
144762306a36Sopenharmony_ci{
144862306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_features_get_req));
144962306a36Sopenharmony_ci}
145062306a36Sopenharmony_civoid ethtool_features_get_req_free(struct ethtool_features_get_req *req);
145162306a36Sopenharmony_ci
145262306a36Sopenharmony_cistatic inline void
145362306a36Sopenharmony_ciethtool_features_get_req_set_header_dev_index(struct ethtool_features_get_req *req,
145462306a36Sopenharmony_ci					      __u32 dev_index)
145562306a36Sopenharmony_ci{
145662306a36Sopenharmony_ci	req->_present.header = 1;
145762306a36Sopenharmony_ci	req->header._present.dev_index = 1;
145862306a36Sopenharmony_ci	req->header.dev_index = dev_index;
145962306a36Sopenharmony_ci}
146062306a36Sopenharmony_cistatic inline void
146162306a36Sopenharmony_ciethtool_features_get_req_set_header_dev_name(struct ethtool_features_get_req *req,
146262306a36Sopenharmony_ci					     const char *dev_name)
146362306a36Sopenharmony_ci{
146462306a36Sopenharmony_ci	free(req->header.dev_name);
146562306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
146662306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
146762306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
146862306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
146962306a36Sopenharmony_ci}
147062306a36Sopenharmony_cistatic inline void
147162306a36Sopenharmony_ciethtool_features_get_req_set_header_flags(struct ethtool_features_get_req *req,
147262306a36Sopenharmony_ci					  __u32 flags)
147362306a36Sopenharmony_ci{
147462306a36Sopenharmony_ci	req->_present.header = 1;
147562306a36Sopenharmony_ci	req->header._present.flags = 1;
147662306a36Sopenharmony_ci	req->header.flags = flags;
147762306a36Sopenharmony_ci}
147862306a36Sopenharmony_ci
147962306a36Sopenharmony_cistruct ethtool_features_get_rsp {
148062306a36Sopenharmony_ci	struct {
148162306a36Sopenharmony_ci		__u32 header:1;
148262306a36Sopenharmony_ci		__u32 hw:1;
148362306a36Sopenharmony_ci		__u32 wanted:1;
148462306a36Sopenharmony_ci		__u32 active:1;
148562306a36Sopenharmony_ci		__u32 nochange:1;
148662306a36Sopenharmony_ci	} _present;
148762306a36Sopenharmony_ci
148862306a36Sopenharmony_ci	struct ethtool_header header;
148962306a36Sopenharmony_ci	struct ethtool_bitset hw;
149062306a36Sopenharmony_ci	struct ethtool_bitset wanted;
149162306a36Sopenharmony_ci	struct ethtool_bitset active;
149262306a36Sopenharmony_ci	struct ethtool_bitset nochange;
149362306a36Sopenharmony_ci};
149462306a36Sopenharmony_ci
149562306a36Sopenharmony_civoid ethtool_features_get_rsp_free(struct ethtool_features_get_rsp *rsp);
149662306a36Sopenharmony_ci
149762306a36Sopenharmony_ci/*
149862306a36Sopenharmony_ci * Get features.
149962306a36Sopenharmony_ci */
150062306a36Sopenharmony_cistruct ethtool_features_get_rsp *
150162306a36Sopenharmony_ciethtool_features_get(struct ynl_sock *ys, struct ethtool_features_get_req *req);
150262306a36Sopenharmony_ci
150362306a36Sopenharmony_ci/* ETHTOOL_MSG_FEATURES_GET - dump */
150462306a36Sopenharmony_cistruct ethtool_features_get_req_dump {
150562306a36Sopenharmony_ci	struct {
150662306a36Sopenharmony_ci		__u32 header:1;
150762306a36Sopenharmony_ci	} _present;
150862306a36Sopenharmony_ci
150962306a36Sopenharmony_ci	struct ethtool_header header;
151062306a36Sopenharmony_ci};
151162306a36Sopenharmony_ci
151262306a36Sopenharmony_cistatic inline struct ethtool_features_get_req_dump *
151362306a36Sopenharmony_ciethtool_features_get_req_dump_alloc(void)
151462306a36Sopenharmony_ci{
151562306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_features_get_req_dump));
151662306a36Sopenharmony_ci}
151762306a36Sopenharmony_civoid
151862306a36Sopenharmony_ciethtool_features_get_req_dump_free(struct ethtool_features_get_req_dump *req);
151962306a36Sopenharmony_ci
152062306a36Sopenharmony_cistatic inline void
152162306a36Sopenharmony_ciethtool_features_get_req_dump_set_header_dev_index(struct ethtool_features_get_req_dump *req,
152262306a36Sopenharmony_ci						   __u32 dev_index)
152362306a36Sopenharmony_ci{
152462306a36Sopenharmony_ci	req->_present.header = 1;
152562306a36Sopenharmony_ci	req->header._present.dev_index = 1;
152662306a36Sopenharmony_ci	req->header.dev_index = dev_index;
152762306a36Sopenharmony_ci}
152862306a36Sopenharmony_cistatic inline void
152962306a36Sopenharmony_ciethtool_features_get_req_dump_set_header_dev_name(struct ethtool_features_get_req_dump *req,
153062306a36Sopenharmony_ci						  const char *dev_name)
153162306a36Sopenharmony_ci{
153262306a36Sopenharmony_ci	free(req->header.dev_name);
153362306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
153462306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
153562306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
153662306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
153762306a36Sopenharmony_ci}
153862306a36Sopenharmony_cistatic inline void
153962306a36Sopenharmony_ciethtool_features_get_req_dump_set_header_flags(struct ethtool_features_get_req_dump *req,
154062306a36Sopenharmony_ci					       __u32 flags)
154162306a36Sopenharmony_ci{
154262306a36Sopenharmony_ci	req->_present.header = 1;
154362306a36Sopenharmony_ci	req->header._present.flags = 1;
154462306a36Sopenharmony_ci	req->header.flags = flags;
154562306a36Sopenharmony_ci}
154662306a36Sopenharmony_ci
154762306a36Sopenharmony_cistruct ethtool_features_get_list {
154862306a36Sopenharmony_ci	struct ethtool_features_get_list *next;
154962306a36Sopenharmony_ci	struct ethtool_features_get_rsp obj __attribute__ ((aligned (8)));
155062306a36Sopenharmony_ci};
155162306a36Sopenharmony_ci
155262306a36Sopenharmony_civoid ethtool_features_get_list_free(struct ethtool_features_get_list *rsp);
155362306a36Sopenharmony_ci
155462306a36Sopenharmony_cistruct ethtool_features_get_list *
155562306a36Sopenharmony_ciethtool_features_get_dump(struct ynl_sock *ys,
155662306a36Sopenharmony_ci			  struct ethtool_features_get_req_dump *req);
155762306a36Sopenharmony_ci
155862306a36Sopenharmony_ci/* ETHTOOL_MSG_FEATURES_GET - notify */
155962306a36Sopenharmony_cistruct ethtool_features_get_ntf {
156062306a36Sopenharmony_ci	__u16 family;
156162306a36Sopenharmony_ci	__u8 cmd;
156262306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
156362306a36Sopenharmony_ci	void (*free)(struct ethtool_features_get_ntf *ntf);
156462306a36Sopenharmony_ci	struct ethtool_features_get_rsp obj __attribute__ ((aligned (8)));
156562306a36Sopenharmony_ci};
156662306a36Sopenharmony_ci
156762306a36Sopenharmony_civoid ethtool_features_get_ntf_free(struct ethtool_features_get_ntf *rsp);
156862306a36Sopenharmony_ci
156962306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_FEATURES_SET ============== */
157062306a36Sopenharmony_ci/* ETHTOOL_MSG_FEATURES_SET - do */
157162306a36Sopenharmony_cistruct ethtool_features_set_req {
157262306a36Sopenharmony_ci	struct {
157362306a36Sopenharmony_ci		__u32 header:1;
157462306a36Sopenharmony_ci		__u32 hw:1;
157562306a36Sopenharmony_ci		__u32 wanted:1;
157662306a36Sopenharmony_ci		__u32 active:1;
157762306a36Sopenharmony_ci		__u32 nochange:1;
157862306a36Sopenharmony_ci	} _present;
157962306a36Sopenharmony_ci
158062306a36Sopenharmony_ci	struct ethtool_header header;
158162306a36Sopenharmony_ci	struct ethtool_bitset hw;
158262306a36Sopenharmony_ci	struct ethtool_bitset wanted;
158362306a36Sopenharmony_ci	struct ethtool_bitset active;
158462306a36Sopenharmony_ci	struct ethtool_bitset nochange;
158562306a36Sopenharmony_ci};
158662306a36Sopenharmony_ci
158762306a36Sopenharmony_cistatic inline struct ethtool_features_set_req *
158862306a36Sopenharmony_ciethtool_features_set_req_alloc(void)
158962306a36Sopenharmony_ci{
159062306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_features_set_req));
159162306a36Sopenharmony_ci}
159262306a36Sopenharmony_civoid ethtool_features_set_req_free(struct ethtool_features_set_req *req);
159362306a36Sopenharmony_ci
159462306a36Sopenharmony_cistatic inline void
159562306a36Sopenharmony_ciethtool_features_set_req_set_header_dev_index(struct ethtool_features_set_req *req,
159662306a36Sopenharmony_ci					      __u32 dev_index)
159762306a36Sopenharmony_ci{
159862306a36Sopenharmony_ci	req->_present.header = 1;
159962306a36Sopenharmony_ci	req->header._present.dev_index = 1;
160062306a36Sopenharmony_ci	req->header.dev_index = dev_index;
160162306a36Sopenharmony_ci}
160262306a36Sopenharmony_cistatic inline void
160362306a36Sopenharmony_ciethtool_features_set_req_set_header_dev_name(struct ethtool_features_set_req *req,
160462306a36Sopenharmony_ci					     const char *dev_name)
160562306a36Sopenharmony_ci{
160662306a36Sopenharmony_ci	free(req->header.dev_name);
160762306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
160862306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
160962306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
161062306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
161162306a36Sopenharmony_ci}
161262306a36Sopenharmony_cistatic inline void
161362306a36Sopenharmony_ciethtool_features_set_req_set_header_flags(struct ethtool_features_set_req *req,
161462306a36Sopenharmony_ci					  __u32 flags)
161562306a36Sopenharmony_ci{
161662306a36Sopenharmony_ci	req->_present.header = 1;
161762306a36Sopenharmony_ci	req->header._present.flags = 1;
161862306a36Sopenharmony_ci	req->header.flags = flags;
161962306a36Sopenharmony_ci}
162062306a36Sopenharmony_cistatic inline void
162162306a36Sopenharmony_ciethtool_features_set_req_set_hw_nomask(struct ethtool_features_set_req *req)
162262306a36Sopenharmony_ci{
162362306a36Sopenharmony_ci	req->_present.hw = 1;
162462306a36Sopenharmony_ci	req->hw._present.nomask = 1;
162562306a36Sopenharmony_ci}
162662306a36Sopenharmony_cistatic inline void
162762306a36Sopenharmony_ciethtool_features_set_req_set_hw_size(struct ethtool_features_set_req *req,
162862306a36Sopenharmony_ci				     __u32 size)
162962306a36Sopenharmony_ci{
163062306a36Sopenharmony_ci	req->_present.hw = 1;
163162306a36Sopenharmony_ci	req->hw._present.size = 1;
163262306a36Sopenharmony_ci	req->hw.size = size;
163362306a36Sopenharmony_ci}
163462306a36Sopenharmony_cistatic inline void
163562306a36Sopenharmony_ci__ethtool_features_set_req_set_hw_bits_bit(struct ethtool_features_set_req *req,
163662306a36Sopenharmony_ci					   struct ethtool_bitset_bit *bit,
163762306a36Sopenharmony_ci					   unsigned int n_bit)
163862306a36Sopenharmony_ci{
163962306a36Sopenharmony_ci	free(req->hw.bits.bit);
164062306a36Sopenharmony_ci	req->hw.bits.bit = bit;
164162306a36Sopenharmony_ci	req->hw.bits.n_bit = n_bit;
164262306a36Sopenharmony_ci}
164362306a36Sopenharmony_cistatic inline void
164462306a36Sopenharmony_ciethtool_features_set_req_set_wanted_nomask(struct ethtool_features_set_req *req)
164562306a36Sopenharmony_ci{
164662306a36Sopenharmony_ci	req->_present.wanted = 1;
164762306a36Sopenharmony_ci	req->wanted._present.nomask = 1;
164862306a36Sopenharmony_ci}
164962306a36Sopenharmony_cistatic inline void
165062306a36Sopenharmony_ciethtool_features_set_req_set_wanted_size(struct ethtool_features_set_req *req,
165162306a36Sopenharmony_ci					 __u32 size)
165262306a36Sopenharmony_ci{
165362306a36Sopenharmony_ci	req->_present.wanted = 1;
165462306a36Sopenharmony_ci	req->wanted._present.size = 1;
165562306a36Sopenharmony_ci	req->wanted.size = size;
165662306a36Sopenharmony_ci}
165762306a36Sopenharmony_cistatic inline void
165862306a36Sopenharmony_ci__ethtool_features_set_req_set_wanted_bits_bit(struct ethtool_features_set_req *req,
165962306a36Sopenharmony_ci					       struct ethtool_bitset_bit *bit,
166062306a36Sopenharmony_ci					       unsigned int n_bit)
166162306a36Sopenharmony_ci{
166262306a36Sopenharmony_ci	free(req->wanted.bits.bit);
166362306a36Sopenharmony_ci	req->wanted.bits.bit = bit;
166462306a36Sopenharmony_ci	req->wanted.bits.n_bit = n_bit;
166562306a36Sopenharmony_ci}
166662306a36Sopenharmony_cistatic inline void
166762306a36Sopenharmony_ciethtool_features_set_req_set_active_nomask(struct ethtool_features_set_req *req)
166862306a36Sopenharmony_ci{
166962306a36Sopenharmony_ci	req->_present.active = 1;
167062306a36Sopenharmony_ci	req->active._present.nomask = 1;
167162306a36Sopenharmony_ci}
167262306a36Sopenharmony_cistatic inline void
167362306a36Sopenharmony_ciethtool_features_set_req_set_active_size(struct ethtool_features_set_req *req,
167462306a36Sopenharmony_ci					 __u32 size)
167562306a36Sopenharmony_ci{
167662306a36Sopenharmony_ci	req->_present.active = 1;
167762306a36Sopenharmony_ci	req->active._present.size = 1;
167862306a36Sopenharmony_ci	req->active.size = size;
167962306a36Sopenharmony_ci}
168062306a36Sopenharmony_cistatic inline void
168162306a36Sopenharmony_ci__ethtool_features_set_req_set_active_bits_bit(struct ethtool_features_set_req *req,
168262306a36Sopenharmony_ci					       struct ethtool_bitset_bit *bit,
168362306a36Sopenharmony_ci					       unsigned int n_bit)
168462306a36Sopenharmony_ci{
168562306a36Sopenharmony_ci	free(req->active.bits.bit);
168662306a36Sopenharmony_ci	req->active.bits.bit = bit;
168762306a36Sopenharmony_ci	req->active.bits.n_bit = n_bit;
168862306a36Sopenharmony_ci}
168962306a36Sopenharmony_cistatic inline void
169062306a36Sopenharmony_ciethtool_features_set_req_set_nochange_nomask(struct ethtool_features_set_req *req)
169162306a36Sopenharmony_ci{
169262306a36Sopenharmony_ci	req->_present.nochange = 1;
169362306a36Sopenharmony_ci	req->nochange._present.nomask = 1;
169462306a36Sopenharmony_ci}
169562306a36Sopenharmony_cistatic inline void
169662306a36Sopenharmony_ciethtool_features_set_req_set_nochange_size(struct ethtool_features_set_req *req,
169762306a36Sopenharmony_ci					   __u32 size)
169862306a36Sopenharmony_ci{
169962306a36Sopenharmony_ci	req->_present.nochange = 1;
170062306a36Sopenharmony_ci	req->nochange._present.size = 1;
170162306a36Sopenharmony_ci	req->nochange.size = size;
170262306a36Sopenharmony_ci}
170362306a36Sopenharmony_cistatic inline void
170462306a36Sopenharmony_ci__ethtool_features_set_req_set_nochange_bits_bit(struct ethtool_features_set_req *req,
170562306a36Sopenharmony_ci						 struct ethtool_bitset_bit *bit,
170662306a36Sopenharmony_ci						 unsigned int n_bit)
170762306a36Sopenharmony_ci{
170862306a36Sopenharmony_ci	free(req->nochange.bits.bit);
170962306a36Sopenharmony_ci	req->nochange.bits.bit = bit;
171062306a36Sopenharmony_ci	req->nochange.bits.n_bit = n_bit;
171162306a36Sopenharmony_ci}
171262306a36Sopenharmony_ci
171362306a36Sopenharmony_cistruct ethtool_features_set_rsp {
171462306a36Sopenharmony_ci	struct {
171562306a36Sopenharmony_ci		__u32 header:1;
171662306a36Sopenharmony_ci		__u32 hw:1;
171762306a36Sopenharmony_ci		__u32 wanted:1;
171862306a36Sopenharmony_ci		__u32 active:1;
171962306a36Sopenharmony_ci		__u32 nochange:1;
172062306a36Sopenharmony_ci	} _present;
172162306a36Sopenharmony_ci
172262306a36Sopenharmony_ci	struct ethtool_header header;
172362306a36Sopenharmony_ci	struct ethtool_bitset hw;
172462306a36Sopenharmony_ci	struct ethtool_bitset wanted;
172562306a36Sopenharmony_ci	struct ethtool_bitset active;
172662306a36Sopenharmony_ci	struct ethtool_bitset nochange;
172762306a36Sopenharmony_ci};
172862306a36Sopenharmony_ci
172962306a36Sopenharmony_civoid ethtool_features_set_rsp_free(struct ethtool_features_set_rsp *rsp);
173062306a36Sopenharmony_ci
173162306a36Sopenharmony_ci/*
173262306a36Sopenharmony_ci * Set features.
173362306a36Sopenharmony_ci */
173462306a36Sopenharmony_cistruct ethtool_features_set_rsp *
173562306a36Sopenharmony_ciethtool_features_set(struct ynl_sock *ys, struct ethtool_features_set_req *req);
173662306a36Sopenharmony_ci
173762306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_PRIVFLAGS_GET ============== */
173862306a36Sopenharmony_ci/* ETHTOOL_MSG_PRIVFLAGS_GET - do */
173962306a36Sopenharmony_cistruct ethtool_privflags_get_req {
174062306a36Sopenharmony_ci	struct {
174162306a36Sopenharmony_ci		__u32 header:1;
174262306a36Sopenharmony_ci	} _present;
174362306a36Sopenharmony_ci
174462306a36Sopenharmony_ci	struct ethtool_header header;
174562306a36Sopenharmony_ci};
174662306a36Sopenharmony_ci
174762306a36Sopenharmony_cistatic inline struct ethtool_privflags_get_req *
174862306a36Sopenharmony_ciethtool_privflags_get_req_alloc(void)
174962306a36Sopenharmony_ci{
175062306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_privflags_get_req));
175162306a36Sopenharmony_ci}
175262306a36Sopenharmony_civoid ethtool_privflags_get_req_free(struct ethtool_privflags_get_req *req);
175362306a36Sopenharmony_ci
175462306a36Sopenharmony_cistatic inline void
175562306a36Sopenharmony_ciethtool_privflags_get_req_set_header_dev_index(struct ethtool_privflags_get_req *req,
175662306a36Sopenharmony_ci					       __u32 dev_index)
175762306a36Sopenharmony_ci{
175862306a36Sopenharmony_ci	req->_present.header = 1;
175962306a36Sopenharmony_ci	req->header._present.dev_index = 1;
176062306a36Sopenharmony_ci	req->header.dev_index = dev_index;
176162306a36Sopenharmony_ci}
176262306a36Sopenharmony_cistatic inline void
176362306a36Sopenharmony_ciethtool_privflags_get_req_set_header_dev_name(struct ethtool_privflags_get_req *req,
176462306a36Sopenharmony_ci					      const char *dev_name)
176562306a36Sopenharmony_ci{
176662306a36Sopenharmony_ci	free(req->header.dev_name);
176762306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
176862306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
176962306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
177062306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
177162306a36Sopenharmony_ci}
177262306a36Sopenharmony_cistatic inline void
177362306a36Sopenharmony_ciethtool_privflags_get_req_set_header_flags(struct ethtool_privflags_get_req *req,
177462306a36Sopenharmony_ci					   __u32 flags)
177562306a36Sopenharmony_ci{
177662306a36Sopenharmony_ci	req->_present.header = 1;
177762306a36Sopenharmony_ci	req->header._present.flags = 1;
177862306a36Sopenharmony_ci	req->header.flags = flags;
177962306a36Sopenharmony_ci}
178062306a36Sopenharmony_ci
178162306a36Sopenharmony_cistruct ethtool_privflags_get_rsp {
178262306a36Sopenharmony_ci	struct {
178362306a36Sopenharmony_ci		__u32 header:1;
178462306a36Sopenharmony_ci		__u32 flags:1;
178562306a36Sopenharmony_ci	} _present;
178662306a36Sopenharmony_ci
178762306a36Sopenharmony_ci	struct ethtool_header header;
178862306a36Sopenharmony_ci	struct ethtool_bitset flags;
178962306a36Sopenharmony_ci};
179062306a36Sopenharmony_ci
179162306a36Sopenharmony_civoid ethtool_privflags_get_rsp_free(struct ethtool_privflags_get_rsp *rsp);
179262306a36Sopenharmony_ci
179362306a36Sopenharmony_ci/*
179462306a36Sopenharmony_ci * Get device private flags.
179562306a36Sopenharmony_ci */
179662306a36Sopenharmony_cistruct ethtool_privflags_get_rsp *
179762306a36Sopenharmony_ciethtool_privflags_get(struct ynl_sock *ys,
179862306a36Sopenharmony_ci		      struct ethtool_privflags_get_req *req);
179962306a36Sopenharmony_ci
180062306a36Sopenharmony_ci/* ETHTOOL_MSG_PRIVFLAGS_GET - dump */
180162306a36Sopenharmony_cistruct ethtool_privflags_get_req_dump {
180262306a36Sopenharmony_ci	struct {
180362306a36Sopenharmony_ci		__u32 header:1;
180462306a36Sopenharmony_ci	} _present;
180562306a36Sopenharmony_ci
180662306a36Sopenharmony_ci	struct ethtool_header header;
180762306a36Sopenharmony_ci};
180862306a36Sopenharmony_ci
180962306a36Sopenharmony_cistatic inline struct ethtool_privflags_get_req_dump *
181062306a36Sopenharmony_ciethtool_privflags_get_req_dump_alloc(void)
181162306a36Sopenharmony_ci{
181262306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_privflags_get_req_dump));
181362306a36Sopenharmony_ci}
181462306a36Sopenharmony_civoid
181562306a36Sopenharmony_ciethtool_privflags_get_req_dump_free(struct ethtool_privflags_get_req_dump *req);
181662306a36Sopenharmony_ci
181762306a36Sopenharmony_cistatic inline void
181862306a36Sopenharmony_ciethtool_privflags_get_req_dump_set_header_dev_index(struct ethtool_privflags_get_req_dump *req,
181962306a36Sopenharmony_ci						    __u32 dev_index)
182062306a36Sopenharmony_ci{
182162306a36Sopenharmony_ci	req->_present.header = 1;
182262306a36Sopenharmony_ci	req->header._present.dev_index = 1;
182362306a36Sopenharmony_ci	req->header.dev_index = dev_index;
182462306a36Sopenharmony_ci}
182562306a36Sopenharmony_cistatic inline void
182662306a36Sopenharmony_ciethtool_privflags_get_req_dump_set_header_dev_name(struct ethtool_privflags_get_req_dump *req,
182762306a36Sopenharmony_ci						   const char *dev_name)
182862306a36Sopenharmony_ci{
182962306a36Sopenharmony_ci	free(req->header.dev_name);
183062306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
183162306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
183262306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
183362306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
183462306a36Sopenharmony_ci}
183562306a36Sopenharmony_cistatic inline void
183662306a36Sopenharmony_ciethtool_privflags_get_req_dump_set_header_flags(struct ethtool_privflags_get_req_dump *req,
183762306a36Sopenharmony_ci						__u32 flags)
183862306a36Sopenharmony_ci{
183962306a36Sopenharmony_ci	req->_present.header = 1;
184062306a36Sopenharmony_ci	req->header._present.flags = 1;
184162306a36Sopenharmony_ci	req->header.flags = flags;
184262306a36Sopenharmony_ci}
184362306a36Sopenharmony_ci
184462306a36Sopenharmony_cistruct ethtool_privflags_get_list {
184562306a36Sopenharmony_ci	struct ethtool_privflags_get_list *next;
184662306a36Sopenharmony_ci	struct ethtool_privflags_get_rsp obj __attribute__ ((aligned (8)));
184762306a36Sopenharmony_ci};
184862306a36Sopenharmony_ci
184962306a36Sopenharmony_civoid ethtool_privflags_get_list_free(struct ethtool_privflags_get_list *rsp);
185062306a36Sopenharmony_ci
185162306a36Sopenharmony_cistruct ethtool_privflags_get_list *
185262306a36Sopenharmony_ciethtool_privflags_get_dump(struct ynl_sock *ys,
185362306a36Sopenharmony_ci			   struct ethtool_privflags_get_req_dump *req);
185462306a36Sopenharmony_ci
185562306a36Sopenharmony_ci/* ETHTOOL_MSG_PRIVFLAGS_GET - notify */
185662306a36Sopenharmony_cistruct ethtool_privflags_get_ntf {
185762306a36Sopenharmony_ci	__u16 family;
185862306a36Sopenharmony_ci	__u8 cmd;
185962306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
186062306a36Sopenharmony_ci	void (*free)(struct ethtool_privflags_get_ntf *ntf);
186162306a36Sopenharmony_ci	struct ethtool_privflags_get_rsp obj __attribute__ ((aligned (8)));
186262306a36Sopenharmony_ci};
186362306a36Sopenharmony_ci
186462306a36Sopenharmony_civoid ethtool_privflags_get_ntf_free(struct ethtool_privflags_get_ntf *rsp);
186562306a36Sopenharmony_ci
186662306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_PRIVFLAGS_SET ============== */
186762306a36Sopenharmony_ci/* ETHTOOL_MSG_PRIVFLAGS_SET - do */
186862306a36Sopenharmony_cistruct ethtool_privflags_set_req {
186962306a36Sopenharmony_ci	struct {
187062306a36Sopenharmony_ci		__u32 header:1;
187162306a36Sopenharmony_ci		__u32 flags:1;
187262306a36Sopenharmony_ci	} _present;
187362306a36Sopenharmony_ci
187462306a36Sopenharmony_ci	struct ethtool_header header;
187562306a36Sopenharmony_ci	struct ethtool_bitset flags;
187662306a36Sopenharmony_ci};
187762306a36Sopenharmony_ci
187862306a36Sopenharmony_cistatic inline struct ethtool_privflags_set_req *
187962306a36Sopenharmony_ciethtool_privflags_set_req_alloc(void)
188062306a36Sopenharmony_ci{
188162306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_privflags_set_req));
188262306a36Sopenharmony_ci}
188362306a36Sopenharmony_civoid ethtool_privflags_set_req_free(struct ethtool_privflags_set_req *req);
188462306a36Sopenharmony_ci
188562306a36Sopenharmony_cistatic inline void
188662306a36Sopenharmony_ciethtool_privflags_set_req_set_header_dev_index(struct ethtool_privflags_set_req *req,
188762306a36Sopenharmony_ci					       __u32 dev_index)
188862306a36Sopenharmony_ci{
188962306a36Sopenharmony_ci	req->_present.header = 1;
189062306a36Sopenharmony_ci	req->header._present.dev_index = 1;
189162306a36Sopenharmony_ci	req->header.dev_index = dev_index;
189262306a36Sopenharmony_ci}
189362306a36Sopenharmony_cistatic inline void
189462306a36Sopenharmony_ciethtool_privflags_set_req_set_header_dev_name(struct ethtool_privflags_set_req *req,
189562306a36Sopenharmony_ci					      const char *dev_name)
189662306a36Sopenharmony_ci{
189762306a36Sopenharmony_ci	free(req->header.dev_name);
189862306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
189962306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
190062306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
190162306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
190262306a36Sopenharmony_ci}
190362306a36Sopenharmony_cistatic inline void
190462306a36Sopenharmony_ciethtool_privflags_set_req_set_header_flags(struct ethtool_privflags_set_req *req,
190562306a36Sopenharmony_ci					   __u32 flags)
190662306a36Sopenharmony_ci{
190762306a36Sopenharmony_ci	req->_present.header = 1;
190862306a36Sopenharmony_ci	req->header._present.flags = 1;
190962306a36Sopenharmony_ci	req->header.flags = flags;
191062306a36Sopenharmony_ci}
191162306a36Sopenharmony_cistatic inline void
191262306a36Sopenharmony_ciethtool_privflags_set_req_set_flags_nomask(struct ethtool_privflags_set_req *req)
191362306a36Sopenharmony_ci{
191462306a36Sopenharmony_ci	req->_present.flags = 1;
191562306a36Sopenharmony_ci	req->flags._present.nomask = 1;
191662306a36Sopenharmony_ci}
191762306a36Sopenharmony_cistatic inline void
191862306a36Sopenharmony_ciethtool_privflags_set_req_set_flags_size(struct ethtool_privflags_set_req *req,
191962306a36Sopenharmony_ci					 __u32 size)
192062306a36Sopenharmony_ci{
192162306a36Sopenharmony_ci	req->_present.flags = 1;
192262306a36Sopenharmony_ci	req->flags._present.size = 1;
192362306a36Sopenharmony_ci	req->flags.size = size;
192462306a36Sopenharmony_ci}
192562306a36Sopenharmony_cistatic inline void
192662306a36Sopenharmony_ci__ethtool_privflags_set_req_set_flags_bits_bit(struct ethtool_privflags_set_req *req,
192762306a36Sopenharmony_ci					       struct ethtool_bitset_bit *bit,
192862306a36Sopenharmony_ci					       unsigned int n_bit)
192962306a36Sopenharmony_ci{
193062306a36Sopenharmony_ci	free(req->flags.bits.bit);
193162306a36Sopenharmony_ci	req->flags.bits.bit = bit;
193262306a36Sopenharmony_ci	req->flags.bits.n_bit = n_bit;
193362306a36Sopenharmony_ci}
193462306a36Sopenharmony_ci
193562306a36Sopenharmony_ci/*
193662306a36Sopenharmony_ci * Set device private flags.
193762306a36Sopenharmony_ci */
193862306a36Sopenharmony_ciint ethtool_privflags_set(struct ynl_sock *ys,
193962306a36Sopenharmony_ci			  struct ethtool_privflags_set_req *req);
194062306a36Sopenharmony_ci
194162306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_RINGS_GET ============== */
194262306a36Sopenharmony_ci/* ETHTOOL_MSG_RINGS_GET - do */
194362306a36Sopenharmony_cistruct ethtool_rings_get_req {
194462306a36Sopenharmony_ci	struct {
194562306a36Sopenharmony_ci		__u32 header:1;
194662306a36Sopenharmony_ci	} _present;
194762306a36Sopenharmony_ci
194862306a36Sopenharmony_ci	struct ethtool_header header;
194962306a36Sopenharmony_ci};
195062306a36Sopenharmony_ci
195162306a36Sopenharmony_cistatic inline struct ethtool_rings_get_req *ethtool_rings_get_req_alloc(void)
195262306a36Sopenharmony_ci{
195362306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_rings_get_req));
195462306a36Sopenharmony_ci}
195562306a36Sopenharmony_civoid ethtool_rings_get_req_free(struct ethtool_rings_get_req *req);
195662306a36Sopenharmony_ci
195762306a36Sopenharmony_cistatic inline void
195862306a36Sopenharmony_ciethtool_rings_get_req_set_header_dev_index(struct ethtool_rings_get_req *req,
195962306a36Sopenharmony_ci					   __u32 dev_index)
196062306a36Sopenharmony_ci{
196162306a36Sopenharmony_ci	req->_present.header = 1;
196262306a36Sopenharmony_ci	req->header._present.dev_index = 1;
196362306a36Sopenharmony_ci	req->header.dev_index = dev_index;
196462306a36Sopenharmony_ci}
196562306a36Sopenharmony_cistatic inline void
196662306a36Sopenharmony_ciethtool_rings_get_req_set_header_dev_name(struct ethtool_rings_get_req *req,
196762306a36Sopenharmony_ci					  const char *dev_name)
196862306a36Sopenharmony_ci{
196962306a36Sopenharmony_ci	free(req->header.dev_name);
197062306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
197162306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
197262306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
197362306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
197462306a36Sopenharmony_ci}
197562306a36Sopenharmony_cistatic inline void
197662306a36Sopenharmony_ciethtool_rings_get_req_set_header_flags(struct ethtool_rings_get_req *req,
197762306a36Sopenharmony_ci				       __u32 flags)
197862306a36Sopenharmony_ci{
197962306a36Sopenharmony_ci	req->_present.header = 1;
198062306a36Sopenharmony_ci	req->header._present.flags = 1;
198162306a36Sopenharmony_ci	req->header.flags = flags;
198262306a36Sopenharmony_ci}
198362306a36Sopenharmony_ci
198462306a36Sopenharmony_cistruct ethtool_rings_get_rsp {
198562306a36Sopenharmony_ci	struct {
198662306a36Sopenharmony_ci		__u32 header:1;
198762306a36Sopenharmony_ci		__u32 rx_max:1;
198862306a36Sopenharmony_ci		__u32 rx_mini_max:1;
198962306a36Sopenharmony_ci		__u32 rx_jumbo_max:1;
199062306a36Sopenharmony_ci		__u32 tx_max:1;
199162306a36Sopenharmony_ci		__u32 rx:1;
199262306a36Sopenharmony_ci		__u32 rx_mini:1;
199362306a36Sopenharmony_ci		__u32 rx_jumbo:1;
199462306a36Sopenharmony_ci		__u32 tx:1;
199562306a36Sopenharmony_ci		__u32 rx_buf_len:1;
199662306a36Sopenharmony_ci		__u32 tcp_data_split:1;
199762306a36Sopenharmony_ci		__u32 cqe_size:1;
199862306a36Sopenharmony_ci		__u32 tx_push:1;
199962306a36Sopenharmony_ci		__u32 rx_push:1;
200062306a36Sopenharmony_ci		__u32 tx_push_buf_len:1;
200162306a36Sopenharmony_ci		__u32 tx_push_buf_len_max:1;
200262306a36Sopenharmony_ci	} _present;
200362306a36Sopenharmony_ci
200462306a36Sopenharmony_ci	struct ethtool_header header;
200562306a36Sopenharmony_ci	__u32 rx_max;
200662306a36Sopenharmony_ci	__u32 rx_mini_max;
200762306a36Sopenharmony_ci	__u32 rx_jumbo_max;
200862306a36Sopenharmony_ci	__u32 tx_max;
200962306a36Sopenharmony_ci	__u32 rx;
201062306a36Sopenharmony_ci	__u32 rx_mini;
201162306a36Sopenharmony_ci	__u32 rx_jumbo;
201262306a36Sopenharmony_ci	__u32 tx;
201362306a36Sopenharmony_ci	__u32 rx_buf_len;
201462306a36Sopenharmony_ci	__u8 tcp_data_split;
201562306a36Sopenharmony_ci	__u32 cqe_size;
201662306a36Sopenharmony_ci	__u8 tx_push;
201762306a36Sopenharmony_ci	__u8 rx_push;
201862306a36Sopenharmony_ci	__u32 tx_push_buf_len;
201962306a36Sopenharmony_ci	__u32 tx_push_buf_len_max;
202062306a36Sopenharmony_ci};
202162306a36Sopenharmony_ci
202262306a36Sopenharmony_civoid ethtool_rings_get_rsp_free(struct ethtool_rings_get_rsp *rsp);
202362306a36Sopenharmony_ci
202462306a36Sopenharmony_ci/*
202562306a36Sopenharmony_ci * Get ring params.
202662306a36Sopenharmony_ci */
202762306a36Sopenharmony_cistruct ethtool_rings_get_rsp *
202862306a36Sopenharmony_ciethtool_rings_get(struct ynl_sock *ys, struct ethtool_rings_get_req *req);
202962306a36Sopenharmony_ci
203062306a36Sopenharmony_ci/* ETHTOOL_MSG_RINGS_GET - dump */
203162306a36Sopenharmony_cistruct ethtool_rings_get_req_dump {
203262306a36Sopenharmony_ci	struct {
203362306a36Sopenharmony_ci		__u32 header:1;
203462306a36Sopenharmony_ci	} _present;
203562306a36Sopenharmony_ci
203662306a36Sopenharmony_ci	struct ethtool_header header;
203762306a36Sopenharmony_ci};
203862306a36Sopenharmony_ci
203962306a36Sopenharmony_cistatic inline struct ethtool_rings_get_req_dump *
204062306a36Sopenharmony_ciethtool_rings_get_req_dump_alloc(void)
204162306a36Sopenharmony_ci{
204262306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_rings_get_req_dump));
204362306a36Sopenharmony_ci}
204462306a36Sopenharmony_civoid ethtool_rings_get_req_dump_free(struct ethtool_rings_get_req_dump *req);
204562306a36Sopenharmony_ci
204662306a36Sopenharmony_cistatic inline void
204762306a36Sopenharmony_ciethtool_rings_get_req_dump_set_header_dev_index(struct ethtool_rings_get_req_dump *req,
204862306a36Sopenharmony_ci						__u32 dev_index)
204962306a36Sopenharmony_ci{
205062306a36Sopenharmony_ci	req->_present.header = 1;
205162306a36Sopenharmony_ci	req->header._present.dev_index = 1;
205262306a36Sopenharmony_ci	req->header.dev_index = dev_index;
205362306a36Sopenharmony_ci}
205462306a36Sopenharmony_cistatic inline void
205562306a36Sopenharmony_ciethtool_rings_get_req_dump_set_header_dev_name(struct ethtool_rings_get_req_dump *req,
205662306a36Sopenharmony_ci					       const char *dev_name)
205762306a36Sopenharmony_ci{
205862306a36Sopenharmony_ci	free(req->header.dev_name);
205962306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
206062306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
206162306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
206262306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
206362306a36Sopenharmony_ci}
206462306a36Sopenharmony_cistatic inline void
206562306a36Sopenharmony_ciethtool_rings_get_req_dump_set_header_flags(struct ethtool_rings_get_req_dump *req,
206662306a36Sopenharmony_ci					    __u32 flags)
206762306a36Sopenharmony_ci{
206862306a36Sopenharmony_ci	req->_present.header = 1;
206962306a36Sopenharmony_ci	req->header._present.flags = 1;
207062306a36Sopenharmony_ci	req->header.flags = flags;
207162306a36Sopenharmony_ci}
207262306a36Sopenharmony_ci
207362306a36Sopenharmony_cistruct ethtool_rings_get_list {
207462306a36Sopenharmony_ci	struct ethtool_rings_get_list *next;
207562306a36Sopenharmony_ci	struct ethtool_rings_get_rsp obj __attribute__ ((aligned (8)));
207662306a36Sopenharmony_ci};
207762306a36Sopenharmony_ci
207862306a36Sopenharmony_civoid ethtool_rings_get_list_free(struct ethtool_rings_get_list *rsp);
207962306a36Sopenharmony_ci
208062306a36Sopenharmony_cistruct ethtool_rings_get_list *
208162306a36Sopenharmony_ciethtool_rings_get_dump(struct ynl_sock *ys,
208262306a36Sopenharmony_ci		       struct ethtool_rings_get_req_dump *req);
208362306a36Sopenharmony_ci
208462306a36Sopenharmony_ci/* ETHTOOL_MSG_RINGS_GET - notify */
208562306a36Sopenharmony_cistruct ethtool_rings_get_ntf {
208662306a36Sopenharmony_ci	__u16 family;
208762306a36Sopenharmony_ci	__u8 cmd;
208862306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
208962306a36Sopenharmony_ci	void (*free)(struct ethtool_rings_get_ntf *ntf);
209062306a36Sopenharmony_ci	struct ethtool_rings_get_rsp obj __attribute__ ((aligned (8)));
209162306a36Sopenharmony_ci};
209262306a36Sopenharmony_ci
209362306a36Sopenharmony_civoid ethtool_rings_get_ntf_free(struct ethtool_rings_get_ntf *rsp);
209462306a36Sopenharmony_ci
209562306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_RINGS_SET ============== */
209662306a36Sopenharmony_ci/* ETHTOOL_MSG_RINGS_SET - do */
209762306a36Sopenharmony_cistruct ethtool_rings_set_req {
209862306a36Sopenharmony_ci	struct {
209962306a36Sopenharmony_ci		__u32 header:1;
210062306a36Sopenharmony_ci		__u32 rx_max:1;
210162306a36Sopenharmony_ci		__u32 rx_mini_max:1;
210262306a36Sopenharmony_ci		__u32 rx_jumbo_max:1;
210362306a36Sopenharmony_ci		__u32 tx_max:1;
210462306a36Sopenharmony_ci		__u32 rx:1;
210562306a36Sopenharmony_ci		__u32 rx_mini:1;
210662306a36Sopenharmony_ci		__u32 rx_jumbo:1;
210762306a36Sopenharmony_ci		__u32 tx:1;
210862306a36Sopenharmony_ci		__u32 rx_buf_len:1;
210962306a36Sopenharmony_ci		__u32 tcp_data_split:1;
211062306a36Sopenharmony_ci		__u32 cqe_size:1;
211162306a36Sopenharmony_ci		__u32 tx_push:1;
211262306a36Sopenharmony_ci		__u32 rx_push:1;
211362306a36Sopenharmony_ci		__u32 tx_push_buf_len:1;
211462306a36Sopenharmony_ci		__u32 tx_push_buf_len_max:1;
211562306a36Sopenharmony_ci	} _present;
211662306a36Sopenharmony_ci
211762306a36Sopenharmony_ci	struct ethtool_header header;
211862306a36Sopenharmony_ci	__u32 rx_max;
211962306a36Sopenharmony_ci	__u32 rx_mini_max;
212062306a36Sopenharmony_ci	__u32 rx_jumbo_max;
212162306a36Sopenharmony_ci	__u32 tx_max;
212262306a36Sopenharmony_ci	__u32 rx;
212362306a36Sopenharmony_ci	__u32 rx_mini;
212462306a36Sopenharmony_ci	__u32 rx_jumbo;
212562306a36Sopenharmony_ci	__u32 tx;
212662306a36Sopenharmony_ci	__u32 rx_buf_len;
212762306a36Sopenharmony_ci	__u8 tcp_data_split;
212862306a36Sopenharmony_ci	__u32 cqe_size;
212962306a36Sopenharmony_ci	__u8 tx_push;
213062306a36Sopenharmony_ci	__u8 rx_push;
213162306a36Sopenharmony_ci	__u32 tx_push_buf_len;
213262306a36Sopenharmony_ci	__u32 tx_push_buf_len_max;
213362306a36Sopenharmony_ci};
213462306a36Sopenharmony_ci
213562306a36Sopenharmony_cistatic inline struct ethtool_rings_set_req *ethtool_rings_set_req_alloc(void)
213662306a36Sopenharmony_ci{
213762306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_rings_set_req));
213862306a36Sopenharmony_ci}
213962306a36Sopenharmony_civoid ethtool_rings_set_req_free(struct ethtool_rings_set_req *req);
214062306a36Sopenharmony_ci
214162306a36Sopenharmony_cistatic inline void
214262306a36Sopenharmony_ciethtool_rings_set_req_set_header_dev_index(struct ethtool_rings_set_req *req,
214362306a36Sopenharmony_ci					   __u32 dev_index)
214462306a36Sopenharmony_ci{
214562306a36Sopenharmony_ci	req->_present.header = 1;
214662306a36Sopenharmony_ci	req->header._present.dev_index = 1;
214762306a36Sopenharmony_ci	req->header.dev_index = dev_index;
214862306a36Sopenharmony_ci}
214962306a36Sopenharmony_cistatic inline void
215062306a36Sopenharmony_ciethtool_rings_set_req_set_header_dev_name(struct ethtool_rings_set_req *req,
215162306a36Sopenharmony_ci					  const char *dev_name)
215262306a36Sopenharmony_ci{
215362306a36Sopenharmony_ci	free(req->header.dev_name);
215462306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
215562306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
215662306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
215762306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
215862306a36Sopenharmony_ci}
215962306a36Sopenharmony_cistatic inline void
216062306a36Sopenharmony_ciethtool_rings_set_req_set_header_flags(struct ethtool_rings_set_req *req,
216162306a36Sopenharmony_ci				       __u32 flags)
216262306a36Sopenharmony_ci{
216362306a36Sopenharmony_ci	req->_present.header = 1;
216462306a36Sopenharmony_ci	req->header._present.flags = 1;
216562306a36Sopenharmony_ci	req->header.flags = flags;
216662306a36Sopenharmony_ci}
216762306a36Sopenharmony_cistatic inline void
216862306a36Sopenharmony_ciethtool_rings_set_req_set_rx_max(struct ethtool_rings_set_req *req,
216962306a36Sopenharmony_ci				 __u32 rx_max)
217062306a36Sopenharmony_ci{
217162306a36Sopenharmony_ci	req->_present.rx_max = 1;
217262306a36Sopenharmony_ci	req->rx_max = rx_max;
217362306a36Sopenharmony_ci}
217462306a36Sopenharmony_cistatic inline void
217562306a36Sopenharmony_ciethtool_rings_set_req_set_rx_mini_max(struct ethtool_rings_set_req *req,
217662306a36Sopenharmony_ci				      __u32 rx_mini_max)
217762306a36Sopenharmony_ci{
217862306a36Sopenharmony_ci	req->_present.rx_mini_max = 1;
217962306a36Sopenharmony_ci	req->rx_mini_max = rx_mini_max;
218062306a36Sopenharmony_ci}
218162306a36Sopenharmony_cistatic inline void
218262306a36Sopenharmony_ciethtool_rings_set_req_set_rx_jumbo_max(struct ethtool_rings_set_req *req,
218362306a36Sopenharmony_ci				       __u32 rx_jumbo_max)
218462306a36Sopenharmony_ci{
218562306a36Sopenharmony_ci	req->_present.rx_jumbo_max = 1;
218662306a36Sopenharmony_ci	req->rx_jumbo_max = rx_jumbo_max;
218762306a36Sopenharmony_ci}
218862306a36Sopenharmony_cistatic inline void
218962306a36Sopenharmony_ciethtool_rings_set_req_set_tx_max(struct ethtool_rings_set_req *req,
219062306a36Sopenharmony_ci				 __u32 tx_max)
219162306a36Sopenharmony_ci{
219262306a36Sopenharmony_ci	req->_present.tx_max = 1;
219362306a36Sopenharmony_ci	req->tx_max = tx_max;
219462306a36Sopenharmony_ci}
219562306a36Sopenharmony_cistatic inline void
219662306a36Sopenharmony_ciethtool_rings_set_req_set_rx(struct ethtool_rings_set_req *req, __u32 rx)
219762306a36Sopenharmony_ci{
219862306a36Sopenharmony_ci	req->_present.rx = 1;
219962306a36Sopenharmony_ci	req->rx = rx;
220062306a36Sopenharmony_ci}
220162306a36Sopenharmony_cistatic inline void
220262306a36Sopenharmony_ciethtool_rings_set_req_set_rx_mini(struct ethtool_rings_set_req *req,
220362306a36Sopenharmony_ci				  __u32 rx_mini)
220462306a36Sopenharmony_ci{
220562306a36Sopenharmony_ci	req->_present.rx_mini = 1;
220662306a36Sopenharmony_ci	req->rx_mini = rx_mini;
220762306a36Sopenharmony_ci}
220862306a36Sopenharmony_cistatic inline void
220962306a36Sopenharmony_ciethtool_rings_set_req_set_rx_jumbo(struct ethtool_rings_set_req *req,
221062306a36Sopenharmony_ci				   __u32 rx_jumbo)
221162306a36Sopenharmony_ci{
221262306a36Sopenharmony_ci	req->_present.rx_jumbo = 1;
221362306a36Sopenharmony_ci	req->rx_jumbo = rx_jumbo;
221462306a36Sopenharmony_ci}
221562306a36Sopenharmony_cistatic inline void
221662306a36Sopenharmony_ciethtool_rings_set_req_set_tx(struct ethtool_rings_set_req *req, __u32 tx)
221762306a36Sopenharmony_ci{
221862306a36Sopenharmony_ci	req->_present.tx = 1;
221962306a36Sopenharmony_ci	req->tx = tx;
222062306a36Sopenharmony_ci}
222162306a36Sopenharmony_cistatic inline void
222262306a36Sopenharmony_ciethtool_rings_set_req_set_rx_buf_len(struct ethtool_rings_set_req *req,
222362306a36Sopenharmony_ci				     __u32 rx_buf_len)
222462306a36Sopenharmony_ci{
222562306a36Sopenharmony_ci	req->_present.rx_buf_len = 1;
222662306a36Sopenharmony_ci	req->rx_buf_len = rx_buf_len;
222762306a36Sopenharmony_ci}
222862306a36Sopenharmony_cistatic inline void
222962306a36Sopenharmony_ciethtool_rings_set_req_set_tcp_data_split(struct ethtool_rings_set_req *req,
223062306a36Sopenharmony_ci					 __u8 tcp_data_split)
223162306a36Sopenharmony_ci{
223262306a36Sopenharmony_ci	req->_present.tcp_data_split = 1;
223362306a36Sopenharmony_ci	req->tcp_data_split = tcp_data_split;
223462306a36Sopenharmony_ci}
223562306a36Sopenharmony_cistatic inline void
223662306a36Sopenharmony_ciethtool_rings_set_req_set_cqe_size(struct ethtool_rings_set_req *req,
223762306a36Sopenharmony_ci				   __u32 cqe_size)
223862306a36Sopenharmony_ci{
223962306a36Sopenharmony_ci	req->_present.cqe_size = 1;
224062306a36Sopenharmony_ci	req->cqe_size = cqe_size;
224162306a36Sopenharmony_ci}
224262306a36Sopenharmony_cistatic inline void
224362306a36Sopenharmony_ciethtool_rings_set_req_set_tx_push(struct ethtool_rings_set_req *req,
224462306a36Sopenharmony_ci				  __u8 tx_push)
224562306a36Sopenharmony_ci{
224662306a36Sopenharmony_ci	req->_present.tx_push = 1;
224762306a36Sopenharmony_ci	req->tx_push = tx_push;
224862306a36Sopenharmony_ci}
224962306a36Sopenharmony_cistatic inline void
225062306a36Sopenharmony_ciethtool_rings_set_req_set_rx_push(struct ethtool_rings_set_req *req,
225162306a36Sopenharmony_ci				  __u8 rx_push)
225262306a36Sopenharmony_ci{
225362306a36Sopenharmony_ci	req->_present.rx_push = 1;
225462306a36Sopenharmony_ci	req->rx_push = rx_push;
225562306a36Sopenharmony_ci}
225662306a36Sopenharmony_cistatic inline void
225762306a36Sopenharmony_ciethtool_rings_set_req_set_tx_push_buf_len(struct ethtool_rings_set_req *req,
225862306a36Sopenharmony_ci					  __u32 tx_push_buf_len)
225962306a36Sopenharmony_ci{
226062306a36Sopenharmony_ci	req->_present.tx_push_buf_len = 1;
226162306a36Sopenharmony_ci	req->tx_push_buf_len = tx_push_buf_len;
226262306a36Sopenharmony_ci}
226362306a36Sopenharmony_cistatic inline void
226462306a36Sopenharmony_ciethtool_rings_set_req_set_tx_push_buf_len_max(struct ethtool_rings_set_req *req,
226562306a36Sopenharmony_ci					      __u32 tx_push_buf_len_max)
226662306a36Sopenharmony_ci{
226762306a36Sopenharmony_ci	req->_present.tx_push_buf_len_max = 1;
226862306a36Sopenharmony_ci	req->tx_push_buf_len_max = tx_push_buf_len_max;
226962306a36Sopenharmony_ci}
227062306a36Sopenharmony_ci
227162306a36Sopenharmony_ci/*
227262306a36Sopenharmony_ci * Set ring params.
227362306a36Sopenharmony_ci */
227462306a36Sopenharmony_ciint ethtool_rings_set(struct ynl_sock *ys, struct ethtool_rings_set_req *req);
227562306a36Sopenharmony_ci
227662306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_CHANNELS_GET ============== */
227762306a36Sopenharmony_ci/* ETHTOOL_MSG_CHANNELS_GET - do */
227862306a36Sopenharmony_cistruct ethtool_channels_get_req {
227962306a36Sopenharmony_ci	struct {
228062306a36Sopenharmony_ci		__u32 header:1;
228162306a36Sopenharmony_ci	} _present;
228262306a36Sopenharmony_ci
228362306a36Sopenharmony_ci	struct ethtool_header header;
228462306a36Sopenharmony_ci};
228562306a36Sopenharmony_ci
228662306a36Sopenharmony_cistatic inline struct ethtool_channels_get_req *
228762306a36Sopenharmony_ciethtool_channels_get_req_alloc(void)
228862306a36Sopenharmony_ci{
228962306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_channels_get_req));
229062306a36Sopenharmony_ci}
229162306a36Sopenharmony_civoid ethtool_channels_get_req_free(struct ethtool_channels_get_req *req);
229262306a36Sopenharmony_ci
229362306a36Sopenharmony_cistatic inline void
229462306a36Sopenharmony_ciethtool_channels_get_req_set_header_dev_index(struct ethtool_channels_get_req *req,
229562306a36Sopenharmony_ci					      __u32 dev_index)
229662306a36Sopenharmony_ci{
229762306a36Sopenharmony_ci	req->_present.header = 1;
229862306a36Sopenharmony_ci	req->header._present.dev_index = 1;
229962306a36Sopenharmony_ci	req->header.dev_index = dev_index;
230062306a36Sopenharmony_ci}
230162306a36Sopenharmony_cistatic inline void
230262306a36Sopenharmony_ciethtool_channels_get_req_set_header_dev_name(struct ethtool_channels_get_req *req,
230362306a36Sopenharmony_ci					     const char *dev_name)
230462306a36Sopenharmony_ci{
230562306a36Sopenharmony_ci	free(req->header.dev_name);
230662306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
230762306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
230862306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
230962306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
231062306a36Sopenharmony_ci}
231162306a36Sopenharmony_cistatic inline void
231262306a36Sopenharmony_ciethtool_channels_get_req_set_header_flags(struct ethtool_channels_get_req *req,
231362306a36Sopenharmony_ci					  __u32 flags)
231462306a36Sopenharmony_ci{
231562306a36Sopenharmony_ci	req->_present.header = 1;
231662306a36Sopenharmony_ci	req->header._present.flags = 1;
231762306a36Sopenharmony_ci	req->header.flags = flags;
231862306a36Sopenharmony_ci}
231962306a36Sopenharmony_ci
232062306a36Sopenharmony_cistruct ethtool_channels_get_rsp {
232162306a36Sopenharmony_ci	struct {
232262306a36Sopenharmony_ci		__u32 header:1;
232362306a36Sopenharmony_ci		__u32 rx_max:1;
232462306a36Sopenharmony_ci		__u32 tx_max:1;
232562306a36Sopenharmony_ci		__u32 other_max:1;
232662306a36Sopenharmony_ci		__u32 combined_max:1;
232762306a36Sopenharmony_ci		__u32 rx_count:1;
232862306a36Sopenharmony_ci		__u32 tx_count:1;
232962306a36Sopenharmony_ci		__u32 other_count:1;
233062306a36Sopenharmony_ci		__u32 combined_count:1;
233162306a36Sopenharmony_ci	} _present;
233262306a36Sopenharmony_ci
233362306a36Sopenharmony_ci	struct ethtool_header header;
233462306a36Sopenharmony_ci	__u32 rx_max;
233562306a36Sopenharmony_ci	__u32 tx_max;
233662306a36Sopenharmony_ci	__u32 other_max;
233762306a36Sopenharmony_ci	__u32 combined_max;
233862306a36Sopenharmony_ci	__u32 rx_count;
233962306a36Sopenharmony_ci	__u32 tx_count;
234062306a36Sopenharmony_ci	__u32 other_count;
234162306a36Sopenharmony_ci	__u32 combined_count;
234262306a36Sopenharmony_ci};
234362306a36Sopenharmony_ci
234462306a36Sopenharmony_civoid ethtool_channels_get_rsp_free(struct ethtool_channels_get_rsp *rsp);
234562306a36Sopenharmony_ci
234662306a36Sopenharmony_ci/*
234762306a36Sopenharmony_ci * Get channel params.
234862306a36Sopenharmony_ci */
234962306a36Sopenharmony_cistruct ethtool_channels_get_rsp *
235062306a36Sopenharmony_ciethtool_channels_get(struct ynl_sock *ys, struct ethtool_channels_get_req *req);
235162306a36Sopenharmony_ci
235262306a36Sopenharmony_ci/* ETHTOOL_MSG_CHANNELS_GET - dump */
235362306a36Sopenharmony_cistruct ethtool_channels_get_req_dump {
235462306a36Sopenharmony_ci	struct {
235562306a36Sopenharmony_ci		__u32 header:1;
235662306a36Sopenharmony_ci	} _present;
235762306a36Sopenharmony_ci
235862306a36Sopenharmony_ci	struct ethtool_header header;
235962306a36Sopenharmony_ci};
236062306a36Sopenharmony_ci
236162306a36Sopenharmony_cistatic inline struct ethtool_channels_get_req_dump *
236262306a36Sopenharmony_ciethtool_channels_get_req_dump_alloc(void)
236362306a36Sopenharmony_ci{
236462306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_channels_get_req_dump));
236562306a36Sopenharmony_ci}
236662306a36Sopenharmony_civoid
236762306a36Sopenharmony_ciethtool_channels_get_req_dump_free(struct ethtool_channels_get_req_dump *req);
236862306a36Sopenharmony_ci
236962306a36Sopenharmony_cistatic inline void
237062306a36Sopenharmony_ciethtool_channels_get_req_dump_set_header_dev_index(struct ethtool_channels_get_req_dump *req,
237162306a36Sopenharmony_ci						   __u32 dev_index)
237262306a36Sopenharmony_ci{
237362306a36Sopenharmony_ci	req->_present.header = 1;
237462306a36Sopenharmony_ci	req->header._present.dev_index = 1;
237562306a36Sopenharmony_ci	req->header.dev_index = dev_index;
237662306a36Sopenharmony_ci}
237762306a36Sopenharmony_cistatic inline void
237862306a36Sopenharmony_ciethtool_channels_get_req_dump_set_header_dev_name(struct ethtool_channels_get_req_dump *req,
237962306a36Sopenharmony_ci						  const char *dev_name)
238062306a36Sopenharmony_ci{
238162306a36Sopenharmony_ci	free(req->header.dev_name);
238262306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
238362306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
238462306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
238562306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
238662306a36Sopenharmony_ci}
238762306a36Sopenharmony_cistatic inline void
238862306a36Sopenharmony_ciethtool_channels_get_req_dump_set_header_flags(struct ethtool_channels_get_req_dump *req,
238962306a36Sopenharmony_ci					       __u32 flags)
239062306a36Sopenharmony_ci{
239162306a36Sopenharmony_ci	req->_present.header = 1;
239262306a36Sopenharmony_ci	req->header._present.flags = 1;
239362306a36Sopenharmony_ci	req->header.flags = flags;
239462306a36Sopenharmony_ci}
239562306a36Sopenharmony_ci
239662306a36Sopenharmony_cistruct ethtool_channels_get_list {
239762306a36Sopenharmony_ci	struct ethtool_channels_get_list *next;
239862306a36Sopenharmony_ci	struct ethtool_channels_get_rsp obj __attribute__ ((aligned (8)));
239962306a36Sopenharmony_ci};
240062306a36Sopenharmony_ci
240162306a36Sopenharmony_civoid ethtool_channels_get_list_free(struct ethtool_channels_get_list *rsp);
240262306a36Sopenharmony_ci
240362306a36Sopenharmony_cistruct ethtool_channels_get_list *
240462306a36Sopenharmony_ciethtool_channels_get_dump(struct ynl_sock *ys,
240562306a36Sopenharmony_ci			  struct ethtool_channels_get_req_dump *req);
240662306a36Sopenharmony_ci
240762306a36Sopenharmony_ci/* ETHTOOL_MSG_CHANNELS_GET - notify */
240862306a36Sopenharmony_cistruct ethtool_channels_get_ntf {
240962306a36Sopenharmony_ci	__u16 family;
241062306a36Sopenharmony_ci	__u8 cmd;
241162306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
241262306a36Sopenharmony_ci	void (*free)(struct ethtool_channels_get_ntf *ntf);
241362306a36Sopenharmony_ci	struct ethtool_channels_get_rsp obj __attribute__ ((aligned (8)));
241462306a36Sopenharmony_ci};
241562306a36Sopenharmony_ci
241662306a36Sopenharmony_civoid ethtool_channels_get_ntf_free(struct ethtool_channels_get_ntf *rsp);
241762306a36Sopenharmony_ci
241862306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_CHANNELS_SET ============== */
241962306a36Sopenharmony_ci/* ETHTOOL_MSG_CHANNELS_SET - do */
242062306a36Sopenharmony_cistruct ethtool_channels_set_req {
242162306a36Sopenharmony_ci	struct {
242262306a36Sopenharmony_ci		__u32 header:1;
242362306a36Sopenharmony_ci		__u32 rx_max:1;
242462306a36Sopenharmony_ci		__u32 tx_max:1;
242562306a36Sopenharmony_ci		__u32 other_max:1;
242662306a36Sopenharmony_ci		__u32 combined_max:1;
242762306a36Sopenharmony_ci		__u32 rx_count:1;
242862306a36Sopenharmony_ci		__u32 tx_count:1;
242962306a36Sopenharmony_ci		__u32 other_count:1;
243062306a36Sopenharmony_ci		__u32 combined_count:1;
243162306a36Sopenharmony_ci	} _present;
243262306a36Sopenharmony_ci
243362306a36Sopenharmony_ci	struct ethtool_header header;
243462306a36Sopenharmony_ci	__u32 rx_max;
243562306a36Sopenharmony_ci	__u32 tx_max;
243662306a36Sopenharmony_ci	__u32 other_max;
243762306a36Sopenharmony_ci	__u32 combined_max;
243862306a36Sopenharmony_ci	__u32 rx_count;
243962306a36Sopenharmony_ci	__u32 tx_count;
244062306a36Sopenharmony_ci	__u32 other_count;
244162306a36Sopenharmony_ci	__u32 combined_count;
244262306a36Sopenharmony_ci};
244362306a36Sopenharmony_ci
244462306a36Sopenharmony_cistatic inline struct ethtool_channels_set_req *
244562306a36Sopenharmony_ciethtool_channels_set_req_alloc(void)
244662306a36Sopenharmony_ci{
244762306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_channels_set_req));
244862306a36Sopenharmony_ci}
244962306a36Sopenharmony_civoid ethtool_channels_set_req_free(struct ethtool_channels_set_req *req);
245062306a36Sopenharmony_ci
245162306a36Sopenharmony_cistatic inline void
245262306a36Sopenharmony_ciethtool_channels_set_req_set_header_dev_index(struct ethtool_channels_set_req *req,
245362306a36Sopenharmony_ci					      __u32 dev_index)
245462306a36Sopenharmony_ci{
245562306a36Sopenharmony_ci	req->_present.header = 1;
245662306a36Sopenharmony_ci	req->header._present.dev_index = 1;
245762306a36Sopenharmony_ci	req->header.dev_index = dev_index;
245862306a36Sopenharmony_ci}
245962306a36Sopenharmony_cistatic inline void
246062306a36Sopenharmony_ciethtool_channels_set_req_set_header_dev_name(struct ethtool_channels_set_req *req,
246162306a36Sopenharmony_ci					     const char *dev_name)
246262306a36Sopenharmony_ci{
246362306a36Sopenharmony_ci	free(req->header.dev_name);
246462306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
246562306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
246662306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
246762306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
246862306a36Sopenharmony_ci}
246962306a36Sopenharmony_cistatic inline void
247062306a36Sopenharmony_ciethtool_channels_set_req_set_header_flags(struct ethtool_channels_set_req *req,
247162306a36Sopenharmony_ci					  __u32 flags)
247262306a36Sopenharmony_ci{
247362306a36Sopenharmony_ci	req->_present.header = 1;
247462306a36Sopenharmony_ci	req->header._present.flags = 1;
247562306a36Sopenharmony_ci	req->header.flags = flags;
247662306a36Sopenharmony_ci}
247762306a36Sopenharmony_cistatic inline void
247862306a36Sopenharmony_ciethtool_channels_set_req_set_rx_max(struct ethtool_channels_set_req *req,
247962306a36Sopenharmony_ci				    __u32 rx_max)
248062306a36Sopenharmony_ci{
248162306a36Sopenharmony_ci	req->_present.rx_max = 1;
248262306a36Sopenharmony_ci	req->rx_max = rx_max;
248362306a36Sopenharmony_ci}
248462306a36Sopenharmony_cistatic inline void
248562306a36Sopenharmony_ciethtool_channels_set_req_set_tx_max(struct ethtool_channels_set_req *req,
248662306a36Sopenharmony_ci				    __u32 tx_max)
248762306a36Sopenharmony_ci{
248862306a36Sopenharmony_ci	req->_present.tx_max = 1;
248962306a36Sopenharmony_ci	req->tx_max = tx_max;
249062306a36Sopenharmony_ci}
249162306a36Sopenharmony_cistatic inline void
249262306a36Sopenharmony_ciethtool_channels_set_req_set_other_max(struct ethtool_channels_set_req *req,
249362306a36Sopenharmony_ci				       __u32 other_max)
249462306a36Sopenharmony_ci{
249562306a36Sopenharmony_ci	req->_present.other_max = 1;
249662306a36Sopenharmony_ci	req->other_max = other_max;
249762306a36Sopenharmony_ci}
249862306a36Sopenharmony_cistatic inline void
249962306a36Sopenharmony_ciethtool_channels_set_req_set_combined_max(struct ethtool_channels_set_req *req,
250062306a36Sopenharmony_ci					  __u32 combined_max)
250162306a36Sopenharmony_ci{
250262306a36Sopenharmony_ci	req->_present.combined_max = 1;
250362306a36Sopenharmony_ci	req->combined_max = combined_max;
250462306a36Sopenharmony_ci}
250562306a36Sopenharmony_cistatic inline void
250662306a36Sopenharmony_ciethtool_channels_set_req_set_rx_count(struct ethtool_channels_set_req *req,
250762306a36Sopenharmony_ci				      __u32 rx_count)
250862306a36Sopenharmony_ci{
250962306a36Sopenharmony_ci	req->_present.rx_count = 1;
251062306a36Sopenharmony_ci	req->rx_count = rx_count;
251162306a36Sopenharmony_ci}
251262306a36Sopenharmony_cistatic inline void
251362306a36Sopenharmony_ciethtool_channels_set_req_set_tx_count(struct ethtool_channels_set_req *req,
251462306a36Sopenharmony_ci				      __u32 tx_count)
251562306a36Sopenharmony_ci{
251662306a36Sopenharmony_ci	req->_present.tx_count = 1;
251762306a36Sopenharmony_ci	req->tx_count = tx_count;
251862306a36Sopenharmony_ci}
251962306a36Sopenharmony_cistatic inline void
252062306a36Sopenharmony_ciethtool_channels_set_req_set_other_count(struct ethtool_channels_set_req *req,
252162306a36Sopenharmony_ci					 __u32 other_count)
252262306a36Sopenharmony_ci{
252362306a36Sopenharmony_ci	req->_present.other_count = 1;
252462306a36Sopenharmony_ci	req->other_count = other_count;
252562306a36Sopenharmony_ci}
252662306a36Sopenharmony_cistatic inline void
252762306a36Sopenharmony_ciethtool_channels_set_req_set_combined_count(struct ethtool_channels_set_req *req,
252862306a36Sopenharmony_ci					    __u32 combined_count)
252962306a36Sopenharmony_ci{
253062306a36Sopenharmony_ci	req->_present.combined_count = 1;
253162306a36Sopenharmony_ci	req->combined_count = combined_count;
253262306a36Sopenharmony_ci}
253362306a36Sopenharmony_ci
253462306a36Sopenharmony_ci/*
253562306a36Sopenharmony_ci * Set channel params.
253662306a36Sopenharmony_ci */
253762306a36Sopenharmony_ciint ethtool_channels_set(struct ynl_sock *ys,
253862306a36Sopenharmony_ci			 struct ethtool_channels_set_req *req);
253962306a36Sopenharmony_ci
254062306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_COALESCE_GET ============== */
254162306a36Sopenharmony_ci/* ETHTOOL_MSG_COALESCE_GET - do */
254262306a36Sopenharmony_cistruct ethtool_coalesce_get_req {
254362306a36Sopenharmony_ci	struct {
254462306a36Sopenharmony_ci		__u32 header:1;
254562306a36Sopenharmony_ci	} _present;
254662306a36Sopenharmony_ci
254762306a36Sopenharmony_ci	struct ethtool_header header;
254862306a36Sopenharmony_ci};
254962306a36Sopenharmony_ci
255062306a36Sopenharmony_cistatic inline struct ethtool_coalesce_get_req *
255162306a36Sopenharmony_ciethtool_coalesce_get_req_alloc(void)
255262306a36Sopenharmony_ci{
255362306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_coalesce_get_req));
255462306a36Sopenharmony_ci}
255562306a36Sopenharmony_civoid ethtool_coalesce_get_req_free(struct ethtool_coalesce_get_req *req);
255662306a36Sopenharmony_ci
255762306a36Sopenharmony_cistatic inline void
255862306a36Sopenharmony_ciethtool_coalesce_get_req_set_header_dev_index(struct ethtool_coalesce_get_req *req,
255962306a36Sopenharmony_ci					      __u32 dev_index)
256062306a36Sopenharmony_ci{
256162306a36Sopenharmony_ci	req->_present.header = 1;
256262306a36Sopenharmony_ci	req->header._present.dev_index = 1;
256362306a36Sopenharmony_ci	req->header.dev_index = dev_index;
256462306a36Sopenharmony_ci}
256562306a36Sopenharmony_cistatic inline void
256662306a36Sopenharmony_ciethtool_coalesce_get_req_set_header_dev_name(struct ethtool_coalesce_get_req *req,
256762306a36Sopenharmony_ci					     const char *dev_name)
256862306a36Sopenharmony_ci{
256962306a36Sopenharmony_ci	free(req->header.dev_name);
257062306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
257162306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
257262306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
257362306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
257462306a36Sopenharmony_ci}
257562306a36Sopenharmony_cistatic inline void
257662306a36Sopenharmony_ciethtool_coalesce_get_req_set_header_flags(struct ethtool_coalesce_get_req *req,
257762306a36Sopenharmony_ci					  __u32 flags)
257862306a36Sopenharmony_ci{
257962306a36Sopenharmony_ci	req->_present.header = 1;
258062306a36Sopenharmony_ci	req->header._present.flags = 1;
258162306a36Sopenharmony_ci	req->header.flags = flags;
258262306a36Sopenharmony_ci}
258362306a36Sopenharmony_ci
258462306a36Sopenharmony_cistruct ethtool_coalesce_get_rsp {
258562306a36Sopenharmony_ci	struct {
258662306a36Sopenharmony_ci		__u32 header:1;
258762306a36Sopenharmony_ci		__u32 rx_usecs:1;
258862306a36Sopenharmony_ci		__u32 rx_max_frames:1;
258962306a36Sopenharmony_ci		__u32 rx_usecs_irq:1;
259062306a36Sopenharmony_ci		__u32 rx_max_frames_irq:1;
259162306a36Sopenharmony_ci		__u32 tx_usecs:1;
259262306a36Sopenharmony_ci		__u32 tx_max_frames:1;
259362306a36Sopenharmony_ci		__u32 tx_usecs_irq:1;
259462306a36Sopenharmony_ci		__u32 tx_max_frames_irq:1;
259562306a36Sopenharmony_ci		__u32 stats_block_usecs:1;
259662306a36Sopenharmony_ci		__u32 use_adaptive_rx:1;
259762306a36Sopenharmony_ci		__u32 use_adaptive_tx:1;
259862306a36Sopenharmony_ci		__u32 pkt_rate_low:1;
259962306a36Sopenharmony_ci		__u32 rx_usecs_low:1;
260062306a36Sopenharmony_ci		__u32 rx_max_frames_low:1;
260162306a36Sopenharmony_ci		__u32 tx_usecs_low:1;
260262306a36Sopenharmony_ci		__u32 tx_max_frames_low:1;
260362306a36Sopenharmony_ci		__u32 pkt_rate_high:1;
260462306a36Sopenharmony_ci		__u32 rx_usecs_high:1;
260562306a36Sopenharmony_ci		__u32 rx_max_frames_high:1;
260662306a36Sopenharmony_ci		__u32 tx_usecs_high:1;
260762306a36Sopenharmony_ci		__u32 tx_max_frames_high:1;
260862306a36Sopenharmony_ci		__u32 rate_sample_interval:1;
260962306a36Sopenharmony_ci		__u32 use_cqe_mode_tx:1;
261062306a36Sopenharmony_ci		__u32 use_cqe_mode_rx:1;
261162306a36Sopenharmony_ci		__u32 tx_aggr_max_bytes:1;
261262306a36Sopenharmony_ci		__u32 tx_aggr_max_frames:1;
261362306a36Sopenharmony_ci		__u32 tx_aggr_time_usecs:1;
261462306a36Sopenharmony_ci	} _present;
261562306a36Sopenharmony_ci
261662306a36Sopenharmony_ci	struct ethtool_header header;
261762306a36Sopenharmony_ci	__u32 rx_usecs;
261862306a36Sopenharmony_ci	__u32 rx_max_frames;
261962306a36Sopenharmony_ci	__u32 rx_usecs_irq;
262062306a36Sopenharmony_ci	__u32 rx_max_frames_irq;
262162306a36Sopenharmony_ci	__u32 tx_usecs;
262262306a36Sopenharmony_ci	__u32 tx_max_frames;
262362306a36Sopenharmony_ci	__u32 tx_usecs_irq;
262462306a36Sopenharmony_ci	__u32 tx_max_frames_irq;
262562306a36Sopenharmony_ci	__u32 stats_block_usecs;
262662306a36Sopenharmony_ci	__u8 use_adaptive_rx;
262762306a36Sopenharmony_ci	__u8 use_adaptive_tx;
262862306a36Sopenharmony_ci	__u32 pkt_rate_low;
262962306a36Sopenharmony_ci	__u32 rx_usecs_low;
263062306a36Sopenharmony_ci	__u32 rx_max_frames_low;
263162306a36Sopenharmony_ci	__u32 tx_usecs_low;
263262306a36Sopenharmony_ci	__u32 tx_max_frames_low;
263362306a36Sopenharmony_ci	__u32 pkt_rate_high;
263462306a36Sopenharmony_ci	__u32 rx_usecs_high;
263562306a36Sopenharmony_ci	__u32 rx_max_frames_high;
263662306a36Sopenharmony_ci	__u32 tx_usecs_high;
263762306a36Sopenharmony_ci	__u32 tx_max_frames_high;
263862306a36Sopenharmony_ci	__u32 rate_sample_interval;
263962306a36Sopenharmony_ci	__u8 use_cqe_mode_tx;
264062306a36Sopenharmony_ci	__u8 use_cqe_mode_rx;
264162306a36Sopenharmony_ci	__u32 tx_aggr_max_bytes;
264262306a36Sopenharmony_ci	__u32 tx_aggr_max_frames;
264362306a36Sopenharmony_ci	__u32 tx_aggr_time_usecs;
264462306a36Sopenharmony_ci};
264562306a36Sopenharmony_ci
264662306a36Sopenharmony_civoid ethtool_coalesce_get_rsp_free(struct ethtool_coalesce_get_rsp *rsp);
264762306a36Sopenharmony_ci
264862306a36Sopenharmony_ci/*
264962306a36Sopenharmony_ci * Get coalesce params.
265062306a36Sopenharmony_ci */
265162306a36Sopenharmony_cistruct ethtool_coalesce_get_rsp *
265262306a36Sopenharmony_ciethtool_coalesce_get(struct ynl_sock *ys, struct ethtool_coalesce_get_req *req);
265362306a36Sopenharmony_ci
265462306a36Sopenharmony_ci/* ETHTOOL_MSG_COALESCE_GET - dump */
265562306a36Sopenharmony_cistruct ethtool_coalesce_get_req_dump {
265662306a36Sopenharmony_ci	struct {
265762306a36Sopenharmony_ci		__u32 header:1;
265862306a36Sopenharmony_ci	} _present;
265962306a36Sopenharmony_ci
266062306a36Sopenharmony_ci	struct ethtool_header header;
266162306a36Sopenharmony_ci};
266262306a36Sopenharmony_ci
266362306a36Sopenharmony_cistatic inline struct ethtool_coalesce_get_req_dump *
266462306a36Sopenharmony_ciethtool_coalesce_get_req_dump_alloc(void)
266562306a36Sopenharmony_ci{
266662306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_coalesce_get_req_dump));
266762306a36Sopenharmony_ci}
266862306a36Sopenharmony_civoid
266962306a36Sopenharmony_ciethtool_coalesce_get_req_dump_free(struct ethtool_coalesce_get_req_dump *req);
267062306a36Sopenharmony_ci
267162306a36Sopenharmony_cistatic inline void
267262306a36Sopenharmony_ciethtool_coalesce_get_req_dump_set_header_dev_index(struct ethtool_coalesce_get_req_dump *req,
267362306a36Sopenharmony_ci						   __u32 dev_index)
267462306a36Sopenharmony_ci{
267562306a36Sopenharmony_ci	req->_present.header = 1;
267662306a36Sopenharmony_ci	req->header._present.dev_index = 1;
267762306a36Sopenharmony_ci	req->header.dev_index = dev_index;
267862306a36Sopenharmony_ci}
267962306a36Sopenharmony_cistatic inline void
268062306a36Sopenharmony_ciethtool_coalesce_get_req_dump_set_header_dev_name(struct ethtool_coalesce_get_req_dump *req,
268162306a36Sopenharmony_ci						  const char *dev_name)
268262306a36Sopenharmony_ci{
268362306a36Sopenharmony_ci	free(req->header.dev_name);
268462306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
268562306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
268662306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
268762306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
268862306a36Sopenharmony_ci}
268962306a36Sopenharmony_cistatic inline void
269062306a36Sopenharmony_ciethtool_coalesce_get_req_dump_set_header_flags(struct ethtool_coalesce_get_req_dump *req,
269162306a36Sopenharmony_ci					       __u32 flags)
269262306a36Sopenharmony_ci{
269362306a36Sopenharmony_ci	req->_present.header = 1;
269462306a36Sopenharmony_ci	req->header._present.flags = 1;
269562306a36Sopenharmony_ci	req->header.flags = flags;
269662306a36Sopenharmony_ci}
269762306a36Sopenharmony_ci
269862306a36Sopenharmony_cistruct ethtool_coalesce_get_list {
269962306a36Sopenharmony_ci	struct ethtool_coalesce_get_list *next;
270062306a36Sopenharmony_ci	struct ethtool_coalesce_get_rsp obj __attribute__ ((aligned (8)));
270162306a36Sopenharmony_ci};
270262306a36Sopenharmony_ci
270362306a36Sopenharmony_civoid ethtool_coalesce_get_list_free(struct ethtool_coalesce_get_list *rsp);
270462306a36Sopenharmony_ci
270562306a36Sopenharmony_cistruct ethtool_coalesce_get_list *
270662306a36Sopenharmony_ciethtool_coalesce_get_dump(struct ynl_sock *ys,
270762306a36Sopenharmony_ci			  struct ethtool_coalesce_get_req_dump *req);
270862306a36Sopenharmony_ci
270962306a36Sopenharmony_ci/* ETHTOOL_MSG_COALESCE_GET - notify */
271062306a36Sopenharmony_cistruct ethtool_coalesce_get_ntf {
271162306a36Sopenharmony_ci	__u16 family;
271262306a36Sopenharmony_ci	__u8 cmd;
271362306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
271462306a36Sopenharmony_ci	void (*free)(struct ethtool_coalesce_get_ntf *ntf);
271562306a36Sopenharmony_ci	struct ethtool_coalesce_get_rsp obj __attribute__ ((aligned (8)));
271662306a36Sopenharmony_ci};
271762306a36Sopenharmony_ci
271862306a36Sopenharmony_civoid ethtool_coalesce_get_ntf_free(struct ethtool_coalesce_get_ntf *rsp);
271962306a36Sopenharmony_ci
272062306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_COALESCE_SET ============== */
272162306a36Sopenharmony_ci/* ETHTOOL_MSG_COALESCE_SET - do */
272262306a36Sopenharmony_cistruct ethtool_coalesce_set_req {
272362306a36Sopenharmony_ci	struct {
272462306a36Sopenharmony_ci		__u32 header:1;
272562306a36Sopenharmony_ci		__u32 rx_usecs:1;
272662306a36Sopenharmony_ci		__u32 rx_max_frames:1;
272762306a36Sopenharmony_ci		__u32 rx_usecs_irq:1;
272862306a36Sopenharmony_ci		__u32 rx_max_frames_irq:1;
272962306a36Sopenharmony_ci		__u32 tx_usecs:1;
273062306a36Sopenharmony_ci		__u32 tx_max_frames:1;
273162306a36Sopenharmony_ci		__u32 tx_usecs_irq:1;
273262306a36Sopenharmony_ci		__u32 tx_max_frames_irq:1;
273362306a36Sopenharmony_ci		__u32 stats_block_usecs:1;
273462306a36Sopenharmony_ci		__u32 use_adaptive_rx:1;
273562306a36Sopenharmony_ci		__u32 use_adaptive_tx:1;
273662306a36Sopenharmony_ci		__u32 pkt_rate_low:1;
273762306a36Sopenharmony_ci		__u32 rx_usecs_low:1;
273862306a36Sopenharmony_ci		__u32 rx_max_frames_low:1;
273962306a36Sopenharmony_ci		__u32 tx_usecs_low:1;
274062306a36Sopenharmony_ci		__u32 tx_max_frames_low:1;
274162306a36Sopenharmony_ci		__u32 pkt_rate_high:1;
274262306a36Sopenharmony_ci		__u32 rx_usecs_high:1;
274362306a36Sopenharmony_ci		__u32 rx_max_frames_high:1;
274462306a36Sopenharmony_ci		__u32 tx_usecs_high:1;
274562306a36Sopenharmony_ci		__u32 tx_max_frames_high:1;
274662306a36Sopenharmony_ci		__u32 rate_sample_interval:1;
274762306a36Sopenharmony_ci		__u32 use_cqe_mode_tx:1;
274862306a36Sopenharmony_ci		__u32 use_cqe_mode_rx:1;
274962306a36Sopenharmony_ci		__u32 tx_aggr_max_bytes:1;
275062306a36Sopenharmony_ci		__u32 tx_aggr_max_frames:1;
275162306a36Sopenharmony_ci		__u32 tx_aggr_time_usecs:1;
275262306a36Sopenharmony_ci	} _present;
275362306a36Sopenharmony_ci
275462306a36Sopenharmony_ci	struct ethtool_header header;
275562306a36Sopenharmony_ci	__u32 rx_usecs;
275662306a36Sopenharmony_ci	__u32 rx_max_frames;
275762306a36Sopenharmony_ci	__u32 rx_usecs_irq;
275862306a36Sopenharmony_ci	__u32 rx_max_frames_irq;
275962306a36Sopenharmony_ci	__u32 tx_usecs;
276062306a36Sopenharmony_ci	__u32 tx_max_frames;
276162306a36Sopenharmony_ci	__u32 tx_usecs_irq;
276262306a36Sopenharmony_ci	__u32 tx_max_frames_irq;
276362306a36Sopenharmony_ci	__u32 stats_block_usecs;
276462306a36Sopenharmony_ci	__u8 use_adaptive_rx;
276562306a36Sopenharmony_ci	__u8 use_adaptive_tx;
276662306a36Sopenharmony_ci	__u32 pkt_rate_low;
276762306a36Sopenharmony_ci	__u32 rx_usecs_low;
276862306a36Sopenharmony_ci	__u32 rx_max_frames_low;
276962306a36Sopenharmony_ci	__u32 tx_usecs_low;
277062306a36Sopenharmony_ci	__u32 tx_max_frames_low;
277162306a36Sopenharmony_ci	__u32 pkt_rate_high;
277262306a36Sopenharmony_ci	__u32 rx_usecs_high;
277362306a36Sopenharmony_ci	__u32 rx_max_frames_high;
277462306a36Sopenharmony_ci	__u32 tx_usecs_high;
277562306a36Sopenharmony_ci	__u32 tx_max_frames_high;
277662306a36Sopenharmony_ci	__u32 rate_sample_interval;
277762306a36Sopenharmony_ci	__u8 use_cqe_mode_tx;
277862306a36Sopenharmony_ci	__u8 use_cqe_mode_rx;
277962306a36Sopenharmony_ci	__u32 tx_aggr_max_bytes;
278062306a36Sopenharmony_ci	__u32 tx_aggr_max_frames;
278162306a36Sopenharmony_ci	__u32 tx_aggr_time_usecs;
278262306a36Sopenharmony_ci};
278362306a36Sopenharmony_ci
278462306a36Sopenharmony_cistatic inline struct ethtool_coalesce_set_req *
278562306a36Sopenharmony_ciethtool_coalesce_set_req_alloc(void)
278662306a36Sopenharmony_ci{
278762306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_coalesce_set_req));
278862306a36Sopenharmony_ci}
278962306a36Sopenharmony_civoid ethtool_coalesce_set_req_free(struct ethtool_coalesce_set_req *req);
279062306a36Sopenharmony_ci
279162306a36Sopenharmony_cistatic inline void
279262306a36Sopenharmony_ciethtool_coalesce_set_req_set_header_dev_index(struct ethtool_coalesce_set_req *req,
279362306a36Sopenharmony_ci					      __u32 dev_index)
279462306a36Sopenharmony_ci{
279562306a36Sopenharmony_ci	req->_present.header = 1;
279662306a36Sopenharmony_ci	req->header._present.dev_index = 1;
279762306a36Sopenharmony_ci	req->header.dev_index = dev_index;
279862306a36Sopenharmony_ci}
279962306a36Sopenharmony_cistatic inline void
280062306a36Sopenharmony_ciethtool_coalesce_set_req_set_header_dev_name(struct ethtool_coalesce_set_req *req,
280162306a36Sopenharmony_ci					     const char *dev_name)
280262306a36Sopenharmony_ci{
280362306a36Sopenharmony_ci	free(req->header.dev_name);
280462306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
280562306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
280662306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
280762306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
280862306a36Sopenharmony_ci}
280962306a36Sopenharmony_cistatic inline void
281062306a36Sopenharmony_ciethtool_coalesce_set_req_set_header_flags(struct ethtool_coalesce_set_req *req,
281162306a36Sopenharmony_ci					  __u32 flags)
281262306a36Sopenharmony_ci{
281362306a36Sopenharmony_ci	req->_present.header = 1;
281462306a36Sopenharmony_ci	req->header._present.flags = 1;
281562306a36Sopenharmony_ci	req->header.flags = flags;
281662306a36Sopenharmony_ci}
281762306a36Sopenharmony_cistatic inline void
281862306a36Sopenharmony_ciethtool_coalesce_set_req_set_rx_usecs(struct ethtool_coalesce_set_req *req,
281962306a36Sopenharmony_ci				      __u32 rx_usecs)
282062306a36Sopenharmony_ci{
282162306a36Sopenharmony_ci	req->_present.rx_usecs = 1;
282262306a36Sopenharmony_ci	req->rx_usecs = rx_usecs;
282362306a36Sopenharmony_ci}
282462306a36Sopenharmony_cistatic inline void
282562306a36Sopenharmony_ciethtool_coalesce_set_req_set_rx_max_frames(struct ethtool_coalesce_set_req *req,
282662306a36Sopenharmony_ci					   __u32 rx_max_frames)
282762306a36Sopenharmony_ci{
282862306a36Sopenharmony_ci	req->_present.rx_max_frames = 1;
282962306a36Sopenharmony_ci	req->rx_max_frames = rx_max_frames;
283062306a36Sopenharmony_ci}
283162306a36Sopenharmony_cistatic inline void
283262306a36Sopenharmony_ciethtool_coalesce_set_req_set_rx_usecs_irq(struct ethtool_coalesce_set_req *req,
283362306a36Sopenharmony_ci					  __u32 rx_usecs_irq)
283462306a36Sopenharmony_ci{
283562306a36Sopenharmony_ci	req->_present.rx_usecs_irq = 1;
283662306a36Sopenharmony_ci	req->rx_usecs_irq = rx_usecs_irq;
283762306a36Sopenharmony_ci}
283862306a36Sopenharmony_cistatic inline void
283962306a36Sopenharmony_ciethtool_coalesce_set_req_set_rx_max_frames_irq(struct ethtool_coalesce_set_req *req,
284062306a36Sopenharmony_ci					       __u32 rx_max_frames_irq)
284162306a36Sopenharmony_ci{
284262306a36Sopenharmony_ci	req->_present.rx_max_frames_irq = 1;
284362306a36Sopenharmony_ci	req->rx_max_frames_irq = rx_max_frames_irq;
284462306a36Sopenharmony_ci}
284562306a36Sopenharmony_cistatic inline void
284662306a36Sopenharmony_ciethtool_coalesce_set_req_set_tx_usecs(struct ethtool_coalesce_set_req *req,
284762306a36Sopenharmony_ci				      __u32 tx_usecs)
284862306a36Sopenharmony_ci{
284962306a36Sopenharmony_ci	req->_present.tx_usecs = 1;
285062306a36Sopenharmony_ci	req->tx_usecs = tx_usecs;
285162306a36Sopenharmony_ci}
285262306a36Sopenharmony_cistatic inline void
285362306a36Sopenharmony_ciethtool_coalesce_set_req_set_tx_max_frames(struct ethtool_coalesce_set_req *req,
285462306a36Sopenharmony_ci					   __u32 tx_max_frames)
285562306a36Sopenharmony_ci{
285662306a36Sopenharmony_ci	req->_present.tx_max_frames = 1;
285762306a36Sopenharmony_ci	req->tx_max_frames = tx_max_frames;
285862306a36Sopenharmony_ci}
285962306a36Sopenharmony_cistatic inline void
286062306a36Sopenharmony_ciethtool_coalesce_set_req_set_tx_usecs_irq(struct ethtool_coalesce_set_req *req,
286162306a36Sopenharmony_ci					  __u32 tx_usecs_irq)
286262306a36Sopenharmony_ci{
286362306a36Sopenharmony_ci	req->_present.tx_usecs_irq = 1;
286462306a36Sopenharmony_ci	req->tx_usecs_irq = tx_usecs_irq;
286562306a36Sopenharmony_ci}
286662306a36Sopenharmony_cistatic inline void
286762306a36Sopenharmony_ciethtool_coalesce_set_req_set_tx_max_frames_irq(struct ethtool_coalesce_set_req *req,
286862306a36Sopenharmony_ci					       __u32 tx_max_frames_irq)
286962306a36Sopenharmony_ci{
287062306a36Sopenharmony_ci	req->_present.tx_max_frames_irq = 1;
287162306a36Sopenharmony_ci	req->tx_max_frames_irq = tx_max_frames_irq;
287262306a36Sopenharmony_ci}
287362306a36Sopenharmony_cistatic inline void
287462306a36Sopenharmony_ciethtool_coalesce_set_req_set_stats_block_usecs(struct ethtool_coalesce_set_req *req,
287562306a36Sopenharmony_ci					       __u32 stats_block_usecs)
287662306a36Sopenharmony_ci{
287762306a36Sopenharmony_ci	req->_present.stats_block_usecs = 1;
287862306a36Sopenharmony_ci	req->stats_block_usecs = stats_block_usecs;
287962306a36Sopenharmony_ci}
288062306a36Sopenharmony_cistatic inline void
288162306a36Sopenharmony_ciethtool_coalesce_set_req_set_use_adaptive_rx(struct ethtool_coalesce_set_req *req,
288262306a36Sopenharmony_ci					     __u8 use_adaptive_rx)
288362306a36Sopenharmony_ci{
288462306a36Sopenharmony_ci	req->_present.use_adaptive_rx = 1;
288562306a36Sopenharmony_ci	req->use_adaptive_rx = use_adaptive_rx;
288662306a36Sopenharmony_ci}
288762306a36Sopenharmony_cistatic inline void
288862306a36Sopenharmony_ciethtool_coalesce_set_req_set_use_adaptive_tx(struct ethtool_coalesce_set_req *req,
288962306a36Sopenharmony_ci					     __u8 use_adaptive_tx)
289062306a36Sopenharmony_ci{
289162306a36Sopenharmony_ci	req->_present.use_adaptive_tx = 1;
289262306a36Sopenharmony_ci	req->use_adaptive_tx = use_adaptive_tx;
289362306a36Sopenharmony_ci}
289462306a36Sopenharmony_cistatic inline void
289562306a36Sopenharmony_ciethtool_coalesce_set_req_set_pkt_rate_low(struct ethtool_coalesce_set_req *req,
289662306a36Sopenharmony_ci					  __u32 pkt_rate_low)
289762306a36Sopenharmony_ci{
289862306a36Sopenharmony_ci	req->_present.pkt_rate_low = 1;
289962306a36Sopenharmony_ci	req->pkt_rate_low = pkt_rate_low;
290062306a36Sopenharmony_ci}
290162306a36Sopenharmony_cistatic inline void
290262306a36Sopenharmony_ciethtool_coalesce_set_req_set_rx_usecs_low(struct ethtool_coalesce_set_req *req,
290362306a36Sopenharmony_ci					  __u32 rx_usecs_low)
290462306a36Sopenharmony_ci{
290562306a36Sopenharmony_ci	req->_present.rx_usecs_low = 1;
290662306a36Sopenharmony_ci	req->rx_usecs_low = rx_usecs_low;
290762306a36Sopenharmony_ci}
290862306a36Sopenharmony_cistatic inline void
290962306a36Sopenharmony_ciethtool_coalesce_set_req_set_rx_max_frames_low(struct ethtool_coalesce_set_req *req,
291062306a36Sopenharmony_ci					       __u32 rx_max_frames_low)
291162306a36Sopenharmony_ci{
291262306a36Sopenharmony_ci	req->_present.rx_max_frames_low = 1;
291362306a36Sopenharmony_ci	req->rx_max_frames_low = rx_max_frames_low;
291462306a36Sopenharmony_ci}
291562306a36Sopenharmony_cistatic inline void
291662306a36Sopenharmony_ciethtool_coalesce_set_req_set_tx_usecs_low(struct ethtool_coalesce_set_req *req,
291762306a36Sopenharmony_ci					  __u32 tx_usecs_low)
291862306a36Sopenharmony_ci{
291962306a36Sopenharmony_ci	req->_present.tx_usecs_low = 1;
292062306a36Sopenharmony_ci	req->tx_usecs_low = tx_usecs_low;
292162306a36Sopenharmony_ci}
292262306a36Sopenharmony_cistatic inline void
292362306a36Sopenharmony_ciethtool_coalesce_set_req_set_tx_max_frames_low(struct ethtool_coalesce_set_req *req,
292462306a36Sopenharmony_ci					       __u32 tx_max_frames_low)
292562306a36Sopenharmony_ci{
292662306a36Sopenharmony_ci	req->_present.tx_max_frames_low = 1;
292762306a36Sopenharmony_ci	req->tx_max_frames_low = tx_max_frames_low;
292862306a36Sopenharmony_ci}
292962306a36Sopenharmony_cistatic inline void
293062306a36Sopenharmony_ciethtool_coalesce_set_req_set_pkt_rate_high(struct ethtool_coalesce_set_req *req,
293162306a36Sopenharmony_ci					   __u32 pkt_rate_high)
293262306a36Sopenharmony_ci{
293362306a36Sopenharmony_ci	req->_present.pkt_rate_high = 1;
293462306a36Sopenharmony_ci	req->pkt_rate_high = pkt_rate_high;
293562306a36Sopenharmony_ci}
293662306a36Sopenharmony_cistatic inline void
293762306a36Sopenharmony_ciethtool_coalesce_set_req_set_rx_usecs_high(struct ethtool_coalesce_set_req *req,
293862306a36Sopenharmony_ci					   __u32 rx_usecs_high)
293962306a36Sopenharmony_ci{
294062306a36Sopenharmony_ci	req->_present.rx_usecs_high = 1;
294162306a36Sopenharmony_ci	req->rx_usecs_high = rx_usecs_high;
294262306a36Sopenharmony_ci}
294362306a36Sopenharmony_cistatic inline void
294462306a36Sopenharmony_ciethtool_coalesce_set_req_set_rx_max_frames_high(struct ethtool_coalesce_set_req *req,
294562306a36Sopenharmony_ci						__u32 rx_max_frames_high)
294662306a36Sopenharmony_ci{
294762306a36Sopenharmony_ci	req->_present.rx_max_frames_high = 1;
294862306a36Sopenharmony_ci	req->rx_max_frames_high = rx_max_frames_high;
294962306a36Sopenharmony_ci}
295062306a36Sopenharmony_cistatic inline void
295162306a36Sopenharmony_ciethtool_coalesce_set_req_set_tx_usecs_high(struct ethtool_coalesce_set_req *req,
295262306a36Sopenharmony_ci					   __u32 tx_usecs_high)
295362306a36Sopenharmony_ci{
295462306a36Sopenharmony_ci	req->_present.tx_usecs_high = 1;
295562306a36Sopenharmony_ci	req->tx_usecs_high = tx_usecs_high;
295662306a36Sopenharmony_ci}
295762306a36Sopenharmony_cistatic inline void
295862306a36Sopenharmony_ciethtool_coalesce_set_req_set_tx_max_frames_high(struct ethtool_coalesce_set_req *req,
295962306a36Sopenharmony_ci						__u32 tx_max_frames_high)
296062306a36Sopenharmony_ci{
296162306a36Sopenharmony_ci	req->_present.tx_max_frames_high = 1;
296262306a36Sopenharmony_ci	req->tx_max_frames_high = tx_max_frames_high;
296362306a36Sopenharmony_ci}
296462306a36Sopenharmony_cistatic inline void
296562306a36Sopenharmony_ciethtool_coalesce_set_req_set_rate_sample_interval(struct ethtool_coalesce_set_req *req,
296662306a36Sopenharmony_ci						  __u32 rate_sample_interval)
296762306a36Sopenharmony_ci{
296862306a36Sopenharmony_ci	req->_present.rate_sample_interval = 1;
296962306a36Sopenharmony_ci	req->rate_sample_interval = rate_sample_interval;
297062306a36Sopenharmony_ci}
297162306a36Sopenharmony_cistatic inline void
297262306a36Sopenharmony_ciethtool_coalesce_set_req_set_use_cqe_mode_tx(struct ethtool_coalesce_set_req *req,
297362306a36Sopenharmony_ci					     __u8 use_cqe_mode_tx)
297462306a36Sopenharmony_ci{
297562306a36Sopenharmony_ci	req->_present.use_cqe_mode_tx = 1;
297662306a36Sopenharmony_ci	req->use_cqe_mode_tx = use_cqe_mode_tx;
297762306a36Sopenharmony_ci}
297862306a36Sopenharmony_cistatic inline void
297962306a36Sopenharmony_ciethtool_coalesce_set_req_set_use_cqe_mode_rx(struct ethtool_coalesce_set_req *req,
298062306a36Sopenharmony_ci					     __u8 use_cqe_mode_rx)
298162306a36Sopenharmony_ci{
298262306a36Sopenharmony_ci	req->_present.use_cqe_mode_rx = 1;
298362306a36Sopenharmony_ci	req->use_cqe_mode_rx = use_cqe_mode_rx;
298462306a36Sopenharmony_ci}
298562306a36Sopenharmony_cistatic inline void
298662306a36Sopenharmony_ciethtool_coalesce_set_req_set_tx_aggr_max_bytes(struct ethtool_coalesce_set_req *req,
298762306a36Sopenharmony_ci					       __u32 tx_aggr_max_bytes)
298862306a36Sopenharmony_ci{
298962306a36Sopenharmony_ci	req->_present.tx_aggr_max_bytes = 1;
299062306a36Sopenharmony_ci	req->tx_aggr_max_bytes = tx_aggr_max_bytes;
299162306a36Sopenharmony_ci}
299262306a36Sopenharmony_cistatic inline void
299362306a36Sopenharmony_ciethtool_coalesce_set_req_set_tx_aggr_max_frames(struct ethtool_coalesce_set_req *req,
299462306a36Sopenharmony_ci						__u32 tx_aggr_max_frames)
299562306a36Sopenharmony_ci{
299662306a36Sopenharmony_ci	req->_present.tx_aggr_max_frames = 1;
299762306a36Sopenharmony_ci	req->tx_aggr_max_frames = tx_aggr_max_frames;
299862306a36Sopenharmony_ci}
299962306a36Sopenharmony_cistatic inline void
300062306a36Sopenharmony_ciethtool_coalesce_set_req_set_tx_aggr_time_usecs(struct ethtool_coalesce_set_req *req,
300162306a36Sopenharmony_ci						__u32 tx_aggr_time_usecs)
300262306a36Sopenharmony_ci{
300362306a36Sopenharmony_ci	req->_present.tx_aggr_time_usecs = 1;
300462306a36Sopenharmony_ci	req->tx_aggr_time_usecs = tx_aggr_time_usecs;
300562306a36Sopenharmony_ci}
300662306a36Sopenharmony_ci
300762306a36Sopenharmony_ci/*
300862306a36Sopenharmony_ci * Set coalesce params.
300962306a36Sopenharmony_ci */
301062306a36Sopenharmony_ciint ethtool_coalesce_set(struct ynl_sock *ys,
301162306a36Sopenharmony_ci			 struct ethtool_coalesce_set_req *req);
301262306a36Sopenharmony_ci
301362306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_PAUSE_GET ============== */
301462306a36Sopenharmony_ci/* ETHTOOL_MSG_PAUSE_GET - do */
301562306a36Sopenharmony_cistruct ethtool_pause_get_req {
301662306a36Sopenharmony_ci	struct {
301762306a36Sopenharmony_ci		__u32 header:1;
301862306a36Sopenharmony_ci	} _present;
301962306a36Sopenharmony_ci
302062306a36Sopenharmony_ci	struct ethtool_header header;
302162306a36Sopenharmony_ci};
302262306a36Sopenharmony_ci
302362306a36Sopenharmony_cistatic inline struct ethtool_pause_get_req *ethtool_pause_get_req_alloc(void)
302462306a36Sopenharmony_ci{
302562306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_pause_get_req));
302662306a36Sopenharmony_ci}
302762306a36Sopenharmony_civoid ethtool_pause_get_req_free(struct ethtool_pause_get_req *req);
302862306a36Sopenharmony_ci
302962306a36Sopenharmony_cistatic inline void
303062306a36Sopenharmony_ciethtool_pause_get_req_set_header_dev_index(struct ethtool_pause_get_req *req,
303162306a36Sopenharmony_ci					   __u32 dev_index)
303262306a36Sopenharmony_ci{
303362306a36Sopenharmony_ci	req->_present.header = 1;
303462306a36Sopenharmony_ci	req->header._present.dev_index = 1;
303562306a36Sopenharmony_ci	req->header.dev_index = dev_index;
303662306a36Sopenharmony_ci}
303762306a36Sopenharmony_cistatic inline void
303862306a36Sopenharmony_ciethtool_pause_get_req_set_header_dev_name(struct ethtool_pause_get_req *req,
303962306a36Sopenharmony_ci					  const char *dev_name)
304062306a36Sopenharmony_ci{
304162306a36Sopenharmony_ci	free(req->header.dev_name);
304262306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
304362306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
304462306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
304562306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
304662306a36Sopenharmony_ci}
304762306a36Sopenharmony_cistatic inline void
304862306a36Sopenharmony_ciethtool_pause_get_req_set_header_flags(struct ethtool_pause_get_req *req,
304962306a36Sopenharmony_ci				       __u32 flags)
305062306a36Sopenharmony_ci{
305162306a36Sopenharmony_ci	req->_present.header = 1;
305262306a36Sopenharmony_ci	req->header._present.flags = 1;
305362306a36Sopenharmony_ci	req->header.flags = flags;
305462306a36Sopenharmony_ci}
305562306a36Sopenharmony_ci
305662306a36Sopenharmony_cistruct ethtool_pause_get_rsp {
305762306a36Sopenharmony_ci	struct {
305862306a36Sopenharmony_ci		__u32 header:1;
305962306a36Sopenharmony_ci		__u32 autoneg:1;
306062306a36Sopenharmony_ci		__u32 rx:1;
306162306a36Sopenharmony_ci		__u32 tx:1;
306262306a36Sopenharmony_ci		__u32 stats:1;
306362306a36Sopenharmony_ci		__u32 stats_src:1;
306462306a36Sopenharmony_ci	} _present;
306562306a36Sopenharmony_ci
306662306a36Sopenharmony_ci	struct ethtool_header header;
306762306a36Sopenharmony_ci	__u8 autoneg;
306862306a36Sopenharmony_ci	__u8 rx;
306962306a36Sopenharmony_ci	__u8 tx;
307062306a36Sopenharmony_ci	struct ethtool_pause_stat stats;
307162306a36Sopenharmony_ci	__u32 stats_src;
307262306a36Sopenharmony_ci};
307362306a36Sopenharmony_ci
307462306a36Sopenharmony_civoid ethtool_pause_get_rsp_free(struct ethtool_pause_get_rsp *rsp);
307562306a36Sopenharmony_ci
307662306a36Sopenharmony_ci/*
307762306a36Sopenharmony_ci * Get pause params.
307862306a36Sopenharmony_ci */
307962306a36Sopenharmony_cistruct ethtool_pause_get_rsp *
308062306a36Sopenharmony_ciethtool_pause_get(struct ynl_sock *ys, struct ethtool_pause_get_req *req);
308162306a36Sopenharmony_ci
308262306a36Sopenharmony_ci/* ETHTOOL_MSG_PAUSE_GET - dump */
308362306a36Sopenharmony_cistruct ethtool_pause_get_req_dump {
308462306a36Sopenharmony_ci	struct {
308562306a36Sopenharmony_ci		__u32 header:1;
308662306a36Sopenharmony_ci	} _present;
308762306a36Sopenharmony_ci
308862306a36Sopenharmony_ci	struct ethtool_header header;
308962306a36Sopenharmony_ci};
309062306a36Sopenharmony_ci
309162306a36Sopenharmony_cistatic inline struct ethtool_pause_get_req_dump *
309262306a36Sopenharmony_ciethtool_pause_get_req_dump_alloc(void)
309362306a36Sopenharmony_ci{
309462306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_pause_get_req_dump));
309562306a36Sopenharmony_ci}
309662306a36Sopenharmony_civoid ethtool_pause_get_req_dump_free(struct ethtool_pause_get_req_dump *req);
309762306a36Sopenharmony_ci
309862306a36Sopenharmony_cistatic inline void
309962306a36Sopenharmony_ciethtool_pause_get_req_dump_set_header_dev_index(struct ethtool_pause_get_req_dump *req,
310062306a36Sopenharmony_ci						__u32 dev_index)
310162306a36Sopenharmony_ci{
310262306a36Sopenharmony_ci	req->_present.header = 1;
310362306a36Sopenharmony_ci	req->header._present.dev_index = 1;
310462306a36Sopenharmony_ci	req->header.dev_index = dev_index;
310562306a36Sopenharmony_ci}
310662306a36Sopenharmony_cistatic inline void
310762306a36Sopenharmony_ciethtool_pause_get_req_dump_set_header_dev_name(struct ethtool_pause_get_req_dump *req,
310862306a36Sopenharmony_ci					       const char *dev_name)
310962306a36Sopenharmony_ci{
311062306a36Sopenharmony_ci	free(req->header.dev_name);
311162306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
311262306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
311362306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
311462306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
311562306a36Sopenharmony_ci}
311662306a36Sopenharmony_cistatic inline void
311762306a36Sopenharmony_ciethtool_pause_get_req_dump_set_header_flags(struct ethtool_pause_get_req_dump *req,
311862306a36Sopenharmony_ci					    __u32 flags)
311962306a36Sopenharmony_ci{
312062306a36Sopenharmony_ci	req->_present.header = 1;
312162306a36Sopenharmony_ci	req->header._present.flags = 1;
312262306a36Sopenharmony_ci	req->header.flags = flags;
312362306a36Sopenharmony_ci}
312462306a36Sopenharmony_ci
312562306a36Sopenharmony_cistruct ethtool_pause_get_list {
312662306a36Sopenharmony_ci	struct ethtool_pause_get_list *next;
312762306a36Sopenharmony_ci	struct ethtool_pause_get_rsp obj __attribute__ ((aligned (8)));
312862306a36Sopenharmony_ci};
312962306a36Sopenharmony_ci
313062306a36Sopenharmony_civoid ethtool_pause_get_list_free(struct ethtool_pause_get_list *rsp);
313162306a36Sopenharmony_ci
313262306a36Sopenharmony_cistruct ethtool_pause_get_list *
313362306a36Sopenharmony_ciethtool_pause_get_dump(struct ynl_sock *ys,
313462306a36Sopenharmony_ci		       struct ethtool_pause_get_req_dump *req);
313562306a36Sopenharmony_ci
313662306a36Sopenharmony_ci/* ETHTOOL_MSG_PAUSE_GET - notify */
313762306a36Sopenharmony_cistruct ethtool_pause_get_ntf {
313862306a36Sopenharmony_ci	__u16 family;
313962306a36Sopenharmony_ci	__u8 cmd;
314062306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
314162306a36Sopenharmony_ci	void (*free)(struct ethtool_pause_get_ntf *ntf);
314262306a36Sopenharmony_ci	struct ethtool_pause_get_rsp obj __attribute__ ((aligned (8)));
314362306a36Sopenharmony_ci};
314462306a36Sopenharmony_ci
314562306a36Sopenharmony_civoid ethtool_pause_get_ntf_free(struct ethtool_pause_get_ntf *rsp);
314662306a36Sopenharmony_ci
314762306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_PAUSE_SET ============== */
314862306a36Sopenharmony_ci/* ETHTOOL_MSG_PAUSE_SET - do */
314962306a36Sopenharmony_cistruct ethtool_pause_set_req {
315062306a36Sopenharmony_ci	struct {
315162306a36Sopenharmony_ci		__u32 header:1;
315262306a36Sopenharmony_ci		__u32 autoneg:1;
315362306a36Sopenharmony_ci		__u32 rx:1;
315462306a36Sopenharmony_ci		__u32 tx:1;
315562306a36Sopenharmony_ci		__u32 stats:1;
315662306a36Sopenharmony_ci		__u32 stats_src:1;
315762306a36Sopenharmony_ci	} _present;
315862306a36Sopenharmony_ci
315962306a36Sopenharmony_ci	struct ethtool_header header;
316062306a36Sopenharmony_ci	__u8 autoneg;
316162306a36Sopenharmony_ci	__u8 rx;
316262306a36Sopenharmony_ci	__u8 tx;
316362306a36Sopenharmony_ci	struct ethtool_pause_stat stats;
316462306a36Sopenharmony_ci	__u32 stats_src;
316562306a36Sopenharmony_ci};
316662306a36Sopenharmony_ci
316762306a36Sopenharmony_cistatic inline struct ethtool_pause_set_req *ethtool_pause_set_req_alloc(void)
316862306a36Sopenharmony_ci{
316962306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_pause_set_req));
317062306a36Sopenharmony_ci}
317162306a36Sopenharmony_civoid ethtool_pause_set_req_free(struct ethtool_pause_set_req *req);
317262306a36Sopenharmony_ci
317362306a36Sopenharmony_cistatic inline void
317462306a36Sopenharmony_ciethtool_pause_set_req_set_header_dev_index(struct ethtool_pause_set_req *req,
317562306a36Sopenharmony_ci					   __u32 dev_index)
317662306a36Sopenharmony_ci{
317762306a36Sopenharmony_ci	req->_present.header = 1;
317862306a36Sopenharmony_ci	req->header._present.dev_index = 1;
317962306a36Sopenharmony_ci	req->header.dev_index = dev_index;
318062306a36Sopenharmony_ci}
318162306a36Sopenharmony_cistatic inline void
318262306a36Sopenharmony_ciethtool_pause_set_req_set_header_dev_name(struct ethtool_pause_set_req *req,
318362306a36Sopenharmony_ci					  const char *dev_name)
318462306a36Sopenharmony_ci{
318562306a36Sopenharmony_ci	free(req->header.dev_name);
318662306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
318762306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
318862306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
318962306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
319062306a36Sopenharmony_ci}
319162306a36Sopenharmony_cistatic inline void
319262306a36Sopenharmony_ciethtool_pause_set_req_set_header_flags(struct ethtool_pause_set_req *req,
319362306a36Sopenharmony_ci				       __u32 flags)
319462306a36Sopenharmony_ci{
319562306a36Sopenharmony_ci	req->_present.header = 1;
319662306a36Sopenharmony_ci	req->header._present.flags = 1;
319762306a36Sopenharmony_ci	req->header.flags = flags;
319862306a36Sopenharmony_ci}
319962306a36Sopenharmony_cistatic inline void
320062306a36Sopenharmony_ciethtool_pause_set_req_set_autoneg(struct ethtool_pause_set_req *req,
320162306a36Sopenharmony_ci				  __u8 autoneg)
320262306a36Sopenharmony_ci{
320362306a36Sopenharmony_ci	req->_present.autoneg = 1;
320462306a36Sopenharmony_ci	req->autoneg = autoneg;
320562306a36Sopenharmony_ci}
320662306a36Sopenharmony_cistatic inline void
320762306a36Sopenharmony_ciethtool_pause_set_req_set_rx(struct ethtool_pause_set_req *req, __u8 rx)
320862306a36Sopenharmony_ci{
320962306a36Sopenharmony_ci	req->_present.rx = 1;
321062306a36Sopenharmony_ci	req->rx = rx;
321162306a36Sopenharmony_ci}
321262306a36Sopenharmony_cistatic inline void
321362306a36Sopenharmony_ciethtool_pause_set_req_set_tx(struct ethtool_pause_set_req *req, __u8 tx)
321462306a36Sopenharmony_ci{
321562306a36Sopenharmony_ci	req->_present.tx = 1;
321662306a36Sopenharmony_ci	req->tx = tx;
321762306a36Sopenharmony_ci}
321862306a36Sopenharmony_cistatic inline void
321962306a36Sopenharmony_ciethtool_pause_set_req_set_stats_tx_frames(struct ethtool_pause_set_req *req,
322062306a36Sopenharmony_ci					  __u64 tx_frames)
322162306a36Sopenharmony_ci{
322262306a36Sopenharmony_ci	req->_present.stats = 1;
322362306a36Sopenharmony_ci	req->stats._present.tx_frames = 1;
322462306a36Sopenharmony_ci	req->stats.tx_frames = tx_frames;
322562306a36Sopenharmony_ci}
322662306a36Sopenharmony_cistatic inline void
322762306a36Sopenharmony_ciethtool_pause_set_req_set_stats_rx_frames(struct ethtool_pause_set_req *req,
322862306a36Sopenharmony_ci					  __u64 rx_frames)
322962306a36Sopenharmony_ci{
323062306a36Sopenharmony_ci	req->_present.stats = 1;
323162306a36Sopenharmony_ci	req->stats._present.rx_frames = 1;
323262306a36Sopenharmony_ci	req->stats.rx_frames = rx_frames;
323362306a36Sopenharmony_ci}
323462306a36Sopenharmony_cistatic inline void
323562306a36Sopenharmony_ciethtool_pause_set_req_set_stats_src(struct ethtool_pause_set_req *req,
323662306a36Sopenharmony_ci				    __u32 stats_src)
323762306a36Sopenharmony_ci{
323862306a36Sopenharmony_ci	req->_present.stats_src = 1;
323962306a36Sopenharmony_ci	req->stats_src = stats_src;
324062306a36Sopenharmony_ci}
324162306a36Sopenharmony_ci
324262306a36Sopenharmony_ci/*
324362306a36Sopenharmony_ci * Set pause params.
324462306a36Sopenharmony_ci */
324562306a36Sopenharmony_ciint ethtool_pause_set(struct ynl_sock *ys, struct ethtool_pause_set_req *req);
324662306a36Sopenharmony_ci
324762306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_EEE_GET ============== */
324862306a36Sopenharmony_ci/* ETHTOOL_MSG_EEE_GET - do */
324962306a36Sopenharmony_cistruct ethtool_eee_get_req {
325062306a36Sopenharmony_ci	struct {
325162306a36Sopenharmony_ci		__u32 header:1;
325262306a36Sopenharmony_ci	} _present;
325362306a36Sopenharmony_ci
325462306a36Sopenharmony_ci	struct ethtool_header header;
325562306a36Sopenharmony_ci};
325662306a36Sopenharmony_ci
325762306a36Sopenharmony_cistatic inline struct ethtool_eee_get_req *ethtool_eee_get_req_alloc(void)
325862306a36Sopenharmony_ci{
325962306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_eee_get_req));
326062306a36Sopenharmony_ci}
326162306a36Sopenharmony_civoid ethtool_eee_get_req_free(struct ethtool_eee_get_req *req);
326262306a36Sopenharmony_ci
326362306a36Sopenharmony_cistatic inline void
326462306a36Sopenharmony_ciethtool_eee_get_req_set_header_dev_index(struct ethtool_eee_get_req *req,
326562306a36Sopenharmony_ci					 __u32 dev_index)
326662306a36Sopenharmony_ci{
326762306a36Sopenharmony_ci	req->_present.header = 1;
326862306a36Sopenharmony_ci	req->header._present.dev_index = 1;
326962306a36Sopenharmony_ci	req->header.dev_index = dev_index;
327062306a36Sopenharmony_ci}
327162306a36Sopenharmony_cistatic inline void
327262306a36Sopenharmony_ciethtool_eee_get_req_set_header_dev_name(struct ethtool_eee_get_req *req,
327362306a36Sopenharmony_ci					const char *dev_name)
327462306a36Sopenharmony_ci{
327562306a36Sopenharmony_ci	free(req->header.dev_name);
327662306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
327762306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
327862306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
327962306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
328062306a36Sopenharmony_ci}
328162306a36Sopenharmony_cistatic inline void
328262306a36Sopenharmony_ciethtool_eee_get_req_set_header_flags(struct ethtool_eee_get_req *req,
328362306a36Sopenharmony_ci				     __u32 flags)
328462306a36Sopenharmony_ci{
328562306a36Sopenharmony_ci	req->_present.header = 1;
328662306a36Sopenharmony_ci	req->header._present.flags = 1;
328762306a36Sopenharmony_ci	req->header.flags = flags;
328862306a36Sopenharmony_ci}
328962306a36Sopenharmony_ci
329062306a36Sopenharmony_cistruct ethtool_eee_get_rsp {
329162306a36Sopenharmony_ci	struct {
329262306a36Sopenharmony_ci		__u32 header:1;
329362306a36Sopenharmony_ci		__u32 modes_ours:1;
329462306a36Sopenharmony_ci		__u32 modes_peer:1;
329562306a36Sopenharmony_ci		__u32 active:1;
329662306a36Sopenharmony_ci		__u32 enabled:1;
329762306a36Sopenharmony_ci		__u32 tx_lpi_enabled:1;
329862306a36Sopenharmony_ci		__u32 tx_lpi_timer:1;
329962306a36Sopenharmony_ci	} _present;
330062306a36Sopenharmony_ci
330162306a36Sopenharmony_ci	struct ethtool_header header;
330262306a36Sopenharmony_ci	struct ethtool_bitset modes_ours;
330362306a36Sopenharmony_ci	struct ethtool_bitset modes_peer;
330462306a36Sopenharmony_ci	__u8 active;
330562306a36Sopenharmony_ci	__u8 enabled;
330662306a36Sopenharmony_ci	__u8 tx_lpi_enabled;
330762306a36Sopenharmony_ci	__u32 tx_lpi_timer;
330862306a36Sopenharmony_ci};
330962306a36Sopenharmony_ci
331062306a36Sopenharmony_civoid ethtool_eee_get_rsp_free(struct ethtool_eee_get_rsp *rsp);
331162306a36Sopenharmony_ci
331262306a36Sopenharmony_ci/*
331362306a36Sopenharmony_ci * Get eee params.
331462306a36Sopenharmony_ci */
331562306a36Sopenharmony_cistruct ethtool_eee_get_rsp *
331662306a36Sopenharmony_ciethtool_eee_get(struct ynl_sock *ys, struct ethtool_eee_get_req *req);
331762306a36Sopenharmony_ci
331862306a36Sopenharmony_ci/* ETHTOOL_MSG_EEE_GET - dump */
331962306a36Sopenharmony_cistruct ethtool_eee_get_req_dump {
332062306a36Sopenharmony_ci	struct {
332162306a36Sopenharmony_ci		__u32 header:1;
332262306a36Sopenharmony_ci	} _present;
332362306a36Sopenharmony_ci
332462306a36Sopenharmony_ci	struct ethtool_header header;
332562306a36Sopenharmony_ci};
332662306a36Sopenharmony_ci
332762306a36Sopenharmony_cistatic inline struct ethtool_eee_get_req_dump *
332862306a36Sopenharmony_ciethtool_eee_get_req_dump_alloc(void)
332962306a36Sopenharmony_ci{
333062306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_eee_get_req_dump));
333162306a36Sopenharmony_ci}
333262306a36Sopenharmony_civoid ethtool_eee_get_req_dump_free(struct ethtool_eee_get_req_dump *req);
333362306a36Sopenharmony_ci
333462306a36Sopenharmony_cistatic inline void
333562306a36Sopenharmony_ciethtool_eee_get_req_dump_set_header_dev_index(struct ethtool_eee_get_req_dump *req,
333662306a36Sopenharmony_ci					      __u32 dev_index)
333762306a36Sopenharmony_ci{
333862306a36Sopenharmony_ci	req->_present.header = 1;
333962306a36Sopenharmony_ci	req->header._present.dev_index = 1;
334062306a36Sopenharmony_ci	req->header.dev_index = dev_index;
334162306a36Sopenharmony_ci}
334262306a36Sopenharmony_cistatic inline void
334362306a36Sopenharmony_ciethtool_eee_get_req_dump_set_header_dev_name(struct ethtool_eee_get_req_dump *req,
334462306a36Sopenharmony_ci					     const char *dev_name)
334562306a36Sopenharmony_ci{
334662306a36Sopenharmony_ci	free(req->header.dev_name);
334762306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
334862306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
334962306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
335062306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
335162306a36Sopenharmony_ci}
335262306a36Sopenharmony_cistatic inline void
335362306a36Sopenharmony_ciethtool_eee_get_req_dump_set_header_flags(struct ethtool_eee_get_req_dump *req,
335462306a36Sopenharmony_ci					  __u32 flags)
335562306a36Sopenharmony_ci{
335662306a36Sopenharmony_ci	req->_present.header = 1;
335762306a36Sopenharmony_ci	req->header._present.flags = 1;
335862306a36Sopenharmony_ci	req->header.flags = flags;
335962306a36Sopenharmony_ci}
336062306a36Sopenharmony_ci
336162306a36Sopenharmony_cistruct ethtool_eee_get_list {
336262306a36Sopenharmony_ci	struct ethtool_eee_get_list *next;
336362306a36Sopenharmony_ci	struct ethtool_eee_get_rsp obj __attribute__ ((aligned (8)));
336462306a36Sopenharmony_ci};
336562306a36Sopenharmony_ci
336662306a36Sopenharmony_civoid ethtool_eee_get_list_free(struct ethtool_eee_get_list *rsp);
336762306a36Sopenharmony_ci
336862306a36Sopenharmony_cistruct ethtool_eee_get_list *
336962306a36Sopenharmony_ciethtool_eee_get_dump(struct ynl_sock *ys, struct ethtool_eee_get_req_dump *req);
337062306a36Sopenharmony_ci
337162306a36Sopenharmony_ci/* ETHTOOL_MSG_EEE_GET - notify */
337262306a36Sopenharmony_cistruct ethtool_eee_get_ntf {
337362306a36Sopenharmony_ci	__u16 family;
337462306a36Sopenharmony_ci	__u8 cmd;
337562306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
337662306a36Sopenharmony_ci	void (*free)(struct ethtool_eee_get_ntf *ntf);
337762306a36Sopenharmony_ci	struct ethtool_eee_get_rsp obj __attribute__ ((aligned (8)));
337862306a36Sopenharmony_ci};
337962306a36Sopenharmony_ci
338062306a36Sopenharmony_civoid ethtool_eee_get_ntf_free(struct ethtool_eee_get_ntf *rsp);
338162306a36Sopenharmony_ci
338262306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_EEE_SET ============== */
338362306a36Sopenharmony_ci/* ETHTOOL_MSG_EEE_SET - do */
338462306a36Sopenharmony_cistruct ethtool_eee_set_req {
338562306a36Sopenharmony_ci	struct {
338662306a36Sopenharmony_ci		__u32 header:1;
338762306a36Sopenharmony_ci		__u32 modes_ours:1;
338862306a36Sopenharmony_ci		__u32 modes_peer:1;
338962306a36Sopenharmony_ci		__u32 active:1;
339062306a36Sopenharmony_ci		__u32 enabled:1;
339162306a36Sopenharmony_ci		__u32 tx_lpi_enabled:1;
339262306a36Sopenharmony_ci		__u32 tx_lpi_timer:1;
339362306a36Sopenharmony_ci	} _present;
339462306a36Sopenharmony_ci
339562306a36Sopenharmony_ci	struct ethtool_header header;
339662306a36Sopenharmony_ci	struct ethtool_bitset modes_ours;
339762306a36Sopenharmony_ci	struct ethtool_bitset modes_peer;
339862306a36Sopenharmony_ci	__u8 active;
339962306a36Sopenharmony_ci	__u8 enabled;
340062306a36Sopenharmony_ci	__u8 tx_lpi_enabled;
340162306a36Sopenharmony_ci	__u32 tx_lpi_timer;
340262306a36Sopenharmony_ci};
340362306a36Sopenharmony_ci
340462306a36Sopenharmony_cistatic inline struct ethtool_eee_set_req *ethtool_eee_set_req_alloc(void)
340562306a36Sopenharmony_ci{
340662306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_eee_set_req));
340762306a36Sopenharmony_ci}
340862306a36Sopenharmony_civoid ethtool_eee_set_req_free(struct ethtool_eee_set_req *req);
340962306a36Sopenharmony_ci
341062306a36Sopenharmony_cistatic inline void
341162306a36Sopenharmony_ciethtool_eee_set_req_set_header_dev_index(struct ethtool_eee_set_req *req,
341262306a36Sopenharmony_ci					 __u32 dev_index)
341362306a36Sopenharmony_ci{
341462306a36Sopenharmony_ci	req->_present.header = 1;
341562306a36Sopenharmony_ci	req->header._present.dev_index = 1;
341662306a36Sopenharmony_ci	req->header.dev_index = dev_index;
341762306a36Sopenharmony_ci}
341862306a36Sopenharmony_cistatic inline void
341962306a36Sopenharmony_ciethtool_eee_set_req_set_header_dev_name(struct ethtool_eee_set_req *req,
342062306a36Sopenharmony_ci					const char *dev_name)
342162306a36Sopenharmony_ci{
342262306a36Sopenharmony_ci	free(req->header.dev_name);
342362306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
342462306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
342562306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
342662306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
342762306a36Sopenharmony_ci}
342862306a36Sopenharmony_cistatic inline void
342962306a36Sopenharmony_ciethtool_eee_set_req_set_header_flags(struct ethtool_eee_set_req *req,
343062306a36Sopenharmony_ci				     __u32 flags)
343162306a36Sopenharmony_ci{
343262306a36Sopenharmony_ci	req->_present.header = 1;
343362306a36Sopenharmony_ci	req->header._present.flags = 1;
343462306a36Sopenharmony_ci	req->header.flags = flags;
343562306a36Sopenharmony_ci}
343662306a36Sopenharmony_cistatic inline void
343762306a36Sopenharmony_ciethtool_eee_set_req_set_modes_ours_nomask(struct ethtool_eee_set_req *req)
343862306a36Sopenharmony_ci{
343962306a36Sopenharmony_ci	req->_present.modes_ours = 1;
344062306a36Sopenharmony_ci	req->modes_ours._present.nomask = 1;
344162306a36Sopenharmony_ci}
344262306a36Sopenharmony_cistatic inline void
344362306a36Sopenharmony_ciethtool_eee_set_req_set_modes_ours_size(struct ethtool_eee_set_req *req,
344462306a36Sopenharmony_ci					__u32 size)
344562306a36Sopenharmony_ci{
344662306a36Sopenharmony_ci	req->_present.modes_ours = 1;
344762306a36Sopenharmony_ci	req->modes_ours._present.size = 1;
344862306a36Sopenharmony_ci	req->modes_ours.size = size;
344962306a36Sopenharmony_ci}
345062306a36Sopenharmony_cistatic inline void
345162306a36Sopenharmony_ci__ethtool_eee_set_req_set_modes_ours_bits_bit(struct ethtool_eee_set_req *req,
345262306a36Sopenharmony_ci					      struct ethtool_bitset_bit *bit,
345362306a36Sopenharmony_ci					      unsigned int n_bit)
345462306a36Sopenharmony_ci{
345562306a36Sopenharmony_ci	free(req->modes_ours.bits.bit);
345662306a36Sopenharmony_ci	req->modes_ours.bits.bit = bit;
345762306a36Sopenharmony_ci	req->modes_ours.bits.n_bit = n_bit;
345862306a36Sopenharmony_ci}
345962306a36Sopenharmony_cistatic inline void
346062306a36Sopenharmony_ciethtool_eee_set_req_set_modes_peer_nomask(struct ethtool_eee_set_req *req)
346162306a36Sopenharmony_ci{
346262306a36Sopenharmony_ci	req->_present.modes_peer = 1;
346362306a36Sopenharmony_ci	req->modes_peer._present.nomask = 1;
346462306a36Sopenharmony_ci}
346562306a36Sopenharmony_cistatic inline void
346662306a36Sopenharmony_ciethtool_eee_set_req_set_modes_peer_size(struct ethtool_eee_set_req *req,
346762306a36Sopenharmony_ci					__u32 size)
346862306a36Sopenharmony_ci{
346962306a36Sopenharmony_ci	req->_present.modes_peer = 1;
347062306a36Sopenharmony_ci	req->modes_peer._present.size = 1;
347162306a36Sopenharmony_ci	req->modes_peer.size = size;
347262306a36Sopenharmony_ci}
347362306a36Sopenharmony_cistatic inline void
347462306a36Sopenharmony_ci__ethtool_eee_set_req_set_modes_peer_bits_bit(struct ethtool_eee_set_req *req,
347562306a36Sopenharmony_ci					      struct ethtool_bitset_bit *bit,
347662306a36Sopenharmony_ci					      unsigned int n_bit)
347762306a36Sopenharmony_ci{
347862306a36Sopenharmony_ci	free(req->modes_peer.bits.bit);
347962306a36Sopenharmony_ci	req->modes_peer.bits.bit = bit;
348062306a36Sopenharmony_ci	req->modes_peer.bits.n_bit = n_bit;
348162306a36Sopenharmony_ci}
348262306a36Sopenharmony_cistatic inline void
348362306a36Sopenharmony_ciethtool_eee_set_req_set_active(struct ethtool_eee_set_req *req, __u8 active)
348462306a36Sopenharmony_ci{
348562306a36Sopenharmony_ci	req->_present.active = 1;
348662306a36Sopenharmony_ci	req->active = active;
348762306a36Sopenharmony_ci}
348862306a36Sopenharmony_cistatic inline void
348962306a36Sopenharmony_ciethtool_eee_set_req_set_enabled(struct ethtool_eee_set_req *req, __u8 enabled)
349062306a36Sopenharmony_ci{
349162306a36Sopenharmony_ci	req->_present.enabled = 1;
349262306a36Sopenharmony_ci	req->enabled = enabled;
349362306a36Sopenharmony_ci}
349462306a36Sopenharmony_cistatic inline void
349562306a36Sopenharmony_ciethtool_eee_set_req_set_tx_lpi_enabled(struct ethtool_eee_set_req *req,
349662306a36Sopenharmony_ci				       __u8 tx_lpi_enabled)
349762306a36Sopenharmony_ci{
349862306a36Sopenharmony_ci	req->_present.tx_lpi_enabled = 1;
349962306a36Sopenharmony_ci	req->tx_lpi_enabled = tx_lpi_enabled;
350062306a36Sopenharmony_ci}
350162306a36Sopenharmony_cistatic inline void
350262306a36Sopenharmony_ciethtool_eee_set_req_set_tx_lpi_timer(struct ethtool_eee_set_req *req,
350362306a36Sopenharmony_ci				     __u32 tx_lpi_timer)
350462306a36Sopenharmony_ci{
350562306a36Sopenharmony_ci	req->_present.tx_lpi_timer = 1;
350662306a36Sopenharmony_ci	req->tx_lpi_timer = tx_lpi_timer;
350762306a36Sopenharmony_ci}
350862306a36Sopenharmony_ci
350962306a36Sopenharmony_ci/*
351062306a36Sopenharmony_ci * Set eee params.
351162306a36Sopenharmony_ci */
351262306a36Sopenharmony_ciint ethtool_eee_set(struct ynl_sock *ys, struct ethtool_eee_set_req *req);
351362306a36Sopenharmony_ci
351462306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_TSINFO_GET ============== */
351562306a36Sopenharmony_ci/* ETHTOOL_MSG_TSINFO_GET - do */
351662306a36Sopenharmony_cistruct ethtool_tsinfo_get_req {
351762306a36Sopenharmony_ci	struct {
351862306a36Sopenharmony_ci		__u32 header:1;
351962306a36Sopenharmony_ci	} _present;
352062306a36Sopenharmony_ci
352162306a36Sopenharmony_ci	struct ethtool_header header;
352262306a36Sopenharmony_ci};
352362306a36Sopenharmony_ci
352462306a36Sopenharmony_cistatic inline struct ethtool_tsinfo_get_req *ethtool_tsinfo_get_req_alloc(void)
352562306a36Sopenharmony_ci{
352662306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_tsinfo_get_req));
352762306a36Sopenharmony_ci}
352862306a36Sopenharmony_civoid ethtool_tsinfo_get_req_free(struct ethtool_tsinfo_get_req *req);
352962306a36Sopenharmony_ci
353062306a36Sopenharmony_cistatic inline void
353162306a36Sopenharmony_ciethtool_tsinfo_get_req_set_header_dev_index(struct ethtool_tsinfo_get_req *req,
353262306a36Sopenharmony_ci					    __u32 dev_index)
353362306a36Sopenharmony_ci{
353462306a36Sopenharmony_ci	req->_present.header = 1;
353562306a36Sopenharmony_ci	req->header._present.dev_index = 1;
353662306a36Sopenharmony_ci	req->header.dev_index = dev_index;
353762306a36Sopenharmony_ci}
353862306a36Sopenharmony_cistatic inline void
353962306a36Sopenharmony_ciethtool_tsinfo_get_req_set_header_dev_name(struct ethtool_tsinfo_get_req *req,
354062306a36Sopenharmony_ci					   const char *dev_name)
354162306a36Sopenharmony_ci{
354262306a36Sopenharmony_ci	free(req->header.dev_name);
354362306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
354462306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
354562306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
354662306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
354762306a36Sopenharmony_ci}
354862306a36Sopenharmony_cistatic inline void
354962306a36Sopenharmony_ciethtool_tsinfo_get_req_set_header_flags(struct ethtool_tsinfo_get_req *req,
355062306a36Sopenharmony_ci					__u32 flags)
355162306a36Sopenharmony_ci{
355262306a36Sopenharmony_ci	req->_present.header = 1;
355362306a36Sopenharmony_ci	req->header._present.flags = 1;
355462306a36Sopenharmony_ci	req->header.flags = flags;
355562306a36Sopenharmony_ci}
355662306a36Sopenharmony_ci
355762306a36Sopenharmony_cistruct ethtool_tsinfo_get_rsp {
355862306a36Sopenharmony_ci	struct {
355962306a36Sopenharmony_ci		__u32 header:1;
356062306a36Sopenharmony_ci		__u32 timestamping:1;
356162306a36Sopenharmony_ci		__u32 tx_types:1;
356262306a36Sopenharmony_ci		__u32 rx_filters:1;
356362306a36Sopenharmony_ci		__u32 phc_index:1;
356462306a36Sopenharmony_ci	} _present;
356562306a36Sopenharmony_ci
356662306a36Sopenharmony_ci	struct ethtool_header header;
356762306a36Sopenharmony_ci	struct ethtool_bitset timestamping;
356862306a36Sopenharmony_ci	struct ethtool_bitset tx_types;
356962306a36Sopenharmony_ci	struct ethtool_bitset rx_filters;
357062306a36Sopenharmony_ci	__u32 phc_index;
357162306a36Sopenharmony_ci};
357262306a36Sopenharmony_ci
357362306a36Sopenharmony_civoid ethtool_tsinfo_get_rsp_free(struct ethtool_tsinfo_get_rsp *rsp);
357462306a36Sopenharmony_ci
357562306a36Sopenharmony_ci/*
357662306a36Sopenharmony_ci * Get tsinfo params.
357762306a36Sopenharmony_ci */
357862306a36Sopenharmony_cistruct ethtool_tsinfo_get_rsp *
357962306a36Sopenharmony_ciethtool_tsinfo_get(struct ynl_sock *ys, struct ethtool_tsinfo_get_req *req);
358062306a36Sopenharmony_ci
358162306a36Sopenharmony_ci/* ETHTOOL_MSG_TSINFO_GET - dump */
358262306a36Sopenharmony_cistruct ethtool_tsinfo_get_req_dump {
358362306a36Sopenharmony_ci	struct {
358462306a36Sopenharmony_ci		__u32 header:1;
358562306a36Sopenharmony_ci	} _present;
358662306a36Sopenharmony_ci
358762306a36Sopenharmony_ci	struct ethtool_header header;
358862306a36Sopenharmony_ci};
358962306a36Sopenharmony_ci
359062306a36Sopenharmony_cistatic inline struct ethtool_tsinfo_get_req_dump *
359162306a36Sopenharmony_ciethtool_tsinfo_get_req_dump_alloc(void)
359262306a36Sopenharmony_ci{
359362306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_tsinfo_get_req_dump));
359462306a36Sopenharmony_ci}
359562306a36Sopenharmony_civoid ethtool_tsinfo_get_req_dump_free(struct ethtool_tsinfo_get_req_dump *req);
359662306a36Sopenharmony_ci
359762306a36Sopenharmony_cistatic inline void
359862306a36Sopenharmony_ciethtool_tsinfo_get_req_dump_set_header_dev_index(struct ethtool_tsinfo_get_req_dump *req,
359962306a36Sopenharmony_ci						 __u32 dev_index)
360062306a36Sopenharmony_ci{
360162306a36Sopenharmony_ci	req->_present.header = 1;
360262306a36Sopenharmony_ci	req->header._present.dev_index = 1;
360362306a36Sopenharmony_ci	req->header.dev_index = dev_index;
360462306a36Sopenharmony_ci}
360562306a36Sopenharmony_cistatic inline void
360662306a36Sopenharmony_ciethtool_tsinfo_get_req_dump_set_header_dev_name(struct ethtool_tsinfo_get_req_dump *req,
360762306a36Sopenharmony_ci						const char *dev_name)
360862306a36Sopenharmony_ci{
360962306a36Sopenharmony_ci	free(req->header.dev_name);
361062306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
361162306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
361262306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
361362306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
361462306a36Sopenharmony_ci}
361562306a36Sopenharmony_cistatic inline void
361662306a36Sopenharmony_ciethtool_tsinfo_get_req_dump_set_header_flags(struct ethtool_tsinfo_get_req_dump *req,
361762306a36Sopenharmony_ci					     __u32 flags)
361862306a36Sopenharmony_ci{
361962306a36Sopenharmony_ci	req->_present.header = 1;
362062306a36Sopenharmony_ci	req->header._present.flags = 1;
362162306a36Sopenharmony_ci	req->header.flags = flags;
362262306a36Sopenharmony_ci}
362362306a36Sopenharmony_ci
362462306a36Sopenharmony_cistruct ethtool_tsinfo_get_list {
362562306a36Sopenharmony_ci	struct ethtool_tsinfo_get_list *next;
362662306a36Sopenharmony_ci	struct ethtool_tsinfo_get_rsp obj __attribute__ ((aligned (8)));
362762306a36Sopenharmony_ci};
362862306a36Sopenharmony_ci
362962306a36Sopenharmony_civoid ethtool_tsinfo_get_list_free(struct ethtool_tsinfo_get_list *rsp);
363062306a36Sopenharmony_ci
363162306a36Sopenharmony_cistruct ethtool_tsinfo_get_list *
363262306a36Sopenharmony_ciethtool_tsinfo_get_dump(struct ynl_sock *ys,
363362306a36Sopenharmony_ci			struct ethtool_tsinfo_get_req_dump *req);
363462306a36Sopenharmony_ci
363562306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_CABLE_TEST_ACT ============== */
363662306a36Sopenharmony_ci/* ETHTOOL_MSG_CABLE_TEST_ACT - do */
363762306a36Sopenharmony_cistruct ethtool_cable_test_act_req {
363862306a36Sopenharmony_ci	struct {
363962306a36Sopenharmony_ci		__u32 header:1;
364062306a36Sopenharmony_ci	} _present;
364162306a36Sopenharmony_ci
364262306a36Sopenharmony_ci	struct ethtool_header header;
364362306a36Sopenharmony_ci};
364462306a36Sopenharmony_ci
364562306a36Sopenharmony_cistatic inline struct ethtool_cable_test_act_req *
364662306a36Sopenharmony_ciethtool_cable_test_act_req_alloc(void)
364762306a36Sopenharmony_ci{
364862306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_cable_test_act_req));
364962306a36Sopenharmony_ci}
365062306a36Sopenharmony_civoid ethtool_cable_test_act_req_free(struct ethtool_cable_test_act_req *req);
365162306a36Sopenharmony_ci
365262306a36Sopenharmony_cistatic inline void
365362306a36Sopenharmony_ciethtool_cable_test_act_req_set_header_dev_index(struct ethtool_cable_test_act_req *req,
365462306a36Sopenharmony_ci						__u32 dev_index)
365562306a36Sopenharmony_ci{
365662306a36Sopenharmony_ci	req->_present.header = 1;
365762306a36Sopenharmony_ci	req->header._present.dev_index = 1;
365862306a36Sopenharmony_ci	req->header.dev_index = dev_index;
365962306a36Sopenharmony_ci}
366062306a36Sopenharmony_cistatic inline void
366162306a36Sopenharmony_ciethtool_cable_test_act_req_set_header_dev_name(struct ethtool_cable_test_act_req *req,
366262306a36Sopenharmony_ci					       const char *dev_name)
366362306a36Sopenharmony_ci{
366462306a36Sopenharmony_ci	free(req->header.dev_name);
366562306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
366662306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
366762306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
366862306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
366962306a36Sopenharmony_ci}
367062306a36Sopenharmony_cistatic inline void
367162306a36Sopenharmony_ciethtool_cable_test_act_req_set_header_flags(struct ethtool_cable_test_act_req *req,
367262306a36Sopenharmony_ci					    __u32 flags)
367362306a36Sopenharmony_ci{
367462306a36Sopenharmony_ci	req->_present.header = 1;
367562306a36Sopenharmony_ci	req->header._present.flags = 1;
367662306a36Sopenharmony_ci	req->header.flags = flags;
367762306a36Sopenharmony_ci}
367862306a36Sopenharmony_ci
367962306a36Sopenharmony_ci/*
368062306a36Sopenharmony_ci * Cable test.
368162306a36Sopenharmony_ci */
368262306a36Sopenharmony_ciint ethtool_cable_test_act(struct ynl_sock *ys,
368362306a36Sopenharmony_ci			   struct ethtool_cable_test_act_req *req);
368462306a36Sopenharmony_ci
368562306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_CABLE_TEST_TDR_ACT ============== */
368662306a36Sopenharmony_ci/* ETHTOOL_MSG_CABLE_TEST_TDR_ACT - do */
368762306a36Sopenharmony_cistruct ethtool_cable_test_tdr_act_req {
368862306a36Sopenharmony_ci	struct {
368962306a36Sopenharmony_ci		__u32 header:1;
369062306a36Sopenharmony_ci	} _present;
369162306a36Sopenharmony_ci
369262306a36Sopenharmony_ci	struct ethtool_header header;
369362306a36Sopenharmony_ci};
369462306a36Sopenharmony_ci
369562306a36Sopenharmony_cistatic inline struct ethtool_cable_test_tdr_act_req *
369662306a36Sopenharmony_ciethtool_cable_test_tdr_act_req_alloc(void)
369762306a36Sopenharmony_ci{
369862306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_cable_test_tdr_act_req));
369962306a36Sopenharmony_ci}
370062306a36Sopenharmony_civoid
370162306a36Sopenharmony_ciethtool_cable_test_tdr_act_req_free(struct ethtool_cable_test_tdr_act_req *req);
370262306a36Sopenharmony_ci
370362306a36Sopenharmony_cistatic inline void
370462306a36Sopenharmony_ciethtool_cable_test_tdr_act_req_set_header_dev_index(struct ethtool_cable_test_tdr_act_req *req,
370562306a36Sopenharmony_ci						    __u32 dev_index)
370662306a36Sopenharmony_ci{
370762306a36Sopenharmony_ci	req->_present.header = 1;
370862306a36Sopenharmony_ci	req->header._present.dev_index = 1;
370962306a36Sopenharmony_ci	req->header.dev_index = dev_index;
371062306a36Sopenharmony_ci}
371162306a36Sopenharmony_cistatic inline void
371262306a36Sopenharmony_ciethtool_cable_test_tdr_act_req_set_header_dev_name(struct ethtool_cable_test_tdr_act_req *req,
371362306a36Sopenharmony_ci						   const char *dev_name)
371462306a36Sopenharmony_ci{
371562306a36Sopenharmony_ci	free(req->header.dev_name);
371662306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
371762306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
371862306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
371962306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
372062306a36Sopenharmony_ci}
372162306a36Sopenharmony_cistatic inline void
372262306a36Sopenharmony_ciethtool_cable_test_tdr_act_req_set_header_flags(struct ethtool_cable_test_tdr_act_req *req,
372362306a36Sopenharmony_ci						__u32 flags)
372462306a36Sopenharmony_ci{
372562306a36Sopenharmony_ci	req->_present.header = 1;
372662306a36Sopenharmony_ci	req->header._present.flags = 1;
372762306a36Sopenharmony_ci	req->header.flags = flags;
372862306a36Sopenharmony_ci}
372962306a36Sopenharmony_ci
373062306a36Sopenharmony_ci/*
373162306a36Sopenharmony_ci * Cable test TDR.
373262306a36Sopenharmony_ci */
373362306a36Sopenharmony_ciint ethtool_cable_test_tdr_act(struct ynl_sock *ys,
373462306a36Sopenharmony_ci			       struct ethtool_cable_test_tdr_act_req *req);
373562306a36Sopenharmony_ci
373662306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_TUNNEL_INFO_GET ============== */
373762306a36Sopenharmony_ci/* ETHTOOL_MSG_TUNNEL_INFO_GET - do */
373862306a36Sopenharmony_cistruct ethtool_tunnel_info_get_req {
373962306a36Sopenharmony_ci	struct {
374062306a36Sopenharmony_ci		__u32 header:1;
374162306a36Sopenharmony_ci	} _present;
374262306a36Sopenharmony_ci
374362306a36Sopenharmony_ci	struct ethtool_header header;
374462306a36Sopenharmony_ci};
374562306a36Sopenharmony_ci
374662306a36Sopenharmony_cistatic inline struct ethtool_tunnel_info_get_req *
374762306a36Sopenharmony_ciethtool_tunnel_info_get_req_alloc(void)
374862306a36Sopenharmony_ci{
374962306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_tunnel_info_get_req));
375062306a36Sopenharmony_ci}
375162306a36Sopenharmony_civoid ethtool_tunnel_info_get_req_free(struct ethtool_tunnel_info_get_req *req);
375262306a36Sopenharmony_ci
375362306a36Sopenharmony_cistatic inline void
375462306a36Sopenharmony_ciethtool_tunnel_info_get_req_set_header_dev_index(struct ethtool_tunnel_info_get_req *req,
375562306a36Sopenharmony_ci						 __u32 dev_index)
375662306a36Sopenharmony_ci{
375762306a36Sopenharmony_ci	req->_present.header = 1;
375862306a36Sopenharmony_ci	req->header._present.dev_index = 1;
375962306a36Sopenharmony_ci	req->header.dev_index = dev_index;
376062306a36Sopenharmony_ci}
376162306a36Sopenharmony_cistatic inline void
376262306a36Sopenharmony_ciethtool_tunnel_info_get_req_set_header_dev_name(struct ethtool_tunnel_info_get_req *req,
376362306a36Sopenharmony_ci						const char *dev_name)
376462306a36Sopenharmony_ci{
376562306a36Sopenharmony_ci	free(req->header.dev_name);
376662306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
376762306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
376862306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
376962306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
377062306a36Sopenharmony_ci}
377162306a36Sopenharmony_cistatic inline void
377262306a36Sopenharmony_ciethtool_tunnel_info_get_req_set_header_flags(struct ethtool_tunnel_info_get_req *req,
377362306a36Sopenharmony_ci					     __u32 flags)
377462306a36Sopenharmony_ci{
377562306a36Sopenharmony_ci	req->_present.header = 1;
377662306a36Sopenharmony_ci	req->header._present.flags = 1;
377762306a36Sopenharmony_ci	req->header.flags = flags;
377862306a36Sopenharmony_ci}
377962306a36Sopenharmony_ci
378062306a36Sopenharmony_cistruct ethtool_tunnel_info_get_rsp {
378162306a36Sopenharmony_ci	struct {
378262306a36Sopenharmony_ci		__u32 header:1;
378362306a36Sopenharmony_ci		__u32 udp_ports:1;
378462306a36Sopenharmony_ci	} _present;
378562306a36Sopenharmony_ci
378662306a36Sopenharmony_ci	struct ethtool_header header;
378762306a36Sopenharmony_ci	struct ethtool_tunnel_udp udp_ports;
378862306a36Sopenharmony_ci};
378962306a36Sopenharmony_ci
379062306a36Sopenharmony_civoid ethtool_tunnel_info_get_rsp_free(struct ethtool_tunnel_info_get_rsp *rsp);
379162306a36Sopenharmony_ci
379262306a36Sopenharmony_ci/*
379362306a36Sopenharmony_ci * Get tsinfo params.
379462306a36Sopenharmony_ci */
379562306a36Sopenharmony_cistruct ethtool_tunnel_info_get_rsp *
379662306a36Sopenharmony_ciethtool_tunnel_info_get(struct ynl_sock *ys,
379762306a36Sopenharmony_ci			struct ethtool_tunnel_info_get_req *req);
379862306a36Sopenharmony_ci
379962306a36Sopenharmony_ci/* ETHTOOL_MSG_TUNNEL_INFO_GET - dump */
380062306a36Sopenharmony_cistruct ethtool_tunnel_info_get_req_dump {
380162306a36Sopenharmony_ci	struct {
380262306a36Sopenharmony_ci		__u32 header:1;
380362306a36Sopenharmony_ci	} _present;
380462306a36Sopenharmony_ci
380562306a36Sopenharmony_ci	struct ethtool_header header;
380662306a36Sopenharmony_ci};
380762306a36Sopenharmony_ci
380862306a36Sopenharmony_cistatic inline struct ethtool_tunnel_info_get_req_dump *
380962306a36Sopenharmony_ciethtool_tunnel_info_get_req_dump_alloc(void)
381062306a36Sopenharmony_ci{
381162306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_tunnel_info_get_req_dump));
381262306a36Sopenharmony_ci}
381362306a36Sopenharmony_civoid
381462306a36Sopenharmony_ciethtool_tunnel_info_get_req_dump_free(struct ethtool_tunnel_info_get_req_dump *req);
381562306a36Sopenharmony_ci
381662306a36Sopenharmony_cistatic inline void
381762306a36Sopenharmony_ciethtool_tunnel_info_get_req_dump_set_header_dev_index(struct ethtool_tunnel_info_get_req_dump *req,
381862306a36Sopenharmony_ci						      __u32 dev_index)
381962306a36Sopenharmony_ci{
382062306a36Sopenharmony_ci	req->_present.header = 1;
382162306a36Sopenharmony_ci	req->header._present.dev_index = 1;
382262306a36Sopenharmony_ci	req->header.dev_index = dev_index;
382362306a36Sopenharmony_ci}
382462306a36Sopenharmony_cistatic inline void
382562306a36Sopenharmony_ciethtool_tunnel_info_get_req_dump_set_header_dev_name(struct ethtool_tunnel_info_get_req_dump *req,
382662306a36Sopenharmony_ci						     const char *dev_name)
382762306a36Sopenharmony_ci{
382862306a36Sopenharmony_ci	free(req->header.dev_name);
382962306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
383062306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
383162306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
383262306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
383362306a36Sopenharmony_ci}
383462306a36Sopenharmony_cistatic inline void
383562306a36Sopenharmony_ciethtool_tunnel_info_get_req_dump_set_header_flags(struct ethtool_tunnel_info_get_req_dump *req,
383662306a36Sopenharmony_ci						  __u32 flags)
383762306a36Sopenharmony_ci{
383862306a36Sopenharmony_ci	req->_present.header = 1;
383962306a36Sopenharmony_ci	req->header._present.flags = 1;
384062306a36Sopenharmony_ci	req->header.flags = flags;
384162306a36Sopenharmony_ci}
384262306a36Sopenharmony_ci
384362306a36Sopenharmony_cistruct ethtool_tunnel_info_get_list {
384462306a36Sopenharmony_ci	struct ethtool_tunnel_info_get_list *next;
384562306a36Sopenharmony_ci	struct ethtool_tunnel_info_get_rsp obj __attribute__ ((aligned (8)));
384662306a36Sopenharmony_ci};
384762306a36Sopenharmony_ci
384862306a36Sopenharmony_civoid
384962306a36Sopenharmony_ciethtool_tunnel_info_get_list_free(struct ethtool_tunnel_info_get_list *rsp);
385062306a36Sopenharmony_ci
385162306a36Sopenharmony_cistruct ethtool_tunnel_info_get_list *
385262306a36Sopenharmony_ciethtool_tunnel_info_get_dump(struct ynl_sock *ys,
385362306a36Sopenharmony_ci			     struct ethtool_tunnel_info_get_req_dump *req);
385462306a36Sopenharmony_ci
385562306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_FEC_GET ============== */
385662306a36Sopenharmony_ci/* ETHTOOL_MSG_FEC_GET - do */
385762306a36Sopenharmony_cistruct ethtool_fec_get_req {
385862306a36Sopenharmony_ci	struct {
385962306a36Sopenharmony_ci		__u32 header:1;
386062306a36Sopenharmony_ci	} _present;
386162306a36Sopenharmony_ci
386262306a36Sopenharmony_ci	struct ethtool_header header;
386362306a36Sopenharmony_ci};
386462306a36Sopenharmony_ci
386562306a36Sopenharmony_cistatic inline struct ethtool_fec_get_req *ethtool_fec_get_req_alloc(void)
386662306a36Sopenharmony_ci{
386762306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_fec_get_req));
386862306a36Sopenharmony_ci}
386962306a36Sopenharmony_civoid ethtool_fec_get_req_free(struct ethtool_fec_get_req *req);
387062306a36Sopenharmony_ci
387162306a36Sopenharmony_cistatic inline void
387262306a36Sopenharmony_ciethtool_fec_get_req_set_header_dev_index(struct ethtool_fec_get_req *req,
387362306a36Sopenharmony_ci					 __u32 dev_index)
387462306a36Sopenharmony_ci{
387562306a36Sopenharmony_ci	req->_present.header = 1;
387662306a36Sopenharmony_ci	req->header._present.dev_index = 1;
387762306a36Sopenharmony_ci	req->header.dev_index = dev_index;
387862306a36Sopenharmony_ci}
387962306a36Sopenharmony_cistatic inline void
388062306a36Sopenharmony_ciethtool_fec_get_req_set_header_dev_name(struct ethtool_fec_get_req *req,
388162306a36Sopenharmony_ci					const char *dev_name)
388262306a36Sopenharmony_ci{
388362306a36Sopenharmony_ci	free(req->header.dev_name);
388462306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
388562306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
388662306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
388762306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
388862306a36Sopenharmony_ci}
388962306a36Sopenharmony_cistatic inline void
389062306a36Sopenharmony_ciethtool_fec_get_req_set_header_flags(struct ethtool_fec_get_req *req,
389162306a36Sopenharmony_ci				     __u32 flags)
389262306a36Sopenharmony_ci{
389362306a36Sopenharmony_ci	req->_present.header = 1;
389462306a36Sopenharmony_ci	req->header._present.flags = 1;
389562306a36Sopenharmony_ci	req->header.flags = flags;
389662306a36Sopenharmony_ci}
389762306a36Sopenharmony_ci
389862306a36Sopenharmony_cistruct ethtool_fec_get_rsp {
389962306a36Sopenharmony_ci	struct {
390062306a36Sopenharmony_ci		__u32 header:1;
390162306a36Sopenharmony_ci		__u32 modes:1;
390262306a36Sopenharmony_ci		__u32 auto_:1;
390362306a36Sopenharmony_ci		__u32 active:1;
390462306a36Sopenharmony_ci		__u32 stats:1;
390562306a36Sopenharmony_ci	} _present;
390662306a36Sopenharmony_ci
390762306a36Sopenharmony_ci	struct ethtool_header header;
390862306a36Sopenharmony_ci	struct ethtool_bitset modes;
390962306a36Sopenharmony_ci	__u8 auto_;
391062306a36Sopenharmony_ci	__u32 active;
391162306a36Sopenharmony_ci	struct ethtool_fec_stat stats;
391262306a36Sopenharmony_ci};
391362306a36Sopenharmony_ci
391462306a36Sopenharmony_civoid ethtool_fec_get_rsp_free(struct ethtool_fec_get_rsp *rsp);
391562306a36Sopenharmony_ci
391662306a36Sopenharmony_ci/*
391762306a36Sopenharmony_ci * Get FEC params.
391862306a36Sopenharmony_ci */
391962306a36Sopenharmony_cistruct ethtool_fec_get_rsp *
392062306a36Sopenharmony_ciethtool_fec_get(struct ynl_sock *ys, struct ethtool_fec_get_req *req);
392162306a36Sopenharmony_ci
392262306a36Sopenharmony_ci/* ETHTOOL_MSG_FEC_GET - dump */
392362306a36Sopenharmony_cistruct ethtool_fec_get_req_dump {
392462306a36Sopenharmony_ci	struct {
392562306a36Sopenharmony_ci		__u32 header:1;
392662306a36Sopenharmony_ci	} _present;
392762306a36Sopenharmony_ci
392862306a36Sopenharmony_ci	struct ethtool_header header;
392962306a36Sopenharmony_ci};
393062306a36Sopenharmony_ci
393162306a36Sopenharmony_cistatic inline struct ethtool_fec_get_req_dump *
393262306a36Sopenharmony_ciethtool_fec_get_req_dump_alloc(void)
393362306a36Sopenharmony_ci{
393462306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_fec_get_req_dump));
393562306a36Sopenharmony_ci}
393662306a36Sopenharmony_civoid ethtool_fec_get_req_dump_free(struct ethtool_fec_get_req_dump *req);
393762306a36Sopenharmony_ci
393862306a36Sopenharmony_cistatic inline void
393962306a36Sopenharmony_ciethtool_fec_get_req_dump_set_header_dev_index(struct ethtool_fec_get_req_dump *req,
394062306a36Sopenharmony_ci					      __u32 dev_index)
394162306a36Sopenharmony_ci{
394262306a36Sopenharmony_ci	req->_present.header = 1;
394362306a36Sopenharmony_ci	req->header._present.dev_index = 1;
394462306a36Sopenharmony_ci	req->header.dev_index = dev_index;
394562306a36Sopenharmony_ci}
394662306a36Sopenharmony_cistatic inline void
394762306a36Sopenharmony_ciethtool_fec_get_req_dump_set_header_dev_name(struct ethtool_fec_get_req_dump *req,
394862306a36Sopenharmony_ci					     const char *dev_name)
394962306a36Sopenharmony_ci{
395062306a36Sopenharmony_ci	free(req->header.dev_name);
395162306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
395262306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
395362306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
395462306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
395562306a36Sopenharmony_ci}
395662306a36Sopenharmony_cistatic inline void
395762306a36Sopenharmony_ciethtool_fec_get_req_dump_set_header_flags(struct ethtool_fec_get_req_dump *req,
395862306a36Sopenharmony_ci					  __u32 flags)
395962306a36Sopenharmony_ci{
396062306a36Sopenharmony_ci	req->_present.header = 1;
396162306a36Sopenharmony_ci	req->header._present.flags = 1;
396262306a36Sopenharmony_ci	req->header.flags = flags;
396362306a36Sopenharmony_ci}
396462306a36Sopenharmony_ci
396562306a36Sopenharmony_cistruct ethtool_fec_get_list {
396662306a36Sopenharmony_ci	struct ethtool_fec_get_list *next;
396762306a36Sopenharmony_ci	struct ethtool_fec_get_rsp obj __attribute__ ((aligned (8)));
396862306a36Sopenharmony_ci};
396962306a36Sopenharmony_ci
397062306a36Sopenharmony_civoid ethtool_fec_get_list_free(struct ethtool_fec_get_list *rsp);
397162306a36Sopenharmony_ci
397262306a36Sopenharmony_cistruct ethtool_fec_get_list *
397362306a36Sopenharmony_ciethtool_fec_get_dump(struct ynl_sock *ys, struct ethtool_fec_get_req_dump *req);
397462306a36Sopenharmony_ci
397562306a36Sopenharmony_ci/* ETHTOOL_MSG_FEC_GET - notify */
397662306a36Sopenharmony_cistruct ethtool_fec_get_ntf {
397762306a36Sopenharmony_ci	__u16 family;
397862306a36Sopenharmony_ci	__u8 cmd;
397962306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
398062306a36Sopenharmony_ci	void (*free)(struct ethtool_fec_get_ntf *ntf);
398162306a36Sopenharmony_ci	struct ethtool_fec_get_rsp obj __attribute__ ((aligned (8)));
398262306a36Sopenharmony_ci};
398362306a36Sopenharmony_ci
398462306a36Sopenharmony_civoid ethtool_fec_get_ntf_free(struct ethtool_fec_get_ntf *rsp);
398562306a36Sopenharmony_ci
398662306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_FEC_SET ============== */
398762306a36Sopenharmony_ci/* ETHTOOL_MSG_FEC_SET - do */
398862306a36Sopenharmony_cistruct ethtool_fec_set_req {
398962306a36Sopenharmony_ci	struct {
399062306a36Sopenharmony_ci		__u32 header:1;
399162306a36Sopenharmony_ci		__u32 modes:1;
399262306a36Sopenharmony_ci		__u32 auto_:1;
399362306a36Sopenharmony_ci		__u32 active:1;
399462306a36Sopenharmony_ci		__u32 stats:1;
399562306a36Sopenharmony_ci	} _present;
399662306a36Sopenharmony_ci
399762306a36Sopenharmony_ci	struct ethtool_header header;
399862306a36Sopenharmony_ci	struct ethtool_bitset modes;
399962306a36Sopenharmony_ci	__u8 auto_;
400062306a36Sopenharmony_ci	__u32 active;
400162306a36Sopenharmony_ci	struct ethtool_fec_stat stats;
400262306a36Sopenharmony_ci};
400362306a36Sopenharmony_ci
400462306a36Sopenharmony_cistatic inline struct ethtool_fec_set_req *ethtool_fec_set_req_alloc(void)
400562306a36Sopenharmony_ci{
400662306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_fec_set_req));
400762306a36Sopenharmony_ci}
400862306a36Sopenharmony_civoid ethtool_fec_set_req_free(struct ethtool_fec_set_req *req);
400962306a36Sopenharmony_ci
401062306a36Sopenharmony_cistatic inline void
401162306a36Sopenharmony_ciethtool_fec_set_req_set_header_dev_index(struct ethtool_fec_set_req *req,
401262306a36Sopenharmony_ci					 __u32 dev_index)
401362306a36Sopenharmony_ci{
401462306a36Sopenharmony_ci	req->_present.header = 1;
401562306a36Sopenharmony_ci	req->header._present.dev_index = 1;
401662306a36Sopenharmony_ci	req->header.dev_index = dev_index;
401762306a36Sopenharmony_ci}
401862306a36Sopenharmony_cistatic inline void
401962306a36Sopenharmony_ciethtool_fec_set_req_set_header_dev_name(struct ethtool_fec_set_req *req,
402062306a36Sopenharmony_ci					const char *dev_name)
402162306a36Sopenharmony_ci{
402262306a36Sopenharmony_ci	free(req->header.dev_name);
402362306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
402462306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
402562306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
402662306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
402762306a36Sopenharmony_ci}
402862306a36Sopenharmony_cistatic inline void
402962306a36Sopenharmony_ciethtool_fec_set_req_set_header_flags(struct ethtool_fec_set_req *req,
403062306a36Sopenharmony_ci				     __u32 flags)
403162306a36Sopenharmony_ci{
403262306a36Sopenharmony_ci	req->_present.header = 1;
403362306a36Sopenharmony_ci	req->header._present.flags = 1;
403462306a36Sopenharmony_ci	req->header.flags = flags;
403562306a36Sopenharmony_ci}
403662306a36Sopenharmony_cistatic inline void
403762306a36Sopenharmony_ciethtool_fec_set_req_set_modes_nomask(struct ethtool_fec_set_req *req)
403862306a36Sopenharmony_ci{
403962306a36Sopenharmony_ci	req->_present.modes = 1;
404062306a36Sopenharmony_ci	req->modes._present.nomask = 1;
404162306a36Sopenharmony_ci}
404262306a36Sopenharmony_cistatic inline void
404362306a36Sopenharmony_ciethtool_fec_set_req_set_modes_size(struct ethtool_fec_set_req *req, __u32 size)
404462306a36Sopenharmony_ci{
404562306a36Sopenharmony_ci	req->_present.modes = 1;
404662306a36Sopenharmony_ci	req->modes._present.size = 1;
404762306a36Sopenharmony_ci	req->modes.size = size;
404862306a36Sopenharmony_ci}
404962306a36Sopenharmony_cistatic inline void
405062306a36Sopenharmony_ci__ethtool_fec_set_req_set_modes_bits_bit(struct ethtool_fec_set_req *req,
405162306a36Sopenharmony_ci					 struct ethtool_bitset_bit *bit,
405262306a36Sopenharmony_ci					 unsigned int n_bit)
405362306a36Sopenharmony_ci{
405462306a36Sopenharmony_ci	free(req->modes.bits.bit);
405562306a36Sopenharmony_ci	req->modes.bits.bit = bit;
405662306a36Sopenharmony_ci	req->modes.bits.n_bit = n_bit;
405762306a36Sopenharmony_ci}
405862306a36Sopenharmony_cistatic inline void
405962306a36Sopenharmony_ciethtool_fec_set_req_set_auto_(struct ethtool_fec_set_req *req, __u8 auto_)
406062306a36Sopenharmony_ci{
406162306a36Sopenharmony_ci	req->_present.auto_ = 1;
406262306a36Sopenharmony_ci	req->auto_ = auto_;
406362306a36Sopenharmony_ci}
406462306a36Sopenharmony_cistatic inline void
406562306a36Sopenharmony_ciethtool_fec_set_req_set_active(struct ethtool_fec_set_req *req, __u32 active)
406662306a36Sopenharmony_ci{
406762306a36Sopenharmony_ci	req->_present.active = 1;
406862306a36Sopenharmony_ci	req->active = active;
406962306a36Sopenharmony_ci}
407062306a36Sopenharmony_cistatic inline void
407162306a36Sopenharmony_ciethtool_fec_set_req_set_stats_corrected(struct ethtool_fec_set_req *req,
407262306a36Sopenharmony_ci					const void *corrected, size_t len)
407362306a36Sopenharmony_ci{
407462306a36Sopenharmony_ci	free(req->stats.corrected);
407562306a36Sopenharmony_ci	req->stats._present.corrected_len = len;
407662306a36Sopenharmony_ci	req->stats.corrected = malloc(req->stats._present.corrected_len);
407762306a36Sopenharmony_ci	memcpy(req->stats.corrected, corrected, req->stats._present.corrected_len);
407862306a36Sopenharmony_ci}
407962306a36Sopenharmony_cistatic inline void
408062306a36Sopenharmony_ciethtool_fec_set_req_set_stats_uncorr(struct ethtool_fec_set_req *req,
408162306a36Sopenharmony_ci				     const void *uncorr, size_t len)
408262306a36Sopenharmony_ci{
408362306a36Sopenharmony_ci	free(req->stats.uncorr);
408462306a36Sopenharmony_ci	req->stats._present.uncorr_len = len;
408562306a36Sopenharmony_ci	req->stats.uncorr = malloc(req->stats._present.uncorr_len);
408662306a36Sopenharmony_ci	memcpy(req->stats.uncorr, uncorr, req->stats._present.uncorr_len);
408762306a36Sopenharmony_ci}
408862306a36Sopenharmony_cistatic inline void
408962306a36Sopenharmony_ciethtool_fec_set_req_set_stats_corr_bits(struct ethtool_fec_set_req *req,
409062306a36Sopenharmony_ci					const void *corr_bits, size_t len)
409162306a36Sopenharmony_ci{
409262306a36Sopenharmony_ci	free(req->stats.corr_bits);
409362306a36Sopenharmony_ci	req->stats._present.corr_bits_len = len;
409462306a36Sopenharmony_ci	req->stats.corr_bits = malloc(req->stats._present.corr_bits_len);
409562306a36Sopenharmony_ci	memcpy(req->stats.corr_bits, corr_bits, req->stats._present.corr_bits_len);
409662306a36Sopenharmony_ci}
409762306a36Sopenharmony_ci
409862306a36Sopenharmony_ci/*
409962306a36Sopenharmony_ci * Set FEC params.
410062306a36Sopenharmony_ci */
410162306a36Sopenharmony_ciint ethtool_fec_set(struct ynl_sock *ys, struct ethtool_fec_set_req *req);
410262306a36Sopenharmony_ci
410362306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_MODULE_EEPROM_GET ============== */
410462306a36Sopenharmony_ci/* ETHTOOL_MSG_MODULE_EEPROM_GET - do */
410562306a36Sopenharmony_cistruct ethtool_module_eeprom_get_req {
410662306a36Sopenharmony_ci	struct {
410762306a36Sopenharmony_ci		__u32 header:1;
410862306a36Sopenharmony_ci	} _present;
410962306a36Sopenharmony_ci
411062306a36Sopenharmony_ci	struct ethtool_header header;
411162306a36Sopenharmony_ci};
411262306a36Sopenharmony_ci
411362306a36Sopenharmony_cistatic inline struct ethtool_module_eeprom_get_req *
411462306a36Sopenharmony_ciethtool_module_eeprom_get_req_alloc(void)
411562306a36Sopenharmony_ci{
411662306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_module_eeprom_get_req));
411762306a36Sopenharmony_ci}
411862306a36Sopenharmony_civoid
411962306a36Sopenharmony_ciethtool_module_eeprom_get_req_free(struct ethtool_module_eeprom_get_req *req);
412062306a36Sopenharmony_ci
412162306a36Sopenharmony_cistatic inline void
412262306a36Sopenharmony_ciethtool_module_eeprom_get_req_set_header_dev_index(struct ethtool_module_eeprom_get_req *req,
412362306a36Sopenharmony_ci						   __u32 dev_index)
412462306a36Sopenharmony_ci{
412562306a36Sopenharmony_ci	req->_present.header = 1;
412662306a36Sopenharmony_ci	req->header._present.dev_index = 1;
412762306a36Sopenharmony_ci	req->header.dev_index = dev_index;
412862306a36Sopenharmony_ci}
412962306a36Sopenharmony_cistatic inline void
413062306a36Sopenharmony_ciethtool_module_eeprom_get_req_set_header_dev_name(struct ethtool_module_eeprom_get_req *req,
413162306a36Sopenharmony_ci						  const char *dev_name)
413262306a36Sopenharmony_ci{
413362306a36Sopenharmony_ci	free(req->header.dev_name);
413462306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
413562306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
413662306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
413762306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
413862306a36Sopenharmony_ci}
413962306a36Sopenharmony_cistatic inline void
414062306a36Sopenharmony_ciethtool_module_eeprom_get_req_set_header_flags(struct ethtool_module_eeprom_get_req *req,
414162306a36Sopenharmony_ci					       __u32 flags)
414262306a36Sopenharmony_ci{
414362306a36Sopenharmony_ci	req->_present.header = 1;
414462306a36Sopenharmony_ci	req->header._present.flags = 1;
414562306a36Sopenharmony_ci	req->header.flags = flags;
414662306a36Sopenharmony_ci}
414762306a36Sopenharmony_ci
414862306a36Sopenharmony_cistruct ethtool_module_eeprom_get_rsp {
414962306a36Sopenharmony_ci	struct {
415062306a36Sopenharmony_ci		__u32 header:1;
415162306a36Sopenharmony_ci		__u32 offset:1;
415262306a36Sopenharmony_ci		__u32 length:1;
415362306a36Sopenharmony_ci		__u32 page:1;
415462306a36Sopenharmony_ci		__u32 bank:1;
415562306a36Sopenharmony_ci		__u32 i2c_address:1;
415662306a36Sopenharmony_ci		__u32 data_len;
415762306a36Sopenharmony_ci	} _present;
415862306a36Sopenharmony_ci
415962306a36Sopenharmony_ci	struct ethtool_header header;
416062306a36Sopenharmony_ci	__u32 offset;
416162306a36Sopenharmony_ci	__u32 length;
416262306a36Sopenharmony_ci	__u8 page;
416362306a36Sopenharmony_ci	__u8 bank;
416462306a36Sopenharmony_ci	__u8 i2c_address;
416562306a36Sopenharmony_ci	void *data;
416662306a36Sopenharmony_ci};
416762306a36Sopenharmony_ci
416862306a36Sopenharmony_civoid
416962306a36Sopenharmony_ciethtool_module_eeprom_get_rsp_free(struct ethtool_module_eeprom_get_rsp *rsp);
417062306a36Sopenharmony_ci
417162306a36Sopenharmony_ci/*
417262306a36Sopenharmony_ci * Get module EEPROM params.
417362306a36Sopenharmony_ci */
417462306a36Sopenharmony_cistruct ethtool_module_eeprom_get_rsp *
417562306a36Sopenharmony_ciethtool_module_eeprom_get(struct ynl_sock *ys,
417662306a36Sopenharmony_ci			  struct ethtool_module_eeprom_get_req *req);
417762306a36Sopenharmony_ci
417862306a36Sopenharmony_ci/* ETHTOOL_MSG_MODULE_EEPROM_GET - dump */
417962306a36Sopenharmony_cistruct ethtool_module_eeprom_get_req_dump {
418062306a36Sopenharmony_ci	struct {
418162306a36Sopenharmony_ci		__u32 header:1;
418262306a36Sopenharmony_ci	} _present;
418362306a36Sopenharmony_ci
418462306a36Sopenharmony_ci	struct ethtool_header header;
418562306a36Sopenharmony_ci};
418662306a36Sopenharmony_ci
418762306a36Sopenharmony_cistatic inline struct ethtool_module_eeprom_get_req_dump *
418862306a36Sopenharmony_ciethtool_module_eeprom_get_req_dump_alloc(void)
418962306a36Sopenharmony_ci{
419062306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_module_eeprom_get_req_dump));
419162306a36Sopenharmony_ci}
419262306a36Sopenharmony_civoid
419362306a36Sopenharmony_ciethtool_module_eeprom_get_req_dump_free(struct ethtool_module_eeprom_get_req_dump *req);
419462306a36Sopenharmony_ci
419562306a36Sopenharmony_cistatic inline void
419662306a36Sopenharmony_ciethtool_module_eeprom_get_req_dump_set_header_dev_index(struct ethtool_module_eeprom_get_req_dump *req,
419762306a36Sopenharmony_ci							__u32 dev_index)
419862306a36Sopenharmony_ci{
419962306a36Sopenharmony_ci	req->_present.header = 1;
420062306a36Sopenharmony_ci	req->header._present.dev_index = 1;
420162306a36Sopenharmony_ci	req->header.dev_index = dev_index;
420262306a36Sopenharmony_ci}
420362306a36Sopenharmony_cistatic inline void
420462306a36Sopenharmony_ciethtool_module_eeprom_get_req_dump_set_header_dev_name(struct ethtool_module_eeprom_get_req_dump *req,
420562306a36Sopenharmony_ci						       const char *dev_name)
420662306a36Sopenharmony_ci{
420762306a36Sopenharmony_ci	free(req->header.dev_name);
420862306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
420962306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
421062306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
421162306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
421262306a36Sopenharmony_ci}
421362306a36Sopenharmony_cistatic inline void
421462306a36Sopenharmony_ciethtool_module_eeprom_get_req_dump_set_header_flags(struct ethtool_module_eeprom_get_req_dump *req,
421562306a36Sopenharmony_ci						    __u32 flags)
421662306a36Sopenharmony_ci{
421762306a36Sopenharmony_ci	req->_present.header = 1;
421862306a36Sopenharmony_ci	req->header._present.flags = 1;
421962306a36Sopenharmony_ci	req->header.flags = flags;
422062306a36Sopenharmony_ci}
422162306a36Sopenharmony_ci
422262306a36Sopenharmony_cistruct ethtool_module_eeprom_get_list {
422362306a36Sopenharmony_ci	struct ethtool_module_eeprom_get_list *next;
422462306a36Sopenharmony_ci	struct ethtool_module_eeprom_get_rsp obj __attribute__ ((aligned (8)));
422562306a36Sopenharmony_ci};
422662306a36Sopenharmony_ci
422762306a36Sopenharmony_civoid
422862306a36Sopenharmony_ciethtool_module_eeprom_get_list_free(struct ethtool_module_eeprom_get_list *rsp);
422962306a36Sopenharmony_ci
423062306a36Sopenharmony_cistruct ethtool_module_eeprom_get_list *
423162306a36Sopenharmony_ciethtool_module_eeprom_get_dump(struct ynl_sock *ys,
423262306a36Sopenharmony_ci			       struct ethtool_module_eeprom_get_req_dump *req);
423362306a36Sopenharmony_ci
423462306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_PHC_VCLOCKS_GET ============== */
423562306a36Sopenharmony_ci/* ETHTOOL_MSG_PHC_VCLOCKS_GET - do */
423662306a36Sopenharmony_cistruct ethtool_phc_vclocks_get_req {
423762306a36Sopenharmony_ci	struct {
423862306a36Sopenharmony_ci		__u32 header:1;
423962306a36Sopenharmony_ci	} _present;
424062306a36Sopenharmony_ci
424162306a36Sopenharmony_ci	struct ethtool_header header;
424262306a36Sopenharmony_ci};
424362306a36Sopenharmony_ci
424462306a36Sopenharmony_cistatic inline struct ethtool_phc_vclocks_get_req *
424562306a36Sopenharmony_ciethtool_phc_vclocks_get_req_alloc(void)
424662306a36Sopenharmony_ci{
424762306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_phc_vclocks_get_req));
424862306a36Sopenharmony_ci}
424962306a36Sopenharmony_civoid ethtool_phc_vclocks_get_req_free(struct ethtool_phc_vclocks_get_req *req);
425062306a36Sopenharmony_ci
425162306a36Sopenharmony_cistatic inline void
425262306a36Sopenharmony_ciethtool_phc_vclocks_get_req_set_header_dev_index(struct ethtool_phc_vclocks_get_req *req,
425362306a36Sopenharmony_ci						 __u32 dev_index)
425462306a36Sopenharmony_ci{
425562306a36Sopenharmony_ci	req->_present.header = 1;
425662306a36Sopenharmony_ci	req->header._present.dev_index = 1;
425762306a36Sopenharmony_ci	req->header.dev_index = dev_index;
425862306a36Sopenharmony_ci}
425962306a36Sopenharmony_cistatic inline void
426062306a36Sopenharmony_ciethtool_phc_vclocks_get_req_set_header_dev_name(struct ethtool_phc_vclocks_get_req *req,
426162306a36Sopenharmony_ci						const char *dev_name)
426262306a36Sopenharmony_ci{
426362306a36Sopenharmony_ci	free(req->header.dev_name);
426462306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
426562306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
426662306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
426762306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
426862306a36Sopenharmony_ci}
426962306a36Sopenharmony_cistatic inline void
427062306a36Sopenharmony_ciethtool_phc_vclocks_get_req_set_header_flags(struct ethtool_phc_vclocks_get_req *req,
427162306a36Sopenharmony_ci					     __u32 flags)
427262306a36Sopenharmony_ci{
427362306a36Sopenharmony_ci	req->_present.header = 1;
427462306a36Sopenharmony_ci	req->header._present.flags = 1;
427562306a36Sopenharmony_ci	req->header.flags = flags;
427662306a36Sopenharmony_ci}
427762306a36Sopenharmony_ci
427862306a36Sopenharmony_cistruct ethtool_phc_vclocks_get_rsp {
427962306a36Sopenharmony_ci	struct {
428062306a36Sopenharmony_ci		__u32 header:1;
428162306a36Sopenharmony_ci		__u32 num:1;
428262306a36Sopenharmony_ci	} _present;
428362306a36Sopenharmony_ci
428462306a36Sopenharmony_ci	struct ethtool_header header;
428562306a36Sopenharmony_ci	__u32 num;
428662306a36Sopenharmony_ci};
428762306a36Sopenharmony_ci
428862306a36Sopenharmony_civoid ethtool_phc_vclocks_get_rsp_free(struct ethtool_phc_vclocks_get_rsp *rsp);
428962306a36Sopenharmony_ci
429062306a36Sopenharmony_ci/*
429162306a36Sopenharmony_ci * Get PHC VCLOCKs.
429262306a36Sopenharmony_ci */
429362306a36Sopenharmony_cistruct ethtool_phc_vclocks_get_rsp *
429462306a36Sopenharmony_ciethtool_phc_vclocks_get(struct ynl_sock *ys,
429562306a36Sopenharmony_ci			struct ethtool_phc_vclocks_get_req *req);
429662306a36Sopenharmony_ci
429762306a36Sopenharmony_ci/* ETHTOOL_MSG_PHC_VCLOCKS_GET - dump */
429862306a36Sopenharmony_cistruct ethtool_phc_vclocks_get_req_dump {
429962306a36Sopenharmony_ci	struct {
430062306a36Sopenharmony_ci		__u32 header:1;
430162306a36Sopenharmony_ci	} _present;
430262306a36Sopenharmony_ci
430362306a36Sopenharmony_ci	struct ethtool_header header;
430462306a36Sopenharmony_ci};
430562306a36Sopenharmony_ci
430662306a36Sopenharmony_cistatic inline struct ethtool_phc_vclocks_get_req_dump *
430762306a36Sopenharmony_ciethtool_phc_vclocks_get_req_dump_alloc(void)
430862306a36Sopenharmony_ci{
430962306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_phc_vclocks_get_req_dump));
431062306a36Sopenharmony_ci}
431162306a36Sopenharmony_civoid
431262306a36Sopenharmony_ciethtool_phc_vclocks_get_req_dump_free(struct ethtool_phc_vclocks_get_req_dump *req);
431362306a36Sopenharmony_ci
431462306a36Sopenharmony_cistatic inline void
431562306a36Sopenharmony_ciethtool_phc_vclocks_get_req_dump_set_header_dev_index(struct ethtool_phc_vclocks_get_req_dump *req,
431662306a36Sopenharmony_ci						      __u32 dev_index)
431762306a36Sopenharmony_ci{
431862306a36Sopenharmony_ci	req->_present.header = 1;
431962306a36Sopenharmony_ci	req->header._present.dev_index = 1;
432062306a36Sopenharmony_ci	req->header.dev_index = dev_index;
432162306a36Sopenharmony_ci}
432262306a36Sopenharmony_cistatic inline void
432362306a36Sopenharmony_ciethtool_phc_vclocks_get_req_dump_set_header_dev_name(struct ethtool_phc_vclocks_get_req_dump *req,
432462306a36Sopenharmony_ci						     const char *dev_name)
432562306a36Sopenharmony_ci{
432662306a36Sopenharmony_ci	free(req->header.dev_name);
432762306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
432862306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
432962306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
433062306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
433162306a36Sopenharmony_ci}
433262306a36Sopenharmony_cistatic inline void
433362306a36Sopenharmony_ciethtool_phc_vclocks_get_req_dump_set_header_flags(struct ethtool_phc_vclocks_get_req_dump *req,
433462306a36Sopenharmony_ci						  __u32 flags)
433562306a36Sopenharmony_ci{
433662306a36Sopenharmony_ci	req->_present.header = 1;
433762306a36Sopenharmony_ci	req->header._present.flags = 1;
433862306a36Sopenharmony_ci	req->header.flags = flags;
433962306a36Sopenharmony_ci}
434062306a36Sopenharmony_ci
434162306a36Sopenharmony_cistruct ethtool_phc_vclocks_get_list {
434262306a36Sopenharmony_ci	struct ethtool_phc_vclocks_get_list *next;
434362306a36Sopenharmony_ci	struct ethtool_phc_vclocks_get_rsp obj __attribute__ ((aligned (8)));
434462306a36Sopenharmony_ci};
434562306a36Sopenharmony_ci
434662306a36Sopenharmony_civoid
434762306a36Sopenharmony_ciethtool_phc_vclocks_get_list_free(struct ethtool_phc_vclocks_get_list *rsp);
434862306a36Sopenharmony_ci
434962306a36Sopenharmony_cistruct ethtool_phc_vclocks_get_list *
435062306a36Sopenharmony_ciethtool_phc_vclocks_get_dump(struct ynl_sock *ys,
435162306a36Sopenharmony_ci			     struct ethtool_phc_vclocks_get_req_dump *req);
435262306a36Sopenharmony_ci
435362306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_MODULE_GET ============== */
435462306a36Sopenharmony_ci/* ETHTOOL_MSG_MODULE_GET - do */
435562306a36Sopenharmony_cistruct ethtool_module_get_req {
435662306a36Sopenharmony_ci	struct {
435762306a36Sopenharmony_ci		__u32 header:1;
435862306a36Sopenharmony_ci	} _present;
435962306a36Sopenharmony_ci
436062306a36Sopenharmony_ci	struct ethtool_header header;
436162306a36Sopenharmony_ci};
436262306a36Sopenharmony_ci
436362306a36Sopenharmony_cistatic inline struct ethtool_module_get_req *ethtool_module_get_req_alloc(void)
436462306a36Sopenharmony_ci{
436562306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_module_get_req));
436662306a36Sopenharmony_ci}
436762306a36Sopenharmony_civoid ethtool_module_get_req_free(struct ethtool_module_get_req *req);
436862306a36Sopenharmony_ci
436962306a36Sopenharmony_cistatic inline void
437062306a36Sopenharmony_ciethtool_module_get_req_set_header_dev_index(struct ethtool_module_get_req *req,
437162306a36Sopenharmony_ci					    __u32 dev_index)
437262306a36Sopenharmony_ci{
437362306a36Sopenharmony_ci	req->_present.header = 1;
437462306a36Sopenharmony_ci	req->header._present.dev_index = 1;
437562306a36Sopenharmony_ci	req->header.dev_index = dev_index;
437662306a36Sopenharmony_ci}
437762306a36Sopenharmony_cistatic inline void
437862306a36Sopenharmony_ciethtool_module_get_req_set_header_dev_name(struct ethtool_module_get_req *req,
437962306a36Sopenharmony_ci					   const char *dev_name)
438062306a36Sopenharmony_ci{
438162306a36Sopenharmony_ci	free(req->header.dev_name);
438262306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
438362306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
438462306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
438562306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
438662306a36Sopenharmony_ci}
438762306a36Sopenharmony_cistatic inline void
438862306a36Sopenharmony_ciethtool_module_get_req_set_header_flags(struct ethtool_module_get_req *req,
438962306a36Sopenharmony_ci					__u32 flags)
439062306a36Sopenharmony_ci{
439162306a36Sopenharmony_ci	req->_present.header = 1;
439262306a36Sopenharmony_ci	req->header._present.flags = 1;
439362306a36Sopenharmony_ci	req->header.flags = flags;
439462306a36Sopenharmony_ci}
439562306a36Sopenharmony_ci
439662306a36Sopenharmony_cistruct ethtool_module_get_rsp {
439762306a36Sopenharmony_ci	struct {
439862306a36Sopenharmony_ci		__u32 header:1;
439962306a36Sopenharmony_ci		__u32 power_mode_policy:1;
440062306a36Sopenharmony_ci		__u32 power_mode:1;
440162306a36Sopenharmony_ci	} _present;
440262306a36Sopenharmony_ci
440362306a36Sopenharmony_ci	struct ethtool_header header;
440462306a36Sopenharmony_ci	__u8 power_mode_policy;
440562306a36Sopenharmony_ci	__u8 power_mode;
440662306a36Sopenharmony_ci};
440762306a36Sopenharmony_ci
440862306a36Sopenharmony_civoid ethtool_module_get_rsp_free(struct ethtool_module_get_rsp *rsp);
440962306a36Sopenharmony_ci
441062306a36Sopenharmony_ci/*
441162306a36Sopenharmony_ci * Get module params.
441262306a36Sopenharmony_ci */
441362306a36Sopenharmony_cistruct ethtool_module_get_rsp *
441462306a36Sopenharmony_ciethtool_module_get(struct ynl_sock *ys, struct ethtool_module_get_req *req);
441562306a36Sopenharmony_ci
441662306a36Sopenharmony_ci/* ETHTOOL_MSG_MODULE_GET - dump */
441762306a36Sopenharmony_cistruct ethtool_module_get_req_dump {
441862306a36Sopenharmony_ci	struct {
441962306a36Sopenharmony_ci		__u32 header:1;
442062306a36Sopenharmony_ci	} _present;
442162306a36Sopenharmony_ci
442262306a36Sopenharmony_ci	struct ethtool_header header;
442362306a36Sopenharmony_ci};
442462306a36Sopenharmony_ci
442562306a36Sopenharmony_cistatic inline struct ethtool_module_get_req_dump *
442662306a36Sopenharmony_ciethtool_module_get_req_dump_alloc(void)
442762306a36Sopenharmony_ci{
442862306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_module_get_req_dump));
442962306a36Sopenharmony_ci}
443062306a36Sopenharmony_civoid ethtool_module_get_req_dump_free(struct ethtool_module_get_req_dump *req);
443162306a36Sopenharmony_ci
443262306a36Sopenharmony_cistatic inline void
443362306a36Sopenharmony_ciethtool_module_get_req_dump_set_header_dev_index(struct ethtool_module_get_req_dump *req,
443462306a36Sopenharmony_ci						 __u32 dev_index)
443562306a36Sopenharmony_ci{
443662306a36Sopenharmony_ci	req->_present.header = 1;
443762306a36Sopenharmony_ci	req->header._present.dev_index = 1;
443862306a36Sopenharmony_ci	req->header.dev_index = dev_index;
443962306a36Sopenharmony_ci}
444062306a36Sopenharmony_cistatic inline void
444162306a36Sopenharmony_ciethtool_module_get_req_dump_set_header_dev_name(struct ethtool_module_get_req_dump *req,
444262306a36Sopenharmony_ci						const char *dev_name)
444362306a36Sopenharmony_ci{
444462306a36Sopenharmony_ci	free(req->header.dev_name);
444562306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
444662306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
444762306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
444862306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
444962306a36Sopenharmony_ci}
445062306a36Sopenharmony_cistatic inline void
445162306a36Sopenharmony_ciethtool_module_get_req_dump_set_header_flags(struct ethtool_module_get_req_dump *req,
445262306a36Sopenharmony_ci					     __u32 flags)
445362306a36Sopenharmony_ci{
445462306a36Sopenharmony_ci	req->_present.header = 1;
445562306a36Sopenharmony_ci	req->header._present.flags = 1;
445662306a36Sopenharmony_ci	req->header.flags = flags;
445762306a36Sopenharmony_ci}
445862306a36Sopenharmony_ci
445962306a36Sopenharmony_cistruct ethtool_module_get_list {
446062306a36Sopenharmony_ci	struct ethtool_module_get_list *next;
446162306a36Sopenharmony_ci	struct ethtool_module_get_rsp obj __attribute__ ((aligned (8)));
446262306a36Sopenharmony_ci};
446362306a36Sopenharmony_ci
446462306a36Sopenharmony_civoid ethtool_module_get_list_free(struct ethtool_module_get_list *rsp);
446562306a36Sopenharmony_ci
446662306a36Sopenharmony_cistruct ethtool_module_get_list *
446762306a36Sopenharmony_ciethtool_module_get_dump(struct ynl_sock *ys,
446862306a36Sopenharmony_ci			struct ethtool_module_get_req_dump *req);
446962306a36Sopenharmony_ci
447062306a36Sopenharmony_ci/* ETHTOOL_MSG_MODULE_GET - notify */
447162306a36Sopenharmony_cistruct ethtool_module_get_ntf {
447262306a36Sopenharmony_ci	__u16 family;
447362306a36Sopenharmony_ci	__u8 cmd;
447462306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
447562306a36Sopenharmony_ci	void (*free)(struct ethtool_module_get_ntf *ntf);
447662306a36Sopenharmony_ci	struct ethtool_module_get_rsp obj __attribute__ ((aligned (8)));
447762306a36Sopenharmony_ci};
447862306a36Sopenharmony_ci
447962306a36Sopenharmony_civoid ethtool_module_get_ntf_free(struct ethtool_module_get_ntf *rsp);
448062306a36Sopenharmony_ci
448162306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_MODULE_SET ============== */
448262306a36Sopenharmony_ci/* ETHTOOL_MSG_MODULE_SET - do */
448362306a36Sopenharmony_cistruct ethtool_module_set_req {
448462306a36Sopenharmony_ci	struct {
448562306a36Sopenharmony_ci		__u32 header:1;
448662306a36Sopenharmony_ci		__u32 power_mode_policy:1;
448762306a36Sopenharmony_ci		__u32 power_mode:1;
448862306a36Sopenharmony_ci	} _present;
448962306a36Sopenharmony_ci
449062306a36Sopenharmony_ci	struct ethtool_header header;
449162306a36Sopenharmony_ci	__u8 power_mode_policy;
449262306a36Sopenharmony_ci	__u8 power_mode;
449362306a36Sopenharmony_ci};
449462306a36Sopenharmony_ci
449562306a36Sopenharmony_cistatic inline struct ethtool_module_set_req *ethtool_module_set_req_alloc(void)
449662306a36Sopenharmony_ci{
449762306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_module_set_req));
449862306a36Sopenharmony_ci}
449962306a36Sopenharmony_civoid ethtool_module_set_req_free(struct ethtool_module_set_req *req);
450062306a36Sopenharmony_ci
450162306a36Sopenharmony_cistatic inline void
450262306a36Sopenharmony_ciethtool_module_set_req_set_header_dev_index(struct ethtool_module_set_req *req,
450362306a36Sopenharmony_ci					    __u32 dev_index)
450462306a36Sopenharmony_ci{
450562306a36Sopenharmony_ci	req->_present.header = 1;
450662306a36Sopenharmony_ci	req->header._present.dev_index = 1;
450762306a36Sopenharmony_ci	req->header.dev_index = dev_index;
450862306a36Sopenharmony_ci}
450962306a36Sopenharmony_cistatic inline void
451062306a36Sopenharmony_ciethtool_module_set_req_set_header_dev_name(struct ethtool_module_set_req *req,
451162306a36Sopenharmony_ci					   const char *dev_name)
451262306a36Sopenharmony_ci{
451362306a36Sopenharmony_ci	free(req->header.dev_name);
451462306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
451562306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
451662306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
451762306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
451862306a36Sopenharmony_ci}
451962306a36Sopenharmony_cistatic inline void
452062306a36Sopenharmony_ciethtool_module_set_req_set_header_flags(struct ethtool_module_set_req *req,
452162306a36Sopenharmony_ci					__u32 flags)
452262306a36Sopenharmony_ci{
452362306a36Sopenharmony_ci	req->_present.header = 1;
452462306a36Sopenharmony_ci	req->header._present.flags = 1;
452562306a36Sopenharmony_ci	req->header.flags = flags;
452662306a36Sopenharmony_ci}
452762306a36Sopenharmony_cistatic inline void
452862306a36Sopenharmony_ciethtool_module_set_req_set_power_mode_policy(struct ethtool_module_set_req *req,
452962306a36Sopenharmony_ci					     __u8 power_mode_policy)
453062306a36Sopenharmony_ci{
453162306a36Sopenharmony_ci	req->_present.power_mode_policy = 1;
453262306a36Sopenharmony_ci	req->power_mode_policy = power_mode_policy;
453362306a36Sopenharmony_ci}
453462306a36Sopenharmony_cistatic inline void
453562306a36Sopenharmony_ciethtool_module_set_req_set_power_mode(struct ethtool_module_set_req *req,
453662306a36Sopenharmony_ci				      __u8 power_mode)
453762306a36Sopenharmony_ci{
453862306a36Sopenharmony_ci	req->_present.power_mode = 1;
453962306a36Sopenharmony_ci	req->power_mode = power_mode;
454062306a36Sopenharmony_ci}
454162306a36Sopenharmony_ci
454262306a36Sopenharmony_ci/*
454362306a36Sopenharmony_ci * Set module params.
454462306a36Sopenharmony_ci */
454562306a36Sopenharmony_ciint ethtool_module_set(struct ynl_sock *ys, struct ethtool_module_set_req *req);
454662306a36Sopenharmony_ci
454762306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_PSE_GET ============== */
454862306a36Sopenharmony_ci/* ETHTOOL_MSG_PSE_GET - do */
454962306a36Sopenharmony_cistruct ethtool_pse_get_req {
455062306a36Sopenharmony_ci	struct {
455162306a36Sopenharmony_ci		__u32 header:1;
455262306a36Sopenharmony_ci	} _present;
455362306a36Sopenharmony_ci
455462306a36Sopenharmony_ci	struct ethtool_header header;
455562306a36Sopenharmony_ci};
455662306a36Sopenharmony_ci
455762306a36Sopenharmony_cistatic inline struct ethtool_pse_get_req *ethtool_pse_get_req_alloc(void)
455862306a36Sopenharmony_ci{
455962306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_pse_get_req));
456062306a36Sopenharmony_ci}
456162306a36Sopenharmony_civoid ethtool_pse_get_req_free(struct ethtool_pse_get_req *req);
456262306a36Sopenharmony_ci
456362306a36Sopenharmony_cistatic inline void
456462306a36Sopenharmony_ciethtool_pse_get_req_set_header_dev_index(struct ethtool_pse_get_req *req,
456562306a36Sopenharmony_ci					 __u32 dev_index)
456662306a36Sopenharmony_ci{
456762306a36Sopenharmony_ci	req->_present.header = 1;
456862306a36Sopenharmony_ci	req->header._present.dev_index = 1;
456962306a36Sopenharmony_ci	req->header.dev_index = dev_index;
457062306a36Sopenharmony_ci}
457162306a36Sopenharmony_cistatic inline void
457262306a36Sopenharmony_ciethtool_pse_get_req_set_header_dev_name(struct ethtool_pse_get_req *req,
457362306a36Sopenharmony_ci					const char *dev_name)
457462306a36Sopenharmony_ci{
457562306a36Sopenharmony_ci	free(req->header.dev_name);
457662306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
457762306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
457862306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
457962306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
458062306a36Sopenharmony_ci}
458162306a36Sopenharmony_cistatic inline void
458262306a36Sopenharmony_ciethtool_pse_get_req_set_header_flags(struct ethtool_pse_get_req *req,
458362306a36Sopenharmony_ci				     __u32 flags)
458462306a36Sopenharmony_ci{
458562306a36Sopenharmony_ci	req->_present.header = 1;
458662306a36Sopenharmony_ci	req->header._present.flags = 1;
458762306a36Sopenharmony_ci	req->header.flags = flags;
458862306a36Sopenharmony_ci}
458962306a36Sopenharmony_ci
459062306a36Sopenharmony_cistruct ethtool_pse_get_rsp {
459162306a36Sopenharmony_ci	struct {
459262306a36Sopenharmony_ci		__u32 header:1;
459362306a36Sopenharmony_ci		__u32 admin_state:1;
459462306a36Sopenharmony_ci		__u32 admin_control:1;
459562306a36Sopenharmony_ci		__u32 pw_d_status:1;
459662306a36Sopenharmony_ci	} _present;
459762306a36Sopenharmony_ci
459862306a36Sopenharmony_ci	struct ethtool_header header;
459962306a36Sopenharmony_ci	__u32 admin_state;
460062306a36Sopenharmony_ci	__u32 admin_control;
460162306a36Sopenharmony_ci	__u32 pw_d_status;
460262306a36Sopenharmony_ci};
460362306a36Sopenharmony_ci
460462306a36Sopenharmony_civoid ethtool_pse_get_rsp_free(struct ethtool_pse_get_rsp *rsp);
460562306a36Sopenharmony_ci
460662306a36Sopenharmony_ci/*
460762306a36Sopenharmony_ci * Get Power Sourcing Equipment params.
460862306a36Sopenharmony_ci */
460962306a36Sopenharmony_cistruct ethtool_pse_get_rsp *
461062306a36Sopenharmony_ciethtool_pse_get(struct ynl_sock *ys, struct ethtool_pse_get_req *req);
461162306a36Sopenharmony_ci
461262306a36Sopenharmony_ci/* ETHTOOL_MSG_PSE_GET - dump */
461362306a36Sopenharmony_cistruct ethtool_pse_get_req_dump {
461462306a36Sopenharmony_ci	struct {
461562306a36Sopenharmony_ci		__u32 header:1;
461662306a36Sopenharmony_ci	} _present;
461762306a36Sopenharmony_ci
461862306a36Sopenharmony_ci	struct ethtool_header header;
461962306a36Sopenharmony_ci};
462062306a36Sopenharmony_ci
462162306a36Sopenharmony_cistatic inline struct ethtool_pse_get_req_dump *
462262306a36Sopenharmony_ciethtool_pse_get_req_dump_alloc(void)
462362306a36Sopenharmony_ci{
462462306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_pse_get_req_dump));
462562306a36Sopenharmony_ci}
462662306a36Sopenharmony_civoid ethtool_pse_get_req_dump_free(struct ethtool_pse_get_req_dump *req);
462762306a36Sopenharmony_ci
462862306a36Sopenharmony_cistatic inline void
462962306a36Sopenharmony_ciethtool_pse_get_req_dump_set_header_dev_index(struct ethtool_pse_get_req_dump *req,
463062306a36Sopenharmony_ci					      __u32 dev_index)
463162306a36Sopenharmony_ci{
463262306a36Sopenharmony_ci	req->_present.header = 1;
463362306a36Sopenharmony_ci	req->header._present.dev_index = 1;
463462306a36Sopenharmony_ci	req->header.dev_index = dev_index;
463562306a36Sopenharmony_ci}
463662306a36Sopenharmony_cistatic inline void
463762306a36Sopenharmony_ciethtool_pse_get_req_dump_set_header_dev_name(struct ethtool_pse_get_req_dump *req,
463862306a36Sopenharmony_ci					     const char *dev_name)
463962306a36Sopenharmony_ci{
464062306a36Sopenharmony_ci	free(req->header.dev_name);
464162306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
464262306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
464362306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
464462306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
464562306a36Sopenharmony_ci}
464662306a36Sopenharmony_cistatic inline void
464762306a36Sopenharmony_ciethtool_pse_get_req_dump_set_header_flags(struct ethtool_pse_get_req_dump *req,
464862306a36Sopenharmony_ci					  __u32 flags)
464962306a36Sopenharmony_ci{
465062306a36Sopenharmony_ci	req->_present.header = 1;
465162306a36Sopenharmony_ci	req->header._present.flags = 1;
465262306a36Sopenharmony_ci	req->header.flags = flags;
465362306a36Sopenharmony_ci}
465462306a36Sopenharmony_ci
465562306a36Sopenharmony_cistruct ethtool_pse_get_list {
465662306a36Sopenharmony_ci	struct ethtool_pse_get_list *next;
465762306a36Sopenharmony_ci	struct ethtool_pse_get_rsp obj __attribute__ ((aligned (8)));
465862306a36Sopenharmony_ci};
465962306a36Sopenharmony_ci
466062306a36Sopenharmony_civoid ethtool_pse_get_list_free(struct ethtool_pse_get_list *rsp);
466162306a36Sopenharmony_ci
466262306a36Sopenharmony_cistruct ethtool_pse_get_list *
466362306a36Sopenharmony_ciethtool_pse_get_dump(struct ynl_sock *ys, struct ethtool_pse_get_req_dump *req);
466462306a36Sopenharmony_ci
466562306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_PSE_SET ============== */
466662306a36Sopenharmony_ci/* ETHTOOL_MSG_PSE_SET - do */
466762306a36Sopenharmony_cistruct ethtool_pse_set_req {
466862306a36Sopenharmony_ci	struct {
466962306a36Sopenharmony_ci		__u32 header:1;
467062306a36Sopenharmony_ci		__u32 admin_state:1;
467162306a36Sopenharmony_ci		__u32 admin_control:1;
467262306a36Sopenharmony_ci		__u32 pw_d_status:1;
467362306a36Sopenharmony_ci	} _present;
467462306a36Sopenharmony_ci
467562306a36Sopenharmony_ci	struct ethtool_header header;
467662306a36Sopenharmony_ci	__u32 admin_state;
467762306a36Sopenharmony_ci	__u32 admin_control;
467862306a36Sopenharmony_ci	__u32 pw_d_status;
467962306a36Sopenharmony_ci};
468062306a36Sopenharmony_ci
468162306a36Sopenharmony_cistatic inline struct ethtool_pse_set_req *ethtool_pse_set_req_alloc(void)
468262306a36Sopenharmony_ci{
468362306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_pse_set_req));
468462306a36Sopenharmony_ci}
468562306a36Sopenharmony_civoid ethtool_pse_set_req_free(struct ethtool_pse_set_req *req);
468662306a36Sopenharmony_ci
468762306a36Sopenharmony_cistatic inline void
468862306a36Sopenharmony_ciethtool_pse_set_req_set_header_dev_index(struct ethtool_pse_set_req *req,
468962306a36Sopenharmony_ci					 __u32 dev_index)
469062306a36Sopenharmony_ci{
469162306a36Sopenharmony_ci	req->_present.header = 1;
469262306a36Sopenharmony_ci	req->header._present.dev_index = 1;
469362306a36Sopenharmony_ci	req->header.dev_index = dev_index;
469462306a36Sopenharmony_ci}
469562306a36Sopenharmony_cistatic inline void
469662306a36Sopenharmony_ciethtool_pse_set_req_set_header_dev_name(struct ethtool_pse_set_req *req,
469762306a36Sopenharmony_ci					const char *dev_name)
469862306a36Sopenharmony_ci{
469962306a36Sopenharmony_ci	free(req->header.dev_name);
470062306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
470162306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
470262306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
470362306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
470462306a36Sopenharmony_ci}
470562306a36Sopenharmony_cistatic inline void
470662306a36Sopenharmony_ciethtool_pse_set_req_set_header_flags(struct ethtool_pse_set_req *req,
470762306a36Sopenharmony_ci				     __u32 flags)
470862306a36Sopenharmony_ci{
470962306a36Sopenharmony_ci	req->_present.header = 1;
471062306a36Sopenharmony_ci	req->header._present.flags = 1;
471162306a36Sopenharmony_ci	req->header.flags = flags;
471262306a36Sopenharmony_ci}
471362306a36Sopenharmony_cistatic inline void
471462306a36Sopenharmony_ciethtool_pse_set_req_set_admin_state(struct ethtool_pse_set_req *req,
471562306a36Sopenharmony_ci				    __u32 admin_state)
471662306a36Sopenharmony_ci{
471762306a36Sopenharmony_ci	req->_present.admin_state = 1;
471862306a36Sopenharmony_ci	req->admin_state = admin_state;
471962306a36Sopenharmony_ci}
472062306a36Sopenharmony_cistatic inline void
472162306a36Sopenharmony_ciethtool_pse_set_req_set_admin_control(struct ethtool_pse_set_req *req,
472262306a36Sopenharmony_ci				      __u32 admin_control)
472362306a36Sopenharmony_ci{
472462306a36Sopenharmony_ci	req->_present.admin_control = 1;
472562306a36Sopenharmony_ci	req->admin_control = admin_control;
472662306a36Sopenharmony_ci}
472762306a36Sopenharmony_cistatic inline void
472862306a36Sopenharmony_ciethtool_pse_set_req_set_pw_d_status(struct ethtool_pse_set_req *req,
472962306a36Sopenharmony_ci				    __u32 pw_d_status)
473062306a36Sopenharmony_ci{
473162306a36Sopenharmony_ci	req->_present.pw_d_status = 1;
473262306a36Sopenharmony_ci	req->pw_d_status = pw_d_status;
473362306a36Sopenharmony_ci}
473462306a36Sopenharmony_ci
473562306a36Sopenharmony_ci/*
473662306a36Sopenharmony_ci * Set Power Sourcing Equipment params.
473762306a36Sopenharmony_ci */
473862306a36Sopenharmony_ciint ethtool_pse_set(struct ynl_sock *ys, struct ethtool_pse_set_req *req);
473962306a36Sopenharmony_ci
474062306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_RSS_GET ============== */
474162306a36Sopenharmony_ci/* ETHTOOL_MSG_RSS_GET - do */
474262306a36Sopenharmony_cistruct ethtool_rss_get_req {
474362306a36Sopenharmony_ci	struct {
474462306a36Sopenharmony_ci		__u32 header:1;
474562306a36Sopenharmony_ci	} _present;
474662306a36Sopenharmony_ci
474762306a36Sopenharmony_ci	struct ethtool_header header;
474862306a36Sopenharmony_ci};
474962306a36Sopenharmony_ci
475062306a36Sopenharmony_cistatic inline struct ethtool_rss_get_req *ethtool_rss_get_req_alloc(void)
475162306a36Sopenharmony_ci{
475262306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_rss_get_req));
475362306a36Sopenharmony_ci}
475462306a36Sopenharmony_civoid ethtool_rss_get_req_free(struct ethtool_rss_get_req *req);
475562306a36Sopenharmony_ci
475662306a36Sopenharmony_cistatic inline void
475762306a36Sopenharmony_ciethtool_rss_get_req_set_header_dev_index(struct ethtool_rss_get_req *req,
475862306a36Sopenharmony_ci					 __u32 dev_index)
475962306a36Sopenharmony_ci{
476062306a36Sopenharmony_ci	req->_present.header = 1;
476162306a36Sopenharmony_ci	req->header._present.dev_index = 1;
476262306a36Sopenharmony_ci	req->header.dev_index = dev_index;
476362306a36Sopenharmony_ci}
476462306a36Sopenharmony_cistatic inline void
476562306a36Sopenharmony_ciethtool_rss_get_req_set_header_dev_name(struct ethtool_rss_get_req *req,
476662306a36Sopenharmony_ci					const char *dev_name)
476762306a36Sopenharmony_ci{
476862306a36Sopenharmony_ci	free(req->header.dev_name);
476962306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
477062306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
477162306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
477262306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
477362306a36Sopenharmony_ci}
477462306a36Sopenharmony_cistatic inline void
477562306a36Sopenharmony_ciethtool_rss_get_req_set_header_flags(struct ethtool_rss_get_req *req,
477662306a36Sopenharmony_ci				     __u32 flags)
477762306a36Sopenharmony_ci{
477862306a36Sopenharmony_ci	req->_present.header = 1;
477962306a36Sopenharmony_ci	req->header._present.flags = 1;
478062306a36Sopenharmony_ci	req->header.flags = flags;
478162306a36Sopenharmony_ci}
478262306a36Sopenharmony_ci
478362306a36Sopenharmony_cistruct ethtool_rss_get_rsp {
478462306a36Sopenharmony_ci	struct {
478562306a36Sopenharmony_ci		__u32 header:1;
478662306a36Sopenharmony_ci		__u32 context:1;
478762306a36Sopenharmony_ci		__u32 hfunc:1;
478862306a36Sopenharmony_ci		__u32 indir_len;
478962306a36Sopenharmony_ci		__u32 hkey_len;
479062306a36Sopenharmony_ci	} _present;
479162306a36Sopenharmony_ci
479262306a36Sopenharmony_ci	struct ethtool_header header;
479362306a36Sopenharmony_ci	__u32 context;
479462306a36Sopenharmony_ci	__u32 hfunc;
479562306a36Sopenharmony_ci	void *indir;
479662306a36Sopenharmony_ci	void *hkey;
479762306a36Sopenharmony_ci};
479862306a36Sopenharmony_ci
479962306a36Sopenharmony_civoid ethtool_rss_get_rsp_free(struct ethtool_rss_get_rsp *rsp);
480062306a36Sopenharmony_ci
480162306a36Sopenharmony_ci/*
480262306a36Sopenharmony_ci * Get RSS params.
480362306a36Sopenharmony_ci */
480462306a36Sopenharmony_cistruct ethtool_rss_get_rsp *
480562306a36Sopenharmony_ciethtool_rss_get(struct ynl_sock *ys, struct ethtool_rss_get_req *req);
480662306a36Sopenharmony_ci
480762306a36Sopenharmony_ci/* ETHTOOL_MSG_RSS_GET - dump */
480862306a36Sopenharmony_cistruct ethtool_rss_get_req_dump {
480962306a36Sopenharmony_ci	struct {
481062306a36Sopenharmony_ci		__u32 header:1;
481162306a36Sopenharmony_ci	} _present;
481262306a36Sopenharmony_ci
481362306a36Sopenharmony_ci	struct ethtool_header header;
481462306a36Sopenharmony_ci};
481562306a36Sopenharmony_ci
481662306a36Sopenharmony_cistatic inline struct ethtool_rss_get_req_dump *
481762306a36Sopenharmony_ciethtool_rss_get_req_dump_alloc(void)
481862306a36Sopenharmony_ci{
481962306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_rss_get_req_dump));
482062306a36Sopenharmony_ci}
482162306a36Sopenharmony_civoid ethtool_rss_get_req_dump_free(struct ethtool_rss_get_req_dump *req);
482262306a36Sopenharmony_ci
482362306a36Sopenharmony_cistatic inline void
482462306a36Sopenharmony_ciethtool_rss_get_req_dump_set_header_dev_index(struct ethtool_rss_get_req_dump *req,
482562306a36Sopenharmony_ci					      __u32 dev_index)
482662306a36Sopenharmony_ci{
482762306a36Sopenharmony_ci	req->_present.header = 1;
482862306a36Sopenharmony_ci	req->header._present.dev_index = 1;
482962306a36Sopenharmony_ci	req->header.dev_index = dev_index;
483062306a36Sopenharmony_ci}
483162306a36Sopenharmony_cistatic inline void
483262306a36Sopenharmony_ciethtool_rss_get_req_dump_set_header_dev_name(struct ethtool_rss_get_req_dump *req,
483362306a36Sopenharmony_ci					     const char *dev_name)
483462306a36Sopenharmony_ci{
483562306a36Sopenharmony_ci	free(req->header.dev_name);
483662306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
483762306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
483862306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
483962306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
484062306a36Sopenharmony_ci}
484162306a36Sopenharmony_cistatic inline void
484262306a36Sopenharmony_ciethtool_rss_get_req_dump_set_header_flags(struct ethtool_rss_get_req_dump *req,
484362306a36Sopenharmony_ci					  __u32 flags)
484462306a36Sopenharmony_ci{
484562306a36Sopenharmony_ci	req->_present.header = 1;
484662306a36Sopenharmony_ci	req->header._present.flags = 1;
484762306a36Sopenharmony_ci	req->header.flags = flags;
484862306a36Sopenharmony_ci}
484962306a36Sopenharmony_ci
485062306a36Sopenharmony_cistruct ethtool_rss_get_list {
485162306a36Sopenharmony_ci	struct ethtool_rss_get_list *next;
485262306a36Sopenharmony_ci	struct ethtool_rss_get_rsp obj __attribute__ ((aligned (8)));
485362306a36Sopenharmony_ci};
485462306a36Sopenharmony_ci
485562306a36Sopenharmony_civoid ethtool_rss_get_list_free(struct ethtool_rss_get_list *rsp);
485662306a36Sopenharmony_ci
485762306a36Sopenharmony_cistruct ethtool_rss_get_list *
485862306a36Sopenharmony_ciethtool_rss_get_dump(struct ynl_sock *ys, struct ethtool_rss_get_req_dump *req);
485962306a36Sopenharmony_ci
486062306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_PLCA_GET_CFG ============== */
486162306a36Sopenharmony_ci/* ETHTOOL_MSG_PLCA_GET_CFG - do */
486262306a36Sopenharmony_cistruct ethtool_plca_get_cfg_req {
486362306a36Sopenharmony_ci	struct {
486462306a36Sopenharmony_ci		__u32 header:1;
486562306a36Sopenharmony_ci	} _present;
486662306a36Sopenharmony_ci
486762306a36Sopenharmony_ci	struct ethtool_header header;
486862306a36Sopenharmony_ci};
486962306a36Sopenharmony_ci
487062306a36Sopenharmony_cistatic inline struct ethtool_plca_get_cfg_req *
487162306a36Sopenharmony_ciethtool_plca_get_cfg_req_alloc(void)
487262306a36Sopenharmony_ci{
487362306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_plca_get_cfg_req));
487462306a36Sopenharmony_ci}
487562306a36Sopenharmony_civoid ethtool_plca_get_cfg_req_free(struct ethtool_plca_get_cfg_req *req);
487662306a36Sopenharmony_ci
487762306a36Sopenharmony_cistatic inline void
487862306a36Sopenharmony_ciethtool_plca_get_cfg_req_set_header_dev_index(struct ethtool_plca_get_cfg_req *req,
487962306a36Sopenharmony_ci					      __u32 dev_index)
488062306a36Sopenharmony_ci{
488162306a36Sopenharmony_ci	req->_present.header = 1;
488262306a36Sopenharmony_ci	req->header._present.dev_index = 1;
488362306a36Sopenharmony_ci	req->header.dev_index = dev_index;
488462306a36Sopenharmony_ci}
488562306a36Sopenharmony_cistatic inline void
488662306a36Sopenharmony_ciethtool_plca_get_cfg_req_set_header_dev_name(struct ethtool_plca_get_cfg_req *req,
488762306a36Sopenharmony_ci					     const char *dev_name)
488862306a36Sopenharmony_ci{
488962306a36Sopenharmony_ci	free(req->header.dev_name);
489062306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
489162306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
489262306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
489362306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
489462306a36Sopenharmony_ci}
489562306a36Sopenharmony_cistatic inline void
489662306a36Sopenharmony_ciethtool_plca_get_cfg_req_set_header_flags(struct ethtool_plca_get_cfg_req *req,
489762306a36Sopenharmony_ci					  __u32 flags)
489862306a36Sopenharmony_ci{
489962306a36Sopenharmony_ci	req->_present.header = 1;
490062306a36Sopenharmony_ci	req->header._present.flags = 1;
490162306a36Sopenharmony_ci	req->header.flags = flags;
490262306a36Sopenharmony_ci}
490362306a36Sopenharmony_ci
490462306a36Sopenharmony_cistruct ethtool_plca_get_cfg_rsp {
490562306a36Sopenharmony_ci	struct {
490662306a36Sopenharmony_ci		__u32 header:1;
490762306a36Sopenharmony_ci		__u32 version:1;
490862306a36Sopenharmony_ci		__u32 enabled:1;
490962306a36Sopenharmony_ci		__u32 status:1;
491062306a36Sopenharmony_ci		__u32 node_cnt:1;
491162306a36Sopenharmony_ci		__u32 node_id:1;
491262306a36Sopenharmony_ci		__u32 to_tmr:1;
491362306a36Sopenharmony_ci		__u32 burst_cnt:1;
491462306a36Sopenharmony_ci		__u32 burst_tmr:1;
491562306a36Sopenharmony_ci	} _present;
491662306a36Sopenharmony_ci
491762306a36Sopenharmony_ci	struct ethtool_header header;
491862306a36Sopenharmony_ci	__u16 version;
491962306a36Sopenharmony_ci	__u8 enabled;
492062306a36Sopenharmony_ci	__u8 status;
492162306a36Sopenharmony_ci	__u32 node_cnt;
492262306a36Sopenharmony_ci	__u32 node_id;
492362306a36Sopenharmony_ci	__u32 to_tmr;
492462306a36Sopenharmony_ci	__u32 burst_cnt;
492562306a36Sopenharmony_ci	__u32 burst_tmr;
492662306a36Sopenharmony_ci};
492762306a36Sopenharmony_ci
492862306a36Sopenharmony_civoid ethtool_plca_get_cfg_rsp_free(struct ethtool_plca_get_cfg_rsp *rsp);
492962306a36Sopenharmony_ci
493062306a36Sopenharmony_ci/*
493162306a36Sopenharmony_ci * Get PLCA params.
493262306a36Sopenharmony_ci */
493362306a36Sopenharmony_cistruct ethtool_plca_get_cfg_rsp *
493462306a36Sopenharmony_ciethtool_plca_get_cfg(struct ynl_sock *ys, struct ethtool_plca_get_cfg_req *req);
493562306a36Sopenharmony_ci
493662306a36Sopenharmony_ci/* ETHTOOL_MSG_PLCA_GET_CFG - dump */
493762306a36Sopenharmony_cistruct ethtool_plca_get_cfg_req_dump {
493862306a36Sopenharmony_ci	struct {
493962306a36Sopenharmony_ci		__u32 header:1;
494062306a36Sopenharmony_ci	} _present;
494162306a36Sopenharmony_ci
494262306a36Sopenharmony_ci	struct ethtool_header header;
494362306a36Sopenharmony_ci};
494462306a36Sopenharmony_ci
494562306a36Sopenharmony_cistatic inline struct ethtool_plca_get_cfg_req_dump *
494662306a36Sopenharmony_ciethtool_plca_get_cfg_req_dump_alloc(void)
494762306a36Sopenharmony_ci{
494862306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_plca_get_cfg_req_dump));
494962306a36Sopenharmony_ci}
495062306a36Sopenharmony_civoid
495162306a36Sopenharmony_ciethtool_plca_get_cfg_req_dump_free(struct ethtool_plca_get_cfg_req_dump *req);
495262306a36Sopenharmony_ci
495362306a36Sopenharmony_cistatic inline void
495462306a36Sopenharmony_ciethtool_plca_get_cfg_req_dump_set_header_dev_index(struct ethtool_plca_get_cfg_req_dump *req,
495562306a36Sopenharmony_ci						   __u32 dev_index)
495662306a36Sopenharmony_ci{
495762306a36Sopenharmony_ci	req->_present.header = 1;
495862306a36Sopenharmony_ci	req->header._present.dev_index = 1;
495962306a36Sopenharmony_ci	req->header.dev_index = dev_index;
496062306a36Sopenharmony_ci}
496162306a36Sopenharmony_cistatic inline void
496262306a36Sopenharmony_ciethtool_plca_get_cfg_req_dump_set_header_dev_name(struct ethtool_plca_get_cfg_req_dump *req,
496362306a36Sopenharmony_ci						  const char *dev_name)
496462306a36Sopenharmony_ci{
496562306a36Sopenharmony_ci	free(req->header.dev_name);
496662306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
496762306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
496862306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
496962306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
497062306a36Sopenharmony_ci}
497162306a36Sopenharmony_cistatic inline void
497262306a36Sopenharmony_ciethtool_plca_get_cfg_req_dump_set_header_flags(struct ethtool_plca_get_cfg_req_dump *req,
497362306a36Sopenharmony_ci					       __u32 flags)
497462306a36Sopenharmony_ci{
497562306a36Sopenharmony_ci	req->_present.header = 1;
497662306a36Sopenharmony_ci	req->header._present.flags = 1;
497762306a36Sopenharmony_ci	req->header.flags = flags;
497862306a36Sopenharmony_ci}
497962306a36Sopenharmony_ci
498062306a36Sopenharmony_cistruct ethtool_plca_get_cfg_list {
498162306a36Sopenharmony_ci	struct ethtool_plca_get_cfg_list *next;
498262306a36Sopenharmony_ci	struct ethtool_plca_get_cfg_rsp obj __attribute__ ((aligned (8)));
498362306a36Sopenharmony_ci};
498462306a36Sopenharmony_ci
498562306a36Sopenharmony_civoid ethtool_plca_get_cfg_list_free(struct ethtool_plca_get_cfg_list *rsp);
498662306a36Sopenharmony_ci
498762306a36Sopenharmony_cistruct ethtool_plca_get_cfg_list *
498862306a36Sopenharmony_ciethtool_plca_get_cfg_dump(struct ynl_sock *ys,
498962306a36Sopenharmony_ci			  struct ethtool_plca_get_cfg_req_dump *req);
499062306a36Sopenharmony_ci
499162306a36Sopenharmony_ci/* ETHTOOL_MSG_PLCA_GET_CFG - notify */
499262306a36Sopenharmony_cistruct ethtool_plca_get_cfg_ntf {
499362306a36Sopenharmony_ci	__u16 family;
499462306a36Sopenharmony_ci	__u8 cmd;
499562306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
499662306a36Sopenharmony_ci	void (*free)(struct ethtool_plca_get_cfg_ntf *ntf);
499762306a36Sopenharmony_ci	struct ethtool_plca_get_cfg_rsp obj __attribute__ ((aligned (8)));
499862306a36Sopenharmony_ci};
499962306a36Sopenharmony_ci
500062306a36Sopenharmony_civoid ethtool_plca_get_cfg_ntf_free(struct ethtool_plca_get_cfg_ntf *rsp);
500162306a36Sopenharmony_ci
500262306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_PLCA_SET_CFG ============== */
500362306a36Sopenharmony_ci/* ETHTOOL_MSG_PLCA_SET_CFG - do */
500462306a36Sopenharmony_cistruct ethtool_plca_set_cfg_req {
500562306a36Sopenharmony_ci	struct {
500662306a36Sopenharmony_ci		__u32 header:1;
500762306a36Sopenharmony_ci		__u32 version:1;
500862306a36Sopenharmony_ci		__u32 enabled:1;
500962306a36Sopenharmony_ci		__u32 status:1;
501062306a36Sopenharmony_ci		__u32 node_cnt:1;
501162306a36Sopenharmony_ci		__u32 node_id:1;
501262306a36Sopenharmony_ci		__u32 to_tmr:1;
501362306a36Sopenharmony_ci		__u32 burst_cnt:1;
501462306a36Sopenharmony_ci		__u32 burst_tmr:1;
501562306a36Sopenharmony_ci	} _present;
501662306a36Sopenharmony_ci
501762306a36Sopenharmony_ci	struct ethtool_header header;
501862306a36Sopenharmony_ci	__u16 version;
501962306a36Sopenharmony_ci	__u8 enabled;
502062306a36Sopenharmony_ci	__u8 status;
502162306a36Sopenharmony_ci	__u32 node_cnt;
502262306a36Sopenharmony_ci	__u32 node_id;
502362306a36Sopenharmony_ci	__u32 to_tmr;
502462306a36Sopenharmony_ci	__u32 burst_cnt;
502562306a36Sopenharmony_ci	__u32 burst_tmr;
502662306a36Sopenharmony_ci};
502762306a36Sopenharmony_ci
502862306a36Sopenharmony_cistatic inline struct ethtool_plca_set_cfg_req *
502962306a36Sopenharmony_ciethtool_plca_set_cfg_req_alloc(void)
503062306a36Sopenharmony_ci{
503162306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_plca_set_cfg_req));
503262306a36Sopenharmony_ci}
503362306a36Sopenharmony_civoid ethtool_plca_set_cfg_req_free(struct ethtool_plca_set_cfg_req *req);
503462306a36Sopenharmony_ci
503562306a36Sopenharmony_cistatic inline void
503662306a36Sopenharmony_ciethtool_plca_set_cfg_req_set_header_dev_index(struct ethtool_plca_set_cfg_req *req,
503762306a36Sopenharmony_ci					      __u32 dev_index)
503862306a36Sopenharmony_ci{
503962306a36Sopenharmony_ci	req->_present.header = 1;
504062306a36Sopenharmony_ci	req->header._present.dev_index = 1;
504162306a36Sopenharmony_ci	req->header.dev_index = dev_index;
504262306a36Sopenharmony_ci}
504362306a36Sopenharmony_cistatic inline void
504462306a36Sopenharmony_ciethtool_plca_set_cfg_req_set_header_dev_name(struct ethtool_plca_set_cfg_req *req,
504562306a36Sopenharmony_ci					     const char *dev_name)
504662306a36Sopenharmony_ci{
504762306a36Sopenharmony_ci	free(req->header.dev_name);
504862306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
504962306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
505062306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
505162306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
505262306a36Sopenharmony_ci}
505362306a36Sopenharmony_cistatic inline void
505462306a36Sopenharmony_ciethtool_plca_set_cfg_req_set_header_flags(struct ethtool_plca_set_cfg_req *req,
505562306a36Sopenharmony_ci					  __u32 flags)
505662306a36Sopenharmony_ci{
505762306a36Sopenharmony_ci	req->_present.header = 1;
505862306a36Sopenharmony_ci	req->header._present.flags = 1;
505962306a36Sopenharmony_ci	req->header.flags = flags;
506062306a36Sopenharmony_ci}
506162306a36Sopenharmony_cistatic inline void
506262306a36Sopenharmony_ciethtool_plca_set_cfg_req_set_version(struct ethtool_plca_set_cfg_req *req,
506362306a36Sopenharmony_ci				     __u16 version)
506462306a36Sopenharmony_ci{
506562306a36Sopenharmony_ci	req->_present.version = 1;
506662306a36Sopenharmony_ci	req->version = version;
506762306a36Sopenharmony_ci}
506862306a36Sopenharmony_cistatic inline void
506962306a36Sopenharmony_ciethtool_plca_set_cfg_req_set_enabled(struct ethtool_plca_set_cfg_req *req,
507062306a36Sopenharmony_ci				     __u8 enabled)
507162306a36Sopenharmony_ci{
507262306a36Sopenharmony_ci	req->_present.enabled = 1;
507362306a36Sopenharmony_ci	req->enabled = enabled;
507462306a36Sopenharmony_ci}
507562306a36Sopenharmony_cistatic inline void
507662306a36Sopenharmony_ciethtool_plca_set_cfg_req_set_status(struct ethtool_plca_set_cfg_req *req,
507762306a36Sopenharmony_ci				    __u8 status)
507862306a36Sopenharmony_ci{
507962306a36Sopenharmony_ci	req->_present.status = 1;
508062306a36Sopenharmony_ci	req->status = status;
508162306a36Sopenharmony_ci}
508262306a36Sopenharmony_cistatic inline void
508362306a36Sopenharmony_ciethtool_plca_set_cfg_req_set_node_cnt(struct ethtool_plca_set_cfg_req *req,
508462306a36Sopenharmony_ci				      __u32 node_cnt)
508562306a36Sopenharmony_ci{
508662306a36Sopenharmony_ci	req->_present.node_cnt = 1;
508762306a36Sopenharmony_ci	req->node_cnt = node_cnt;
508862306a36Sopenharmony_ci}
508962306a36Sopenharmony_cistatic inline void
509062306a36Sopenharmony_ciethtool_plca_set_cfg_req_set_node_id(struct ethtool_plca_set_cfg_req *req,
509162306a36Sopenharmony_ci				     __u32 node_id)
509262306a36Sopenharmony_ci{
509362306a36Sopenharmony_ci	req->_present.node_id = 1;
509462306a36Sopenharmony_ci	req->node_id = node_id;
509562306a36Sopenharmony_ci}
509662306a36Sopenharmony_cistatic inline void
509762306a36Sopenharmony_ciethtool_plca_set_cfg_req_set_to_tmr(struct ethtool_plca_set_cfg_req *req,
509862306a36Sopenharmony_ci				    __u32 to_tmr)
509962306a36Sopenharmony_ci{
510062306a36Sopenharmony_ci	req->_present.to_tmr = 1;
510162306a36Sopenharmony_ci	req->to_tmr = to_tmr;
510262306a36Sopenharmony_ci}
510362306a36Sopenharmony_cistatic inline void
510462306a36Sopenharmony_ciethtool_plca_set_cfg_req_set_burst_cnt(struct ethtool_plca_set_cfg_req *req,
510562306a36Sopenharmony_ci				       __u32 burst_cnt)
510662306a36Sopenharmony_ci{
510762306a36Sopenharmony_ci	req->_present.burst_cnt = 1;
510862306a36Sopenharmony_ci	req->burst_cnt = burst_cnt;
510962306a36Sopenharmony_ci}
511062306a36Sopenharmony_cistatic inline void
511162306a36Sopenharmony_ciethtool_plca_set_cfg_req_set_burst_tmr(struct ethtool_plca_set_cfg_req *req,
511262306a36Sopenharmony_ci				       __u32 burst_tmr)
511362306a36Sopenharmony_ci{
511462306a36Sopenharmony_ci	req->_present.burst_tmr = 1;
511562306a36Sopenharmony_ci	req->burst_tmr = burst_tmr;
511662306a36Sopenharmony_ci}
511762306a36Sopenharmony_ci
511862306a36Sopenharmony_ci/*
511962306a36Sopenharmony_ci * Set PLCA params.
512062306a36Sopenharmony_ci */
512162306a36Sopenharmony_ciint ethtool_plca_set_cfg(struct ynl_sock *ys,
512262306a36Sopenharmony_ci			 struct ethtool_plca_set_cfg_req *req);
512362306a36Sopenharmony_ci
512462306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_PLCA_GET_STATUS ============== */
512562306a36Sopenharmony_ci/* ETHTOOL_MSG_PLCA_GET_STATUS - do */
512662306a36Sopenharmony_cistruct ethtool_plca_get_status_req {
512762306a36Sopenharmony_ci	struct {
512862306a36Sopenharmony_ci		__u32 header:1;
512962306a36Sopenharmony_ci	} _present;
513062306a36Sopenharmony_ci
513162306a36Sopenharmony_ci	struct ethtool_header header;
513262306a36Sopenharmony_ci};
513362306a36Sopenharmony_ci
513462306a36Sopenharmony_cistatic inline struct ethtool_plca_get_status_req *
513562306a36Sopenharmony_ciethtool_plca_get_status_req_alloc(void)
513662306a36Sopenharmony_ci{
513762306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_plca_get_status_req));
513862306a36Sopenharmony_ci}
513962306a36Sopenharmony_civoid ethtool_plca_get_status_req_free(struct ethtool_plca_get_status_req *req);
514062306a36Sopenharmony_ci
514162306a36Sopenharmony_cistatic inline void
514262306a36Sopenharmony_ciethtool_plca_get_status_req_set_header_dev_index(struct ethtool_plca_get_status_req *req,
514362306a36Sopenharmony_ci						 __u32 dev_index)
514462306a36Sopenharmony_ci{
514562306a36Sopenharmony_ci	req->_present.header = 1;
514662306a36Sopenharmony_ci	req->header._present.dev_index = 1;
514762306a36Sopenharmony_ci	req->header.dev_index = dev_index;
514862306a36Sopenharmony_ci}
514962306a36Sopenharmony_cistatic inline void
515062306a36Sopenharmony_ciethtool_plca_get_status_req_set_header_dev_name(struct ethtool_plca_get_status_req *req,
515162306a36Sopenharmony_ci						const char *dev_name)
515262306a36Sopenharmony_ci{
515362306a36Sopenharmony_ci	free(req->header.dev_name);
515462306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
515562306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
515662306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
515762306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
515862306a36Sopenharmony_ci}
515962306a36Sopenharmony_cistatic inline void
516062306a36Sopenharmony_ciethtool_plca_get_status_req_set_header_flags(struct ethtool_plca_get_status_req *req,
516162306a36Sopenharmony_ci					     __u32 flags)
516262306a36Sopenharmony_ci{
516362306a36Sopenharmony_ci	req->_present.header = 1;
516462306a36Sopenharmony_ci	req->header._present.flags = 1;
516562306a36Sopenharmony_ci	req->header.flags = flags;
516662306a36Sopenharmony_ci}
516762306a36Sopenharmony_ci
516862306a36Sopenharmony_cistruct ethtool_plca_get_status_rsp {
516962306a36Sopenharmony_ci	struct {
517062306a36Sopenharmony_ci		__u32 header:1;
517162306a36Sopenharmony_ci		__u32 version:1;
517262306a36Sopenharmony_ci		__u32 enabled:1;
517362306a36Sopenharmony_ci		__u32 status:1;
517462306a36Sopenharmony_ci		__u32 node_cnt:1;
517562306a36Sopenharmony_ci		__u32 node_id:1;
517662306a36Sopenharmony_ci		__u32 to_tmr:1;
517762306a36Sopenharmony_ci		__u32 burst_cnt:1;
517862306a36Sopenharmony_ci		__u32 burst_tmr:1;
517962306a36Sopenharmony_ci	} _present;
518062306a36Sopenharmony_ci
518162306a36Sopenharmony_ci	struct ethtool_header header;
518262306a36Sopenharmony_ci	__u16 version;
518362306a36Sopenharmony_ci	__u8 enabled;
518462306a36Sopenharmony_ci	__u8 status;
518562306a36Sopenharmony_ci	__u32 node_cnt;
518662306a36Sopenharmony_ci	__u32 node_id;
518762306a36Sopenharmony_ci	__u32 to_tmr;
518862306a36Sopenharmony_ci	__u32 burst_cnt;
518962306a36Sopenharmony_ci	__u32 burst_tmr;
519062306a36Sopenharmony_ci};
519162306a36Sopenharmony_ci
519262306a36Sopenharmony_civoid ethtool_plca_get_status_rsp_free(struct ethtool_plca_get_status_rsp *rsp);
519362306a36Sopenharmony_ci
519462306a36Sopenharmony_ci/*
519562306a36Sopenharmony_ci * Get PLCA status params.
519662306a36Sopenharmony_ci */
519762306a36Sopenharmony_cistruct ethtool_plca_get_status_rsp *
519862306a36Sopenharmony_ciethtool_plca_get_status(struct ynl_sock *ys,
519962306a36Sopenharmony_ci			struct ethtool_plca_get_status_req *req);
520062306a36Sopenharmony_ci
520162306a36Sopenharmony_ci/* ETHTOOL_MSG_PLCA_GET_STATUS - dump */
520262306a36Sopenharmony_cistruct ethtool_plca_get_status_req_dump {
520362306a36Sopenharmony_ci	struct {
520462306a36Sopenharmony_ci		__u32 header:1;
520562306a36Sopenharmony_ci	} _present;
520662306a36Sopenharmony_ci
520762306a36Sopenharmony_ci	struct ethtool_header header;
520862306a36Sopenharmony_ci};
520962306a36Sopenharmony_ci
521062306a36Sopenharmony_cistatic inline struct ethtool_plca_get_status_req_dump *
521162306a36Sopenharmony_ciethtool_plca_get_status_req_dump_alloc(void)
521262306a36Sopenharmony_ci{
521362306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_plca_get_status_req_dump));
521462306a36Sopenharmony_ci}
521562306a36Sopenharmony_civoid
521662306a36Sopenharmony_ciethtool_plca_get_status_req_dump_free(struct ethtool_plca_get_status_req_dump *req);
521762306a36Sopenharmony_ci
521862306a36Sopenharmony_cistatic inline void
521962306a36Sopenharmony_ciethtool_plca_get_status_req_dump_set_header_dev_index(struct ethtool_plca_get_status_req_dump *req,
522062306a36Sopenharmony_ci						      __u32 dev_index)
522162306a36Sopenharmony_ci{
522262306a36Sopenharmony_ci	req->_present.header = 1;
522362306a36Sopenharmony_ci	req->header._present.dev_index = 1;
522462306a36Sopenharmony_ci	req->header.dev_index = dev_index;
522562306a36Sopenharmony_ci}
522662306a36Sopenharmony_cistatic inline void
522762306a36Sopenharmony_ciethtool_plca_get_status_req_dump_set_header_dev_name(struct ethtool_plca_get_status_req_dump *req,
522862306a36Sopenharmony_ci						     const char *dev_name)
522962306a36Sopenharmony_ci{
523062306a36Sopenharmony_ci	free(req->header.dev_name);
523162306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
523262306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
523362306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
523462306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
523562306a36Sopenharmony_ci}
523662306a36Sopenharmony_cistatic inline void
523762306a36Sopenharmony_ciethtool_plca_get_status_req_dump_set_header_flags(struct ethtool_plca_get_status_req_dump *req,
523862306a36Sopenharmony_ci						  __u32 flags)
523962306a36Sopenharmony_ci{
524062306a36Sopenharmony_ci	req->_present.header = 1;
524162306a36Sopenharmony_ci	req->header._present.flags = 1;
524262306a36Sopenharmony_ci	req->header.flags = flags;
524362306a36Sopenharmony_ci}
524462306a36Sopenharmony_ci
524562306a36Sopenharmony_cistruct ethtool_plca_get_status_list {
524662306a36Sopenharmony_ci	struct ethtool_plca_get_status_list *next;
524762306a36Sopenharmony_ci	struct ethtool_plca_get_status_rsp obj __attribute__ ((aligned (8)));
524862306a36Sopenharmony_ci};
524962306a36Sopenharmony_ci
525062306a36Sopenharmony_civoid
525162306a36Sopenharmony_ciethtool_plca_get_status_list_free(struct ethtool_plca_get_status_list *rsp);
525262306a36Sopenharmony_ci
525362306a36Sopenharmony_cistruct ethtool_plca_get_status_list *
525462306a36Sopenharmony_ciethtool_plca_get_status_dump(struct ynl_sock *ys,
525562306a36Sopenharmony_ci			     struct ethtool_plca_get_status_req_dump *req);
525662306a36Sopenharmony_ci
525762306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_MM_GET ============== */
525862306a36Sopenharmony_ci/* ETHTOOL_MSG_MM_GET - do */
525962306a36Sopenharmony_cistruct ethtool_mm_get_req {
526062306a36Sopenharmony_ci	struct {
526162306a36Sopenharmony_ci		__u32 header:1;
526262306a36Sopenharmony_ci	} _present;
526362306a36Sopenharmony_ci
526462306a36Sopenharmony_ci	struct ethtool_header header;
526562306a36Sopenharmony_ci};
526662306a36Sopenharmony_ci
526762306a36Sopenharmony_cistatic inline struct ethtool_mm_get_req *ethtool_mm_get_req_alloc(void)
526862306a36Sopenharmony_ci{
526962306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_mm_get_req));
527062306a36Sopenharmony_ci}
527162306a36Sopenharmony_civoid ethtool_mm_get_req_free(struct ethtool_mm_get_req *req);
527262306a36Sopenharmony_ci
527362306a36Sopenharmony_cistatic inline void
527462306a36Sopenharmony_ciethtool_mm_get_req_set_header_dev_index(struct ethtool_mm_get_req *req,
527562306a36Sopenharmony_ci					__u32 dev_index)
527662306a36Sopenharmony_ci{
527762306a36Sopenharmony_ci	req->_present.header = 1;
527862306a36Sopenharmony_ci	req->header._present.dev_index = 1;
527962306a36Sopenharmony_ci	req->header.dev_index = dev_index;
528062306a36Sopenharmony_ci}
528162306a36Sopenharmony_cistatic inline void
528262306a36Sopenharmony_ciethtool_mm_get_req_set_header_dev_name(struct ethtool_mm_get_req *req,
528362306a36Sopenharmony_ci				       const char *dev_name)
528462306a36Sopenharmony_ci{
528562306a36Sopenharmony_ci	free(req->header.dev_name);
528662306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
528762306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
528862306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
528962306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
529062306a36Sopenharmony_ci}
529162306a36Sopenharmony_cistatic inline void
529262306a36Sopenharmony_ciethtool_mm_get_req_set_header_flags(struct ethtool_mm_get_req *req,
529362306a36Sopenharmony_ci				    __u32 flags)
529462306a36Sopenharmony_ci{
529562306a36Sopenharmony_ci	req->_present.header = 1;
529662306a36Sopenharmony_ci	req->header._present.flags = 1;
529762306a36Sopenharmony_ci	req->header.flags = flags;
529862306a36Sopenharmony_ci}
529962306a36Sopenharmony_ci
530062306a36Sopenharmony_cistruct ethtool_mm_get_rsp {
530162306a36Sopenharmony_ci	struct {
530262306a36Sopenharmony_ci		__u32 header:1;
530362306a36Sopenharmony_ci		__u32 pmac_enabled:1;
530462306a36Sopenharmony_ci		__u32 tx_enabled:1;
530562306a36Sopenharmony_ci		__u32 tx_active:1;
530662306a36Sopenharmony_ci		__u32 tx_min_frag_size:1;
530762306a36Sopenharmony_ci		__u32 rx_min_frag_size:1;
530862306a36Sopenharmony_ci		__u32 verify_enabled:1;
530962306a36Sopenharmony_ci		__u32 verify_time:1;
531062306a36Sopenharmony_ci		__u32 max_verify_time:1;
531162306a36Sopenharmony_ci		__u32 stats:1;
531262306a36Sopenharmony_ci	} _present;
531362306a36Sopenharmony_ci
531462306a36Sopenharmony_ci	struct ethtool_header header;
531562306a36Sopenharmony_ci	__u8 pmac_enabled;
531662306a36Sopenharmony_ci	__u8 tx_enabled;
531762306a36Sopenharmony_ci	__u8 tx_active;
531862306a36Sopenharmony_ci	__u32 tx_min_frag_size;
531962306a36Sopenharmony_ci	__u32 rx_min_frag_size;
532062306a36Sopenharmony_ci	__u8 verify_enabled;
532162306a36Sopenharmony_ci	__u32 verify_time;
532262306a36Sopenharmony_ci	__u32 max_verify_time;
532362306a36Sopenharmony_ci	struct ethtool_mm_stat stats;
532462306a36Sopenharmony_ci};
532562306a36Sopenharmony_ci
532662306a36Sopenharmony_civoid ethtool_mm_get_rsp_free(struct ethtool_mm_get_rsp *rsp);
532762306a36Sopenharmony_ci
532862306a36Sopenharmony_ci/*
532962306a36Sopenharmony_ci * Get MAC Merge configuration and state
533062306a36Sopenharmony_ci */
533162306a36Sopenharmony_cistruct ethtool_mm_get_rsp *
533262306a36Sopenharmony_ciethtool_mm_get(struct ynl_sock *ys, struct ethtool_mm_get_req *req);
533362306a36Sopenharmony_ci
533462306a36Sopenharmony_ci/* ETHTOOL_MSG_MM_GET - dump */
533562306a36Sopenharmony_cistruct ethtool_mm_get_req_dump {
533662306a36Sopenharmony_ci	struct {
533762306a36Sopenharmony_ci		__u32 header:1;
533862306a36Sopenharmony_ci	} _present;
533962306a36Sopenharmony_ci
534062306a36Sopenharmony_ci	struct ethtool_header header;
534162306a36Sopenharmony_ci};
534262306a36Sopenharmony_ci
534362306a36Sopenharmony_cistatic inline struct ethtool_mm_get_req_dump *
534462306a36Sopenharmony_ciethtool_mm_get_req_dump_alloc(void)
534562306a36Sopenharmony_ci{
534662306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_mm_get_req_dump));
534762306a36Sopenharmony_ci}
534862306a36Sopenharmony_civoid ethtool_mm_get_req_dump_free(struct ethtool_mm_get_req_dump *req);
534962306a36Sopenharmony_ci
535062306a36Sopenharmony_cistatic inline void
535162306a36Sopenharmony_ciethtool_mm_get_req_dump_set_header_dev_index(struct ethtool_mm_get_req_dump *req,
535262306a36Sopenharmony_ci					     __u32 dev_index)
535362306a36Sopenharmony_ci{
535462306a36Sopenharmony_ci	req->_present.header = 1;
535562306a36Sopenharmony_ci	req->header._present.dev_index = 1;
535662306a36Sopenharmony_ci	req->header.dev_index = dev_index;
535762306a36Sopenharmony_ci}
535862306a36Sopenharmony_cistatic inline void
535962306a36Sopenharmony_ciethtool_mm_get_req_dump_set_header_dev_name(struct ethtool_mm_get_req_dump *req,
536062306a36Sopenharmony_ci					    const char *dev_name)
536162306a36Sopenharmony_ci{
536262306a36Sopenharmony_ci	free(req->header.dev_name);
536362306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
536462306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
536562306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
536662306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
536762306a36Sopenharmony_ci}
536862306a36Sopenharmony_cistatic inline void
536962306a36Sopenharmony_ciethtool_mm_get_req_dump_set_header_flags(struct ethtool_mm_get_req_dump *req,
537062306a36Sopenharmony_ci					 __u32 flags)
537162306a36Sopenharmony_ci{
537262306a36Sopenharmony_ci	req->_present.header = 1;
537362306a36Sopenharmony_ci	req->header._present.flags = 1;
537462306a36Sopenharmony_ci	req->header.flags = flags;
537562306a36Sopenharmony_ci}
537662306a36Sopenharmony_ci
537762306a36Sopenharmony_cistruct ethtool_mm_get_list {
537862306a36Sopenharmony_ci	struct ethtool_mm_get_list *next;
537962306a36Sopenharmony_ci	struct ethtool_mm_get_rsp obj __attribute__ ((aligned (8)));
538062306a36Sopenharmony_ci};
538162306a36Sopenharmony_ci
538262306a36Sopenharmony_civoid ethtool_mm_get_list_free(struct ethtool_mm_get_list *rsp);
538362306a36Sopenharmony_ci
538462306a36Sopenharmony_cistruct ethtool_mm_get_list *
538562306a36Sopenharmony_ciethtool_mm_get_dump(struct ynl_sock *ys, struct ethtool_mm_get_req_dump *req);
538662306a36Sopenharmony_ci
538762306a36Sopenharmony_ci/* ETHTOOL_MSG_MM_GET - notify */
538862306a36Sopenharmony_cistruct ethtool_mm_get_ntf {
538962306a36Sopenharmony_ci	__u16 family;
539062306a36Sopenharmony_ci	__u8 cmd;
539162306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
539262306a36Sopenharmony_ci	void (*free)(struct ethtool_mm_get_ntf *ntf);
539362306a36Sopenharmony_ci	struct ethtool_mm_get_rsp obj __attribute__ ((aligned (8)));
539462306a36Sopenharmony_ci};
539562306a36Sopenharmony_ci
539662306a36Sopenharmony_civoid ethtool_mm_get_ntf_free(struct ethtool_mm_get_ntf *rsp);
539762306a36Sopenharmony_ci
539862306a36Sopenharmony_ci/* ============== ETHTOOL_MSG_MM_SET ============== */
539962306a36Sopenharmony_ci/* ETHTOOL_MSG_MM_SET - do */
540062306a36Sopenharmony_cistruct ethtool_mm_set_req {
540162306a36Sopenharmony_ci	struct {
540262306a36Sopenharmony_ci		__u32 header:1;
540362306a36Sopenharmony_ci		__u32 verify_enabled:1;
540462306a36Sopenharmony_ci		__u32 verify_time:1;
540562306a36Sopenharmony_ci		__u32 tx_enabled:1;
540662306a36Sopenharmony_ci		__u32 pmac_enabled:1;
540762306a36Sopenharmony_ci		__u32 tx_min_frag_size:1;
540862306a36Sopenharmony_ci	} _present;
540962306a36Sopenharmony_ci
541062306a36Sopenharmony_ci	struct ethtool_header header;
541162306a36Sopenharmony_ci	__u8 verify_enabled;
541262306a36Sopenharmony_ci	__u32 verify_time;
541362306a36Sopenharmony_ci	__u8 tx_enabled;
541462306a36Sopenharmony_ci	__u8 pmac_enabled;
541562306a36Sopenharmony_ci	__u32 tx_min_frag_size;
541662306a36Sopenharmony_ci};
541762306a36Sopenharmony_ci
541862306a36Sopenharmony_cistatic inline struct ethtool_mm_set_req *ethtool_mm_set_req_alloc(void)
541962306a36Sopenharmony_ci{
542062306a36Sopenharmony_ci	return calloc(1, sizeof(struct ethtool_mm_set_req));
542162306a36Sopenharmony_ci}
542262306a36Sopenharmony_civoid ethtool_mm_set_req_free(struct ethtool_mm_set_req *req);
542362306a36Sopenharmony_ci
542462306a36Sopenharmony_cistatic inline void
542562306a36Sopenharmony_ciethtool_mm_set_req_set_header_dev_index(struct ethtool_mm_set_req *req,
542662306a36Sopenharmony_ci					__u32 dev_index)
542762306a36Sopenharmony_ci{
542862306a36Sopenharmony_ci	req->_present.header = 1;
542962306a36Sopenharmony_ci	req->header._present.dev_index = 1;
543062306a36Sopenharmony_ci	req->header.dev_index = dev_index;
543162306a36Sopenharmony_ci}
543262306a36Sopenharmony_cistatic inline void
543362306a36Sopenharmony_ciethtool_mm_set_req_set_header_dev_name(struct ethtool_mm_set_req *req,
543462306a36Sopenharmony_ci				       const char *dev_name)
543562306a36Sopenharmony_ci{
543662306a36Sopenharmony_ci	free(req->header.dev_name);
543762306a36Sopenharmony_ci	req->header._present.dev_name_len = strlen(dev_name);
543862306a36Sopenharmony_ci	req->header.dev_name = malloc(req->header._present.dev_name_len + 1);
543962306a36Sopenharmony_ci	memcpy(req->header.dev_name, dev_name, req->header._present.dev_name_len);
544062306a36Sopenharmony_ci	req->header.dev_name[req->header._present.dev_name_len] = 0;
544162306a36Sopenharmony_ci}
544262306a36Sopenharmony_cistatic inline void
544362306a36Sopenharmony_ciethtool_mm_set_req_set_header_flags(struct ethtool_mm_set_req *req,
544462306a36Sopenharmony_ci				    __u32 flags)
544562306a36Sopenharmony_ci{
544662306a36Sopenharmony_ci	req->_present.header = 1;
544762306a36Sopenharmony_ci	req->header._present.flags = 1;
544862306a36Sopenharmony_ci	req->header.flags = flags;
544962306a36Sopenharmony_ci}
545062306a36Sopenharmony_cistatic inline void
545162306a36Sopenharmony_ciethtool_mm_set_req_set_verify_enabled(struct ethtool_mm_set_req *req,
545262306a36Sopenharmony_ci				      __u8 verify_enabled)
545362306a36Sopenharmony_ci{
545462306a36Sopenharmony_ci	req->_present.verify_enabled = 1;
545562306a36Sopenharmony_ci	req->verify_enabled = verify_enabled;
545662306a36Sopenharmony_ci}
545762306a36Sopenharmony_cistatic inline void
545862306a36Sopenharmony_ciethtool_mm_set_req_set_verify_time(struct ethtool_mm_set_req *req,
545962306a36Sopenharmony_ci				   __u32 verify_time)
546062306a36Sopenharmony_ci{
546162306a36Sopenharmony_ci	req->_present.verify_time = 1;
546262306a36Sopenharmony_ci	req->verify_time = verify_time;
546362306a36Sopenharmony_ci}
546462306a36Sopenharmony_cistatic inline void
546562306a36Sopenharmony_ciethtool_mm_set_req_set_tx_enabled(struct ethtool_mm_set_req *req,
546662306a36Sopenharmony_ci				  __u8 tx_enabled)
546762306a36Sopenharmony_ci{
546862306a36Sopenharmony_ci	req->_present.tx_enabled = 1;
546962306a36Sopenharmony_ci	req->tx_enabled = tx_enabled;
547062306a36Sopenharmony_ci}
547162306a36Sopenharmony_cistatic inline void
547262306a36Sopenharmony_ciethtool_mm_set_req_set_pmac_enabled(struct ethtool_mm_set_req *req,
547362306a36Sopenharmony_ci				    __u8 pmac_enabled)
547462306a36Sopenharmony_ci{
547562306a36Sopenharmony_ci	req->_present.pmac_enabled = 1;
547662306a36Sopenharmony_ci	req->pmac_enabled = pmac_enabled;
547762306a36Sopenharmony_ci}
547862306a36Sopenharmony_cistatic inline void
547962306a36Sopenharmony_ciethtool_mm_set_req_set_tx_min_frag_size(struct ethtool_mm_set_req *req,
548062306a36Sopenharmony_ci					__u32 tx_min_frag_size)
548162306a36Sopenharmony_ci{
548262306a36Sopenharmony_ci	req->_present.tx_min_frag_size = 1;
548362306a36Sopenharmony_ci	req->tx_min_frag_size = tx_min_frag_size;
548462306a36Sopenharmony_ci}
548562306a36Sopenharmony_ci
548662306a36Sopenharmony_ci/*
548762306a36Sopenharmony_ci * Set MAC Merge configuration
548862306a36Sopenharmony_ci */
548962306a36Sopenharmony_ciint ethtool_mm_set(struct ynl_sock *ys, struct ethtool_mm_set_req *req);
549062306a36Sopenharmony_ci
549162306a36Sopenharmony_ci/* ETHTOOL_MSG_CABLE_TEST_NTF - event */
549262306a36Sopenharmony_cistruct ethtool_cable_test_ntf_rsp {
549362306a36Sopenharmony_ci	struct {
549462306a36Sopenharmony_ci		__u32 header:1;
549562306a36Sopenharmony_ci		__u32 status:1;
549662306a36Sopenharmony_ci	} _present;
549762306a36Sopenharmony_ci
549862306a36Sopenharmony_ci	struct ethtool_header header;
549962306a36Sopenharmony_ci	__u8 status;
550062306a36Sopenharmony_ci};
550162306a36Sopenharmony_ci
550262306a36Sopenharmony_cistruct ethtool_cable_test_ntf {
550362306a36Sopenharmony_ci	__u16 family;
550462306a36Sopenharmony_ci	__u8 cmd;
550562306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
550662306a36Sopenharmony_ci	void (*free)(struct ethtool_cable_test_ntf *ntf);
550762306a36Sopenharmony_ci	struct ethtool_cable_test_ntf_rsp obj __attribute__ ((aligned (8)));
550862306a36Sopenharmony_ci};
550962306a36Sopenharmony_ci
551062306a36Sopenharmony_civoid ethtool_cable_test_ntf_free(struct ethtool_cable_test_ntf *rsp);
551162306a36Sopenharmony_ci
551262306a36Sopenharmony_ci/* ETHTOOL_MSG_CABLE_TEST_TDR_NTF - event */
551362306a36Sopenharmony_cistruct ethtool_cable_test_tdr_ntf_rsp {
551462306a36Sopenharmony_ci	struct {
551562306a36Sopenharmony_ci		__u32 header:1;
551662306a36Sopenharmony_ci		__u32 status:1;
551762306a36Sopenharmony_ci		__u32 nest:1;
551862306a36Sopenharmony_ci	} _present;
551962306a36Sopenharmony_ci
552062306a36Sopenharmony_ci	struct ethtool_header header;
552162306a36Sopenharmony_ci	__u8 status;
552262306a36Sopenharmony_ci	struct ethtool_cable_nest nest;
552362306a36Sopenharmony_ci};
552462306a36Sopenharmony_ci
552562306a36Sopenharmony_cistruct ethtool_cable_test_tdr_ntf {
552662306a36Sopenharmony_ci	__u16 family;
552762306a36Sopenharmony_ci	__u8 cmd;
552862306a36Sopenharmony_ci	struct ynl_ntf_base_type *next;
552962306a36Sopenharmony_ci	void (*free)(struct ethtool_cable_test_tdr_ntf *ntf);
553062306a36Sopenharmony_ci	struct ethtool_cable_test_tdr_ntf_rsp obj __attribute__ ((aligned (8)));
553162306a36Sopenharmony_ci};
553262306a36Sopenharmony_ci
553362306a36Sopenharmony_civoid ethtool_cable_test_tdr_ntf_free(struct ethtool_cable_test_tdr_ntf *rsp);
553462306a36Sopenharmony_ci
553562306a36Sopenharmony_ci#endif /* _LINUX_ETHTOOL_GEN_H */
5536