2014-07-27 20:35:17 +02:00
|
|
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
|
* version 2 of the License, or (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
|
* License along with this library; if not, write to the
|
|
|
|
|
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
|
* Boston, MA 02110-1301 USA.
|
|
|
|
|
*
|
|
|
|
|
* (C) Copyright 2014 Red Hat, Inc.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#ifndef NM_CORE_NM_INTERNAL_H
|
|
|
|
|
#define NM_CORE_NM_INTERNAL_H
|
|
|
|
|
|
|
|
|
|
/* This header file contain functions that are provided as private API
|
|
|
|
|
* by libnm-core. It will contain functions to give privileged access to
|
|
|
|
|
* libnm-core. This can be useful for NetworkManager and libnm.so
|
|
|
|
|
* which both are special users of libnm-core.
|
|
|
|
|
* It also exposes some utility functions for reuse.
|
|
|
|
|
*
|
|
|
|
|
* These functions are not exported and are only available to components that link
|
|
|
|
|
* statically against libnm-core. This basically means libnm-core, libnm, NetworkManager
|
|
|
|
|
* and some test programs.
|
|
|
|
|
**/
|
|
|
|
|
|
2015-03-27 08:02:25 -04:00
|
|
|
|
2015-07-17 14:38:54 +02:00
|
|
|
#include "nm-default.h"
|
2014-10-21 18:43:33 -04:00
|
|
|
#include "nm-connection.h"
|
|
|
|
|
#include "nm-core-enum-types.h"
|
|
|
|
|
#include "nm-setting-8021x.h"
|
|
|
|
|
#include "nm-setting-adsl.h"
|
|
|
|
|
#include "nm-setting-bluetooth.h"
|
|
|
|
|
#include "nm-setting-bond.h"
|
|
|
|
|
#include "nm-setting-bridge-port.h"
|
|
|
|
|
#include "nm-setting-bridge.h"
|
|
|
|
|
#include "nm-setting-cdma.h"
|
|
|
|
|
#include "nm-setting-connection.h"
|
|
|
|
|
#include "nm-setting-dcb.h"
|
|
|
|
|
#include "nm-setting-generic.h"
|
|
|
|
|
#include "nm-setting-gsm.h"
|
|
|
|
|
#include "nm-setting-infiniband.h"
|
2015-09-01 14:06:00 +02:00
|
|
|
#include "nm-setting-ip-tunnel.h"
|
2014-07-27 20:35:17 +02:00
|
|
|
#include "nm-setting-ip4-config.h"
|
2014-10-21 18:43:33 -04:00
|
|
|
#include "nm-setting-ip6-config.h"
|
2015-09-17 18:13:49 +02:00
|
|
|
#include "nm-setting-macvlan.h"
|
2014-10-21 18:43:33 -04:00
|
|
|
#include "nm-setting-olpc-mesh.h"
|
|
|
|
|
#include "nm-setting-ppp.h"
|
|
|
|
|
#include "nm-setting-pppoe.h"
|
|
|
|
|
#include "nm-setting-serial.h"
|
|
|
|
|
#include "nm-setting-team-port.h"
|
|
|
|
|
#include "nm-setting-team.h"
|
2015-09-14 22:56:51 +02:00
|
|
|
#include "nm-setting-tun.h"
|
2014-10-21 18:43:33 -04:00
|
|
|
#include "nm-setting-vlan.h"
|
|
|
|
|
#include "nm-setting-vpn.h"
|
2015-10-13 09:09:54 +02:00
|
|
|
#include "nm-setting-vxlan.h"
|
2014-10-21 18:43:33 -04:00
|
|
|
#include "nm-setting-wimax.h"
|
|
|
|
|
#include "nm-setting-wired.h"
|
|
|
|
|
#include "nm-setting-wireless-security.h"
|
|
|
|
|
#include "nm-setting-wireless.h"
|
|
|
|
|
#include "nm-setting.h"
|
|
|
|
|
#include "nm-simple-connection.h"
|
|
|
|
|
#include "nm-utils.h"
|
|
|
|
|
#include "nm-vpn-dbus-interface.h"
|
2015-10-30 11:29:56 +01:00
|
|
|
#include "nm-core-types-internal.h"
|
libnm/vpn: allow specifying non-absolute plugin name in VPN .name file
Since commit 3dfbbb227e82b47973f612b6b031d8d591727436, we enforce that
the plugin path in the .name file is absolute and we perform several
checks on the file before loading it (ownership, etc).
Relax that, to also allow libray names without path component.
In that case, g_module_open()/dlopen() will search for a library
in various search paths. This allows, to omit absolute paths
in the .name file. The latter is problematic, because by default
we install the .name file in the architecture independent location
/usr/lib/NetworkManager. As such, it should not contain paths
to architecture dependent libraries. With this change, a .name
file can contain only the library name and it will be loaded
using the usual mechanism.
However, specifying absolute paths is still possible and works
same as before, including checking file permissions.
As such, distributions probably should package the VPN plugins
to have no path in the .name file. On the other hand, a user
compiling from source probably wants to specify an absolute
path. The reason is, that the user probably doesn't build the
plugin for multiple achitectures and that way, he can install
the plugin in a separate (private) prefix.
2016-04-18 18:19:04 +02:00
|
|
|
#include "nm-vpn-editor-plugin.h"
|
2014-07-27 20:35:17 +02:00
|
|
|
|
2014-08-11 18:10:43 +02:00
|
|
|
/* NM_SETTING_COMPARE_FLAG_INFERRABLE: check whether a device-generated
|
|
|
|
|
* connection can be replaced by a already-defined connection. This flag only
|
|
|
|
|
* takes into account properties marked with the %NM_SETTING_PARAM_INFERRABLE
|
|
|
|
|
* flag.
|
|
|
|
|
*/
|
2015-09-18 17:21:34 +02:00
|
|
|
#define NM_SETTING_COMPARE_FLAG_INFERRABLE ((NMSettingCompareFlags) 0x80000000)
|
2014-08-11 18:10:43 +02:00
|
|
|
|
2015-09-18 17:21:34 +02:00
|
|
|
/* NM_SETTING_COMPARE_FLAG_IGNORE_REAPPLY_IMMEDIATELY: this flag is used for properties
|
|
|
|
|
* that automatically get re-applied on an active connection when the settings
|
|
|
|
|
* connection is modified. For most properties, the applied-connection is distinct
|
|
|
|
|
* from the setting-connection and changes don't propagate. Exceptions are the
|
|
|
|
|
* firewall-zone and the metered property.
|
|
|
|
|
*/
|
|
|
|
|
#define NM_SETTING_COMPARE_FLAG_IGNORE_REAPPLY_IMMEDIATELY ((NMSettingCompareFlags) 0x40000000)
|
|
|
|
|
|
|
|
|
|
/* NM_SETTING_COMPARE_FLAG_NONE: for convenience, define a special flag NONE -- which
|
|
|
|
|
* equals to numeric zero (NM_SETTING_COMPARE_FLAG_EXACT).
|
|
|
|
|
*/
|
|
|
|
|
#define NM_SETTING_COMPARE_FLAG_NONE ((NMSettingCompareFlags) 0)
|
2014-07-27 20:35:17 +02:00
|
|
|
|
2014-08-11 18:21:53 +02:00
|
|
|
|
|
|
|
|
#define NM_SETTING_SECRET_FLAGS_ALL \
|
|
|
|
|
(NM_SETTING_SECRET_FLAG_NONE | \
|
|
|
|
|
NM_SETTING_SECRET_FLAG_AGENT_OWNED | \
|
|
|
|
|
NM_SETTING_SECRET_FLAG_NOT_SAVED | \
|
|
|
|
|
NM_SETTING_SECRET_FLAG_NOT_REQUIRED)
|
|
|
|
|
|
libnm-core: allow strict and relaxed error behavior for _nm_setting_new_from_dbus()
In some situations, we want strict checking of errors, for example when
NetworkManager receives a new connection from a client, the connection
must make sense as a whole (and since NetworkManager service is backward
compatible to the clients and not the other way around, there is no
excuse for sending invalid data to the server).
In other situations, we want a best-effort behavior. Like when
NetworkManager sends a connection to its clients, those clients
want to extract as many properties as they understand, but in order
to be forward compatible against newer server versions, invalid
or unknown properties must be accepted.
Previously, a mixture of both was done. Some issues caused a failure
to create a new NMSetting, other invalid parts were just silently
ignored or triggered a g_warning() in glib.
Now allow for both. When doing strict-validation, be more strict and
reject all unknown properties and catch when the user sets an invalid
argument. On the other hand, allow for a best-effort mode that
effectively cannot fail and will return a new NMSetting instance.
For now, add NMSettingParseFlags so that the caller can choose the
old behavior, strict parsing, or best effort.
This patch doesn't have any externally visible change except that
no more g_warnings will be emitted.
2016-03-18 13:42:50 +01:00
|
|
|
typedef enum { /*< skip >*/
|
|
|
|
|
NM_SETTING_PARSE_FLAGS_NONE = 0,
|
|
|
|
|
NM_SETTING_PARSE_FLAGS_STRICT = 1LL << 0,
|
|
|
|
|
NM_SETTING_PARSE_FLAGS_BEST_EFFORT = 1LL << 1,
|
2016-03-17 10:34:44 +01:00
|
|
|
NM_SETTING_PARSE_FLAGS_NORMALIZE = 1LL << 2,
|
libnm-core: allow strict and relaxed error behavior for _nm_setting_new_from_dbus()
In some situations, we want strict checking of errors, for example when
NetworkManager receives a new connection from a client, the connection
must make sense as a whole (and since NetworkManager service is backward
compatible to the clients and not the other way around, there is no
excuse for sending invalid data to the server).
In other situations, we want a best-effort behavior. Like when
NetworkManager sends a connection to its clients, those clients
want to extract as many properties as they understand, but in order
to be forward compatible against newer server versions, invalid
or unknown properties must be accepted.
Previously, a mixture of both was done. Some issues caused a failure
to create a new NMSetting, other invalid parts were just silently
ignored or triggered a g_warning() in glib.
Now allow for both. When doing strict-validation, be more strict and
reject all unknown properties and catch when the user sets an invalid
argument. On the other hand, allow for a best-effort mode that
effectively cannot fail and will return a new NMSetting instance.
For now, add NMSettingParseFlags so that the caller can choose the
old behavior, strict parsing, or best effort.
This patch doesn't have any externally visible change except that
no more g_warnings will be emitted.
2016-03-18 13:42:50 +01:00
|
|
|
|
|
|
|
|
_NM_SETTING_PARSE_FLAGS_LAST,
|
|
|
|
|
NM_SETTING_PARSE_FLAGS_ALL = ((_NM_SETTING_PARSE_FLAGS_LAST - 1) << 1) - 1,
|
|
|
|
|
} NMSettingParseFlags;
|
|
|
|
|
|
|
|
|
|
gboolean _nm_connection_replace_settings (NMConnection *connection,
|
|
|
|
|
GVariant *new_settings,
|
|
|
|
|
NMSettingParseFlags parse_flags,
|
|
|
|
|
GError **error);
|
|
|
|
|
|
2016-03-17 10:34:44 +01:00
|
|
|
NMConnection *_nm_simple_connection_new_from_dbus (GVariant *dict,
|
|
|
|
|
NMSettingParseFlags parse_flags,
|
|
|
|
|
GError **error);
|
|
|
|
|
|
2014-02-25 20:30:27 +01:00
|
|
|
guint32 _nm_setting_get_setting_priority (NMSetting *setting);
|
2014-08-11 18:21:53 +02:00
|
|
|
|
2014-02-26 10:09:54 +01:00
|
|
|
gboolean _nm_setting_get_property (NMSetting *setting, const char *name, GValue *value);
|
|
|
|
|
|
2016-05-25 10:46:48 +02:00
|
|
|
guint _nm_utils_hwaddr_length (const char *asc);
|
|
|
|
|
|
2014-07-27 23:33:16 +02:00
|
|
|
GSList * _nm_utils_hash_values_to_slist (GHashTable *hash);
|
|
|
|
|
|
2014-06-24 17:40:08 -04:00
|
|
|
GHashTable *_nm_utils_copy_strdict (GHashTable *strdict);
|
|
|
|
|
|
2014-06-24 12:46:03 -04:00
|
|
|
typedef gpointer (*NMUtilsCopyFunc) (gpointer);
|
|
|
|
|
|
|
|
|
|
GPtrArray *_nm_utils_copy_slist_to_array (const GSList *list,
|
|
|
|
|
NMUtilsCopyFunc copy_func,
|
|
|
|
|
GDestroyNotify unref_func);
|
|
|
|
|
GSList *_nm_utils_copy_array_to_slist (const GPtrArray *array,
|
|
|
|
|
NMUtilsCopyFunc copy_func);
|
2014-07-27 23:33:16 +02:00
|
|
|
|
2014-08-26 08:31:04 -04:00
|
|
|
GPtrArray *_nm_utils_copy_array (const GPtrArray *array,
|
|
|
|
|
NMUtilsCopyFunc copy_func,
|
|
|
|
|
GDestroyNotify free_func);
|
|
|
|
|
GPtrArray *_nm_utils_copy_object_array (const GPtrArray *array);
|
|
|
|
|
|
2015-05-12 11:29:29 +02:00
|
|
|
gssize _nm_utils_ptrarray_find_first (gpointer *list, gssize len, gconstpointer needle);
|
|
|
|
|
|
2015-06-23 15:05:25 +02:00
|
|
|
gssize _nm_utils_ptrarray_find_binary_search (gpointer *list, gsize len, gpointer needle, GCompareDataFunc cmpfcn, gpointer user_data);
|
|
|
|
|
|
2015-06-06 23:10:08 +02:00
|
|
|
gssize _nm_utils_strv_find_first (char **list, gssize len, const char *needle);
|
|
|
|
|
|
2015-06-16 14:46:17 +02:00
|
|
|
char **_nm_utils_strv_cleanup (char **strv,
|
|
|
|
|
gboolean strip_whitespace,
|
|
|
|
|
gboolean skip_empty,
|
|
|
|
|
gboolean skip_repeated);
|
|
|
|
|
|
2014-12-03 17:35:15 +01:00
|
|
|
char ** _nm_utils_strsplit_set (const char *str,
|
|
|
|
|
const char *delimiters,
|
|
|
|
|
int max_tokens);
|
|
|
|
|
|
2015-07-01 14:08:51 +02:00
|
|
|
GSList * _nm_utils_strv_to_slist (char **strv, gboolean deep_copy);
|
|
|
|
|
char ** _nm_utils_slist_to_strv (GSList *slist, gboolean deep_copy);
|
2015-07-01 14:02:31 +02:00
|
|
|
|
|
|
|
|
GPtrArray * _nm_utils_strv_to_ptrarray (char **strv);
|
|
|
|
|
char ** _nm_utils_ptrarray_to_strv (GPtrArray *ptrarray);
|
2015-07-16 10:36:19 +02:00
|
|
|
gboolean _nm_utils_strv_equal (char **strv1, char **strv2);
|
2015-07-01 14:02:31 +02:00
|
|
|
|
2015-05-28 21:52:24 +02:00
|
|
|
gboolean _nm_utils_check_file (const char *filename,
|
|
|
|
|
gint64 check_owner,
|
|
|
|
|
NMUtilsCheckFilePredicate check_file,
|
|
|
|
|
gpointer user_data,
|
|
|
|
|
struct stat *out_st,
|
|
|
|
|
GError **error);
|
|
|
|
|
|
libnm: require exact vpn plugin filename
Originally, nm-applet loaded the vpn plugins by passing the filename
to g_module_open(). Thereby, g_module_open() allowed for missing file
extension and tries to complete the name with a system-dependent suffix.
When porting to libnm, we kept that behavior but did more elaborate
checks on the file, like checking owner and permissions.
Change to no longer trying to append the system suffix, but require
an exact path. That is no usability problem, because the plugin path
is specified in the .name files, and we just require them now to be the
full path (including the .so extension).
Note also, that this only affects new, libnm-based vpn plugins, thus there
is no change in behavior for legacy libnm-glib based plugins.
Fixes: eed0d0c58f7f13638eb587e240737048d729cb68
2015-08-18 11:56:17 +02:00
|
|
|
gboolean _nm_utils_check_module_file (const char *name,
|
|
|
|
|
int check_owner,
|
|
|
|
|
NMUtilsCheckFilePredicate check_file,
|
|
|
|
|
gpointer user_data,
|
|
|
|
|
GError **error);
|
2015-05-28 22:07:55 +02:00
|
|
|
|
2014-12-03 17:29:54 +01:00
|
|
|
#define NM_UTILS_UUID_TYPE_LEGACY 0
|
|
|
|
|
#define NM_UTILS_UUID_TYPE_VARIANT3 1
|
|
|
|
|
|
|
|
|
|
char *nm_utils_uuid_generate_from_string (const char *s, gssize slen, int uuid_type, gpointer type_args);
|
|
|
|
|
|
2015-03-30 10:46:49 +02:00
|
|
|
/* arbitrarily choosen namespace UUID for _nm_utils_uuid_generate_from_strings() */
|
2015-02-22 20:15:52 +01:00
|
|
|
#define NM_UTILS_UUID_NS "b425e9fb-7598-44b4-9e3b-5a2e3aaa4905"
|
|
|
|
|
|
|
|
|
|
char *_nm_utils_uuid_generate_from_strings (const char *string1, ...) G_GNUC_NULL_TERMINATED;
|
|
|
|
|
|
2014-10-15 14:55:41 -04:00
|
|
|
void _nm_dbus_errors_init (void);
|
|
|
|
|
|
2014-11-14 11:45:51 -05:00
|
|
|
extern gboolean _nm_utils_is_manager_process;
|
|
|
|
|
|
2014-12-03 08:23:44 -05:00
|
|
|
GByteArray *nm_utils_rsa_key_encrypt (const guint8 *data,
|
|
|
|
|
gsize len,
|
|
|
|
|
const char *in_password,
|
|
|
|
|
char **out_password,
|
|
|
|
|
GError **error);
|
|
|
|
|
|
2015-03-27 08:02:25 -04:00
|
|
|
gulong _nm_dbus_signal_connect_data (GDBusProxy *proxy,
|
|
|
|
|
const char *signal_name,
|
|
|
|
|
const GVariantType *signature,
|
|
|
|
|
GCallback c_handler,
|
|
|
|
|
gpointer data,
|
|
|
|
|
GClosureNotify destroy_data,
|
|
|
|
|
GConnectFlags connect_flags);
|
|
|
|
|
#define _nm_dbus_signal_connect(proxy, name, signature, handler, data) \
|
|
|
|
|
_nm_dbus_signal_connect_data (proxy, name, signature, handler, data, NULL, (GConnectFlags) 0)
|
|
|
|
|
|
2015-03-27 08:44:50 -04:00
|
|
|
GVariant *_nm_dbus_proxy_call_finish (GDBusProxy *proxy,
|
|
|
|
|
GAsyncResult *res,
|
|
|
|
|
const GVariantType *reply_type,
|
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
|
|
GVariant *_nm_dbus_proxy_call_sync (GDBusProxy *proxy,
|
|
|
|
|
const gchar *method_name,
|
|
|
|
|
GVariant *parameters,
|
|
|
|
|
const GVariantType *reply_type,
|
|
|
|
|
GDBusCallFlags flags,
|
|
|
|
|
gint timeout_msec,
|
|
|
|
|
GCancellable *cancellable,
|
|
|
|
|
GError **error);
|
|
|
|
|
|
2015-03-27 09:04:13 -04:00
|
|
|
gboolean _nm_dbus_error_has_name (GError *error,
|
|
|
|
|
const char *dbus_error_name);
|
2015-05-20 12:21:11 +02:00
|
|
|
|
|
|
|
|
/***********************************************************/
|
|
|
|
|
|
2015-05-22 13:26:40 +02:00
|
|
|
gboolean _nm_vpn_plugin_info_check_file (const char *filename,
|
|
|
|
|
gboolean check_absolute,
|
|
|
|
|
gboolean do_validate_filename,
|
|
|
|
|
gint64 check_owner,
|
|
|
|
|
NMUtilsCheckFilePredicate check_file,
|
|
|
|
|
gpointer user_data,
|
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
|
|
const char *_nm_vpn_plugin_info_get_default_dir_etc (void);
|
|
|
|
|
const char *_nm_vpn_plugin_info_get_default_dir_lib (void);
|
|
|
|
|
const char *_nm_vpn_plugin_info_get_default_dir_user (void);
|
|
|
|
|
|
|
|
|
|
GSList *_nm_vpn_plugin_info_list_load_dir (const char *dirname,
|
|
|
|
|
gboolean do_validate_filename,
|
|
|
|
|
gint64 check_owner,
|
|
|
|
|
NMUtilsCheckFilePredicate check_file,
|
|
|
|
|
gpointer user_data);
|
|
|
|
|
|
|
|
|
|
/***********************************************************/
|
|
|
|
|
|
2015-05-20 12:21:11 +02:00
|
|
|
typedef struct {
|
|
|
|
|
const char *name;
|
|
|
|
|
gboolean numeric;
|
|
|
|
|
gboolean ipv6_only;
|
2015-05-20 12:31:10 +02:00
|
|
|
} NMUtilsDNSOptionDesc;
|
2015-05-20 12:21:11 +02:00
|
|
|
|
2015-05-20 12:31:10 +02:00
|
|
|
extern const NMUtilsDNSOptionDesc _nm_utils_dns_option_descs[];
|
2015-05-20 12:21:11 +02:00
|
|
|
|
|
|
|
|
gboolean _nm_utils_dns_option_validate (const char *option, char **out_name,
|
|
|
|
|
long *out_value, gboolean ipv6,
|
2015-05-20 12:31:10 +02:00
|
|
|
const NMUtilsDNSOptionDesc *option_descs);
|
2015-05-20 12:21:11 +02:00
|
|
|
int _nm_utils_dns_option_find_idx (GPtrArray *array, const char *option);
|
|
|
|
|
|
|
|
|
|
/***********************************************************/
|
|
|
|
|
|
2015-05-22 18:52:22 +02:00
|
|
|
typedef struct _NMUtilsStrStrDictKey NMUtilsStrStrDictKey;
|
|
|
|
|
guint _nm_utils_strstrdictkey_hash (gconstpointer a);
|
|
|
|
|
gboolean _nm_utils_strstrdictkey_equal (gconstpointer a, gconstpointer b);
|
|
|
|
|
NMUtilsStrStrDictKey *_nm_utils_strstrdictkey_create (const char *v1, const char *v2);
|
|
|
|
|
|
|
|
|
|
#define _nm_utils_strstrdictkey_static(v1, v2) \
|
|
|
|
|
( (NMUtilsStrStrDictKey *) ("\03" v1 "\0" v2 "") )
|
|
|
|
|
|
|
|
|
|
/***********************************************************/
|
|
|
|
|
|
2015-10-30 11:02:44 +01:00
|
|
|
gboolean _nm_setting_vlan_set_priorities (NMSettingVlan *setting,
|
|
|
|
|
NMVlanPriorityMap map,
|
|
|
|
|
const NMVlanQosMapping *qos_map,
|
|
|
|
|
guint n_qos_map);
|
|
|
|
|
void _nm_setting_vlan_get_priorities (NMSettingVlan *setting,
|
|
|
|
|
NMVlanPriorityMap map,
|
|
|
|
|
NMVlanQosMapping **out_qos_map,
|
|
|
|
|
guint *out_n_qos_map);
|
|
|
|
|
|
|
|
|
|
/***********************************************************/
|
|
|
|
|
|
2016-03-16 11:22:07 +01:00
|
|
|
typedef enum {
|
|
|
|
|
NM_BOND_OPTION_TYPE_INT,
|
|
|
|
|
NM_BOND_OPTION_TYPE_STRING,
|
|
|
|
|
NM_BOND_OPTION_TYPE_BOTH,
|
|
|
|
|
NM_BOND_OPTION_TYPE_IP,
|
2016-03-15 17:37:06 +01:00
|
|
|
NM_BOND_OPTION_TYPE_MAC,
|
2016-03-16 11:22:07 +01:00
|
|
|
NM_BOND_OPTION_TYPE_IFNAME,
|
|
|
|
|
} NMBondOptionType;
|
|
|
|
|
|
|
|
|
|
NMBondOptionType
|
|
|
|
|
_nm_setting_bond_get_option_type (NMSettingBond *setting, const char *name);
|
|
|
|
|
|
2016-04-30 16:43:10 +02:00
|
|
|
/***********************************************************/
|
|
|
|
|
|
|
|
|
|
gboolean _nm_utils_inet6_is_token (const struct in6_addr *in6addr);
|
|
|
|
|
|
2014-07-27 20:35:17 +02:00
|
|
|
#endif
|