/* SPDX-License-Identifier: LGPL-2.1+ */ #ifndef __NM_CLOUD_SETUP_UTILS_H__ #define __NM_CLOUD_SETUP_UTILS_H__ #include "nm-glib-aux/nm-logging-fwd.h" /*****************************************************************************/ /* mark names for variables that can be used as configuration. Search * for NMCS_ENV_VARIABLE() to find all honored environment variables. */ #define NMCS_ENV_VARIABLE(var) "" var "" /*****************************************************************************/ extern volatile NMLogLevel _nm_logging_configured_level; static inline gboolean nm_logging_enabled(NMLogLevel level) { return level >= _nm_logging_configured_level; } void _nm_logging_enabled_init(const char *level_str); void _nm_log_impl_cs(NMLogLevel level, const char *fmt, ...) _nm_printf(2, 3); #define _nm_log(level, ...) _nm_log_impl_cs((level), __VA_ARGS__); #define _NMLOG(level, ...) \ G_STMT_START \ { \ const NMLogLevel _level = (level); \ \ if (nm_logging_enabled(_level)) { \ _nm_log(_level, __VA_ARGS__); \ } \ } \ G_STMT_END /*****************************************************************************/ #ifndef NM_DIST_VERSION #define NM_DIST_VERSION VERSION #endif /*****************************************************************************/ gpointer nmcs_wait_for_objects_register(gpointer target); gboolean nmcs_wait_for_objects_iterate_until_done(GMainContext *context, int timeout_msec); /*****************************************************************************/ typedef void (*NMCSUtilsPollProbeStartFcn)(GCancellable * cancellable, gpointer probe_user_data, GAsyncReadyCallback callback, gpointer user_data); typedef gboolean (*NMCSUtilsPollProbeFinishFcn)(GObject * source, GAsyncResult *result, gpointer probe_user_data, GError ** error); void nmcs_utils_poll(int poll_timeout_ms, int ratelimit_timeout_ms, int sleep_timeout_ms, NMCSUtilsPollProbeStartFcn probe_start_fcn, NMCSUtilsPollProbeFinishFcn probe_finish_fcn, gpointer probe_user_data, GCancellable * cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean nmcs_utils_poll_finish(GAsyncResult *result, gpointer *probe_user_data, GError **error); /*****************************************************************************/ char *nmcs_utils_hwaddr_normalize(const char *hwaddr, gssize len); /*****************************************************************************/ const char *nmcs_utils_parse_memmem(GBytes *mem, const char *needle); const char *nmcs_utils_parse_get_full_line(GBytes *mem, const char *needle); /*****************************************************************************/ char *nmcs_utils_uri_build_concat_v(const char *base, const char **components, gsize n_components); #define nmcs_utils_uri_build_concat(base, ...) \ nmcs_utils_uri_build_concat_v(base, ((const char *[]){__VA_ARGS__}), NM_NARG(__VA_ARGS__)) /*****************************************************************************/ gboolean nmcs_setting_ip_replace_ipv4_addresses(NMSettingIPConfig *s_ip, NMIPAddress ** entries_arr, guint entries_len); gboolean nmcs_setting_ip_replace_ipv4_routes(NMSettingIPConfig *s_ip, NMIPRoute ** entries_arr, guint entries_len); gboolean nmcs_setting_ip_replace_ipv4_rules(NMSettingIPConfig *s_ip, NMIPRoutingRule ** entries_arr, guint entries_len); /*****************************************************************************/ NMConnection *nmcs_device_get_applied_connection(NMDevice * device, GCancellable *cancellable, guint64 * version_id, GError ** error); gboolean nmcs_device_reapply(NMDevice * device, GCancellable *sigterm_cancellable, NMConnection *connection, guint64 version_id, gboolean * out_version_id_changed, GError ** error); #endif /* __NM_CLOUD_SETUP_UTILS_H__ */