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