History

drbd: replace genl_magic with explicit netlink serialization

Replace the genl_magic multi-include macro system with explicit serialization and parsing. The *_gen files were initially produced from a YNL spec via a customized ynl-gen-c, but the DRBD netlink family is effectively frozen, so the generator is kept unmodified. All new functionality will land in a separate, properly-designed family. Carry the resulting code as ordinary in-tree source rather than landing the spec and generator changes that produced it. The bulk of the changes are mechanical renames to fit the YNL naming conventions: - Handler functions: drbd_adm_* -> drbd_nl_*_doit/dumpit - GENL_MAGIC_VERSION -> DRBD_FAMILY_VERSION - GENL_MAGIC_FAMILY_HDRSZ -> sizeof(struct drbd_genlmsghdr) - drbd_genl_family -> drbd_nl_family - Attribute IDs: T_* -> DRBD_A_* Remove the nested_attr_tb static global buffer and move to a per-call allocation approach: each deserialization manages its own nested attribute table. This will be needed anyway when we eventually move to parallel_ops, and it's actually simpler this way, so make the move now. Replace the functionality of the "sensitive" flag: this was only used by a single field (shared_secret); open-code redaction logic for that locally. Also replace the "invariant" flag: this only had a couple of users, and those basically never change. Hard code the check directly inline. The genl_family struct itself is defined manually in drbd_nl.c. Also replace a couple of drbd-specific wrappers (nla_put_u64_0pad, drbd_nla_find_nested) with standard kernel functions while we're at it. Finally, completely remove the genl_magic system; DRBD was its only user.

Christoph Böhmwalder committed 6 months ago

Commit 8098eeb1 parent a54f49914 files · +3609 −1422Browse files

Showing the changes to include/uapi (2 of 14 files). Show all

Unified · Split

2 files
  1. include/uapi/linux/drbd.h +3 −0
  2. include/uapi/linux/drbd_genl.h +359 −0
include/uapi/linux/drbd.h+3−0
@@ -333,6 +333,9 @@ enum drbd_uuid_index { · 332 unmodified lines
333333
334334 #define HISTORY_UUIDS MAX_PEERS
335335
336+#define DRBD_NL_UUIDS_SIZE (UI_SIZE * sizeof(__u64))
337+#define DRBD_NL_HISTORY_UUIDS_SIZE (HISTORY_UUIDS * sizeof(__u64))
338+
336339 enum drbd_timeout_flag {
337340 UT_DEFAULT = 0,
338341 UT_DEGRADED = 1,
include/uapi/linux/drbd_genl.h+359−0
@@ -0,0 +1,359 @@
1+/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
2+
3+#ifndef _UAPI_LINUX_DRBD_GENL_H
4+#define _UAPI_LINUX_DRBD_GENL_H
5+
6+#define DRBD_FAMILY_NAME "drbd"
7+#define DRBD_FAMILY_VERSION 1
8+
9+enum {
10+ DRBD_NLA_CFG_REPLY = 1,
11+ DRBD_NLA_CFG_CONTEXT,
12+ DRBD_NLA_DISK_CONF,
13+ DRBD_NLA_RESOURCE_OPTS,
14+ DRBD_NLA_NET_CONF,
15+ DRBD_NLA_SET_ROLE_PARMS,
16+ DRBD_NLA_RESIZE_PARMS,
17+ DRBD_NLA_STATE_INFO,
18+ DRBD_NLA_START_OV_PARMS,
19+ DRBD_NLA_NEW_C_UUID_PARMS,
20+ DRBD_NLA_TIMEOUT_PARMS,
21+ DRBD_NLA_DISCONNECT_PARMS,
22+ DRBD_NLA_DETACH_PARMS,
23+ DRBD_NLA_RESOURCE_INFO = 15,
24+ DRBD_NLA_DEVICE_INFO,
25+ DRBD_NLA_CONNECTION_INFO,
26+ DRBD_NLA_PEER_DEVICE_INFO,
27+ DRBD_NLA_RESOURCE_STATISTICS,
28+ DRBD_NLA_DEVICE_STATISTICS,
29+ DRBD_NLA_CONNECTION_STATISTICS,
30+ DRBD_NLA_PEER_DEVICE_STATISTICS,
31+ DRBD_NLA_NOTIFICATION_HEADER,
32+ DRBD_NLA_HELPER,
33+
34+ __DRBD_NLA_MAX,
35+ DRBD_NLA_MAX = (__DRBD_NLA_MAX - 1)
36+};
37+
38+enum {
39+ DRBD_A_DRBD_CFG_REPLY_INFO_TEXT = 1,
40+
41+ __DRBD_A_DRBD_CFG_REPLY_MAX,
42+ DRBD_A_DRBD_CFG_REPLY_MAX = (__DRBD_A_DRBD_CFG_REPLY_MAX - 1)
43+};
44+
45+enum {
46+ DRBD_A_DRBD_CFG_CONTEXT_CTX_VOLUME = 1,
47+ DRBD_A_DRBD_CFG_CONTEXT_CTX_RESOURCE_NAME,
48+ DRBD_A_DRBD_CFG_CONTEXT_CTX_MY_ADDR,
49+ DRBD_A_DRBD_CFG_CONTEXT_CTX_PEER_ADDR,
50+
51+ __DRBD_A_DRBD_CFG_CONTEXT_MAX,
52+ DRBD_A_DRBD_CFG_CONTEXT_MAX = (__DRBD_A_DRBD_CFG_CONTEXT_MAX - 1)
53+};
54+
55+enum {
56+ DRBD_A_DISK_CONF_BACKING_DEV = 1,
57+ DRBD_A_DISK_CONF_META_DEV,
58+ DRBD_A_DISK_CONF_META_DEV_IDX,
59+ DRBD_A_DISK_CONF_DISK_SIZE,
60+ DRBD_A_DISK_CONF_MAX_BIO_BVECS,
61+ DRBD_A_DISK_CONF_ON_IO_ERROR,
62+ DRBD_A_DISK_CONF_FENCING,
63+ DRBD_A_DISK_CONF_RESYNC_RATE,
64+ DRBD_A_DISK_CONF_RESYNC_AFTER,
65+ DRBD_A_DISK_CONF_AL_EXTENTS,
66+ DRBD_A_DISK_CONF_C_PLAN_AHEAD,
67+ DRBD_A_DISK_CONF_C_DELAY_TARGET,
68+ DRBD_A_DISK_CONF_C_FILL_TARGET,
69+ DRBD_A_DISK_CONF_C_MAX_RATE,
70+ DRBD_A_DISK_CONF_C_MIN_RATE,
71+ DRBD_A_DISK_CONF_DISK_BARRIER,
72+ DRBD_A_DISK_CONF_DISK_FLUSHES,
73+ DRBD_A_DISK_CONF_DISK_DRAIN,
74+ DRBD_A_DISK_CONF_MD_FLUSHES,
75+ DRBD_A_DISK_CONF_DISK_TIMEOUT,
76+ DRBD_A_DISK_CONF_READ_BALANCING,
77+ DRBD_A_DISK_CONF_AL_UPDATES = 23,
78+ DRBD_A_DISK_CONF_DISCARD_ZEROES_IF_ALIGNED,
79+ DRBD_A_DISK_CONF_RS_DISCARD_GRANULARITY,
80+ DRBD_A_DISK_CONF_DISABLE_WRITE_SAME,
81+
82+ __DRBD_A_DISK_CONF_MAX,
83+ DRBD_A_DISK_CONF_MAX = (__DRBD_A_DISK_CONF_MAX - 1)
84+};
85+
86+enum {
87+ DRBD_A_RES_OPTS_CPU_MASK = 1,
88+ DRBD_A_RES_OPTS_ON_NO_DATA,
89+
90+ __DRBD_A_RES_OPTS_MAX,
91+ DRBD_A_RES_OPTS_MAX = (__DRBD_A_RES_OPTS_MAX - 1)
92+};
93+
94+enum {
95+ DRBD_A_NET_CONF_SHARED_SECRET = 1,
96+ DRBD_A_NET_CONF_CRAM_HMAC_ALG,
97+ DRBD_A_NET_CONF_INTEGRITY_ALG,
98+ DRBD_A_NET_CONF_VERIFY_ALG,
99+ DRBD_A_NET_CONF_CSUMS_ALG,
100+ DRBD_A_NET_CONF_WIRE_PROTOCOL,
101+ DRBD_A_NET_CONF_CONNECT_INT,
102+ DRBD_A_NET_CONF_TIMEOUT,
103+ DRBD_A_NET_CONF_PING_INT,
104+ DRBD_A_NET_CONF_PING_TIMEO,
105+ DRBD_A_NET_CONF_SNDBUF_SIZE,
106+ DRBD_A_NET_CONF_RCVBUF_SIZE,
107+ DRBD_A_NET_CONF_KO_COUNT,
108+ DRBD_A_NET_CONF_MAX_BUFFERS,
109+ DRBD_A_NET_CONF_MAX_EPOCH_SIZE,
110+ DRBD_A_NET_CONF_UNPLUG_WATERMARK,
111+ DRBD_A_NET_CONF_AFTER_SB_0P,
112+ DRBD_A_NET_CONF_AFTER_SB_1P,
113+ DRBD_A_NET_CONF_AFTER_SB_2P,
114+ DRBD_A_NET_CONF_RR_CONFLICT,
115+ DRBD_A_NET_CONF_ON_CONGESTION,
116+ DRBD_A_NET_CONF_CONG_FILL,
117+ DRBD_A_NET_CONF_CONG_EXTENTS,
118+ DRBD_A_NET_CONF_TWO_PRIMARIES,
119+ DRBD_A_NET_CONF_DISCARD_MY_DATA,
120+ DRBD_A_NET_CONF_TCP_CORK,
121+ DRBD_A_NET_CONF_ALWAYS_ASBP,
122+ DRBD_A_NET_CONF_TENTATIVE,
123+ DRBD_A_NET_CONF_USE_RLE,
124+ DRBD_A_NET_CONF_CSUMS_AFTER_CRASH_ONLY = 33,
125+ DRBD_A_NET_CONF_SOCK_CHECK_TIMEO,
126+
127+ __DRBD_A_NET_CONF_MAX,
128+ DRBD_A_NET_CONF_MAX = (__DRBD_A_NET_CONF_MAX - 1)
129+};
130+
131+enum {
132+ DRBD_A_SET_ROLE_PARMS_ASSUME_UPTODATE = 1,
133+
134+ __DRBD_A_SET_ROLE_PARMS_MAX,
135+ DRBD_A_SET_ROLE_PARMS_MAX = (__DRBD_A_SET_ROLE_PARMS_MAX - 1)
136+};
137+
138+enum {
139+ DRBD_A_RESIZE_PARMS_RESIZE_SIZE = 1,
140+ DRBD_A_RESIZE_PARMS_RESIZE_FORCE,
141+ DRBD_A_RESIZE_PARMS_NO_RESYNC,
142+ DRBD_A_RESIZE_PARMS_AL_STRIPES,
143+ DRBD_A_RESIZE_PARMS_AL_STRIPE_SIZE,
144+
145+ __DRBD_A_RESIZE_PARMS_MAX,
146+ DRBD_A_RESIZE_PARMS_MAX = (__DRBD_A_RESIZE_PARMS_MAX - 1)
147+};
148+
149+enum {
150+ DRBD_A_STATE_INFO_SIB_REASON = 1,
151+ DRBD_A_STATE_INFO_CURRENT_STATE,
152+ DRBD_A_STATE_INFO_CAPACITY,
153+ DRBD_A_STATE_INFO_ED_UUID,
154+ DRBD_A_STATE_INFO_PREV_STATE,
155+ DRBD_A_STATE_INFO_NEW_STATE,
156+ DRBD_A_STATE_INFO_UUIDS,
157+ DRBD_A_STATE_INFO_DISK_FLAGS,
158+ DRBD_A_STATE_INFO_BITS_TOTAL,
159+ DRBD_A_STATE_INFO_BITS_OOS,
160+ DRBD_A_STATE_INFO_BITS_RS_TOTAL,
161+ DRBD_A_STATE_INFO_BITS_RS_FAILED,
162+ DRBD_A_STATE_INFO_HELPER,
163+ DRBD_A_STATE_INFO_HELPER_EXIT_CODE,
164+ DRBD_A_STATE_INFO_SEND_CNT,
165+ DRBD_A_STATE_INFO_RECV_CNT,
166+ DRBD_A_STATE_INFO_READ_CNT,
167+ DRBD_A_STATE_INFO_WRIT_CNT,
168+ DRBD_A_STATE_INFO_AL_WRIT_CNT,
169+ DRBD_A_STATE_INFO_BM_WRIT_CNT,
170+ DRBD_A_STATE_INFO_AP_BIO_CNT,
171+ DRBD_A_STATE_INFO_AP_PENDING_CNT,
172+ DRBD_A_STATE_INFO_RS_PENDING_CNT,
173+
174+ __DRBD_A_STATE_INFO_MAX,
175+ DRBD_A_STATE_INFO_MAX = (__DRBD_A_STATE_INFO_MAX - 1)
176+};
177+
178+enum {
179+ DRBD_A_START_OV_PARMS_OV_START_SECTOR = 1,
180+ DRBD_A_START_OV_PARMS_OV_STOP_SECTOR,
181+
182+ __DRBD_A_START_OV_PARMS_MAX,
183+ DRBD_A_START_OV_PARMS_MAX = (__DRBD_A_START_OV_PARMS_MAX - 1)
184+};
185+
186+enum {
187+ DRBD_A_NEW_C_UUID_PARMS_CLEAR_BM = 1,
188+
189+ __DRBD_A_NEW_C_UUID_PARMS_MAX,
190+ DRBD_A_NEW_C_UUID_PARMS_MAX = (__DRBD_A_NEW_C_UUID_PARMS_MAX - 1)
191+};
192+
193+enum {
194+ DRBD_A_TIMEOUT_PARMS_TIMEOUT_TYPE = 1,
195+
196+ __DRBD_A_TIMEOUT_PARMS_MAX,
197+ DRBD_A_TIMEOUT_PARMS_MAX = (__DRBD_A_TIMEOUT_PARMS_MAX - 1)
198+};
199+
200+enum {
201+ DRBD_A_DISCONNECT_PARMS_FORCE_DISCONNECT = 1,
202+
203+ __DRBD_A_DISCONNECT_PARMS_MAX,
204+ DRBD_A_DISCONNECT_PARMS_MAX = (__DRBD_A_DISCONNECT_PARMS_MAX - 1)
205+};
206+
207+enum {
208+ DRBD_A_DETACH_PARMS_FORCE_DETACH = 1,
209+
210+ __DRBD_A_DETACH_PARMS_MAX,
211+ DRBD_A_DETACH_PARMS_MAX = (__DRBD_A_DETACH_PARMS_MAX - 1)
212+};
213+
214+enum {
215+ DRBD_A_RESOURCE_INFO_RES_ROLE = 1,
216+ DRBD_A_RESOURCE_INFO_RES_SUSP,
217+ DRBD_A_RESOURCE_INFO_RES_SUSP_NOD,
218+ DRBD_A_RESOURCE_INFO_RES_SUSP_FEN,
219+
220+ __DRBD_A_RESOURCE_INFO_MAX,
221+ DRBD_A_RESOURCE_INFO_MAX = (__DRBD_A_RESOURCE_INFO_MAX - 1)
222+};
223+
224+enum {
225+ DRBD_A_DEVICE_INFO_DEV_DISK_STATE = 1,
226+
227+ __DRBD_A_DEVICE_INFO_MAX,
228+ DRBD_A_DEVICE_INFO_MAX = (__DRBD_A_DEVICE_INFO_MAX - 1)
229+};
230+
231+enum {
232+ DRBD_A_CONNECTION_INFO_CONN_CONNECTION_STATE = 1,
233+ DRBD_A_CONNECTION_INFO_CONN_ROLE,
234+
235+ __DRBD_A_CONNECTION_INFO_MAX,
236+ DRBD_A_CONNECTION_INFO_MAX = (__DRBD_A_CONNECTION_INFO_MAX - 1)
237+};
238+
239+enum {
240+ DRBD_A_PEER_DEVICE_INFO_PEER_REPL_STATE = 1,
241+ DRBD_A_PEER_DEVICE_INFO_PEER_DISK_STATE,
242+ DRBD_A_PEER_DEVICE_INFO_PEER_RESYNC_SUSP_USER,
243+ DRBD_A_PEER_DEVICE_INFO_PEER_RESYNC_SUSP_PEER,
244+ DRBD_A_PEER_DEVICE_INFO_PEER_RESYNC_SUSP_DEPENDENCY,
245+
246+ __DRBD_A_PEER_DEVICE_INFO_MAX,
247+ DRBD_A_PEER_DEVICE_INFO_MAX = (__DRBD_A_PEER_DEVICE_INFO_MAX - 1)
248+};
249+
250+enum {
251+ DRBD_A_RESOURCE_STATISTICS_RES_STAT_WRITE_ORDERING = 1,
252+
253+ __DRBD_A_RESOURCE_STATISTICS_MAX,
254+ DRBD_A_RESOURCE_STATISTICS_MAX = (__DRBD_A_RESOURCE_STATISTICS_MAX - 1)
255+};
256+
257+enum {
258+ DRBD_A_DEVICE_STATISTICS_DEV_SIZE = 1,
259+ DRBD_A_DEVICE_STATISTICS_DEV_READ,
260+ DRBD_A_DEVICE_STATISTICS_DEV_WRITE,
261+ DRBD_A_DEVICE_STATISTICS_DEV_AL_WRITES,
262+ DRBD_A_DEVICE_STATISTICS_DEV_BM_WRITES,
263+ DRBD_A_DEVICE_STATISTICS_DEV_UPPER_PENDING,
264+ DRBD_A_DEVICE_STATISTICS_DEV_LOWER_PENDING,
265+ DRBD_A_DEVICE_STATISTICS_DEV_UPPER_BLOCKED,
266+ DRBD_A_DEVICE_STATISTICS_DEV_LOWER_BLOCKED,
267+ DRBD_A_DEVICE_STATISTICS_DEV_AL_SUSPENDED,
268+ DRBD_A_DEVICE_STATISTICS_DEV_EXPOSED_DATA_UUID,
269+ DRBD_A_DEVICE_STATISTICS_DEV_CURRENT_UUID,
270+ DRBD_A_DEVICE_STATISTICS_DEV_DISK_FLAGS,
271+ DRBD_A_DEVICE_STATISTICS_HISTORY_UUIDS,
272+
273+ __DRBD_A_DEVICE_STATISTICS_MAX,
274+ DRBD_A_DEVICE_STATISTICS_MAX = (__DRBD_A_DEVICE_STATISTICS_MAX - 1)
275+};
276+
277+enum {
278+ DRBD_A_CONNECTION_STATISTICS_CONN_CONGESTED = 1,
279+
280+ __DRBD_A_CONNECTION_STATISTICS_MAX,
281+ DRBD_A_CONNECTION_STATISTICS_MAX = (__DRBD_A_CONNECTION_STATISTICS_MAX - 1)
282+};
283+
284+enum {
285+ DRBD_A_PEER_DEVICE_STATISTICS_PEER_DEV_RECEIVED = 1,
286+ DRBD_A_PEER_DEVICE_STATISTICS_PEER_DEV_SENT,
287+ DRBD_A_PEER_DEVICE_STATISTICS_PEER_DEV_PENDING,
288+ DRBD_A_PEER_DEVICE_STATISTICS_PEER_DEV_UNACKED,
289+ DRBD_A_PEER_DEVICE_STATISTICS_PEER_DEV_OUT_OF_SYNC,
290+ DRBD_A_PEER_DEVICE_STATISTICS_PEER_DEV_RESYNC_FAILED,
291+ DRBD_A_PEER_DEVICE_STATISTICS_PEER_DEV_BITMAP_UUID,
292+ DRBD_A_PEER_DEVICE_STATISTICS_PEER_DEV_FLAGS = 9,
293+
294+ __DRBD_A_PEER_DEVICE_STATISTICS_MAX,
295+ DRBD_A_PEER_DEVICE_STATISTICS_MAX = (__DRBD_A_PEER_DEVICE_STATISTICS_MAX - 1)
296+};
297+
298+enum {
299+ DRBD_A_DRBD_NOTIFICATION_HEADER_NH_TYPE = 1,
300+
301+ __DRBD_A_DRBD_NOTIFICATION_HEADER_MAX,
302+ DRBD_A_DRBD_NOTIFICATION_HEADER_MAX = (__DRBD_A_DRBD_NOTIFICATION_HEADER_MAX - 1)
303+};
304+
305+enum {
306+ DRBD_A_DRBD_HELPER_INFO_HELPER_NAME = 1,
307+ DRBD_A_DRBD_HELPER_INFO_HELPER_STATUS,
308+
309+ __DRBD_A_DRBD_HELPER_INFO_MAX,
310+ DRBD_A_DRBD_HELPER_INFO_MAX = (__DRBD_A_DRBD_HELPER_INFO_MAX - 1)
311+};
312+
313+enum {
314+ DRBD_ADM_EVENT = 1,
315+ DRBD_ADM_GET_STATUS,
316+ DRBD_ADM_NEW_MINOR = 5,
317+ DRBD_ADM_DEL_MINOR,
318+ DRBD_ADM_NEW_RESOURCE,
319+ DRBD_ADM_DEL_RESOURCE,
320+ DRBD_ADM_RESOURCE_OPTS,
321+ DRBD_ADM_CONNECT,
322+ DRBD_ADM_DISCONNECT,
323+ DRBD_ADM_ATTACH,
324+ DRBD_ADM_RESIZE,
325+ DRBD_ADM_PRIMARY,
326+ DRBD_ADM_SECONDARY,
327+ DRBD_ADM_NEW_C_UUID,
328+ DRBD_ADM_START_OV,
329+ DRBD_ADM_DETACH,
330+ DRBD_ADM_INVALIDATE,
331+ DRBD_ADM_INVAL_PEER,
332+ DRBD_ADM_PAUSE_SYNC,
333+ DRBD_ADM_RESUME_SYNC,
334+ DRBD_ADM_SUSPEND_IO,
335+ DRBD_ADM_RESUME_IO,
336+ DRBD_ADM_OUTDATE,
337+ DRBD_ADM_GET_TIMEOUT_TYPE,
338+ DRBD_ADM_DOWN,
339+ DRBD_ADM_CHG_DISK_OPTS,
340+ DRBD_ADM_CHG_NET_OPTS,
341+ DRBD_ADM_GET_RESOURCES,
342+ DRBD_ADM_GET_DEVICES,
343+ DRBD_ADM_GET_CONNECTIONS,
344+ DRBD_ADM_GET_PEER_DEVICES,
345+ DRBD_ADM_RESOURCE_STATE,
346+ DRBD_ADM_DEVICE_STATE,
347+ DRBD_ADM_CONNECTION_STATE,
348+ DRBD_ADM_PEER_DEVICE_STATE,
349+ DRBD_ADM_GET_INITIAL_STATE,
350+ DRBD_ADM_HELPER = 40,
351+ DRBD_ADM_INITIAL_STATE_DONE,
352+
353+ __DRBD_ADM_MAX,
354+ DRBD_ADM_MAX = (__DRBD_ADM_MAX - 1)
355+};
356+
357+#define DRBD_MCGRP_EVENTS "events"
358+
359+#endif /* _UAPI_LINUX_DRBD_GENL_H */