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