core: split "nm-core-utils.h" out of "NetworkManagerUtils.h"
"NetworkManagerUtils.h" contains a bunch of helper tools for core daemon ("src/"). Unfortunately, it has dependencies to other parts of core, such as "nm-device.h" and "nm-platform.h". Split out a part of tools that are independent so that they can be used without dragging in other dependencies. "nm-core-utils.h" should only use libnm-core, "nm-logging.h" and shared. "NetworkManagerUtils.h" should provide all "nm-core-utils.h" and possibly other utilities that have larger dependencies.
This commit is contained in:
@@ -404,6 +404,8 @@ libNetworkManager_la_SOURCES = \
|
||||
nm-session-monitor.c \
|
||||
nm-sleep-monitor.h \
|
||||
nm-types.h \
|
||||
nm-core-utils.c \
|
||||
nm-core-utils.h \
|
||||
NetworkManagerUtils.c \
|
||||
NetworkManagerUtils.h
|
||||
|
||||
@@ -535,6 +537,8 @@ libnm_iface_helper_la_SOURCES = \
|
||||
nm-logging.h \
|
||||
nm-multi-index.c \
|
||||
nm-multi-index.h \
|
||||
nm-core-utils.c \
|
||||
nm-core-utils.h \
|
||||
NetworkManagerUtils.c \
|
||||
NetworkManagerUtils.h
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -15,314 +15,19 @@
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Copyright 2004 - 2014 Red Hat, Inc.
|
||||
* Copyright 2004 - 2016 Red Hat, Inc.
|
||||
* Copyright 2005 - 2008 Novell, Inc.
|
||||
*/
|
||||
|
||||
#ifndef __NETWORKMANAGER_UTILS_H__
|
||||
#define __NETWORKMANAGER_UTILS_H__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "nm-default.h"
|
||||
#include "nm-connection.h"
|
||||
#include "nm-core-utils.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define NM_DEFINE_SINGLETON_INSTANCE(TYPE) \
|
||||
static TYPE *singleton_instance
|
||||
|
||||
#define NM_DEFINE_SINGLETON_REGISTER(TYPE) \
|
||||
NM_DEFINE_SINGLETON_INSTANCE (TYPE); \
|
||||
static void \
|
||||
_singleton_instance_weak_ref_cb (gpointer data, \
|
||||
GObject *where_the_object_was) \
|
||||
{ \
|
||||
nm_log_dbg (LOGD_CORE, "disposing %s singleton (%p)", G_STRINGIFY (TYPE), singleton_instance); \
|
||||
singleton_instance = NULL; \
|
||||
} \
|
||||
static inline void \
|
||||
nm_singleton_instance_register (void) \
|
||||
{ \
|
||||
g_object_weak_ref (G_OBJECT (singleton_instance), _singleton_instance_weak_ref_cb, NULL); \
|
||||
_nm_singleton_instance_register_destruction (G_OBJECT (singleton_instance)); \
|
||||
}
|
||||
|
||||
void _nm_singleton_instance_register_destruction (GObject *instance);
|
||||
|
||||
/* By default, the getter will assert that the singleton will be created only once. You can
|
||||
* change this by redefining NM_DEFINE_SINGLETON_ALLOW_MULTIPLE. */
|
||||
#ifndef NM_DEFINE_SINGLETON_ALLOW_MULTIPLE
|
||||
#define NM_DEFINE_SINGLETON_ALLOW_MULTIPLE FALSE
|
||||
#endif
|
||||
|
||||
#define NM_DEFINE_SINGLETON_GETTER(TYPE, GETTER, GTYPE, ...) \
|
||||
NM_DEFINE_SINGLETON_INSTANCE (TYPE); \
|
||||
NM_DEFINE_SINGLETON_REGISTER (TYPE); \
|
||||
TYPE * \
|
||||
GETTER (void) \
|
||||
{ \
|
||||
if (G_UNLIKELY (!singleton_instance)) { \
|
||||
static char _already_created = FALSE; \
|
||||
\
|
||||
g_assert (!_already_created || (NM_DEFINE_SINGLETON_ALLOW_MULTIPLE)); \
|
||||
_already_created = TRUE;\
|
||||
singleton_instance = (g_object_new (GTYPE, ##__VA_ARGS__, NULL)); \
|
||||
g_assert (singleton_instance); \
|
||||
nm_singleton_instance_register (); \
|
||||
nm_log_dbg (LOGD_CORE, "create %s singleton (%p)", G_STRINGIFY (TYPE), singleton_instance); \
|
||||
} \
|
||||
return singleton_instance; \
|
||||
}
|
||||
|
||||
/* attach @instance to the data or @owner. @owner owns a reference
|
||||
* to @instance thus the lifetime of @instance is at least as long
|
||||
* as that of @owner. Use this when @owner depends on @instance. */
|
||||
#define NM_UTILS_KEEP_ALIVE(owner, instance, unique_token) \
|
||||
G_STMT_START { \
|
||||
g_object_set_data_full (G_OBJECT (owner), \
|
||||
".nm-utils-keep-alive-" unique_token "", \
|
||||
g_object_ref (instance), \
|
||||
g_object_unref); \
|
||||
} G_STMT_END
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/**
|
||||
* NMUtilsError:
|
||||
* @NM_UTILS_ERROR_UNKNOWN: unknown or unclassified error
|
||||
* @NM_UTILS_ERROR_CANCELLED_DISPOSING: when disposing an object that has
|
||||
* pending aynchronous operations, the operation is cancelled with this
|
||||
* error reason. Depending on the usage, this might indicate a bug because
|
||||
* usually the target object should stay alive as long as there are pending
|
||||
* operations.
|
||||
*/
|
||||
typedef enum {
|
||||
NM_UTILS_ERROR_UNKNOWN = 0, /*< nick=Unknown >*/
|
||||
NM_UTILS_ERROR_CANCELLED_DISPOSING, /*< nick=CancelledDisposing >*/
|
||||
} NMUtilsError;
|
||||
|
||||
#define NM_UTILS_ERROR (nm_utils_error_quark ())
|
||||
GQuark nm_utils_error_quark (void);
|
||||
|
||||
void nm_utils_error_set_cancelled (GError **error,
|
||||
gboolean is_disposing,
|
||||
const char *instance_name);
|
||||
gboolean nm_utils_error_is_cancelled (GError *error,
|
||||
gboolean consider_is_disposing);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
gint nm_utils_ascii_str_to_bool (const char *str,
|
||||
gint default_value);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
gboolean nm_ethernet_address_is_valid (gconstpointer addr, gssize len);
|
||||
|
||||
in_addr_t nm_utils_ip4_address_clear_host_address (in_addr_t addr, guint8 plen);
|
||||
const struct in6_addr *nm_utils_ip6_address_clear_host_address (struct in6_addr *dst, const struct in6_addr *src, guint8 plen);
|
||||
|
||||
/**
|
||||
* nm_utils_ip6_route_metric_normalize:
|
||||
* @metric: the route metric
|
||||
*
|
||||
* For IPv6 route, kernel treats the value 0 as IP6_RT_PRIO_USER (1024).
|
||||
* Thus, when comparing metric (values), we want to treat zero as NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6.
|
||||
*
|
||||
* Returns: @metric, if @metric is not zero, otherwise 1024.
|
||||
*/
|
||||
static inline guint32
|
||||
nm_utils_ip6_route_metric_normalize (guint32 metric)
|
||||
{
|
||||
return metric ? metric : 1024 /*NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6*/;
|
||||
}
|
||||
|
||||
int nm_spawn_process (const char *args, GError **error);
|
||||
|
||||
int nm_utils_modprobe (GError **error, gboolean suppress_error_loggin, const char *arg1, ...) G_GNUC_NULL_TERMINATED;
|
||||
|
||||
/**
|
||||
* str_if_set:
|
||||
* @str: input string that will be returned if @str is not %NULL
|
||||
* @fallback: if @str is %NULL, return @fallback instead
|
||||
*
|
||||
* This utility function is useful when printing a string to avoid passing
|
||||
* %NULL. E.g. printf ("%s", str_if_set (get_string(), "(none)"));
|
||||
*
|
||||
* Returns: either @str or @fallback, depending on whether @str is %NULL.
|
||||
*/
|
||||
static inline const char *
|
||||
str_if_set (const char *str, const char *fallback)
|
||||
{
|
||||
return str ? str : fallback;
|
||||
}
|
||||
|
||||
guint64 nm_utils_get_start_time_for_pid (pid_t pid, char *out_state, pid_t *out_ppid);
|
||||
|
||||
void nm_utils_kill_process_sync (pid_t pid, guint64 start_time, int sig, guint64 log_domain,
|
||||
const char *log_name, guint32 wait_before_kill_msec,
|
||||
guint32 sleep_duration_msec, guint32 max_wait_msec);
|
||||
|
||||
typedef void (*NMUtilsKillChildAsyncCb) (pid_t pid, gboolean success, int child_status, void *user_data);
|
||||
void nm_utils_kill_child_async (pid_t pid, int sig, guint64 log_domain, const char *log_name,
|
||||
guint32 wait_before_kill_msec,
|
||||
NMUtilsKillChildAsyncCb callback, void *user_data);
|
||||
gboolean nm_utils_kill_child_sync (pid_t pid, int sig, guint64 log_domain, const char *log_name,
|
||||
int *child_status, guint32 wait_before_kill_msec,
|
||||
guint32 sleep_duration_msec);
|
||||
|
||||
const char *nm_utils_find_helper (const char *progname,
|
||||
const char *try_first,
|
||||
GError **error);
|
||||
|
||||
typedef enum {
|
||||
NM_MATCH_SPEC_NO_MATCH = 0,
|
||||
NM_MATCH_SPEC_MATCH = 1,
|
||||
NM_MATCH_SPEC_NEG_MATCH = 2,
|
||||
} NMMatchSpecMatchType;
|
||||
|
||||
NMMatchSpecMatchType nm_match_spec_device_type (const GSList *specs, const char *device_type);
|
||||
NMMatchSpecMatchType nm_match_spec_hwaddr (const GSList *specs, const char *hwaddr);
|
||||
NMMatchSpecMatchType nm_match_spec_s390_subchannels (const GSList *specs, const char *subchannels);
|
||||
NMMatchSpecMatchType nm_match_spec_interface_name (const GSList *specs, const char *interface_name);
|
||||
NMMatchSpecMatchType nm_match_spec_match_config (const GSList *specs, guint nm_version, const char *env);
|
||||
GSList *nm_match_spec_split (const char *value);
|
||||
char *nm_match_spec_join (GSList *specs);
|
||||
|
||||
extern char _nm_utils_to_string_buffer[2096];
|
||||
|
||||
void nm_utils_to_string_buffer_init (char **buf, gsize *len);
|
||||
gboolean nm_utils_to_string_buffer_init_null (gconstpointer obj, char **buf, gsize *len);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
typedef struct {
|
||||
unsigned flag;
|
||||
const char *name;
|
||||
} NMUtilsFlags2StrDesc;
|
||||
|
||||
#define NM_UTILS_FLAGS2STR(f, n) { .flag = f, .name = ""n, }
|
||||
|
||||
#define _NM_UTILS_FLAGS2STR_DEFINE(scope, fcn_name, flags_type, ...) \
|
||||
scope const char * \
|
||||
fcn_name (flags_type flags, char *buf, gsize len) \
|
||||
{ \
|
||||
static const NMUtilsFlags2StrDesc descs[] = { \
|
||||
__VA_ARGS__ \
|
||||
}; \
|
||||
G_STATIC_ASSERT (sizeof (flags_type) <= sizeof (unsigned)); \
|
||||
return nm_utils_flags2str (descs, G_N_ELEMENTS (descs), flags, buf, len); \
|
||||
};
|
||||
|
||||
#define NM_UTILS_FLAGS2STR_DEFINE(fcn_name, flags_type, ...) \
|
||||
_NM_UTILS_FLAGS2STR_DEFINE (, fcn_name, flags_type, __VA_ARGS__)
|
||||
#define NM_UTILS_FLAGS2STR_DEFINE_STATIC(fcn_name, flags_type, ...) \
|
||||
_NM_UTILS_FLAGS2STR_DEFINE (static, fcn_name, flags_type, __VA_ARGS__)
|
||||
|
||||
const char *nm_utils_flags2str (const NMUtilsFlags2StrDesc *descs,
|
||||
gsize n_descs,
|
||||
unsigned flags,
|
||||
char *buf,
|
||||
gsize len);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define NM_UTILS_ENUM2STR(v, n) (void) 0; case v: s = ""n""; break; (void) 0
|
||||
#define NM_UTILS_ENUM2STR_IGNORE(v) (void) 0; case v: break; (void) 0
|
||||
|
||||
#define _NM_UTILS_ENUM2STR_DEFINE(scope, fcn_name, lookup_type, int_fmt, ...) \
|
||||
scope const char * \
|
||||
fcn_name (lookup_type val, char *buf, gsize len) \
|
||||
{ \
|
||||
nm_utils_to_string_buffer_init (&buf, &len); \
|
||||
if (len) { \
|
||||
const char *s = NULL; \
|
||||
switch (val) { \
|
||||
(void) 0, \
|
||||
__VA_ARGS__ \
|
||||
(void) 0; \
|
||||
}; \
|
||||
if (s) \
|
||||
g_strlcpy (buf, s, len); \
|
||||
else \
|
||||
g_snprintf (buf, len, "(%"int_fmt")", val); \
|
||||
} \
|
||||
return buf; \
|
||||
}
|
||||
|
||||
#define NM_UTILS_ENUM2STR_DEFINE(fcn_name, lookup_type, ...) \
|
||||
_NM_UTILS_ENUM2STR_DEFINE (, fcn_name, lookup_type, "d", __VA_ARGS__)
|
||||
#define NM_UTILS_ENUM2STR_DEFINE_STATIC(fcn_name, lookup_type, ...) \
|
||||
_NM_UTILS_ENUM2STR_DEFINE (static, fcn_name, lookup_type, "d", __VA_ARGS__)
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define NM_UTILS_LOOKUP_DEFAULT(v) return (v)
|
||||
#define NM_UTILS_LOOKUP_DEFAULT_WARN(v) g_return_val_if_reached (v)
|
||||
#define NM_UTILS_LOOKUP_ITEM(v, n) (void) 0; case v: return (n); (void) 0
|
||||
#define NM_UTILS_LOOKUP_STR_ITEM(v, n) NM_UTILS_LOOKUP_ITEM(v, ""n"")
|
||||
#define NM_UTILS_LOOKUP_ITEM_IGNORE(v) (void) 0; case v: break; (void) 0
|
||||
|
||||
#define _NM_UTILS_LOOKUP_DEFINE(scope, fcn_name, lookup_type, result_type, unknown_val, ...) \
|
||||
scope result_type \
|
||||
fcn_name (lookup_type val) \
|
||||
{ \
|
||||
switch (val) { \
|
||||
(void) 0, \
|
||||
__VA_ARGS__ \
|
||||
(void) 0; \
|
||||
}; \
|
||||
{ unknown_val; } \
|
||||
}
|
||||
|
||||
#define NM_UTILS_LOOKUP_STR_DEFINE(fcn_name, lookup_type, unknown_val, ...) \
|
||||
_NM_UTILS_LOOKUP_DEFINE (, fcn_name, lookup_type, const char *, unknown_val, __VA_ARGS__)
|
||||
#define NM_UTILS_LOOKUP_STR_DEFINE_STATIC(fcn_name, lookup_type, unknown_val, ...) \
|
||||
_NM_UTILS_LOOKUP_DEFINE (static, fcn_name, lookup_type, const char *, unknown_val, __VA_ARGS__)
|
||||
|
||||
/* Call the string-lookup-table function @fcn_name. If the function returns
|
||||
* %NULL, the numeric index is converted to string using a alloca() buffer.
|
||||
* Beware: this macro uses alloca(). */
|
||||
#define NM_UTILS_LOOKUP_STR(fcn_name, idx) \
|
||||
({ \
|
||||
typeof (idx) _idx = (idx); \
|
||||
const char *_s; \
|
||||
\
|
||||
_s = fcn_name (_idx); \
|
||||
if (!_s) { \
|
||||
_s = g_alloca (30); \
|
||||
\
|
||||
g_snprintf ((char *) _s, 30, "(%lld)", (long long) _idx); \
|
||||
} \
|
||||
_s; \
|
||||
})
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static inline void
|
||||
_nm_utils_strbuf_init (char *buf, gsize len, char **p_buf_ptr, gsize *p_buf_len)
|
||||
{
|
||||
NM_SET_OUT (p_buf_len, len);
|
||||
NM_SET_OUT (p_buf_ptr, buf);
|
||||
buf[0] = '\0';
|
||||
}
|
||||
|
||||
#define nm_utils_strbuf_init(buf, p_buf_ptr, p_buf_len) \
|
||||
G_STMT_START { \
|
||||
G_STATIC_ASSERT (G_N_ELEMENTS (buf) == sizeof (buf) && sizeof (buf) > sizeof (char *)); \
|
||||
_nm_utils_strbuf_init ((buf), sizeof (buf), (p_buf_ptr), (p_buf_len)); \
|
||||
} G_STMT_END
|
||||
void nm_utils_strbuf_append (char **buf, gsize *len, const char *format, ...) __attribute__((__format__ (__printf__, 3, 4)));
|
||||
void nm_utils_strbuf_append_c (char **buf, gsize *len, char c);
|
||||
void nm_utils_strbuf_append_str (char **buf, gsize *len, const char *str);
|
||||
|
||||
const char *nm_utils_get_shared_wifi_permission (NMConnection *connection);
|
||||
|
||||
const char *nm_utils_get_ip_config_method (NMConnection *connection,
|
||||
GType ip_setting_type);
|
||||
|
||||
void nm_utils_complete_generic (NMConnection *connection,
|
||||
const char *ctype,
|
||||
const GSList *existing,
|
||||
@@ -331,11 +36,6 @@ void nm_utils_complete_generic (NMConnection *connection,
|
||||
const char *ifname_prefix,
|
||||
gboolean default_enable_ipv6);
|
||||
|
||||
char *nm_utils_new_vlan_name (const char *parent_iface, guint32 vlan_id);
|
||||
|
||||
GPtrArray *nm_utils_read_resolv_conf_nameservers (const char *rc_contents);
|
||||
GPtrArray *nm_utils_read_resolv_conf_dns_options (const char *rc_contents);
|
||||
|
||||
typedef gboolean (NMUtilsMatchFilterFunc) (NMConnection *connection, gpointer user_data);
|
||||
|
||||
NMConnection *nm_utils_match_connection (GSList *connections,
|
||||
@@ -346,88 +46,7 @@ NMConnection *nm_utils_match_connection (GSList *connections,
|
||||
NMUtilsMatchFilterFunc match_filter_func,
|
||||
gpointer match_filter_data);
|
||||
|
||||
int nm_utils_cmp_connection_by_autoconnect_priority (NMConnection **a, NMConnection **b);
|
||||
|
||||
void nm_utils_log_connection_diff (NMConnection *connection, NMConnection *diff_base, guint32 level, guint64 domain, const char *name, const char *prefix);
|
||||
|
||||
#define NM_UTILS_NS_PER_SECOND ((gint64) 1000000000)
|
||||
gint64 nm_utils_get_monotonic_timestamp_ns (void);
|
||||
gint64 nm_utils_get_monotonic_timestamp_us (void);
|
||||
gint64 nm_utils_get_monotonic_timestamp_ms (void);
|
||||
gint32 nm_utils_get_monotonic_timestamp_s (void);
|
||||
gint64 nm_utils_monotonic_timestamp_as_boottime (gint64 timestamp, gint64 timestamp_ticks_per_ns);
|
||||
|
||||
gboolean nm_utils_is_valid_path_component (const char *name);
|
||||
const char *ASSERT_VALID_PATH_COMPONENT (const char *name);
|
||||
const char *nm_utils_ip6_property_path (const char *ifname, const char *property);
|
||||
const char *nm_utils_ip4_property_path (const char *ifname, const char *property);
|
||||
|
||||
gboolean nm_utils_is_specific_hostname (const char *name);
|
||||
|
||||
/* IPv6 Interface Identifer helpers */
|
||||
|
||||
/**
|
||||
* NMUtilsIPv6IfaceId:
|
||||
* @id: convenience member for validity checking; never use directly
|
||||
* @id_u8: the 64-bit Interface Identifier
|
||||
*
|
||||
* Holds a 64-bit IPv6 Interface Identifier. The IID is a sequence of bytes
|
||||
* and should not normally be treated as a %guint64, but this is done for
|
||||
* convenience of validity checking and initialization.
|
||||
*/
|
||||
struct _NMUtilsIPv6IfaceId {
|
||||
union {
|
||||
guint64 id;
|
||||
guint8 id_u8[8];
|
||||
};
|
||||
};
|
||||
|
||||
#define NM_UTILS_IPV6_IFACE_ID_INIT { { .id = 0 } }
|
||||
|
||||
gboolean nm_utils_get_ipv6_interface_identifier (NMLinkType link_type,
|
||||
const guint8 *hwaddr,
|
||||
guint len,
|
||||
guint dev_id,
|
||||
NMUtilsIPv6IfaceId *out_iid);
|
||||
|
||||
void nm_utils_ipv6_addr_set_interface_identfier (struct in6_addr *addr,
|
||||
const NMUtilsIPv6IfaceId iid);
|
||||
|
||||
gboolean nm_utils_ipv6_addr_set_stable_privacy (struct in6_addr *addr,
|
||||
const char *ifname,
|
||||
const char *uuid,
|
||||
guint dad_counter,
|
||||
GError **error);
|
||||
|
||||
void nm_utils_ipv6_interface_identfier_get_from_addr (NMUtilsIPv6IfaceId *iid,
|
||||
const struct in6_addr *addr);
|
||||
|
||||
void nm_utils_array_remove_at_indexes (GArray *array, const guint *indexes_to_delete, gsize len);
|
||||
|
||||
void nm_utils_setpgid (gpointer unused);
|
||||
|
||||
typedef enum {
|
||||
NM_UTILS_TEST_NONE = 0,
|
||||
|
||||
/* Internal flag, marking that either nm_utils_get_testing() or _nm_utils_set_testing() was called. */
|
||||
_NM_UTILS_TEST_INITIALIZED = (1LL << 0),
|
||||
|
||||
/* Indicate that test mode is enabled in general. Explicitly calling _nm_utils_set_testing() will always set this flag. */
|
||||
_NM_UTILS_TEST_GENERAL = (1LL << 1),
|
||||
|
||||
/* Don't check the owner of keyfiles during testing. */
|
||||
NM_UTILS_TEST_NO_KEYFILE_OWNER_CHECK = (1LL << 2),
|
||||
|
||||
_NM_UTILS_TEST_LAST,
|
||||
NM_UTILS_TEST_ALL = (((_NM_UTILS_TEST_LAST - 1) << 1) - 1) & ~(_NM_UTILS_TEST_INITIALIZED),
|
||||
} NMUtilsTestFlags;
|
||||
|
||||
gboolean nm_utils_get_testing_initialized (void);
|
||||
NMUtilsTestFlags nm_utils_get_testing (void);
|
||||
void _nm_utils_set_testing (NMUtilsTestFlags flags);
|
||||
|
||||
void nm_utils_g_value_set_object_path (GValue *value, gpointer object);
|
||||
void nm_utils_g_value_set_strv (GValue *value, GPtrArray *strings);
|
||||
|
||||
/**
|
||||
* NMUtilsObjectFunc:
|
||||
@@ -442,8 +61,7 @@ void nm_utils_g_value_set_object_path_array (GValue *value,
|
||||
GSList *objects,
|
||||
NMUtilsObjectFunc filter_func,
|
||||
gpointer user_data);
|
||||
guint nm_utils_parse_debug_string (const char *string,
|
||||
const GDebugKey *keys,
|
||||
guint nkeys);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#endif /* __NETWORKMANAGER_UTILS_H__ */
|
||||
|
2944
src/nm-core-utils.c
Normal file
2944
src/nm-core-utils.c
Normal file
File diff suppressed because it is too large
Load Diff
415
src/nm-core-utils.h
Normal file
415
src/nm-core-utils.h
Normal file
@@ -0,0 +1,415 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
|
||||
/* NetworkManager -- Network link manager
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Copyright 2004 - 2016 Red Hat, Inc.
|
||||
* Copyright 2005 - 2008 Novell, Inc.
|
||||
*/
|
||||
|
||||
#ifndef __NM_CORE_UTILS_H__
|
||||
#define __NM_CORE_UTILS_H__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "nm-default.h"
|
||||
#include "nm-connection.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define NM_DEFINE_SINGLETON_INSTANCE(TYPE) \
|
||||
static TYPE *singleton_instance
|
||||
|
||||
#define NM_DEFINE_SINGLETON_REGISTER(TYPE) \
|
||||
NM_DEFINE_SINGLETON_INSTANCE (TYPE); \
|
||||
static void \
|
||||
_singleton_instance_weak_ref_cb (gpointer data, \
|
||||
GObject *where_the_object_was) \
|
||||
{ \
|
||||
nm_log_dbg (LOGD_CORE, "disposing %s singleton (%p)", G_STRINGIFY (TYPE), singleton_instance); \
|
||||
singleton_instance = NULL; \
|
||||
} \
|
||||
static inline void \
|
||||
nm_singleton_instance_register (void) \
|
||||
{ \
|
||||
g_object_weak_ref (G_OBJECT (singleton_instance), _singleton_instance_weak_ref_cb, NULL); \
|
||||
_nm_singleton_instance_register_destruction (G_OBJECT (singleton_instance)); \
|
||||
}
|
||||
|
||||
void _nm_singleton_instance_register_destruction (GObject *instance);
|
||||
|
||||
/* By default, the getter will assert that the singleton will be created only once. You can
|
||||
* change this by redefining NM_DEFINE_SINGLETON_ALLOW_MULTIPLE. */
|
||||
#ifndef NM_DEFINE_SINGLETON_ALLOW_MULTIPLE
|
||||
#define NM_DEFINE_SINGLETON_ALLOW_MULTIPLE FALSE
|
||||
#endif
|
||||
|
||||
#define NM_DEFINE_SINGLETON_GETTER(TYPE, GETTER, GTYPE, ...) \
|
||||
NM_DEFINE_SINGLETON_INSTANCE (TYPE); \
|
||||
NM_DEFINE_SINGLETON_REGISTER (TYPE); \
|
||||
TYPE * \
|
||||
GETTER (void) \
|
||||
{ \
|
||||
if (G_UNLIKELY (!singleton_instance)) { \
|
||||
static char _already_created = FALSE; \
|
||||
\
|
||||
g_assert (!_already_created || (NM_DEFINE_SINGLETON_ALLOW_MULTIPLE)); \
|
||||
_already_created = TRUE;\
|
||||
singleton_instance = (g_object_new (GTYPE, ##__VA_ARGS__, NULL)); \
|
||||
g_assert (singleton_instance); \
|
||||
nm_singleton_instance_register (); \
|
||||
nm_log_dbg (LOGD_CORE, "create %s singleton (%p)", G_STRINGIFY (TYPE), singleton_instance); \
|
||||
} \
|
||||
return singleton_instance; \
|
||||
}
|
||||
|
||||
/* attach @instance to the data or @owner. @owner owns a reference
|
||||
* to @instance thus the lifetime of @instance is at least as long
|
||||
* as that of @owner. Use this when @owner depends on @instance. */
|
||||
#define NM_UTILS_KEEP_ALIVE(owner, instance, unique_token) \
|
||||
G_STMT_START { \
|
||||
g_object_set_data_full (G_OBJECT (owner), \
|
||||
".nm-utils-keep-alive-" unique_token "", \
|
||||
g_object_ref (instance), \
|
||||
g_object_unref); \
|
||||
} G_STMT_END
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/**
|
||||
* NMUtilsError:
|
||||
* @NM_UTILS_ERROR_UNKNOWN: unknown or unclassified error
|
||||
* @NM_UTILS_ERROR_CANCELLED_DISPOSING: when disposing an object that has
|
||||
* pending aynchronous operations, the operation is cancelled with this
|
||||
* error reason. Depending on the usage, this might indicate a bug because
|
||||
* usually the target object should stay alive as long as there are pending
|
||||
* operations.
|
||||
*/
|
||||
typedef enum {
|
||||
NM_UTILS_ERROR_UNKNOWN = 0, /*< nick=Unknown >*/
|
||||
NM_UTILS_ERROR_CANCELLED_DISPOSING, /*< nick=CancelledDisposing >*/
|
||||
} NMUtilsError;
|
||||
|
||||
#define NM_UTILS_ERROR (nm_utils_error_quark ())
|
||||
GQuark nm_utils_error_quark (void);
|
||||
|
||||
void nm_utils_error_set_cancelled (GError **error,
|
||||
gboolean is_disposing,
|
||||
const char *instance_name);
|
||||
gboolean nm_utils_error_is_cancelled (GError *error,
|
||||
gboolean consider_is_disposing);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
gint nm_utils_ascii_str_to_bool (const char *str,
|
||||
gint default_value);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
gboolean nm_ethernet_address_is_valid (gconstpointer addr, gssize len);
|
||||
|
||||
in_addr_t nm_utils_ip4_address_clear_host_address (in_addr_t addr, guint8 plen);
|
||||
const struct in6_addr *nm_utils_ip6_address_clear_host_address (struct in6_addr *dst, const struct in6_addr *src, guint8 plen);
|
||||
|
||||
/**
|
||||
* nm_utils_ip6_route_metric_normalize:
|
||||
* @metric: the route metric
|
||||
*
|
||||
* For IPv6 route, kernel treats the value 0 as IP6_RT_PRIO_USER (1024).
|
||||
* Thus, when comparing metric (values), we want to treat zero as NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6.
|
||||
*
|
||||
* Returns: @metric, if @metric is not zero, otherwise 1024.
|
||||
*/
|
||||
static inline guint32
|
||||
nm_utils_ip6_route_metric_normalize (guint32 metric)
|
||||
{
|
||||
return metric ? metric : 1024 /*NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6*/;
|
||||
}
|
||||
|
||||
int nm_spawn_process (const char *args, GError **error);
|
||||
|
||||
int nm_utils_modprobe (GError **error, gboolean suppress_error_loggin, const char *arg1, ...) G_GNUC_NULL_TERMINATED;
|
||||
|
||||
/**
|
||||
* str_if_set:
|
||||
* @str: input string that will be returned if @str is not %NULL
|
||||
* @fallback: if @str is %NULL, return @fallback instead
|
||||
*
|
||||
* This utility function is useful when printing a string to avoid passing
|
||||
* %NULL. E.g. printf ("%s", str_if_set (get_string(), "(none)"));
|
||||
*
|
||||
* Returns: either @str or @fallback, depending on whether @str is %NULL.
|
||||
*/
|
||||
static inline const char *
|
||||
str_if_set (const char *str, const char *fallback)
|
||||
{
|
||||
return str ? str : fallback;
|
||||
}
|
||||
|
||||
guint64 nm_utils_get_start_time_for_pid (pid_t pid, char *out_state, pid_t *out_ppid);
|
||||
|
||||
void nm_utils_kill_process_sync (pid_t pid, guint64 start_time, int sig, guint64 log_domain,
|
||||
const char *log_name, guint32 wait_before_kill_msec,
|
||||
guint32 sleep_duration_msec, guint32 max_wait_msec);
|
||||
|
||||
typedef void (*NMUtilsKillChildAsyncCb) (pid_t pid, gboolean success, int child_status, void *user_data);
|
||||
void nm_utils_kill_child_async (pid_t pid, int sig, guint64 log_domain, const char *log_name,
|
||||
guint32 wait_before_kill_msec,
|
||||
NMUtilsKillChildAsyncCb callback, void *user_data);
|
||||
gboolean nm_utils_kill_child_sync (pid_t pid, int sig, guint64 log_domain, const char *log_name,
|
||||
int *child_status, guint32 wait_before_kill_msec,
|
||||
guint32 sleep_duration_msec);
|
||||
|
||||
const char *nm_utils_find_helper (const char *progname,
|
||||
const char *try_first,
|
||||
GError **error);
|
||||
|
||||
typedef enum {
|
||||
NM_MATCH_SPEC_NO_MATCH = 0,
|
||||
NM_MATCH_SPEC_MATCH = 1,
|
||||
NM_MATCH_SPEC_NEG_MATCH = 2,
|
||||
} NMMatchSpecMatchType;
|
||||
|
||||
NMMatchSpecMatchType nm_match_spec_device_type (const GSList *specs, const char *device_type);
|
||||
NMMatchSpecMatchType nm_match_spec_hwaddr (const GSList *specs, const char *hwaddr);
|
||||
NMMatchSpecMatchType nm_match_spec_s390_subchannels (const GSList *specs, const char *subchannels);
|
||||
NMMatchSpecMatchType nm_match_spec_interface_name (const GSList *specs, const char *interface_name);
|
||||
NMMatchSpecMatchType nm_match_spec_match_config (const GSList *specs, guint nm_version, const char *env);
|
||||
GSList *nm_match_spec_split (const char *value);
|
||||
char *nm_match_spec_join (GSList *specs);
|
||||
|
||||
extern char _nm_utils_to_string_buffer[2096];
|
||||
|
||||
void nm_utils_to_string_buffer_init (char **buf, gsize *len);
|
||||
gboolean nm_utils_to_string_buffer_init_null (gconstpointer obj, char **buf, gsize *len);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
typedef struct {
|
||||
unsigned flag;
|
||||
const char *name;
|
||||
} NMUtilsFlags2StrDesc;
|
||||
|
||||
#define NM_UTILS_FLAGS2STR(f, n) { .flag = f, .name = ""n, }
|
||||
|
||||
#define _NM_UTILS_FLAGS2STR_DEFINE(scope, fcn_name, flags_type, ...) \
|
||||
scope const char * \
|
||||
fcn_name (flags_type flags, char *buf, gsize len) \
|
||||
{ \
|
||||
static const NMUtilsFlags2StrDesc descs[] = { \
|
||||
__VA_ARGS__ \
|
||||
}; \
|
||||
G_STATIC_ASSERT (sizeof (flags_type) <= sizeof (unsigned)); \
|
||||
return nm_utils_flags2str (descs, G_N_ELEMENTS (descs), flags, buf, len); \
|
||||
};
|
||||
|
||||
#define NM_UTILS_FLAGS2STR_DEFINE(fcn_name, flags_type, ...) \
|
||||
_NM_UTILS_FLAGS2STR_DEFINE (, fcn_name, flags_type, __VA_ARGS__)
|
||||
#define NM_UTILS_FLAGS2STR_DEFINE_STATIC(fcn_name, flags_type, ...) \
|
||||
_NM_UTILS_FLAGS2STR_DEFINE (static, fcn_name, flags_type, __VA_ARGS__)
|
||||
|
||||
const char *nm_utils_flags2str (const NMUtilsFlags2StrDesc *descs,
|
||||
gsize n_descs,
|
||||
unsigned flags,
|
||||
char *buf,
|
||||
gsize len);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define NM_UTILS_ENUM2STR(v, n) (void) 0; case v: s = ""n""; break; (void) 0
|
||||
#define NM_UTILS_ENUM2STR_IGNORE(v) (void) 0; case v: break; (void) 0
|
||||
|
||||
#define _NM_UTILS_ENUM2STR_DEFINE(scope, fcn_name, lookup_type, int_fmt, ...) \
|
||||
scope const char * \
|
||||
fcn_name (lookup_type val, char *buf, gsize len) \
|
||||
{ \
|
||||
nm_utils_to_string_buffer_init (&buf, &len); \
|
||||
if (len) { \
|
||||
const char *s = NULL; \
|
||||
switch (val) { \
|
||||
(void) 0, \
|
||||
__VA_ARGS__ \
|
||||
(void) 0; \
|
||||
}; \
|
||||
if (s) \
|
||||
g_strlcpy (buf, s, len); \
|
||||
else \
|
||||
g_snprintf (buf, len, "(%"int_fmt")", val); \
|
||||
} \
|
||||
return buf; \
|
||||
}
|
||||
|
||||
#define NM_UTILS_ENUM2STR_DEFINE(fcn_name, lookup_type, ...) \
|
||||
_NM_UTILS_ENUM2STR_DEFINE (, fcn_name, lookup_type, "d", __VA_ARGS__)
|
||||
#define NM_UTILS_ENUM2STR_DEFINE_STATIC(fcn_name, lookup_type, ...) \
|
||||
_NM_UTILS_ENUM2STR_DEFINE (static, fcn_name, lookup_type, "d", __VA_ARGS__)
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define NM_UTILS_LOOKUP_DEFAULT(v) return (v)
|
||||
#define NM_UTILS_LOOKUP_DEFAULT_WARN(v) g_return_val_if_reached (v)
|
||||
#define NM_UTILS_LOOKUP_ITEM(v, n) (void) 0; case v: return (n); (void) 0
|
||||
#define NM_UTILS_LOOKUP_STR_ITEM(v, n) NM_UTILS_LOOKUP_ITEM(v, ""n"")
|
||||
#define NM_UTILS_LOOKUP_ITEM_IGNORE(v) (void) 0; case v: break; (void) 0
|
||||
|
||||
#define _NM_UTILS_LOOKUP_DEFINE(scope, fcn_name, lookup_type, result_type, unknown_val, ...) \
|
||||
scope result_type \
|
||||
fcn_name (lookup_type val) \
|
||||
{ \
|
||||
switch (val) { \
|
||||
(void) 0, \
|
||||
__VA_ARGS__ \
|
||||
(void) 0; \
|
||||
}; \
|
||||
{ unknown_val; } \
|
||||
}
|
||||
|
||||
#define NM_UTILS_LOOKUP_STR_DEFINE(fcn_name, lookup_type, unknown_val, ...) \
|
||||
_NM_UTILS_LOOKUP_DEFINE (, fcn_name, lookup_type, const char *, unknown_val, __VA_ARGS__)
|
||||
#define NM_UTILS_LOOKUP_STR_DEFINE_STATIC(fcn_name, lookup_type, unknown_val, ...) \
|
||||
_NM_UTILS_LOOKUP_DEFINE (static, fcn_name, lookup_type, const char *, unknown_val, __VA_ARGS__)
|
||||
|
||||
/* Call the string-lookup-table function @fcn_name. If the function returns
|
||||
* %NULL, the numeric index is converted to string using a alloca() buffer.
|
||||
* Beware: this macro uses alloca(). */
|
||||
#define NM_UTILS_LOOKUP_STR(fcn_name, idx) \
|
||||
({ \
|
||||
typeof (idx) _idx = (idx); \
|
||||
const char *_s; \
|
||||
\
|
||||
_s = fcn_name (_idx); \
|
||||
if (!_s) { \
|
||||
_s = g_alloca (30); \
|
||||
\
|
||||
g_snprintf ((char *) _s, 30, "(%lld)", (long long) _idx); \
|
||||
} \
|
||||
_s; \
|
||||
})
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static inline void
|
||||
_nm_utils_strbuf_init (char *buf, gsize len, char **p_buf_ptr, gsize *p_buf_len)
|
||||
{
|
||||
NM_SET_OUT (p_buf_len, len);
|
||||
NM_SET_OUT (p_buf_ptr, buf);
|
||||
buf[0] = '\0';
|
||||
}
|
||||
|
||||
#define nm_utils_strbuf_init(buf, p_buf_ptr, p_buf_len) \
|
||||
G_STMT_START { \
|
||||
G_STATIC_ASSERT (G_N_ELEMENTS (buf) == sizeof (buf) && sizeof (buf) > sizeof (char *)); \
|
||||
_nm_utils_strbuf_init ((buf), sizeof (buf), (p_buf_ptr), (p_buf_len)); \
|
||||
} G_STMT_END
|
||||
void nm_utils_strbuf_append (char **buf, gsize *len, const char *format, ...) __attribute__((__format__ (__printf__, 3, 4)));
|
||||
void nm_utils_strbuf_append_c (char **buf, gsize *len, char c);
|
||||
void nm_utils_strbuf_append_str (char **buf, gsize *len, const char *str);
|
||||
|
||||
const char *nm_utils_get_ip_config_method (NMConnection *connection,
|
||||
GType ip_setting_type);
|
||||
|
||||
char *nm_utils_new_vlan_name (const char *parent_iface, guint32 vlan_id);
|
||||
|
||||
GPtrArray *nm_utils_read_resolv_conf_nameservers (const char *rc_contents);
|
||||
GPtrArray *nm_utils_read_resolv_conf_dns_options (const char *rc_contents);
|
||||
|
||||
int nm_utils_cmp_connection_by_autoconnect_priority (NMConnection **a, NMConnection **b);
|
||||
|
||||
void nm_utils_log_connection_diff (NMConnection *connection, NMConnection *diff_base, guint32 level, guint64 domain, const char *name, const char *prefix);
|
||||
|
||||
#define NM_UTILS_NS_PER_SECOND ((gint64) 1000000000)
|
||||
gint64 nm_utils_get_monotonic_timestamp_ns (void);
|
||||
gint64 nm_utils_get_monotonic_timestamp_us (void);
|
||||
gint64 nm_utils_get_monotonic_timestamp_ms (void);
|
||||
gint32 nm_utils_get_monotonic_timestamp_s (void);
|
||||
gint64 nm_utils_monotonic_timestamp_as_boottime (gint64 timestamp, gint64 timestamp_ticks_per_ns);
|
||||
|
||||
gboolean nm_utils_is_valid_path_component (const char *name);
|
||||
const char *ASSERT_VALID_PATH_COMPONENT (const char *name);
|
||||
const char *nm_utils_ip6_property_path (const char *ifname, const char *property);
|
||||
const char *nm_utils_ip4_property_path (const char *ifname, const char *property);
|
||||
|
||||
gboolean nm_utils_is_specific_hostname (const char *name);
|
||||
|
||||
/* IPv6 Interface Identifer helpers */
|
||||
|
||||
/**
|
||||
* NMUtilsIPv6IfaceId:
|
||||
* @id: convenience member for validity checking; never use directly
|
||||
* @id_u8: the 64-bit Interface Identifier
|
||||
*
|
||||
* Holds a 64-bit IPv6 Interface Identifier. The IID is a sequence of bytes
|
||||
* and should not normally be treated as a %guint64, but this is done for
|
||||
* convenience of validity checking and initialization.
|
||||
*/
|
||||
struct _NMUtilsIPv6IfaceId {
|
||||
union {
|
||||
guint64 id;
|
||||
guint8 id_u8[8];
|
||||
};
|
||||
};
|
||||
|
||||
#define NM_UTILS_IPV6_IFACE_ID_INIT { { .id = 0 } }
|
||||
|
||||
gboolean nm_utils_get_ipv6_interface_identifier (NMLinkType link_type,
|
||||
const guint8 *hwaddr,
|
||||
guint len,
|
||||
guint dev_id,
|
||||
NMUtilsIPv6IfaceId *out_iid);
|
||||
|
||||
void nm_utils_ipv6_addr_set_interface_identfier (struct in6_addr *addr,
|
||||
const NMUtilsIPv6IfaceId iid);
|
||||
|
||||
gboolean nm_utils_ipv6_addr_set_stable_privacy (struct in6_addr *addr,
|
||||
const char *ifname,
|
||||
const char *uuid,
|
||||
guint dad_counter,
|
||||
GError **error);
|
||||
|
||||
void nm_utils_ipv6_interface_identfier_get_from_addr (NMUtilsIPv6IfaceId *iid,
|
||||
const struct in6_addr *addr);
|
||||
|
||||
void nm_utils_array_remove_at_indexes (GArray *array, const guint *indexes_to_delete, gsize len);
|
||||
|
||||
void nm_utils_setpgid (gpointer unused);
|
||||
|
||||
typedef enum {
|
||||
NM_UTILS_TEST_NONE = 0,
|
||||
|
||||
/* Internal flag, marking that either nm_utils_get_testing() or _nm_utils_set_testing() was called. */
|
||||
_NM_UTILS_TEST_INITIALIZED = (1LL << 0),
|
||||
|
||||
/* Indicate that test mode is enabled in general. Explicitly calling _nm_utils_set_testing() will always set this flag. */
|
||||
_NM_UTILS_TEST_GENERAL = (1LL << 1),
|
||||
|
||||
/* Don't check the owner of keyfiles during testing. */
|
||||
NM_UTILS_TEST_NO_KEYFILE_OWNER_CHECK = (1LL << 2),
|
||||
|
||||
_NM_UTILS_TEST_LAST,
|
||||
NM_UTILS_TEST_ALL = (((_NM_UTILS_TEST_LAST - 1) << 1) - 1) & ~(_NM_UTILS_TEST_INITIALIZED),
|
||||
} NMUtilsTestFlags;
|
||||
|
||||
gboolean nm_utils_get_testing_initialized (void);
|
||||
NMUtilsTestFlags nm_utils_get_testing (void);
|
||||
void _nm_utils_set_testing (NMUtilsTestFlags flags);
|
||||
|
||||
void nm_utils_g_value_set_strv (GValue *value, GPtrArray *strings);
|
||||
|
||||
guint nm_utils_parse_debug_string (const char *string,
|
||||
const GDebugKey *keys,
|
||||
guint nkeys);
|
||||
|
||||
#endif /* __NM_CORE_UTILS_H__ */
|
@@ -38,7 +38,7 @@
|
||||
#endif
|
||||
|
||||
#include "nm-errors.h"
|
||||
#include "NetworkManagerUtils.h"
|
||||
#include "nm-core-utils.h"
|
||||
|
||||
typedef enum {
|
||||
LOG_FORMAT_FLAG_NONE = 0,
|
||||
|
@@ -20,6 +20,8 @@
|
||||
|
||||
#include "nm-default.h"
|
||||
|
||||
#include "nm-fake-platform.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <netinet/icmp6.h>
|
||||
@@ -27,9 +29,9 @@
|
||||
#include <linux/rtnetlink.h>
|
||||
|
||||
#include "nm-utils.h"
|
||||
|
||||
#include "nm-core-utils.h"
|
||||
#include "nmp-object.h"
|
||||
#include "NetworkManagerUtils.h"
|
||||
#include "nm-fake-platform.h"
|
||||
|
||||
#include "nm-test-utils.h"
|
||||
|
||||
|
@@ -19,6 +19,8 @@
|
||||
*/
|
||||
#include "nm-default.h"
|
||||
|
||||
#include "nm-linux-platform.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/socket.h>
|
||||
@@ -42,18 +44,15 @@
|
||||
#include <netlink/route/route.h>
|
||||
#include <gudev/gudev.h>
|
||||
|
||||
#include "nm-core-internal.h"
|
||||
#include "NetworkManagerUtils.h"
|
||||
#include "nm-linux-platform.h"
|
||||
#include "nm-platform-utils.h"
|
||||
#include "NetworkManagerUtils.h"
|
||||
#include "nm-utils.h"
|
||||
#include "nm-core-internal.h"
|
||||
#include "nm-setting-vlan.h"
|
||||
|
||||
#include "nm-core-utils.h"
|
||||
#include "nmp-object.h"
|
||||
#include "nm-platform-utils.h"
|
||||
#include "wifi/wifi-utils.h"
|
||||
#include "wifi/wifi-utils-wext.h"
|
||||
#include "nmp-object.h"
|
||||
|
||||
/* This is only included for the translation of VLAN flags */
|
||||
#include "nm-setting-vlan.h"
|
||||
|
||||
#define VLAN_FLAG_MVRP 0x8
|
||||
|
||||
|
@@ -18,6 +18,8 @@
|
||||
* Copyright (C) 2015 Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#include "nm-default.h"
|
||||
|
||||
#include "nm-platform-utils.h"
|
||||
|
||||
#include <string.h>
|
||||
@@ -30,10 +32,9 @@
|
||||
#include <linux/version.h>
|
||||
|
||||
#include "nm-utils.h"
|
||||
#include "NetworkManagerUtils.h"
|
||||
#include "nm-default.h"
|
||||
#include "nm-setting-wired.h"
|
||||
|
||||
#include "nm-core-utils.h"
|
||||
|
||||
/******************************************************************
|
||||
* ethtool
|
||||
|
@@ -20,6 +20,8 @@
|
||||
|
||||
#include "nm-default.h"
|
||||
|
||||
#include "nm-platform.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
@@ -32,14 +34,13 @@
|
||||
#include <linux/if_tun.h>
|
||||
#include <linux/if_tunnel.h>
|
||||
|
||||
#include "NetworkManagerUtils.h"
|
||||
#include "nm-utils.h"
|
||||
#include "nm-platform.h"
|
||||
#include "nm-core-internal.h"
|
||||
|
||||
#include "nm-core-utils.h"
|
||||
#include "nm-enum-types.h"
|
||||
#include "nm-platform-utils.h"
|
||||
#include "nmp-object.h"
|
||||
#include "NetworkManagerUtils.h"
|
||||
#include "nm-enum-types.h"
|
||||
#include "nm-core-internal.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
|
@@ -27,11 +27,11 @@
|
||||
#include <linux/if_link.h>
|
||||
|
||||
#include "nm-dbus-interface.h"
|
||||
#include "nm-default.h"
|
||||
#include "NetworkManagerUtils.h"
|
||||
#include "nm-setting-vlan.h"
|
||||
#include "nm-core-types-internal.h"
|
||||
|
||||
#include "nm-core-utils.h"
|
||||
#include "nm-setting-vlan.h"
|
||||
|
||||
#define NM_TYPE_PLATFORM (nm_platform_get_type ())
|
||||
#define NM_PLATFORM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_PLATFORM, NMPlatform))
|
||||
#define NM_PLATFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_PLATFORM, NMPlatformClass))
|
||||
|
@@ -20,13 +20,15 @@
|
||||
|
||||
#include "nm-default.h"
|
||||
|
||||
#include "nmp-object.h"
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include "nmp-object.h"
|
||||
#include "nm-platform-utils.h"
|
||||
#include "NetworkManagerUtils.h"
|
||||
#include "nm-utils.h"
|
||||
|
||||
#include "nm-core-utils.h"
|
||||
#include "nm-platform-utils.h"
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
#define _NMLOG_DOMAIN LOGD_PLATFORM
|
||||
|
@@ -22,8 +22,8 @@
|
||||
|
||||
#include <linux/rtnetlink.h>
|
||||
|
||||
#include "nm-core-utils.h"
|
||||
#include "test-common.h"
|
||||
#include "NetworkManagerUtils.h"
|
||||
|
||||
#include "nm-test-utils.h"
|
||||
|
||||
|
@@ -24,7 +24,7 @@
|
||||
#include <errno.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "NetworkManagerUtils.c"
|
||||
#include "nm-core-utils.c"
|
||||
|
||||
#include "nm-test-utils.h"
|
||||
|
||||
|
Reference in New Issue
Block a user