1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
2 | /* |
3 | * Copyright (C) 2007 - 2011 Red Hat, Inc. |
4 | * Copyright (C) 2007 - 2008 Novell, Inc. |
5 | */ |
6 | |
7 | #ifndef __NM_SETTING_H__ |
8 | #define __NM_SETTING_H__ |
9 | |
10 | #if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION) |
11 | #error "Only <NetworkManager.h> can be included directly." |
12 | #endif |
13 | |
14 | #include "nm-core-types.h" |
15 | |
16 | G_BEGIN_DECLS |
17 | |
18 | #define NM_TYPE_SETTING (nm_setting_get_type()) |
19 | #define NM_SETTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING, NMSetting)) |
20 | #define NM_SETTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING, NMSettingClass)) |
21 | #define NM_IS_SETTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING)) |
22 | #define NM_IS_SETTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING)) |
23 | #define NM_SETTING_GET_CLASS(obj) \ |
24 | (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING, NMSettingClass)) |
25 | |
26 | /* The property of the #NMSetting is required for the setting to be valid */ |
27 | #define NM_SETTING_PARAM_REQUIRED (1 << (1 + G_PARAM_USER_SHIFT)) |
28 | |
29 | /* The property of the #NMSetting is a secret */ |
30 | #define NM_SETTING_PARAM_SECRET (1 << (2 + G_PARAM_USER_SHIFT)) |
31 | |
32 | /* The property of the #NMSetting should be ignored during comparisons that |
33 | * use the %NM_SETTING_COMPARE_FLAG_FUZZY flag. |
34 | */ |
35 | #define NM_SETTING_PARAM_FUZZY_IGNORE (1 << (3 + G_PARAM_USER_SHIFT)) |
36 | |
37 | /* Note: all non-glib GParamFlags bits are reserved by NetworkManager */ |
38 | |
39 | #define NM_SETTING_NAME "name" |
40 | |
41 | /** |
42 | * NMSettingSecretFlags: |
43 | * @NM_SETTING_SECRET_FLAG_NONE: the system is responsible for providing and |
44 | * storing this secret (default) |
45 | * @NM_SETTING_SECRET_FLAG_AGENT_OWNED: a user secret agent is responsible |
46 | * for providing and storing this secret; when it is required agents will be |
47 | * asked to retrieve it |
48 | * @NM_SETTING_SECRET_FLAG_NOT_SAVED: this secret should not be saved, but |
49 | * should be requested from the user each time it is needed |
50 | * @NM_SETTING_SECRET_FLAG_NOT_REQUIRED: in situations where it cannot be |
51 | * automatically determined that the secret is required (some VPNs and PPP |
52 | * providers don't require all secrets) this flag indicates that the specific |
53 | * secret is not required |
54 | * |
55 | * These flags indicate specific behavior related to handling of a secret. Each |
56 | * secret has a corresponding set of these flags which indicate how the secret |
57 | * is to be stored and/or requested when it is needed. |
58 | * |
59 | **/ |
60 | typedef enum { /*< flags >*/ |
61 | NM_SETTING_SECRET_FLAG_NONE = 0x00000000, |
62 | NM_SETTING_SECRET_FLAG_AGENT_OWNED = 0x00000001, |
63 | NM_SETTING_SECRET_FLAG_NOT_SAVED = 0x00000002, |
64 | NM_SETTING_SECRET_FLAG_NOT_REQUIRED = 0x00000004 |
65 | |
66 | /* NOTE: if adding flags, update nm-core-internal.h as well */ |
67 | } NMSettingSecretFlags; |
68 | |
69 | /** |
70 | * NMSettingCompareFlags: |
71 | * @NM_SETTING_COMPARE_FLAG_EXACT: match all properties exactly |
72 | * @NM_SETTING_COMPARE_FLAG_FUZZY: match only important attributes, like SSID, |
73 | * type, security settings, etc. Does not match, for example, connection ID |
74 | * or UUID. |
75 | * @NM_SETTING_COMPARE_FLAG_IGNORE_ID: ignore the connection's ID |
76 | * @NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS: ignore all secrets |
77 | * @NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS: ignore secrets for which |
78 | * the secret's flags indicate the secret is owned by a user secret agent |
79 | * (ie, the secret's flag includes @NM_SETTING_SECRET_FLAG_AGENT_OWNED) |
80 | * @NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS: ignore secrets for which |
81 | * the secret's flags indicate the secret should not be saved to persistent |
82 | * storage (ie, the secret's flag includes @NM_SETTING_SECRET_FLAG_NOT_SAVED) |
83 | * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT: if this flag is set, |
84 | * nm_setting_diff() and nm_connection_diff() will also include properties that |
85 | * are set to their default value. See also @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT. |
86 | * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT: if this flag is set, |
87 | * nm_setting_diff() and nm_connection_diff() will not include properties that |
88 | * are set to their default value. This is the opposite of |
89 | * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT. If both flags are set together, |
90 | * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT wins. If both flags are unset, |
91 | * this means to exclude default properties if there is a setting to compare, |
92 | * but include all properties, if the setting 'b' is missing. This is the legacy |
93 | * behaviour of libnm-util, where nm_setting_diff() behaved differently depending |
94 | * on whether the setting 'b' was available. If @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT |
95 | * is set, nm_setting_diff() will also set the flags @NM_SETTING_DIFF_RESULT_IN_A_DEFAULT |
96 | * and @NM_SETTING_DIFF_RESULT_IN_B_DEFAULT, if the values are default values. |
97 | * @NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP: ignore the connection's timestamp |
98 | * |
99 | * These flags modify the comparison behavior when comparing two settings or |
100 | * two connections. |
101 | * |
102 | **/ |
103 | typedef enum { |
104 | NM_SETTING_COMPARE_FLAG_EXACT = 0x00000000, |
105 | NM_SETTING_COMPARE_FLAG_FUZZY = 0x00000001, |
106 | NM_SETTING_COMPARE_FLAG_IGNORE_ID = 0x00000002, |
107 | NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS = 0x00000004, |
108 | NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS = 0x00000008, |
109 | NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS = 0x00000010, |
110 | NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT = 0x00000020, |
111 | NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT = 0x00000040, |
112 | NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP = 0x00000080, |
113 | |
114 | /* Higher flags like 0x80000000 and 0x40000000 are used internally as private flags */ |
115 | } NMSettingCompareFlags; |
116 | |
117 | /** |
118 | * NMSettingMacRandomization: |
119 | * @NM_SETTING_MAC_RANDOMIZATION_DEFAULT: the default value, which unless |
120 | * overridden by user-controlled defaults configuration, is "never". |
121 | * @NM_SETTING_MAC_RANDOMIZATION_NEVER: the device's MAC address is always used. |
122 | * @NM_SETTING_MAC_RANDOMIZATION_ALWAYS: a random MAC address is used. |
123 | * |
124 | * Controls if and how the MAC address of a device is randomzied. |
125 | **/ |
126 | typedef enum { |
127 | NM_SETTING_MAC_RANDOMIZATION_DEFAULT = 0, |
128 | NM_SETTING_MAC_RANDOMIZATION_NEVER, |
129 | NM_SETTING_MAC_RANDOMIZATION_ALWAYS, |
130 | } NMSettingMacRandomization; |
131 | |
132 | /** |
133 | * NMSettingClearSecretsWithFlagsFn: |
134 | * @setting: The setting for which secrets are being iterated |
135 | * @secret: The secret's name |
136 | * @flags: The secret's flags, eg %NM_SETTING_SECRET_FLAG_AGENT_OWNED |
137 | * @user_data: User data passed to nm_connection_clear_secrets_with_flags() |
138 | * |
139 | * Returns: %TRUE to clear the secret, %FALSE to not clear the secret |
140 | */ |
141 | typedef gboolean (*NMSettingClearSecretsWithFlagsFn)(NMSetting *setting, |
142 | const char *secret, |
143 | NMSettingSecretFlags flags, |
144 | gpointer user_data); |
145 | |
146 | struct _NMMetaSettingInfo; |
147 | struct _NMSettInfoSetting; |
148 | struct _NMSettInfoProperty; |
149 | |
150 | /** |
151 | * NMSettingValueIterFn: |
152 | * @setting: The setting for which properties are being iterated, given to |
153 | * nm_setting_enumerate_values() |
154 | * @key: The value/property name |
155 | * @value: The property's value |
156 | * @flags: The property's flags, like %NM_SETTING_PARAM_SECRET |
157 | * @user_data: User data passed to nm_setting_enumerate_values() |
158 | */ |
159 | typedef void (*NMSettingValueIterFn)(NMSetting *setting, |
160 | const char *key, |
161 | const GValue *value, |
162 | GParamFlags flags, |
163 | gpointer user_data); |
164 | |
165 | /*< private >*/ |
166 | typedef gboolean (*_NMConnectionForEachSecretFunc)(NMSettingSecretFlags flags, gpointer user_data); |
167 | |
168 | typedef struct _NMSettingClass NMSettingClass; |
169 | |
170 | GType nm_setting_get_type(void); |
171 | |
172 | GType nm_setting_lookup_type(const char *name); |
173 | |
174 | NMSetting *nm_setting_duplicate(NMSetting *setting); |
175 | |
176 | const char *nm_setting_get_name(NMSetting *setting); |
177 | |
178 | gboolean nm_setting_verify(NMSetting *setting, NMConnection *connection, GError **error); |
179 | |
180 | NM_AVAILABLE_IN_1_2 |
181 | gboolean nm_setting_verify_secrets(NMSetting *setting, NMConnection *connection, GError **error); |
182 | |
183 | gboolean nm_setting_compare(NMSetting *a, NMSetting *b, NMSettingCompareFlags flags); |
184 | |
185 | /** |
186 | * NMSettingDiffResult: |
187 | * @NM_SETTING_DIFF_RESULT_UNKNOWN: unknown result |
188 | * @NM_SETTING_DIFF_RESULT_IN_A: the property is present in setting A |
189 | * @NM_SETTING_DIFF_RESULT_IN_B: the property is present in setting B |
190 | * @NM_SETTING_DIFF_RESULT_IN_A_DEFAULT: the property is present in |
191 | * setting A but is set to the default value. This flag is only set, |
192 | * if you specify @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT. |
193 | * @NM_SETTING_DIFF_RESULT_IN_B_DEFAULT: analog to @NM_SETTING_DIFF_RESULT_IN_A_DEFAULT. |
194 | * |
195 | * These values indicate the result of a setting difference operation. |
196 | **/ |
197 | typedef enum { |
198 | NM_SETTING_DIFF_RESULT_UNKNOWN = 0x00000000, |
199 | NM_SETTING_DIFF_RESULT_IN_A = 0x00000001, |
200 | NM_SETTING_DIFF_RESULT_IN_B = 0x00000002, |
201 | NM_SETTING_DIFF_RESULT_IN_A_DEFAULT = 0x00000004, |
202 | NM_SETTING_DIFF_RESULT_IN_B_DEFAULT = 0x00000008, |
203 | } NMSettingDiffResult; |
204 | |
205 | gboolean nm_setting_diff(NMSetting *a, |
206 | NMSetting *b, |
207 | NMSettingCompareFlags flags, |
208 | gboolean invert_results, |
209 | GHashTable **results); |
210 | |
211 | void nm_setting_enumerate_values(NMSetting *setting, NMSettingValueIterFn func, gpointer user_data); |
212 | |
213 | char *nm_setting_to_string(NMSetting *setting); |
214 | |
215 | /*****************************************************************************/ |
216 | |
217 | gboolean nm_setting_get_secret_flags(NMSetting *setting, |
218 | const char *secret_name, |
219 | NMSettingSecretFlags *out_flags, |
220 | GError **error); |
221 | |
222 | gboolean nm_setting_set_secret_flags(NMSetting *setting, |
223 | const char *secret_name, |
224 | NMSettingSecretFlags flags, |
225 | GError **error); |
226 | |
227 | /*****************************************************************************/ |
228 | |
229 | NM_AVAILABLE_IN_1_26 |
230 | GVariant *nm_setting_option_get(NMSetting *setting, const char *opt_name); |
231 | |
232 | NM_AVAILABLE_IN_1_26 |
233 | gboolean |
234 | nm_setting_option_get_boolean(NMSetting *setting, const char *opt_name, gboolean *out_value); |
235 | |
236 | NM_AVAILABLE_IN_1_26 |
237 | gboolean nm_setting_option_get_uint32(NMSetting *setting, const char *opt_name, guint32 *out_value); |
238 | |
239 | NM_AVAILABLE_IN_1_26 |
240 | void nm_setting_option_set(NMSetting *setting, const char *opt_name, GVariant *variant); |
241 | |
242 | NM_AVAILABLE_IN_1_26 |
243 | void nm_setting_option_set_uint32(NMSetting *setting, const char *opt_name, guint32 value); |
244 | |
245 | NM_AVAILABLE_IN_1_26 |
246 | void nm_setting_option_set_boolean(NMSetting *setting, const char *opt_name, gboolean value); |
247 | |
248 | NM_AVAILABLE_IN_1_26 |
249 | const char *const *nm_setting_option_get_all_names(NMSetting *setting, guint *out_len); |
250 | |
251 | NM_AVAILABLE_IN_1_26 |
252 | void nm_setting_option_clear_by_name(NMSetting *setting, NMUtilsPredicateStr predicate); |
253 | |
254 | /*****************************************************************************/ |
255 | |
256 | const GVariantType *nm_setting_get_dbus_property_type(NMSetting *setting, |
257 | const char *property_name); |
258 | |
259 | /*****************************************************************************/ |
260 | |
261 | G_END_DECLS |
262 | |
263 | #endif /* __NM_SETTING_H__ */ |
264 | |