summary refs log tree commit diff
path: root/src/NetworkManagerUtils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/NetworkManagerUtils.h')
-rw-r--r--src/NetworkManagerUtils.h371
1 files changed, 6 insertions, 365 deletions
diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h
index acd3d55a..b3c384da 100644
--- a/src/NetworkManagerUtils.h
+++ b/src/NetworkManagerUtils.h
@@ -15,296 +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"
-
-/*****************************************************************************/
-
-#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);
+#include "nm-core-utils.h"
 
 /*****************************************************************************/
 
-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);
-
-/*****************************************************************************/
-
-typedef struct {
-	int value;
-	const char *name;
-} NMUtilsEnum2StrDesc;
-
-#define NM_UTILS_ENUM2STR(v, n) { .value = v, .name = ""n, }
-
-#define _NM_UTILS_ENUM2STR_DEFINE(scope, fcn_name, enum_type, ...) \
-scope const char * \
-fcn_name (enum_type val, char *buf, gsize len) \
-{ \
-	static const NMUtilsEnum2StrDesc descs[] = { \
-		__VA_ARGS__ \
-	}; \
-	G_STATIC_ASSERT (sizeof (enum_type) <= sizeof (int)); \
-	return nm_utils_enum2str (descs, G_N_ELEMENTS (descs), val, buf, len); \
-}
-
-#define NM_UTILS_ENUM2STR_DEFINE(fcn_name, enum_type, ...) \
-	_NM_UTILS_ENUM2STR_DEFINE (, fcn_name, enum_type, __VA_ARGS__)
-#define NM_UTILS_ENUM2STR_DEFINE_STATIC(fcn_name, enum_type, ...) \
-	_NM_UTILS_ENUM2STR_DEFINE (static, fcn_name, enum_type, __VA_ARGS__)
-
-const char *nm_utils_enum2str (const NMUtilsEnum2StrDesc *descs,
-                               gsize n_descs,
-                               int val,
-                               char *buf,
-                               gsize len);
-
-/*****************************************************************************/
-
-#define _NM_UTILS_STRING_LOOKUP_TABLE_DEFINE(scope, fcn_name, lookup_type, unknown_val, ...) \
-scope const char * \
-fcn_name (lookup_type idx) \
-{ \
-	static const char *const descs[] = { \
-		__VA_ARGS__ \
-	}; \
-	if ((gssize) idx >= 0 && idx < G_N_ELEMENTS (descs)) \
-		return descs[idx]; \
-	return unknown_val; \
-}
-
-#define NM_UTILS_STRING_LOOKUP_TABLE_DEFINE(fcn_name, lookup_type, unknown_val, ...) \
-	_NM_UTILS_STRING_LOOKUP_TABLE_DEFINE (, fcn_name, lookup_type, unknown_val, __VA_ARGS__)
-#define NM_UTILS_STRING_LOOKUP_TABLE_DEFINE_STATIC(fcn_name, lookup_type, unknown_val, ...) \
-	_NM_UTILS_STRING_LOOKUP_TABLE_DEFINE (static, fcn_name, lookup_type, 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_STRING_LOOKUP_TABLE(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; \
-	})
-
-/*****************************************************************************/
-
-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,
@@ -313,101 +36,17 @@ 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,
                                          NMConnection *original,
                                          gboolean device_has_carrier,
+                                         gint64 default_v4_metric,
+                                         gint64 default_v6_metric,
                                          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:
@@ -423,4 +62,6 @@ void nm_utils_g_value_set_object_path_array (GValue *value,
                                              NMUtilsObjectFunc filter_func,
                                              gpointer user_data);
 
+/*****************************************************************************/
+
 #endif /* __NETWORKMANAGER_UTILS_H__ */