xref: /linux/drivers/block/drbd/drbd_nl_gen.h (revision 0eaed89c18aeedf0898baf2dbf5ff027c6795152)
1*8098eeb6SChristoph Böhmwalder /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
2*8098eeb6SChristoph Böhmwalder 
3*8098eeb6SChristoph Böhmwalder #ifndef _LINUX_DRBD_GEN_H
4*8098eeb6SChristoph Böhmwalder #define _LINUX_DRBD_GEN_H
5*8098eeb6SChristoph Böhmwalder 
6*8098eeb6SChristoph Böhmwalder #include <net/netlink.h>
7*8098eeb6SChristoph Böhmwalder #include <net/genetlink.h>
8*8098eeb6SChristoph Böhmwalder 
9*8098eeb6SChristoph Böhmwalder #include <uapi/linux/drbd_genl.h>
10*8098eeb6SChristoph Böhmwalder #include <linux/drbd.h>
11*8098eeb6SChristoph Böhmwalder #include <linux/drbd_limits.h>
12*8098eeb6SChristoph Böhmwalder 
13*8098eeb6SChristoph Böhmwalder /* Common nested types */
14*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_connection_info_nl_policy[DRBD_A_CONNECTION_INFO_CONN_ROLE + 1];
15*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_connection_statistics_nl_policy[DRBD_A_CONNECTION_STATISTICS_CONN_CONGESTED + 1];
16*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_detach_parms_nl_policy[DRBD_A_DETACH_PARMS_FORCE_DETACH + 1];
17*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_device_info_nl_policy[DRBD_A_DEVICE_INFO_DEV_DISK_STATE + 1];
18*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_device_statistics_nl_policy[DRBD_A_DEVICE_STATISTICS_HISTORY_UUIDS + 1];
19*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_disconnect_parms_nl_policy[DRBD_A_DISCONNECT_PARMS_FORCE_DISCONNECT + 1];
20*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_disk_conf_nl_policy[DRBD_A_DISK_CONF_DISABLE_WRITE_SAME + 1];
21*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_drbd_cfg_context_nl_policy[DRBD_A_DRBD_CFG_CONTEXT_CTX_PEER_ADDR + 1];
22*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_net_conf_nl_policy[DRBD_A_NET_CONF_SOCK_CHECK_TIMEO + 1];
23*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_new_c_uuid_parms_nl_policy[DRBD_A_NEW_C_UUID_PARMS_CLEAR_BM + 1];
24*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_peer_device_info_nl_policy[DRBD_A_PEER_DEVICE_INFO_PEER_RESYNC_SUSP_DEPENDENCY + 1];
25*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_peer_device_statistics_nl_policy[DRBD_A_PEER_DEVICE_STATISTICS_PEER_DEV_FLAGS + 1];
26*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_res_opts_nl_policy[DRBD_A_RES_OPTS_ON_NO_DATA + 1];
27*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_resize_parms_nl_policy[DRBD_A_RESIZE_PARMS_AL_STRIPE_SIZE + 1];
28*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_resource_info_nl_policy[DRBD_A_RESOURCE_INFO_RES_SUSP_FEN + 1];
29*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_resource_statistics_nl_policy[DRBD_A_RESOURCE_STATISTICS_RES_STAT_WRITE_ORDERING + 1];
30*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_set_role_parms_nl_policy[DRBD_A_SET_ROLE_PARMS_ASSUME_UPTODATE + 1];
31*8098eeb6SChristoph Böhmwalder extern const struct nla_policy drbd_start_ov_parms_nl_policy[DRBD_A_START_OV_PARMS_OV_STOP_SECTOR + 1];
32*8098eeb6SChristoph Böhmwalder 
33*8098eeb6SChristoph Böhmwalder /* Ops table for drbd */
34*8098eeb6SChristoph Böhmwalder extern const struct genl_split_ops drbd_nl_ops[32];
35*8098eeb6SChristoph Böhmwalder 
36*8098eeb6SChristoph Böhmwalder int drbd_pre_doit(const struct genl_split_ops *ops, struct sk_buff *skb,
37*8098eeb6SChristoph Böhmwalder 		  struct genl_info *info);
38*8098eeb6SChristoph Böhmwalder void
39*8098eeb6SChristoph Böhmwalder drbd_post_doit(const struct genl_split_ops *ops, struct sk_buff *skb,
40*8098eeb6SChristoph Böhmwalder 	       struct genl_info *info);
41*8098eeb6SChristoph Böhmwalder int drbd_adm_dump_devices_done(struct netlink_callback *cb);
42*8098eeb6SChristoph Böhmwalder int drbd_adm_dump_connections_done(struct netlink_callback *cb);
43*8098eeb6SChristoph Böhmwalder int drbd_adm_dump_peer_devices_done(struct netlink_callback *cb);
44*8098eeb6SChristoph Böhmwalder 
45*8098eeb6SChristoph Böhmwalder int drbd_nl_get_status_doit(struct sk_buff *skb, struct genl_info *info);
46*8098eeb6SChristoph Böhmwalder int drbd_nl_get_status_dumpit(struct sk_buff *skb, struct netlink_callback *cb);
47*8098eeb6SChristoph Böhmwalder int drbd_nl_new_minor_doit(struct sk_buff *skb, struct genl_info *info);
48*8098eeb6SChristoph Böhmwalder int drbd_nl_del_minor_doit(struct sk_buff *skb, struct genl_info *info);
49*8098eeb6SChristoph Böhmwalder int drbd_nl_new_resource_doit(struct sk_buff *skb, struct genl_info *info);
50*8098eeb6SChristoph Böhmwalder int drbd_nl_del_resource_doit(struct sk_buff *skb, struct genl_info *info);
51*8098eeb6SChristoph Böhmwalder int drbd_nl_resource_opts_doit(struct sk_buff *skb, struct genl_info *info);
52*8098eeb6SChristoph Böhmwalder int drbd_nl_connect_doit(struct sk_buff *skb, struct genl_info *info);
53*8098eeb6SChristoph Böhmwalder int drbd_nl_disconnect_doit(struct sk_buff *skb, struct genl_info *info);
54*8098eeb6SChristoph Böhmwalder int drbd_nl_attach_doit(struct sk_buff *skb, struct genl_info *info);
55*8098eeb6SChristoph Böhmwalder int drbd_nl_resize_doit(struct sk_buff *skb, struct genl_info *info);
56*8098eeb6SChristoph Böhmwalder int drbd_nl_primary_doit(struct sk_buff *skb, struct genl_info *info);
57*8098eeb6SChristoph Böhmwalder int drbd_nl_secondary_doit(struct sk_buff *skb, struct genl_info *info);
58*8098eeb6SChristoph Böhmwalder int drbd_nl_new_c_uuid_doit(struct sk_buff *skb, struct genl_info *info);
59*8098eeb6SChristoph Böhmwalder int drbd_nl_start_ov_doit(struct sk_buff *skb, struct genl_info *info);
60*8098eeb6SChristoph Böhmwalder int drbd_nl_detach_doit(struct sk_buff *skb, struct genl_info *info);
61*8098eeb6SChristoph Böhmwalder int drbd_nl_invalidate_doit(struct sk_buff *skb, struct genl_info *info);
62*8098eeb6SChristoph Böhmwalder int drbd_nl_inval_peer_doit(struct sk_buff *skb, struct genl_info *info);
63*8098eeb6SChristoph Böhmwalder int drbd_nl_pause_sync_doit(struct sk_buff *skb, struct genl_info *info);
64*8098eeb6SChristoph Böhmwalder int drbd_nl_resume_sync_doit(struct sk_buff *skb, struct genl_info *info);
65*8098eeb6SChristoph Böhmwalder int drbd_nl_suspend_io_doit(struct sk_buff *skb, struct genl_info *info);
66*8098eeb6SChristoph Böhmwalder int drbd_nl_resume_io_doit(struct sk_buff *skb, struct genl_info *info);
67*8098eeb6SChristoph Böhmwalder int drbd_nl_outdate_doit(struct sk_buff *skb, struct genl_info *info);
68*8098eeb6SChristoph Böhmwalder int drbd_nl_get_timeout_type_doit(struct sk_buff *skb, struct genl_info *info);
69*8098eeb6SChristoph Böhmwalder int drbd_nl_down_doit(struct sk_buff *skb, struct genl_info *info);
70*8098eeb6SChristoph Böhmwalder int drbd_nl_chg_disk_opts_doit(struct sk_buff *skb, struct genl_info *info);
71*8098eeb6SChristoph Böhmwalder int drbd_nl_chg_net_opts_doit(struct sk_buff *skb, struct genl_info *info);
72*8098eeb6SChristoph Böhmwalder int drbd_nl_get_resources_dumpit(struct sk_buff *skb,
73*8098eeb6SChristoph Böhmwalder 				 struct netlink_callback *cb);
74*8098eeb6SChristoph Böhmwalder int drbd_nl_get_devices_dumpit(struct sk_buff *skb,
75*8098eeb6SChristoph Böhmwalder 			       struct netlink_callback *cb);
76*8098eeb6SChristoph Böhmwalder int drbd_nl_get_connections_dumpit(struct sk_buff *skb,
77*8098eeb6SChristoph Böhmwalder 				   struct netlink_callback *cb);
78*8098eeb6SChristoph Böhmwalder int drbd_nl_get_peer_devices_dumpit(struct sk_buff *skb,
79*8098eeb6SChristoph Böhmwalder 				    struct netlink_callback *cb);
80*8098eeb6SChristoph Böhmwalder int drbd_nl_get_initial_state_dumpit(struct sk_buff *skb,
81*8098eeb6SChristoph Böhmwalder 				     struct netlink_callback *cb);
82*8098eeb6SChristoph Böhmwalder 
83*8098eeb6SChristoph Böhmwalder enum {
84*8098eeb6SChristoph Böhmwalder 	DRBD_NLGRP_EVENTS,
85*8098eeb6SChristoph Böhmwalder };
86*8098eeb6SChristoph Böhmwalder 
87*8098eeb6SChristoph Böhmwalder struct drbd_cfg_reply {
88*8098eeb6SChristoph Böhmwalder 	char info_text[0];
89*8098eeb6SChristoph Böhmwalder 	__u32 info_text_len;
90*8098eeb6SChristoph Böhmwalder };
91*8098eeb6SChristoph Böhmwalder 
92*8098eeb6SChristoph Böhmwalder struct drbd_cfg_context {
93*8098eeb6SChristoph Böhmwalder 	__u32 ctx_volume;
94*8098eeb6SChristoph Böhmwalder 	char ctx_resource_name[128];
95*8098eeb6SChristoph Böhmwalder 	__u32 ctx_resource_name_len;
96*8098eeb6SChristoph Böhmwalder 	char ctx_my_addr[128];
97*8098eeb6SChristoph Böhmwalder 	__u32 ctx_my_addr_len;
98*8098eeb6SChristoph Böhmwalder 	char ctx_peer_addr[128];
99*8098eeb6SChristoph Böhmwalder 	__u32 ctx_peer_addr_len;
100*8098eeb6SChristoph Böhmwalder };
101*8098eeb6SChristoph Böhmwalder 
102*8098eeb6SChristoph Böhmwalder struct disk_conf {
103*8098eeb6SChristoph Böhmwalder 	char backing_dev[128];
104*8098eeb6SChristoph Böhmwalder 	__u32 backing_dev_len;
105*8098eeb6SChristoph Böhmwalder 	char meta_dev[128];
106*8098eeb6SChristoph Böhmwalder 	__u32 meta_dev_len;
107*8098eeb6SChristoph Böhmwalder 	__s32 meta_dev_idx;
108*8098eeb6SChristoph Böhmwalder 	__u64 disk_size;
109*8098eeb6SChristoph Böhmwalder 	__u32 max_bio_bvecs;
110*8098eeb6SChristoph Böhmwalder 	__u32 on_io_error;
111*8098eeb6SChristoph Böhmwalder 	__u32 fencing;
112*8098eeb6SChristoph Böhmwalder 	__u32 resync_rate;
113*8098eeb6SChristoph Böhmwalder 	__s32 resync_after;
114*8098eeb6SChristoph Böhmwalder 	__u32 al_extents;
115*8098eeb6SChristoph Böhmwalder 	__u32 c_plan_ahead;
116*8098eeb6SChristoph Böhmwalder 	__u32 c_delay_target;
117*8098eeb6SChristoph Böhmwalder 	__u32 c_fill_target;
118*8098eeb6SChristoph Böhmwalder 	__u32 c_max_rate;
119*8098eeb6SChristoph Böhmwalder 	__u32 c_min_rate;
120*8098eeb6SChristoph Böhmwalder 	unsigned char disk_barrier;
121*8098eeb6SChristoph Böhmwalder 	unsigned char disk_flushes;
122*8098eeb6SChristoph Böhmwalder 	unsigned char disk_drain;
123*8098eeb6SChristoph Böhmwalder 	unsigned char md_flushes;
124*8098eeb6SChristoph Böhmwalder 	__u32 disk_timeout;
125*8098eeb6SChristoph Böhmwalder 	__u32 read_balancing;
126*8098eeb6SChristoph Böhmwalder 	unsigned char al_updates;
127*8098eeb6SChristoph Böhmwalder 	unsigned char discard_zeroes_if_aligned;
128*8098eeb6SChristoph Böhmwalder 	__u32 rs_discard_granularity;
129*8098eeb6SChristoph Böhmwalder 	unsigned char disable_write_same;
130*8098eeb6SChristoph Böhmwalder };
131*8098eeb6SChristoph Böhmwalder 
132*8098eeb6SChristoph Böhmwalder struct res_opts {
133*8098eeb6SChristoph Böhmwalder 	char cpu_mask[DRBD_CPU_MASK_SIZE];
134*8098eeb6SChristoph Böhmwalder 	__u32 cpu_mask_len;
135*8098eeb6SChristoph Böhmwalder 	__u32 on_no_data;
136*8098eeb6SChristoph Böhmwalder };
137*8098eeb6SChristoph Böhmwalder 
138*8098eeb6SChristoph Böhmwalder struct net_conf {
139*8098eeb6SChristoph Böhmwalder 	char shared_secret[SHARED_SECRET_MAX];
140*8098eeb6SChristoph Böhmwalder 	__u32 shared_secret_len;
141*8098eeb6SChristoph Böhmwalder 	char cram_hmac_alg[SHARED_SECRET_MAX];
142*8098eeb6SChristoph Böhmwalder 	__u32 cram_hmac_alg_len;
143*8098eeb6SChristoph Böhmwalder 	char integrity_alg[SHARED_SECRET_MAX];
144*8098eeb6SChristoph Böhmwalder 	__u32 integrity_alg_len;
145*8098eeb6SChristoph Böhmwalder 	char verify_alg[SHARED_SECRET_MAX];
146*8098eeb6SChristoph Böhmwalder 	__u32 verify_alg_len;
147*8098eeb6SChristoph Böhmwalder 	char csums_alg[SHARED_SECRET_MAX];
148*8098eeb6SChristoph Böhmwalder 	__u32 csums_alg_len;
149*8098eeb6SChristoph Böhmwalder 	__u32 wire_protocol;
150*8098eeb6SChristoph Böhmwalder 	__u32 connect_int;
151*8098eeb6SChristoph Böhmwalder 	__u32 timeout;
152*8098eeb6SChristoph Böhmwalder 	__u32 ping_int;
153*8098eeb6SChristoph Böhmwalder 	__u32 ping_timeo;
154*8098eeb6SChristoph Böhmwalder 	__u32 sndbuf_size;
155*8098eeb6SChristoph Böhmwalder 	__u32 rcvbuf_size;
156*8098eeb6SChristoph Böhmwalder 	__u32 ko_count;
157*8098eeb6SChristoph Böhmwalder 	__u32 max_buffers;
158*8098eeb6SChristoph Böhmwalder 	__u32 max_epoch_size;
159*8098eeb6SChristoph Böhmwalder 	__u32 unplug_watermark;
160*8098eeb6SChristoph Böhmwalder 	__u32 after_sb_0p;
161*8098eeb6SChristoph Böhmwalder 	__u32 after_sb_1p;
162*8098eeb6SChristoph Böhmwalder 	__u32 after_sb_2p;
163*8098eeb6SChristoph Böhmwalder 	__u32 rr_conflict;
164*8098eeb6SChristoph Böhmwalder 	__u32 on_congestion;
165*8098eeb6SChristoph Böhmwalder 	__u32 cong_fill;
166*8098eeb6SChristoph Böhmwalder 	__u32 cong_extents;
167*8098eeb6SChristoph Böhmwalder 	unsigned char two_primaries;
168*8098eeb6SChristoph Böhmwalder 	unsigned char discard_my_data;
169*8098eeb6SChristoph Böhmwalder 	unsigned char tcp_cork;
170*8098eeb6SChristoph Böhmwalder 	unsigned char always_asbp;
171*8098eeb6SChristoph Böhmwalder 	unsigned char tentative;
172*8098eeb6SChristoph Böhmwalder 	unsigned char use_rle;
173*8098eeb6SChristoph Böhmwalder 	unsigned char csums_after_crash_only;
174*8098eeb6SChristoph Böhmwalder 	__u32 sock_check_timeo;
175*8098eeb6SChristoph Böhmwalder };
176*8098eeb6SChristoph Böhmwalder 
177*8098eeb6SChristoph Böhmwalder struct set_role_parms {
178*8098eeb6SChristoph Böhmwalder 	unsigned char assume_uptodate;
179*8098eeb6SChristoph Böhmwalder };
180*8098eeb6SChristoph Böhmwalder 
181*8098eeb6SChristoph Böhmwalder struct resize_parms {
182*8098eeb6SChristoph Böhmwalder 	__u64 resize_size;
183*8098eeb6SChristoph Böhmwalder 	unsigned char resize_force;
184*8098eeb6SChristoph Böhmwalder 	unsigned char no_resync;
185*8098eeb6SChristoph Böhmwalder 	__u32 al_stripes;
186*8098eeb6SChristoph Böhmwalder 	__u32 al_stripe_size;
187*8098eeb6SChristoph Böhmwalder };
188*8098eeb6SChristoph Böhmwalder 
189*8098eeb6SChristoph Böhmwalder struct state_info {
190*8098eeb6SChristoph Böhmwalder 	__u32 sib_reason;
191*8098eeb6SChristoph Böhmwalder 	__u32 current_state;
192*8098eeb6SChristoph Böhmwalder 	__u64 capacity;
193*8098eeb6SChristoph Böhmwalder 	__u64 ed_uuid;
194*8098eeb6SChristoph Böhmwalder 	__u32 prev_state;
195*8098eeb6SChristoph Böhmwalder 	__u32 new_state;
196*8098eeb6SChristoph Böhmwalder 	char uuids[DRBD_NL_UUIDS_SIZE];
197*8098eeb6SChristoph Böhmwalder 	__u32 uuids_len;
198*8098eeb6SChristoph Böhmwalder 	__u32 disk_flags;
199*8098eeb6SChristoph Böhmwalder 	__u64 bits_total;
200*8098eeb6SChristoph Böhmwalder 	__u64 bits_oos;
201*8098eeb6SChristoph Böhmwalder 	__u64 bits_rs_total;
202*8098eeb6SChristoph Böhmwalder 	__u64 bits_rs_failed;
203*8098eeb6SChristoph Böhmwalder 	char helper[32];
204*8098eeb6SChristoph Böhmwalder 	__u32 helper_len;
205*8098eeb6SChristoph Böhmwalder 	__u32 helper_exit_code;
206*8098eeb6SChristoph Böhmwalder 	__u64 send_cnt;
207*8098eeb6SChristoph Böhmwalder 	__u64 recv_cnt;
208*8098eeb6SChristoph Böhmwalder 	__u64 read_cnt;
209*8098eeb6SChristoph Böhmwalder 	__u64 writ_cnt;
210*8098eeb6SChristoph Böhmwalder 	__u64 al_writ_cnt;
211*8098eeb6SChristoph Böhmwalder 	__u64 bm_writ_cnt;
212*8098eeb6SChristoph Böhmwalder 	__u32 ap_bio_cnt;
213*8098eeb6SChristoph Böhmwalder 	__u32 ap_pending_cnt;
214*8098eeb6SChristoph Böhmwalder 	__u32 rs_pending_cnt;
215*8098eeb6SChristoph Böhmwalder };
216*8098eeb6SChristoph Böhmwalder 
217*8098eeb6SChristoph Böhmwalder struct start_ov_parms {
218*8098eeb6SChristoph Böhmwalder 	__u64 ov_start_sector;
219*8098eeb6SChristoph Böhmwalder 	__u64 ov_stop_sector;
220*8098eeb6SChristoph Böhmwalder };
221*8098eeb6SChristoph Böhmwalder 
222*8098eeb6SChristoph Böhmwalder struct new_c_uuid_parms {
223*8098eeb6SChristoph Böhmwalder 	unsigned char clear_bm;
224*8098eeb6SChristoph Böhmwalder };
225*8098eeb6SChristoph Böhmwalder 
226*8098eeb6SChristoph Böhmwalder struct timeout_parms {
227*8098eeb6SChristoph Böhmwalder 	__u32 timeout_type;
228*8098eeb6SChristoph Böhmwalder };
229*8098eeb6SChristoph Böhmwalder 
230*8098eeb6SChristoph Böhmwalder struct disconnect_parms {
231*8098eeb6SChristoph Böhmwalder 	unsigned char force_disconnect;
232*8098eeb6SChristoph Böhmwalder };
233*8098eeb6SChristoph Böhmwalder 
234*8098eeb6SChristoph Böhmwalder struct detach_parms {
235*8098eeb6SChristoph Böhmwalder 	unsigned char force_detach;
236*8098eeb6SChristoph Böhmwalder };
237*8098eeb6SChristoph Böhmwalder 
238*8098eeb6SChristoph Böhmwalder struct resource_info {
239*8098eeb6SChristoph Böhmwalder 	__u32 res_role;
240*8098eeb6SChristoph Böhmwalder 	unsigned char res_susp;
241*8098eeb6SChristoph Böhmwalder 	unsigned char res_susp_nod;
242*8098eeb6SChristoph Böhmwalder 	unsigned char res_susp_fen;
243*8098eeb6SChristoph Böhmwalder };
244*8098eeb6SChristoph Böhmwalder 
245*8098eeb6SChristoph Böhmwalder struct device_info {
246*8098eeb6SChristoph Böhmwalder 	__u32 dev_disk_state;
247*8098eeb6SChristoph Böhmwalder };
248*8098eeb6SChristoph Böhmwalder 
249*8098eeb6SChristoph Böhmwalder struct connection_info {
250*8098eeb6SChristoph Böhmwalder 	__u32 conn_connection_state;
251*8098eeb6SChristoph Böhmwalder 	__u32 conn_role;
252*8098eeb6SChristoph Böhmwalder };
253*8098eeb6SChristoph Böhmwalder 
254*8098eeb6SChristoph Böhmwalder struct peer_device_info {
255*8098eeb6SChristoph Böhmwalder 	__u32 peer_repl_state;
256*8098eeb6SChristoph Böhmwalder 	__u32 peer_disk_state;
257*8098eeb6SChristoph Böhmwalder 	__u32 peer_resync_susp_user;
258*8098eeb6SChristoph Böhmwalder 	__u32 peer_resync_susp_peer;
259*8098eeb6SChristoph Böhmwalder 	__u32 peer_resync_susp_dependency;
260*8098eeb6SChristoph Böhmwalder };
261*8098eeb6SChristoph Böhmwalder 
262*8098eeb6SChristoph Böhmwalder struct resource_statistics {
263*8098eeb6SChristoph Böhmwalder 	__u32 res_stat_write_ordering;
264*8098eeb6SChristoph Böhmwalder };
265*8098eeb6SChristoph Böhmwalder 
266*8098eeb6SChristoph Böhmwalder struct device_statistics {
267*8098eeb6SChristoph Böhmwalder 	__u64 dev_size;
268*8098eeb6SChristoph Böhmwalder 	__u64 dev_read;
269*8098eeb6SChristoph Böhmwalder 	__u64 dev_write;
270*8098eeb6SChristoph Böhmwalder 	__u64 dev_al_writes;
271*8098eeb6SChristoph Böhmwalder 	__u64 dev_bm_writes;
272*8098eeb6SChristoph Böhmwalder 	__u32 dev_upper_pending;
273*8098eeb6SChristoph Böhmwalder 	__u32 dev_lower_pending;
274*8098eeb6SChristoph Böhmwalder 	unsigned char dev_upper_blocked;
275*8098eeb6SChristoph Böhmwalder 	unsigned char dev_lower_blocked;
276*8098eeb6SChristoph Böhmwalder 	unsigned char dev_al_suspended;
277*8098eeb6SChristoph Böhmwalder 	__u64 dev_exposed_data_uuid;
278*8098eeb6SChristoph Böhmwalder 	__u64 dev_current_uuid;
279*8098eeb6SChristoph Böhmwalder 	__u32 dev_disk_flags;
280*8098eeb6SChristoph Böhmwalder 	char history_uuids[DRBD_NL_HISTORY_UUIDS_SIZE];
281*8098eeb6SChristoph Böhmwalder 	__u32 history_uuids_len;
282*8098eeb6SChristoph Böhmwalder };
283*8098eeb6SChristoph Böhmwalder 
284*8098eeb6SChristoph Böhmwalder struct connection_statistics {
285*8098eeb6SChristoph Böhmwalder 	unsigned char conn_congested;
286*8098eeb6SChristoph Böhmwalder };
287*8098eeb6SChristoph Böhmwalder 
288*8098eeb6SChristoph Böhmwalder struct peer_device_statistics {
289*8098eeb6SChristoph Böhmwalder 	__u64 peer_dev_received;
290*8098eeb6SChristoph Böhmwalder 	__u64 peer_dev_sent;
291*8098eeb6SChristoph Böhmwalder 	__u32 peer_dev_pending;
292*8098eeb6SChristoph Böhmwalder 	__u32 peer_dev_unacked;
293*8098eeb6SChristoph Böhmwalder 	__u64 peer_dev_out_of_sync;
294*8098eeb6SChristoph Böhmwalder 	__u64 peer_dev_resync_failed;
295*8098eeb6SChristoph Böhmwalder 	__u64 peer_dev_bitmap_uuid;
296*8098eeb6SChristoph Böhmwalder 	__u32 peer_dev_flags;
297*8098eeb6SChristoph Böhmwalder };
298*8098eeb6SChristoph Böhmwalder 
299*8098eeb6SChristoph Böhmwalder struct drbd_notification_header {
300*8098eeb6SChristoph Böhmwalder 	__u32 nh_type;
301*8098eeb6SChristoph Böhmwalder };
302*8098eeb6SChristoph Böhmwalder 
303*8098eeb6SChristoph Böhmwalder struct drbd_helper_info {
304*8098eeb6SChristoph Böhmwalder 	char helper_name[32];
305*8098eeb6SChristoph Böhmwalder 	__u32 helper_name_len;
306*8098eeb6SChristoph Böhmwalder 	__u32 helper_status;
307*8098eeb6SChristoph Böhmwalder };
308*8098eeb6SChristoph Böhmwalder 
309*8098eeb6SChristoph Böhmwalder int drbd_cfg_reply_to_skb(struct sk_buff *skb, struct drbd_cfg_reply *s);
310*8098eeb6SChristoph Böhmwalder 
311*8098eeb6SChristoph Böhmwalder int drbd_cfg_context_from_attrs(struct drbd_cfg_context *s, struct genl_info *info);
312*8098eeb6SChristoph Böhmwalder int drbd_cfg_context_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
313*8098eeb6SChristoph Böhmwalder int drbd_cfg_context_to_skb(struct sk_buff *skb, struct drbd_cfg_context *s);
314*8098eeb6SChristoph Böhmwalder 
315*8098eeb6SChristoph Böhmwalder int disk_conf_from_attrs(struct disk_conf *s, struct genl_info *info);
316*8098eeb6SChristoph Böhmwalder int disk_conf_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
317*8098eeb6SChristoph Böhmwalder int disk_conf_to_skb(struct sk_buff *skb, struct disk_conf *s);
318*8098eeb6SChristoph Böhmwalder void set_disk_conf_defaults(struct disk_conf *x);
319*8098eeb6SChristoph Böhmwalder 
320*8098eeb6SChristoph Böhmwalder int res_opts_from_attrs(struct res_opts *s, struct genl_info *info);
321*8098eeb6SChristoph Böhmwalder int res_opts_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
322*8098eeb6SChristoph Böhmwalder int res_opts_to_skb(struct sk_buff *skb, struct res_opts *s);
323*8098eeb6SChristoph Böhmwalder void set_res_opts_defaults(struct res_opts *x);
324*8098eeb6SChristoph Böhmwalder 
325*8098eeb6SChristoph Böhmwalder int net_conf_from_attrs(struct net_conf *s, struct genl_info *info);
326*8098eeb6SChristoph Böhmwalder int net_conf_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
327*8098eeb6SChristoph Böhmwalder int net_conf_to_skb(struct sk_buff *skb, struct net_conf *s);
328*8098eeb6SChristoph Böhmwalder void set_net_conf_defaults(struct net_conf *x);
329*8098eeb6SChristoph Böhmwalder 
330*8098eeb6SChristoph Böhmwalder int set_role_parms_from_attrs(struct set_role_parms *s, struct genl_info *info);
331*8098eeb6SChristoph Böhmwalder int set_role_parms_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
332*8098eeb6SChristoph Böhmwalder int set_role_parms_to_skb(struct sk_buff *skb, struct set_role_parms *s);
333*8098eeb6SChristoph Böhmwalder 
334*8098eeb6SChristoph Böhmwalder int resize_parms_from_attrs(struct resize_parms *s, struct genl_info *info);
335*8098eeb6SChristoph Böhmwalder int resize_parms_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
336*8098eeb6SChristoph Böhmwalder int resize_parms_to_skb(struct sk_buff *skb, struct resize_parms *s);
337*8098eeb6SChristoph Böhmwalder void set_resize_parms_defaults(struct resize_parms *x);
338*8098eeb6SChristoph Böhmwalder 
339*8098eeb6SChristoph Böhmwalder int state_info_to_skb(struct sk_buff *skb, struct state_info *s);
340*8098eeb6SChristoph Böhmwalder 
341*8098eeb6SChristoph Böhmwalder int start_ov_parms_from_attrs(struct start_ov_parms *s, struct genl_info *info);
342*8098eeb6SChristoph Böhmwalder int start_ov_parms_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
343*8098eeb6SChristoph Böhmwalder int start_ov_parms_to_skb(struct sk_buff *skb, struct start_ov_parms *s);
344*8098eeb6SChristoph Böhmwalder 
345*8098eeb6SChristoph Böhmwalder int new_c_uuid_parms_from_attrs(struct new_c_uuid_parms *s, struct genl_info *info);
346*8098eeb6SChristoph Böhmwalder int new_c_uuid_parms_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
347*8098eeb6SChristoph Böhmwalder int new_c_uuid_parms_to_skb(struct sk_buff *skb, struct new_c_uuid_parms *s);
348*8098eeb6SChristoph Böhmwalder 
349*8098eeb6SChristoph Böhmwalder int timeout_parms_to_skb(struct sk_buff *skb, struct timeout_parms *s);
350*8098eeb6SChristoph Böhmwalder 
351*8098eeb6SChristoph Böhmwalder int disconnect_parms_from_attrs(struct disconnect_parms *s, struct genl_info *info);
352*8098eeb6SChristoph Böhmwalder int disconnect_parms_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
353*8098eeb6SChristoph Böhmwalder int disconnect_parms_to_skb(struct sk_buff *skb, struct disconnect_parms *s);
354*8098eeb6SChristoph Böhmwalder 
355*8098eeb6SChristoph Böhmwalder int detach_parms_from_attrs(struct detach_parms *s, struct genl_info *info);
356*8098eeb6SChristoph Böhmwalder int detach_parms_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
357*8098eeb6SChristoph Böhmwalder int detach_parms_to_skb(struct sk_buff *skb, struct detach_parms *s);
358*8098eeb6SChristoph Böhmwalder 
359*8098eeb6SChristoph Böhmwalder int resource_info_from_attrs(struct resource_info *s, struct genl_info *info);
360*8098eeb6SChristoph Böhmwalder int resource_info_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
361*8098eeb6SChristoph Böhmwalder int resource_info_to_skb(struct sk_buff *skb, struct resource_info *s);
362*8098eeb6SChristoph Böhmwalder 
363*8098eeb6SChristoph Böhmwalder int device_info_from_attrs(struct device_info *s, struct genl_info *info);
364*8098eeb6SChristoph Böhmwalder int device_info_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
365*8098eeb6SChristoph Böhmwalder int device_info_to_skb(struct sk_buff *skb, struct device_info *s);
366*8098eeb6SChristoph Böhmwalder 
367*8098eeb6SChristoph Böhmwalder int connection_info_from_attrs(struct connection_info *s, struct genl_info *info);
368*8098eeb6SChristoph Böhmwalder int connection_info_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
369*8098eeb6SChristoph Böhmwalder int connection_info_to_skb(struct sk_buff *skb, struct connection_info *s);
370*8098eeb6SChristoph Böhmwalder 
371*8098eeb6SChristoph Böhmwalder int peer_device_info_from_attrs(struct peer_device_info *s, struct genl_info *info);
372*8098eeb6SChristoph Böhmwalder int peer_device_info_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
373*8098eeb6SChristoph Böhmwalder int peer_device_info_to_skb(struct sk_buff *skb, struct peer_device_info *s);
374*8098eeb6SChristoph Böhmwalder 
375*8098eeb6SChristoph Böhmwalder int resource_statistics_from_attrs(struct resource_statistics *s, struct genl_info *info);
376*8098eeb6SChristoph Böhmwalder int resource_statistics_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
377*8098eeb6SChristoph Böhmwalder int resource_statistics_to_skb(struct sk_buff *skb, struct resource_statistics *s);
378*8098eeb6SChristoph Böhmwalder 
379*8098eeb6SChristoph Böhmwalder int device_statistics_from_attrs(struct device_statistics *s, struct genl_info *info);
380*8098eeb6SChristoph Böhmwalder int device_statistics_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
381*8098eeb6SChristoph Böhmwalder int device_statistics_to_skb(struct sk_buff *skb, struct device_statistics *s);
382*8098eeb6SChristoph Böhmwalder 
383*8098eeb6SChristoph Böhmwalder int connection_statistics_from_attrs(struct connection_statistics *s, struct genl_info *info);
384*8098eeb6SChristoph Böhmwalder int connection_statistics_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
385*8098eeb6SChristoph Böhmwalder int connection_statistics_to_skb(struct sk_buff *skb, struct connection_statistics *s);
386*8098eeb6SChristoph Böhmwalder 
387*8098eeb6SChristoph Böhmwalder int peer_device_statistics_from_attrs(struct peer_device_statistics *s, struct genl_info *info);
388*8098eeb6SChristoph Böhmwalder int peer_device_statistics_ntb_from_attrs(struct nlattr ***ret_nested_attribute_table, struct genl_info *info);
389*8098eeb6SChristoph Böhmwalder int peer_device_statistics_to_skb(struct sk_buff *skb, struct peer_device_statistics *s);
390*8098eeb6SChristoph Böhmwalder 
391*8098eeb6SChristoph Böhmwalder int drbd_notification_header_to_skb(struct sk_buff *skb, struct drbd_notification_header *s);
392*8098eeb6SChristoph Böhmwalder 
393*8098eeb6SChristoph Böhmwalder int drbd_helper_info_to_skb(struct sk_buff *skb, struct drbd_helper_info *s);
394*8098eeb6SChristoph Böhmwalder 
395*8098eeb6SChristoph Böhmwalder #endif /* _LINUX_DRBD_GEN_H */
396