summaryrefslogtreecommitdiff
path: root/libnm/nm-client.h
blob: 4989800547a2d0a5de1e700bb28dd8dc2cff27f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
// SPDX-License-Identifier: LGPL-2.1+
/*
 * Copyright 2007 - 2008 Novell, Inc.
 * Copyright 2007 - 2014 Red Hat, Inc.
 */

#ifndef __NM_CLIENT_H__
#define __NM_CLIENT_H__

#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
#error "Only <NetworkManager.h> can be included directly."
#endif

#include "nm-types.h"

G_BEGIN_DECLS

#define NM_TYPE_CLIENT            (nm_client_get_type ())
#define NM_CLIENT(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CLIENT, NMClient))
#define NM_CLIENT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_CLIENT, NMClientClass))
#define NM_IS_CLIENT(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CLIENT))
#define NM_IS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_CLIENT))
#define NM_CLIENT_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CLIENT, NMClientClass))

#define NM_CLIENT_VERSION "version"
#define NM_CLIENT_STATE "state"
#define NM_CLIENT_STARTUP "startup"
#define NM_CLIENT_NM_RUNNING "nm-running"
#define NM_CLIENT_NETWORKING_ENABLED "networking-enabled"
#define NM_CLIENT_WIRELESS_ENABLED "wireless-enabled"
#define NM_CLIENT_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
#define NM_CLIENT_WWAN_ENABLED "wwan-enabled"
#define NM_CLIENT_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled"
#define NM_CLIENT_WIMAX_ENABLED "wimax-enabled"
#define NM_CLIENT_WIMAX_HARDWARE_ENABLED "wimax-hardware-enabled"
#define NM_CLIENT_ACTIVE_CONNECTIONS "active-connections"
#define NM_CLIENT_CONNECTIVITY "connectivity"
#define NM_CLIENT_CONNECTIVITY_CHECK_AVAILABLE "connectivity-check-available"
#define NM_CLIENT_CONNECTIVITY_CHECK_ENABLED "connectivity-check-enabled"
#define NM_CLIENT_PRIMARY_CONNECTION "primary-connection"
#define NM_CLIENT_ACTIVATING_CONNECTION "activating-connection"
#define NM_CLIENT_DEVICES "devices"
#define NM_CLIENT_ALL_DEVICES "all-devices"
#define NM_CLIENT_CONNECTIONS "connections"
#define NM_CLIENT_HOSTNAME "hostname"
#define NM_CLIENT_CAN_MODIFY "can-modify"
#define NM_CLIENT_METERED "metered"
#define NM_CLIENT_DNS_MODE "dns-mode"
#define NM_CLIENT_DNS_RC_MANAGER "dns-rc-manager"
#define NM_CLIENT_DNS_CONFIGURATION "dns-configuration"

#define NM_CLIENT_DEVICE_ADDED "device-added"
#define NM_CLIENT_DEVICE_REMOVED "device-removed"
#define NM_CLIENT_ANY_DEVICE_ADDED "any-device-added"
#define NM_CLIENT_ANY_DEVICE_REMOVED "any-device-removed"
#define NM_CLIENT_PERMISSION_CHANGED "permission-changed"
#define NM_CLIENT_CONNECTION_ADDED "connection-added"
#define NM_CLIENT_CONNECTION_REMOVED "connection-removed"
#define NM_CLIENT_ACTIVE_CONNECTION_ADDED "active-connection-added"
#define NM_CLIENT_ACTIVE_CONNECTION_REMOVED "active-connection-removed"

/**
 * NMClientPermission:
 * @NM_CLIENT_PERMISSION_NONE: unknown or no permission
 * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK: controls whether networking
 *  can be globally enabled or disabled
 * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI: controls whether Wi-Fi can be
 *  globally enabled or disabled
 * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN: controls whether WWAN (3G) can be
 *  globally enabled or disabled
 * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX: controls whether WiMAX can be
 *  globally enabled or disabled
 * @NM_CLIENT_PERMISSION_SLEEP_WAKE: controls whether the client can ask
 *  NetworkManager to sleep and wake
 * @NM_CLIENT_PERMISSION_NETWORK_CONTROL: controls whether networking connections
 *  can be started, stopped, and changed
 * @NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED: controls whether a password
 *  protected Wi-Fi hotspot can be created
 * @NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN: controls whether an open Wi-Fi hotspot
 *  can be created
 * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM: controls whether connections
 *  that are available to all users can be modified
 * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN: controls whether connections
 *  owned by the current user can be modified
 * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME: controls whether the
 *  persistent hostname can be changed
 * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS: modify persistent global
 *  DNS configuration
 * @NM_CLIENT_PERMISSION_RELOAD: controls access to Reload.
 * @NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK: permission to create checkpoints.
 * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS: controls whether device
 *  statistics can be globally enabled or disabled
 * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK: controls whether
 *  connectivity check can be enabled or disabled
 * @NM_CLIENT_PERMISSION_WIFI_SCAN: controls whether wifi scans can be performed
 * @NM_CLIENT_PERMISSION_LAST: a reserved boundary value
 *
 * #NMClientPermission values indicate various permissions that NetworkManager
 * clients can obtain to perform certain tasks on behalf of the current user.
 **/
typedef enum {
	NM_CLIENT_PERMISSION_NONE = 0,
	NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK = 1,
	NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI = 2,
	NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN = 3,
	NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX = 4,
	NM_CLIENT_PERMISSION_SLEEP_WAKE = 5,
	NM_CLIENT_PERMISSION_NETWORK_CONTROL = 6,
	NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED = 7,
	NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN = 8,
	NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM = 9,
	NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN = 10,
	NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME = 11,
	NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS = 12,
	NM_CLIENT_PERMISSION_RELOAD = 13,
	NM_CLIENT_PERMISSION_CHECKPOINT_ROLLBACK = 14,
	NM_CLIENT_PERMISSION_ENABLE_DISABLE_STATISTICS = 15,
	NM_CLIENT_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK = 16,
	NM_CLIENT_PERMISSION_WIFI_SCAN = 17,

	NM_CLIENT_PERMISSION_LAST = 17,
} NMClientPermission;

/**
 * NMClientPermissionResult:
 * @NM_CLIENT_PERMISSION_RESULT_UNKNOWN: unknown or no authorization
 * @NM_CLIENT_PERMISSION_RESULT_YES: the permission is available
 * @NM_CLIENT_PERMISSION_RESULT_AUTH: authorization is necessary before the
 *  permission is available
 * @NM_CLIENT_PERMISSION_RESULT_NO: permission to perform the operation is
 *  denied by system policy
 *
 * #NMClientPermissionResult values indicate what authorizations and permissions
 * the user requires to obtain a given #NMClientPermission
 **/
typedef enum {
	NM_CLIENT_PERMISSION_RESULT_UNKNOWN = 0,
	NM_CLIENT_PERMISSION_RESULT_YES,
	NM_CLIENT_PERMISSION_RESULT_AUTH,
	NM_CLIENT_PERMISSION_RESULT_NO
} NMClientPermissionResult;

/**
 * NMClientError:
 * @NM_CLIENT_ERROR_FAILED: unknown or unclassified error
 * @NM_CLIENT_ERROR_MANAGER_NOT_RUNNING: an operation that requires NetworkManager
 *   failed because NetworkManager is not running
 * @NM_CLIENT_ERROR_OBJECT_CREATION_FAILED: NetworkManager claimed that an
 *   operation succeeded, but the object that was allegedly created (eg,
 *   #NMRemoteConnection, #NMActiveConnection) was apparently destroyed before
 *   #NMClient could create a representation of it.
 *
 * Describes errors that may result from operations involving a #NMClient.
 *
 * D-Bus operations may also return errors from other domains, including
 * #NMManagerError, #NMSettingsError, #NMAgentManagerError, and #NMConnectionError.
 **/
typedef enum {
	NM_CLIENT_ERROR_FAILED = 0,
	NM_CLIENT_ERROR_MANAGER_NOT_RUNNING,
	NM_CLIENT_ERROR_OBJECT_CREATION_FAILED,
} NMClientError;

#define NM_CLIENT_ERROR nm_client_error_quark ()
GQuark nm_client_error_quark (void);

/* DNS stuff */

typedef struct NMDnsEntry NMDnsEntry;

NM_AVAILABLE_IN_1_6
GType              nm_dns_entry_get_type (void);
NM_AVAILABLE_IN_1_6
void                nm_dns_entry_unref (NMDnsEntry *entry);
NM_AVAILABLE_IN_1_6
const char *        nm_dns_entry_get_interface (NMDnsEntry *entry);
NM_AVAILABLE_IN_1_6
const char * const *nm_dns_entry_get_nameservers (NMDnsEntry *entry);
NM_AVAILABLE_IN_1_6
const char * const *nm_dns_entry_get_domains (NMDnsEntry *entry);
NM_AVAILABLE_IN_1_6
int                 nm_dns_entry_get_priority (NMDnsEntry *entry);
NM_AVAILABLE_IN_1_6
gboolean            nm_dns_entry_get_vpn (NMDnsEntry *entry);

/**
 * NMClient:
 */
struct _NMClient {
	GObject parent;
};

typedef struct {
	GObjectClass parent;

	/* Signals */
	void (*device_added) (NMClient *client, NMDevice *device);
	void (*device_removed) (NMClient *client, NMDevice *device);
	void (*any_device_added) (NMClient *client, NMDevice *device);
	void (*any_device_removed) (NMClient *client, NMDevice *device);
	void (*permission_changed) (NMClient *client,
	                            NMClientPermission permission,
	                            NMClientPermissionResult result);
	void (*connection_added)   (NMClient *client, NMRemoteConnection *connection);
	void (*connection_removed) (NMClient *client, NMRemoteConnection *connection);

	/*< private >*/
	gpointer padding[6];
} NMClientClass;

GType nm_client_get_type (void);

NMClient *nm_client_new (GCancellable  *cancellable,
                         GError       **error);

void      nm_client_new_async  (GCancellable         *cancellable,
                                GAsyncReadyCallback   callback,
                                gpointer              user_data);
NMClient *nm_client_new_finish (GAsyncResult         *result,
                                GError              **error);

const char *nm_client_get_version    (NMClient *client);
NMState     nm_client_get_state      (NMClient *client);
gboolean    nm_client_get_startup    (NMClient *client);
gboolean    nm_client_get_nm_running (NMClient *client);

gboolean nm_client_networking_get_enabled (NMClient *client);
gboolean nm_client_networking_set_enabled (NMClient *client,
                                           gboolean enabled,
                                           GError **error);

gboolean nm_client_wireless_get_enabled (NMClient *client);
void     nm_client_wireless_set_enabled (NMClient *client, gboolean enabled);
gboolean nm_client_wireless_hardware_get_enabled (NMClient *client);

gboolean nm_client_wwan_get_enabled (NMClient *client);
void     nm_client_wwan_set_enabled (NMClient *client, gboolean enabled);
gboolean nm_client_wwan_hardware_get_enabled (NMClient *client);

gboolean nm_client_wimax_get_enabled (NMClient *client);
void     nm_client_wimax_set_enabled (NMClient *client, gboolean enabled);
gboolean nm_client_wimax_hardware_get_enabled (NMClient *client);

NM_AVAILABLE_IN_1_10
gboolean nm_client_connectivity_check_get_available (NMClient *client);

NM_AVAILABLE_IN_1_10
gboolean nm_client_connectivity_check_get_enabled (NMClient *client);

NM_AVAILABLE_IN_1_10
void     nm_client_connectivity_check_set_enabled (NMClient *client,
                                                   gboolean enabled);

NM_AVAILABLE_IN_1_20
const char *nm_client_connectivity_check_get_uri (NMClient *client);

gboolean nm_client_get_logging (NMClient *client,
                                char **level,
                                char **domains,
                                GError **error);
gboolean nm_client_set_logging (NMClient *client,
                                const char *level,
                                const char *domains,
                                GError **error);

NMClientPermissionResult nm_client_get_permission_result (NMClient *client,
                                                          NMClientPermission permission);

NMConnectivityState nm_client_get_connectivity          (NMClient *client);

NMConnectivityState nm_client_check_connectivity        (NMClient *client,
                                                         GCancellable *cancellable,
                                                         GError **error);
void                nm_client_check_connectivity_async  (NMClient *client,
                                                         GCancellable *cancellable,
                                                         GAsyncReadyCallback callback,
                                                         gpointer user_data);
NMConnectivityState nm_client_check_connectivity_finish (NMClient *client,
                                                         GAsyncResult *result,
                                                         GError **error);

gboolean nm_client_save_hostname        (NMClient *client,
                                         const char *hostname,
                                         GCancellable *cancellable,
                                         GError **error);
void     nm_client_save_hostname_async  (NMClient *client,
                                         const char *hostname,
                                         GCancellable *cancellable,
                                         GAsyncReadyCallback callback,
                                         gpointer user_data);
gboolean nm_client_save_hostname_finish (NMClient *client,
                                         GAsyncResult *result,
                                         GError **error);

/* Devices */

const GPtrArray *nm_client_get_devices    (NMClient *client);
NM_AVAILABLE_IN_1_2
const GPtrArray *nm_client_get_all_devices(NMClient *client);
NMDevice *nm_client_get_device_by_path    (NMClient *client, const char *object_path);
NMDevice *nm_client_get_device_by_iface   (NMClient *client, const char *iface);

/* Active Connections */

const GPtrArray *nm_client_get_active_connections (NMClient *client);

NMActiveConnection *nm_client_get_primary_connection (NMClient *client);
NMActiveConnection *nm_client_get_activating_connection (NMClient *client);

void                nm_client_activate_connection_async  (NMClient *client,
                                                          NMConnection *connection,
                                                          NMDevice *device,
                                                          const char *specific_object,
                                                          GCancellable *cancellable,
                                                          GAsyncReadyCallback callback,
                                                          gpointer user_data);
NMActiveConnection *nm_client_activate_connection_finish (NMClient *client,
                                                          GAsyncResult *result,
                                                          GError **error);

void                nm_client_add_and_activate_connection_async  (NMClient *client,
                                                                  NMConnection *partial,
                                                                  NMDevice *device,
                                                                  const char *specific_object,
                                                                  GCancellable *cancellable,
                                                                  GAsyncReadyCallback callback,
                                                                  gpointer user_data);
NMActiveConnection *nm_client_add_and_activate_connection_finish (NMClient *client,
                                                                  GAsyncResult *result,
                                                                  GError **error);

NM_AVAILABLE_IN_1_16
void                nm_client_add_and_activate_connection2 (NMClient *client,
                                                            NMConnection *partial,
                                                            NMDevice *device,
                                                            const char *specific_object,
                                                            GVariant *options,
                                                            GCancellable *cancellable,
                                                            GAsyncReadyCallback callback,
                                                            gpointer user_data);
NM_AVAILABLE_IN_1_16
NMActiveConnection *nm_client_add_and_activate_connection2_finish (NMClient *client,
                                                                   GAsyncResult *result,
                                                                   GVariant **out_result,
                                                                   GError **error);

gboolean nm_client_deactivate_connection        (NMClient *client,
                                                 NMActiveConnection *active,
                                                 GCancellable *cancellable,
                                                 GError **error);
void     nm_client_deactivate_connection_async  (NMClient *client,
                                                 NMActiveConnection *active,
                                                 GCancellable *cancellable,
                                                 GAsyncReadyCallback callback,
                                                 gpointer user_data);
gboolean nm_client_deactivate_connection_finish (NMClient *client,
                                                 GAsyncResult *result,
                                                 GError **error);

/* Connections */

const GPtrArray    *nm_client_get_connections        (NMClient *client);

NMRemoteConnection *nm_client_get_connection_by_id   (NMClient *client, const char *id);
NMRemoteConnection *nm_client_get_connection_by_path (NMClient *client, const char *path);
NMRemoteConnection *nm_client_get_connection_by_uuid (NMClient *client, const char *uuid);

void                nm_client_add_connection_async  (NMClient *client,
                                                     NMConnection *connection,
                                                     gboolean save_to_disk,
                                                     GCancellable *cancellable,
                                                     GAsyncReadyCallback callback,
                                                     gpointer user_data);
NMRemoteConnection *nm_client_add_connection_finish (NMClient *client,
                                                     GAsyncResult *result,
                                                     GError **error);

NM_AVAILABLE_IN_1_20
void nm_client_add_connection2 (NMClient *client,
                                GVariant *settings,
                                NMSettingsAddConnection2Flags flags,
                                GVariant *args,
                                gboolean ignore_out_result,
                                GCancellable *cancellable,
                                GAsyncReadyCallback callback,
                                gpointer user_data);

NM_AVAILABLE_IN_1_20
NMRemoteConnection *nm_client_add_connection2_finish (NMClient *client,
                                                      GAsyncResult *result,
                                                      GVariant **out_result,
                                                      GError **error);

gboolean nm_client_load_connections        (NMClient *client,
                                            char **filenames,
                                            char ***failures,
                                            GCancellable *cancellable,
                                            GError **error);
void     nm_client_load_connections_async  (NMClient *client,
                                            char **filenames,
                                            GCancellable *cancellable,
                                            GAsyncReadyCallback callback,
                                            gpointer user_data);
gboolean nm_client_load_connections_finish (NMClient *client,
                                            char ***failures,
                                            GAsyncResult *result,
                                            GError **error);

gboolean nm_client_reload_connections        (NMClient *client,
                                              GCancellable *cancellable,
                                              GError **error);
void     nm_client_reload_connections_async  (NMClient *client,
                                              GCancellable *cancellable,
                                              GAsyncReadyCallback callback,
                                              gpointer user_data);
gboolean nm_client_reload_connections_finish (NMClient *client,
                                              GAsyncResult *result,
                                              GError **error);

NM_AVAILABLE_IN_1_6
const char *nm_client_get_dns_mode            (NMClient *client);
NM_AVAILABLE_IN_1_6
const char *nm_client_get_dns_rc_manager      (NMClient *client);
NM_AVAILABLE_IN_1_6
const GPtrArray  *nm_client_get_dns_configuration (NMClient *client);

NM_AVAILABLE_IN_1_12
const GPtrArray *nm_client_get_checkpoints (NMClient *client);

NM_AVAILABLE_IN_1_12
void nm_client_checkpoint_create (NMClient *client,
                                  const GPtrArray *devices,
                                  guint32 rollback_timeout,
                                  NMCheckpointCreateFlags flags,
                                  GCancellable *cancellable,
                                  GAsyncReadyCallback callback,
                                  gpointer user_data);
NM_AVAILABLE_IN_1_12
NMCheckpoint *nm_client_checkpoint_create_finish (NMClient *client,
                                                  GAsyncResult *result,
                                                  GError **error);

NM_AVAILABLE_IN_1_12
void nm_client_checkpoint_destroy (NMClient *client,
                                   const char *checkpoint_path,
                                   GCancellable *cancellable,
                                   GAsyncReadyCallback callback,
                                   gpointer user_data);
NM_AVAILABLE_IN_1_12
gboolean nm_client_checkpoint_destroy_finish (NMClient *client,
                                              GAsyncResult *result,
                                              GError **error);

NM_AVAILABLE_IN_1_12
void nm_client_checkpoint_rollback (NMClient *client,
                                    const char *checkpoint_path,
                                    GCancellable *cancellable,
                                    GAsyncReadyCallback callback,
                                    gpointer user_data);
NM_AVAILABLE_IN_1_12
GHashTable *nm_client_checkpoint_rollback_finish (NMClient *client,
                                                  GAsyncResult *result,
                                                  GError **error);

NM_AVAILABLE_IN_1_12
void nm_client_checkpoint_adjust_rollback_timeout (NMClient *client,
                                                   const char *checkpoint_path,
                                                   guint32 add_timeout,
                                                   GCancellable *cancellable,
                                                   GAsyncReadyCallback callback,
                                                   gpointer user_data);

NM_AVAILABLE_IN_1_12
gboolean nm_client_checkpoint_adjust_rollback_timeout_finish (NMClient *client,
                                                              GAsyncResult *result,
                                                              GError **error);

G_END_DECLS

#endif /* __NM_CLIENT_H__ */