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;
} 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[] = {
{ NM_SETTING_BRIDGE_STP, "stp_state", /* this must stay as the first item */
NULL, NULL,
FALSE, TRUE, NM_BRIDGE_STP_DEF,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_PRIORITY, "priority",
NULL, NULL,
NM_BRIDGE_PRIORITY_MIN, NM_BRIDGE_PRIORITY_MAX, NM_BRIDGE_PRIORITY_DEF,
TRUE, FALSE, TRUE },
{ NM_SETTING_BRIDGE_FORWARD_DELAY, "forward_delay",
NULL, NULL,
NM_BRIDGE_FORWARD_DELAY_MIN, NM_BRIDGE_FORWARD_DELAY_MAX, NM_BRIDGE_FORWARD_DELAY_DEF,
TRUE, TRUE, TRUE},
{ NM_SETTING_BRIDGE_HELLO_TIME, "hello_time",
NULL, NULL,
NM_BRIDGE_HELLO_TIME_MIN, NM_BRIDGE_HELLO_TIME_MAX, NM_BRIDGE_HELLO_TIME_DEF,
TRUE, TRUE, TRUE },
{ NM_SETTING_BRIDGE_MAX_AGE, "max_age",
NULL, NULL,
NM_BRIDGE_MAX_AGE_MIN, NM_BRIDGE_MAX_AGE_MAX, NM_BRIDGE_MAX_AGE_DEF,
TRUE, TRUE, TRUE },
{ NM_SETTING_BRIDGE_AGEING_TIME, "ageing_time",
NULL, NULL,
NM_BRIDGE_AGEING_TIME_MIN, NM_BRIDGE_AGEING_TIME_MAX, NM_BRIDGE_AGEING_TIME_DEF,
TRUE, TRUE, FALSE },
{ NM_SETTING_BRIDGE_GROUP_FORWARD_MASK, "group_fwd_mask",
NULL, NULL,
0, 0xFFFF, 0,
TRUE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_HASH_MAX, "hash_max",
NULL, NULL,
NM_BRIDGE_MULTICAST_HASH_MAX_MIN, NM_BRIDGE_MULTICAST_HASH_MAX_MAX, NM_BRIDGE_MULTICAST_HASH_MAX_DEF,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT, "multicast_last_member_count",
NULL, NULL,
NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_MIN, NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_MAX, NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL, "multicast_last_member_interval",
NULL, NULL,
NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_MIN, NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_MAX, NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEF,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL, "multicast_membership_interval",
NULL, NULL,
NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_MIN, NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_MAX, NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_DEF,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_QUERIER, "multicast_querier",
NULL, NULL,
FALSE, TRUE, NM_BRIDGE_MULTICAST_QUERIER_DEF,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL, "multicast_querier_interval",
NULL, NULL,
NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_MIN, NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_MAX, NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_DEF,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL, "multicast_query_interval",
NULL, NULL,
NM_BRIDGE_MULTICAST_QUERY_INTERVAL_MIN, NM_BRIDGE_MULTICAST_QUERY_INTERVAL_MAX, NM_BRIDGE_MULTICAST_QUERY_INTERVAL_DEF,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL, "multicast_query_response_interval",
NULL, NULL,
NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_MIN, NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_MAX, NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_DEF,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR, "multicast_query_use_ifaddr",
NULL, NULL,
FALSE, TRUE, NM_BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEF,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_SNOOPING, "multicast_snooping",
NULL, NULL,
FALSE, TRUE, NM_BRIDGE_MULTICAST_SNOOPING_DEF,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_ROUTER, "multicast_router",
to_sysfs_multicast_router, from_sysfs_multicast_router,
0, 0, 0,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT, "multicast_startup_query_count",
NULL, NULL,
NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_MIN, NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_MAX, NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEF,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL, "multicast_startup_query_interval",
NULL, NULL,
NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_MIN, NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_MAX, NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_DEF,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_GROUP_ADDRESS, "group_addr",
to_sysfs_group_address, from_sysfs_group_address,
0, 0, 0,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_VLAN_PROTOCOL, "vlan_protocol",
to_sysfs_vlan_protocol, from_sysfs_vlan_protocol,
0, 0, 0,
FALSE, FALSE, FALSE },
{ NM_SETTING_BRIDGE_VLAN_STATS_ENABLED, "vlan_stats_enabled",
NULL, NULL,
FALSE, TRUE, NM_BRIDGE_VLAN_STATS_ENABLED_DEF,
FALSE, FALSE, FALSE },
{ NULL, NULL }
OPTION (NM_SETTING_BRIDGE_STP, /* this must stay as the first item */
"stp_state",
OPTION_TYPE_BOOL (NM_BRIDGE_STP_DEF),
),
OPTION (NM_SETTING_BRIDGE_PRIORITY,
"priority",
OPTION_TYPE_INT (NM_BRIDGE_PRIORITY_MIN, NM_BRIDGE_PRIORITY_MAX, NM_BRIDGE_PRIORITY_DEF),
.default_if_zero = TRUE,
.only_with_stp = TRUE,
),
OPTION (NM_SETTING_BRIDGE_FORWARD_DELAY,
"forward_delay",
OPTION_TYPE_INT (NM_BRIDGE_FORWARD_DELAY_MIN, NM_BRIDGE_FORWARD_DELAY_MAX, NM_BRIDGE_FORWARD_DELAY_DEF),
.default_if_zero = TRUE,
.user_hz_compensate = TRUE,
.only_with_stp = TRUE,
),
OPTION (NM_SETTING_BRIDGE_HELLO_TIME,
"hello_time",
OPTION_TYPE_INT (NM_BRIDGE_HELLO_TIME_MIN, NM_BRIDGE_HELLO_TIME_MAX, NM_BRIDGE_HELLO_TIME_DEF),
.default_if_zero = TRUE,
.user_hz_compensate = TRUE,
.only_with_stp = TRUE,
),
OPTION (NM_SETTING_BRIDGE_MAX_AGE,
"max_age",
OPTION_TYPE_INT (NM_BRIDGE_MAX_AGE_MIN, NM_BRIDGE_MAX_AGE_MAX, NM_BRIDGE_MAX_AGE_DEF),
.default_if_zero = TRUE,
.user_hz_compensate = TRUE,
.only_with_stp = TRUE,
),
OPTION (NM_SETTING_BRIDGE_AGEING_TIME,
"ageing_time",
OPTION_TYPE_INT (NM_BRIDGE_AGEING_TIME_MIN, NM_BRIDGE_AGEING_TIME_MAX, NM_BRIDGE_AGEING_TIME_DEF),
.default_if_zero = TRUE,
.user_hz_compensate = TRUE,
),
OPTION (NM_SETTING_BRIDGE_GROUP_FORWARD_MASK,
"group_fwd_mask",
OPTION_TYPE_INT (0, 0xFFFF, 0),
.default_if_zero = TRUE,
),
OPTION (NM_SETTING_BRIDGE_MULTICAST_HASH_MAX,
"hash_max",
OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_HASH_MAX_MIN, NM_BRIDGE_MULTICAST_HASH_MAX_MAX, NM_BRIDGE_MULTICAST_HASH_MAX_DEF),
),
OPTION (NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT,
"multicast_last_member_count",
OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_MIN, NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_MAX, NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF),
),
OPTION (NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL,
"multicast_last_member_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),
),
OPTION (NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL,
"multicast_membership_interval",
OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_MIN, NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_MAX, NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_DEF),
),
OPTION (NM_SETTING_BRIDGE_MULTICAST_QUERIER,
"multicast_querier",
OPTION_TYPE_BOOL (NM_BRIDGE_MULTICAST_QUERIER_DEF),
),
OPTION (NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL,
"multicast_querier_interval",
OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_MIN, NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_MAX, NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_DEF),
),
OPTION (NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL,
"multicast_query_interval",
OPTION_TYPE_INT (NM_BRIDGE_MULTICAST_QUERY_INTERVAL_MIN, NM_BRIDGE_MULTICAST_QUERY_INTERVAL_MAX, NM_BRIDGE_MULTICAST_QUERY_INTERVAL_DEF),
),
OPTION (NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL,
"multicast_query_response_interval",
OPTION_TYPE_INT (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_QUERY_USE_IFADDR,
"multicast_query_use_ifaddr",
OPTION_TYPE_BOOL (NM_BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEF),
),
OPTION (NM_SETTING_BRIDGE_MULTICAST_SNOOPING,
"multicast_snooping",
OPTION_TYPE_BOOL (NM_BRIDGE_MULTICAST_SNOOPING_DEF),
),
OPTION (NM_SETTING_BRIDGE_MULTICAST_ROUTER,
"multicast_router",
OPTION_TYPE_TOFROM (to_sysfs_multicast_router, from_sysfs_multicast_router),
),
OPTION (NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT,
"multicast_startup_query_count",
OPTION_TYPE_INT (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_STARTUP_QUERY_INTERVAL,
"multicast_startup_query_interval",
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[] = {
{ NM_SETTING_BRIDGE_PORT_PRIORITY, "priority",
NULL, NULL,
NM_BRIDGE_PORT_PRIORITY_MIN, NM_BRIDGE_PORT_PRIORITY_MAX, NM_BRIDGE_PORT_PRIORITY_DEF,
TRUE, FALSE },
{ NM_SETTING_BRIDGE_PORT_PATH_COST, "path_cost",
NULL, NULL,
NM_BRIDGE_PORT_PATH_COST_MIN, NM_BRIDGE_PORT_PATH_COST_MAX, NM_BRIDGE_PORT_PATH_COST_DEF,
TRUE, FALSE },
{ NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, "hairpin_mode",
NULL, NULL,
FALSE, TRUE, FALSE,
FALSE, FALSE },
{ NULL, NULL }
OPTION (NM_SETTING_BRIDGE_PORT_PRIORITY,
"priority",
OPTION_TYPE_INT (NM_BRIDGE_PORT_PRIORITY_MIN, NM_BRIDGE_PORT_PRIORITY_MAX, NM_BRIDGE_PORT_PRIORITY_DEF),
.default_if_zero = TRUE,
),
OPTION (NM_SETTING_BRIDGE_PORT_PATH_COST,
"path_cost",
OPTION_TYPE_INT (NM_BRIDGE_PORT_PATH_COST_MIN, NM_BRIDGE_PORT_PATH_COST_MAX, NM_BRIDGE_PORT_PATH_COST_DEF),
.default_if_zero = TRUE,
),
OPTION (NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE,
"hairpin_mode",
OPTION_TYPE_BOOL (FALSE),
),
{ 0 }
};
static void