From 1a1362ea0b50fec501cad8f37a7f41e7e5158f65 Mon Sep 17 00:00:00 2001 From: Aurelien DARRAGON Date: Wed, 3 Sep 2025 16:07:30 +0200 Subject: [PATCH] MINOR: stats-file: reserve some bytes in exported structs We may need additional struct members in shm_stats_file_object and shm_stats_file_hdr, yet since these structs are exported they should not change in size nor ordering else it would require a version change to break compability on purpose since mapping would differ. Here we reserve 64 additional bytes in shm_stats_file_object, and 128 bytes in shm_stats_file_hdr for future usage. --- include/haproxy/stats-file-t.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/include/haproxy/stats-file-t.h b/include/haproxy/stats-file-t.h index 2ad7fafcb..03c65c3b4 100644 --- a/include/haproxy/stats-file-t.h +++ b/include/haproxy/stats-file-t.h @@ -21,7 +21,12 @@ enum stfile_domain { * sent heartbeat will be considered down */ -/* header for shm stats file ("shm-stats-file") */ +/* header for shm stats file ("shm-stats-file") + * + * exported struct: + * any change in size or ordering would represent breaking change and + * should cause a version change + */ struct shm_stats_file_hdr { /* to check if the header is compatible with current haproxy version */ struct { @@ -46,11 +51,17 @@ struct shm_stats_file_hdr { } slots[64]; int objects; /* actual number of objects stored in the shm */ int objects_slots; /* total available objects slots unless map is resized */ + ALWAYS_PAD(128); // reserve 128 bytes for future usage }; #define SHM_STATS_FILE_OBJECT_TYPE_FE 0x0 #define SHM_STATS_FILE_OBJECT_TYPE_BE 0x1 +/* + * exported struct: + * any change in size or ordering would represent breaking change and + * should cause a version change + */ struct shm_stats_file_object { char guid[GUID_MAX_LEN + 1]; uint8_t tgid; // thread group ID from 1 to 64 @@ -64,6 +75,7 @@ struct shm_stats_file_object { struct fe_counters_shared_tg fe; struct be_counters_shared_tg be; } data; + ALWAYS_PAD(64); // reserve 64 bytes for future usage }; #define SHM_STATS_FILE_MAPPING_SIZE(obj) (sizeof(struct shm_stats_file_hdr) + (obj) * sizeof(struct shm_stats_file_object))