bridge: refactor definition of options array to use a macro and C99 designated initializer

Yes, it's a macro and it's more lines of code.

But I think this is much easier to read and to maintain.
This commit is contained in:
Thomas Haller 2020-05-05 14:40:04 +02:00
parent 7c22710c17
commit 6044fce960
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728

View file

@ -245,116 +245,148 @@ typedef struct {
bool only_with_stp; bool only_with_stp;
} Option; } Option;
#define OPTION(_name, _sysname, ...) \
{ \
.name = ""_name"", \
.sysname = ""_sysname"", \
__VA_ARGS__ \
}
#define OPTION_TYPE_INT(min, max, def) \
.nm_min = (min), .nm_max = (max), .nm_default = (def)
#define OPTION_TYPE_BOOL(def) \
OPTION_TYPE_INT (FALSE, TRUE, def)
#define OPTION_TYPE_TOFROM(to, fro) \
.to_sysfs = (to), .from_sysfs = (fro)
static const Option master_options[] = { static const Option master_options[] = {
{ NM_SETTING_BRIDGE_STP, "stp_state", /* this must stay as the first item */ OPTION (NM_SETTING_BRIDGE_STP, /* this must stay as the first item */
NULL, NULL, "stp_state",
FALSE, TRUE, NM_BRIDGE_STP_DEF, OPTION_TYPE_BOOL (NM_BRIDGE_STP_DEF),
FALSE, FALSE, FALSE }, ),
{ NM_SETTING_BRIDGE_PRIORITY, "priority", OPTION (NM_SETTING_BRIDGE_PRIORITY,
NULL, NULL, "priority",
NM_BRIDGE_PRIORITY_MIN, NM_BRIDGE_PRIORITY_MAX, NM_BRIDGE_PRIORITY_DEF, OPTION_TYPE_INT (NM_BRIDGE_PRIORITY_MIN, NM_BRIDGE_PRIORITY_MAX, NM_BRIDGE_PRIORITY_DEF),
TRUE, FALSE, TRUE }, .default_if_zero = TRUE,
{ NM_SETTING_BRIDGE_FORWARD_DELAY, "forward_delay", .only_with_stp = TRUE,
NULL, NULL, ),
NM_BRIDGE_FORWARD_DELAY_MIN, NM_BRIDGE_FORWARD_DELAY_MAX, NM_BRIDGE_FORWARD_DELAY_DEF, OPTION (NM_SETTING_BRIDGE_FORWARD_DELAY,
TRUE, TRUE, TRUE}, "forward_delay",
{ NM_SETTING_BRIDGE_HELLO_TIME, "hello_time", OPTION_TYPE_INT (NM_BRIDGE_FORWARD_DELAY_MIN, NM_BRIDGE_FORWARD_DELAY_MAX, NM_BRIDGE_FORWARD_DELAY_DEF),
NULL, NULL, .default_if_zero = TRUE,
NM_BRIDGE_HELLO_TIME_MIN, NM_BRIDGE_HELLO_TIME_MAX, NM_BRIDGE_HELLO_TIME_DEF, .user_hz_compensate = TRUE,
TRUE, TRUE, TRUE }, .only_with_stp = TRUE,
{ NM_SETTING_BRIDGE_MAX_AGE, "max_age", ),
NULL, NULL, OPTION (NM_SETTING_BRIDGE_HELLO_TIME,
NM_BRIDGE_MAX_AGE_MIN, NM_BRIDGE_MAX_AGE_MAX, NM_BRIDGE_MAX_AGE_DEF, "hello_time",
TRUE, TRUE, TRUE }, OPTION_TYPE_INT (NM_BRIDGE_HELLO_TIME_MIN, NM_BRIDGE_HELLO_TIME_MAX, NM_BRIDGE_HELLO_TIME_DEF),
{ NM_SETTING_BRIDGE_AGEING_TIME, "ageing_time", .default_if_zero = TRUE,
NULL, NULL, .user_hz_compensate = TRUE,
NM_BRIDGE_AGEING_TIME_MIN, NM_BRIDGE_AGEING_TIME_MAX, NM_BRIDGE_AGEING_TIME_DEF, .only_with_stp = TRUE,
TRUE, TRUE, FALSE }, ),
{ NM_SETTING_BRIDGE_GROUP_FORWARD_MASK, "group_fwd_mask", OPTION (NM_SETTING_BRIDGE_MAX_AGE,
NULL, NULL, "max_age",
0, 0xFFFF, 0, OPTION_TYPE_INT (NM_BRIDGE_MAX_AGE_MIN, NM_BRIDGE_MAX_AGE_MAX, NM_BRIDGE_MAX_AGE_DEF),
TRUE, FALSE, FALSE }, .default_if_zero = TRUE,
{ NM_SETTING_BRIDGE_MULTICAST_HASH_MAX, "hash_max", .user_hz_compensate = TRUE,
NULL, NULL, .only_with_stp = TRUE,
NM_BRIDGE_MULTICAST_HASH_MAX_MIN, NM_BRIDGE_MULTICAST_HASH_MAX_MAX, NM_BRIDGE_MULTICAST_HASH_MAX_DEF, ),
FALSE, FALSE, FALSE }, OPTION (NM_SETTING_BRIDGE_AGEING_TIME,
{ NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT, "multicast_last_member_count", "ageing_time",
NULL, NULL, OPTION_TYPE_INT (NM_BRIDGE_AGEING_TIME_MIN, NM_BRIDGE_AGEING_TIME_MAX, NM_BRIDGE_AGEING_TIME_DEF),
NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_MIN, NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_MAX, NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF, .default_if_zero = TRUE,
FALSE, FALSE, FALSE }, .user_hz_compensate = TRUE,
{ NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL, "multicast_last_member_interval", ),
NULL, NULL, OPTION (NM_SETTING_BRIDGE_GROUP_FORWARD_MASK,
NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_MIN, NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_MAX, NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEF, "group_fwd_mask",
FALSE, FALSE, FALSE }, OPTION_TYPE_INT (0, 0xFFFF, 0),
{ NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL, "multicast_membership_interval", .default_if_zero = TRUE,
NULL, NULL, ),
NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_MIN, NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_MAX, NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_DEF, OPTION (NM_SETTING_BRIDGE_MULTICAST_HASH_MAX,
FALSE, FALSE, FALSE }, "hash_max",
{ NM_SETTING_BRIDGE_MULTICAST_QUERIER, "multicast_querier", OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_HASH_MAX_MIN, NM_BRIDGE_MULTICAST_HASH_MAX_MAX, NM_BRIDGE_MULTICAST_HASH_MAX_DEF),
NULL, NULL, ),
FALSE, TRUE, NM_BRIDGE_MULTICAST_QUERIER_DEF, OPTION (NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT,
FALSE, FALSE, FALSE }, "multicast_last_member_count",
{ NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL, "multicast_querier_interval", OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_MIN, NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_MAX, NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF),
NULL, NULL, ),
NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_MIN, NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_MAX, NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_DEF, OPTION (NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL,
FALSE, FALSE, FALSE }, "multicast_last_member_interval",
{ NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL, "multicast_query_interval", OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_MIN, NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_MAX, NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEF),
NULL, NULL, ),
NM_BRIDGE_MULTICAST_QUERY_INTERVAL_MIN, NM_BRIDGE_MULTICAST_QUERY_INTERVAL_MAX, NM_BRIDGE_MULTICAST_QUERY_INTERVAL_DEF, OPTION (NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL,
FALSE, FALSE, FALSE }, "multicast_membership_interval",
{ NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL, "multicast_query_response_interval", OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_MIN, NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_MAX, NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_DEF),
NULL, NULL, ),
NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_MIN, NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_MAX, NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_DEF, OPTION (NM_SETTING_BRIDGE_MULTICAST_QUERIER,
FALSE, FALSE, FALSE }, "multicast_querier",
{ NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR, "multicast_query_use_ifaddr", OPTION_TYPE_BOOL (NM_BRIDGE_MULTICAST_QUERIER_DEF),
NULL, NULL, ),
FALSE, TRUE, NM_BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEF, OPTION (NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL,
FALSE, FALSE, FALSE }, "multicast_querier_interval",
{ NM_SETTING_BRIDGE_MULTICAST_SNOOPING, "multicast_snooping", OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_MIN, NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_MAX, NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_DEF),
NULL, NULL, ),
FALSE, TRUE, NM_BRIDGE_MULTICAST_SNOOPING_DEF, OPTION (NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL,
FALSE, FALSE, FALSE }, "multicast_query_interval",
{ NM_SETTING_BRIDGE_MULTICAST_ROUTER, "multicast_router", OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_QUERY_INTERVAL_MIN, NM_BRIDGE_MULTICAST_QUERY_INTERVAL_MAX, NM_BRIDGE_MULTICAST_QUERY_INTERVAL_DEF),
to_sysfs_multicast_router, from_sysfs_multicast_router, ),
0, 0, 0, OPTION (NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL,
FALSE, FALSE, FALSE }, "multicast_query_response_interval",
{ NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT, "multicast_startup_query_count", OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_MIN, NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_MAX, NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_DEF),
NULL, NULL, ),
NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_MIN, NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_MAX, NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEF, OPTION (NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR,
FALSE, FALSE, FALSE }, "multicast_query_use_ifaddr",
{ NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL, "multicast_startup_query_interval", OPTION_TYPE_BOOL (NM_BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEF),
NULL, NULL, ),
NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_MIN, NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_MAX, NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_DEF, OPTION (NM_SETTING_BRIDGE_MULTICAST_SNOOPING,
FALSE, FALSE, FALSE }, "multicast_snooping",
{ NM_SETTING_BRIDGE_GROUP_ADDRESS, "group_addr", OPTION_TYPE_BOOL (NM_BRIDGE_MULTICAST_SNOOPING_DEF),
to_sysfs_group_address, from_sysfs_group_address, ),
0, 0, 0, OPTION (NM_SETTING_BRIDGE_MULTICAST_ROUTER,
FALSE, FALSE, FALSE }, "multicast_router",
{ NM_SETTING_BRIDGE_VLAN_PROTOCOL, "vlan_protocol", OPTION_TYPE_TOFROM (to_sysfs_multicast_router, from_sysfs_multicast_router),
to_sysfs_vlan_protocol, from_sysfs_vlan_protocol, ),
0, 0, 0, OPTION (NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT,
FALSE, FALSE, FALSE }, "multicast_startup_query_count",
{ NM_SETTING_BRIDGE_VLAN_STATS_ENABLED, "vlan_stats_enabled", OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_MIN, NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_MAX, NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEF),
NULL, NULL, ),
FALSE, TRUE, NM_BRIDGE_VLAN_STATS_ENABLED_DEF, OPTION (NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL,
FALSE, FALSE, FALSE }, "multicast_startup_query_interval",
{ NULL, NULL } OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_MIN, NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_MAX, NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_DEF),
),
OPTION (NM_SETTING_BRIDGE_GROUP_ADDRESS,
"group_addr",
OPTION_TYPE_TOFROM (to_sysfs_group_address, from_sysfs_group_address),
),
OPTION (NM_SETTING_BRIDGE_VLAN_PROTOCOL,
"vlan_protocol",
OPTION_TYPE_TOFROM (to_sysfs_vlan_protocol, from_sysfs_vlan_protocol),
),
OPTION (NM_SETTING_BRIDGE_VLAN_STATS_ENABLED,
"vlan_stats_enabled",
OPTION_TYPE_BOOL (NM_BRIDGE_VLAN_STATS_ENABLED_DEF)
),
{ 0, }
}; };
static const Option slave_options[] = { static const Option slave_options[] = {
{ NM_SETTING_BRIDGE_PORT_PRIORITY, "priority", OPTION (NM_SETTING_BRIDGE_PORT_PRIORITY,
NULL, NULL, "priority",
NM_BRIDGE_PORT_PRIORITY_MIN, NM_BRIDGE_PORT_PRIORITY_MAX, NM_BRIDGE_PORT_PRIORITY_DEF, OPTION_TYPE_INT (NM_BRIDGE_PORT_PRIORITY_MIN, NM_BRIDGE_PORT_PRIORITY_MAX, NM_BRIDGE_PORT_PRIORITY_DEF),
TRUE, FALSE }, .default_if_zero = TRUE,
{ NM_SETTING_BRIDGE_PORT_PATH_COST, "path_cost", ),
NULL, NULL, OPTION (NM_SETTING_BRIDGE_PORT_PATH_COST,
NM_BRIDGE_PORT_PATH_COST_MIN, NM_BRIDGE_PORT_PATH_COST_MAX, NM_BRIDGE_PORT_PATH_COST_DEF, "path_cost",
TRUE, FALSE }, OPTION_TYPE_INT (NM_BRIDGE_PORT_PATH_COST_MIN, NM_BRIDGE_PORT_PATH_COST_MAX, NM_BRIDGE_PORT_PATH_COST_DEF),
{ NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, "hairpin_mode", .default_if_zero = TRUE,
NULL, NULL, ),
FALSE, TRUE, FALSE, OPTION (NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE,
FALSE, FALSE }, "hairpin_mode",
{ NULL, NULL } OPTION_TYPE_BOOL (FALSE),
),
{ 0 }
}; };
static void static void