shared: embed scheme_type in NMSetting8021xSchemeVtable

Since we can easily lookup the vtable for a NMSetting8021xSchemeType,
it is convenient to also easily get the scheme_type for a given
NMSetting8021xSchemeVtable.

On my x86_64, this change is basically for free as it does not increase
the size of NMSetting8021xSchemeVtable, because the scheme_type fits in a
previously unused part of the NMSetting8021xSchemeVtable struct.
This commit is contained in:
Thomas Haller
2019-05-15 09:45:55 +02:00
parent e813bdaf5e
commit 8fcadf5328
2 changed files with 85 additions and 75 deletions

View File

@@ -73,7 +73,16 @@
/*****************************************************************************/ /*****************************************************************************/
const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[] = { const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[] = {
[NM_SETTING_802_1X_SCHEME_TYPE_CA_CERT] = {
#define _D(_scheme_type, ...) \
[(_scheme_type)] = { \
.scheme_type = (_scheme_type), \
__VA_ARGS__ \
}
_D (NM_SETTING_802_1X_SCHEME_TYPE_UNKNOWN),
_D (NM_SETTING_802_1X_SCHEME_TYPE_CA_CERT,
.setting_key = NM_SETTING_802_1X_CA_CERT, .setting_key = NM_SETTING_802_1X_CA_CERT,
.scheme_func = nm_setting_802_1x_get_ca_cert_scheme, .scheme_func = nm_setting_802_1x_get_ca_cert_scheme,
.format_func = NULL, .format_func = NULL,
@@ -84,9 +93,9 @@ const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[] = {
.pwflag_func = nm_setting_802_1x_get_ca_cert_password_flags, .pwflag_func = nm_setting_802_1x_get_ca_cert_password_flags,
.set_cert_func = nm_setting_802_1x_set_ca_cert, .set_cert_func = nm_setting_802_1x_set_ca_cert,
.file_suffix = "ca-cert", .file_suffix = "ca-cert",
}, ),
[NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CA_CERT] = { _D (NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CA_CERT,
.setting_key = NM_SETTING_802_1X_PHASE2_CA_CERT, .setting_key = NM_SETTING_802_1X_PHASE2_CA_CERT,
.scheme_func = nm_setting_802_1x_get_phase2_ca_cert_scheme, .scheme_func = nm_setting_802_1x_get_phase2_ca_cert_scheme,
.format_func = NULL, .format_func = NULL,
@@ -97,9 +106,9 @@ const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[] = {
.pwflag_func = nm_setting_802_1x_get_phase2_ca_cert_password_flags, .pwflag_func = nm_setting_802_1x_get_phase2_ca_cert_password_flags,
.set_cert_func = nm_setting_802_1x_set_phase2_ca_cert, .set_cert_func = nm_setting_802_1x_set_phase2_ca_cert,
.file_suffix = "inner-ca-cert", .file_suffix = "inner-ca-cert",
}, ),
[NM_SETTING_802_1X_SCHEME_TYPE_CLIENT_CERT] = { _D (NM_SETTING_802_1X_SCHEME_TYPE_CLIENT_CERT,
.setting_key = NM_SETTING_802_1X_CLIENT_CERT, .setting_key = NM_SETTING_802_1X_CLIENT_CERT,
.scheme_func = nm_setting_802_1x_get_client_cert_scheme, .scheme_func = nm_setting_802_1x_get_client_cert_scheme,
.format_func = NULL, .format_func = NULL,
@@ -110,9 +119,9 @@ const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[] = {
.pwflag_func = nm_setting_802_1x_get_client_cert_password_flags, .pwflag_func = nm_setting_802_1x_get_client_cert_password_flags,
.set_cert_func = nm_setting_802_1x_set_client_cert, .set_cert_func = nm_setting_802_1x_set_client_cert,
.file_suffix = "client-cert", .file_suffix = "client-cert",
}, ),
[NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CLIENT_CERT] = { _D (NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CLIENT_CERT,
.setting_key = NM_SETTING_802_1X_PHASE2_CLIENT_CERT, .setting_key = NM_SETTING_802_1X_PHASE2_CLIENT_CERT,
.scheme_func = nm_setting_802_1x_get_phase2_client_cert_scheme, .scheme_func = nm_setting_802_1x_get_phase2_client_cert_scheme,
.format_func = NULL, .format_func = NULL,
@@ -123,9 +132,9 @@ const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[] = {
.pwflag_func = nm_setting_802_1x_get_phase2_client_cert_password_flags, .pwflag_func = nm_setting_802_1x_get_phase2_client_cert_password_flags,
.set_cert_func = nm_setting_802_1x_set_phase2_client_cert, .set_cert_func = nm_setting_802_1x_set_phase2_client_cert,
.file_suffix = "inner-client-cert", .file_suffix = "inner-client-cert",
}, ),
[NM_SETTING_802_1X_SCHEME_TYPE_PRIVATE_KEY] = { _D (NM_SETTING_802_1X_SCHEME_TYPE_PRIVATE_KEY,
.setting_key = NM_SETTING_802_1X_PRIVATE_KEY, .setting_key = NM_SETTING_802_1X_PRIVATE_KEY,
.scheme_func = nm_setting_802_1x_get_private_key_scheme, .scheme_func = nm_setting_802_1x_get_private_key_scheme,
.format_func = nm_setting_802_1x_get_private_key_format, .format_func = nm_setting_802_1x_get_private_key_format,
@@ -137,9 +146,9 @@ const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[] = {
.set_private_key_func = nm_setting_802_1x_set_private_key, .set_private_key_func = nm_setting_802_1x_set_private_key,
.file_suffix = "private-key", .file_suffix = "private-key",
.is_secret = TRUE, .is_secret = TRUE,
}, ),
[NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_PRIVATE_KEY] = { _D (NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_PRIVATE_KEY,
.setting_key = NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, .setting_key = NM_SETTING_802_1X_PHASE2_PRIVATE_KEY,
.scheme_func = nm_setting_802_1x_get_phase2_private_key_scheme, .scheme_func = nm_setting_802_1x_get_phase2_private_key_scheme,
.format_func = nm_setting_802_1x_get_phase2_private_key_format, .format_func = nm_setting_802_1x_get_phase2_private_key_format,
@@ -151,9 +160,9 @@ const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[] = {
.set_private_key_func = nm_setting_802_1x_set_phase2_private_key, .set_private_key_func = nm_setting_802_1x_set_phase2_private_key,
.file_suffix = "inner-private-key", .file_suffix = "inner-private-key",
.is_secret = TRUE, .is_secret = TRUE,
}, ),
[NM_SETTING_802_1X_SCHEME_TYPE_UNKNOWN] = { NULL }, #undef _D
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@@ -101,6 +101,7 @@ typedef struct {
NMSetting8021xCKFormat *out_format, NMSetting8021xCKFormat *out_format,
GError **error); GError **error);
const char *file_suffix; const char *file_suffix;
NMSetting8021xSchemeType scheme_type;
bool is_secret:1; bool is_secret:1;
} NMSetting8021xSchemeVtable; } NMSetting8021xSchemeVtable;