mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-25 01:20:07 +01:00
162 lines
7.7 KiB
C
162 lines
7.7 KiB
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
|
|
#ifndef __NM_CLOUD_SETUP_UTILS_H__
|
|
#define __NM_CLOUD_SETUP_UTILS_H__
|
|
|
|
#include "libnm-glib-aux/nm-logging-base.h"
|
|
|
|
/*****************************************************************************/
|
|
|
|
/* Environment variables for configuring nm-cloud-setup */
|
|
#define NMCS_ENV_NM_CLOUD_SETUP_ALIYUN "NM_CLOUD_SETUP_ALIYUN"
|
|
#define NMCS_ENV_NM_CLOUD_SETUP_AZURE "NM_CLOUD_SETUP_AZURE"
|
|
#define NMCS_ENV_NM_CLOUD_SETUP_EC2 "NM_CLOUD_SETUP_EC2"
|
|
#define NMCS_ENV_NM_CLOUD_SETUP_GCP "NM_CLOUD_SETUP_GCP"
|
|
#define NMCS_ENV_NM_CLOUD_SETUP_LOG "NM_CLOUD_SETUP_LOG"
|
|
|
|
/* Undocumented/internal environment variables for configuring nm-cloud-setup.
|
|
* These are mainly for testing/debugging. */
|
|
#define NMCS_ENV_NM_CLOUD_SETUP_ALIYUN_HOST "NM_CLOUD_SETUP_ALIYUN_HOST"
|
|
#define NMCS_ENV_NM_CLOUD_SETUP_AZURE_HOST "NM_CLOUD_SETUP_AZURE_HOST"
|
|
#define NMCS_ENV_NM_CLOUD_SETUP_EC2_HOST "NM_CLOUD_SETUP_EC2_HOST"
|
|
#define NMCS_ENV_NM_CLOUD_SETUP_GCP_HOST "NM_CLOUD_SETUP_GCP_HOST"
|
|
#define NMCS_ENV_NM_CLOUD_SETUP_MAP_INTERFACES "NM_CLOUD_SETUP_MAP_INTERFACES"
|
|
|
|
/*****************************************************************************/
|
|
|
|
#define _nm_log(level, ...) _nm_log_simple_printf((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);
|
|
|
|
/*****************************************************************************/
|
|
|
|
char *nmcs_utils_hwaddr_normalize(const char *hwaddr, gssize len);
|
|
|
|
static inline char *
|
|
nmcs_utils_hwaddr_normalize_gbytes(GBytes *hwaddr)
|
|
{
|
|
const char *str;
|
|
gsize len;
|
|
|
|
str = g_bytes_get_data(hwaddr, &len);
|
|
return nmcs_utils_hwaddr_normalize(str, len);
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
gboolean nmcs_utils_ipaddr_normalize_bin(int addr_family,
|
|
const char *addr,
|
|
gssize len,
|
|
int *out_addr_family,
|
|
gpointer out_addr_bin);
|
|
|
|
char *nmcs_utils_ipaddr_normalize(int addr_family, const char *addr, gssize len);
|
|
|
|
static inline char *
|
|
nmcs_utils_ipaddr_normalize_gbytes(int addr_family, GBytes *addr)
|
|
{
|
|
const char *str;
|
|
gsize len;
|
|
|
|
str = g_bytes_get_data(addr, &len);
|
|
return nmcs_utils_ipaddr_normalize(addr_family, str, 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);
|
|
|
|
/*****************************************************************************/
|
|
|
|
#define NMCS_DEFINE_HOST_BASE(base_fcn, nmcs_env_host, default_host) \
|
|
static const char *base_fcn(void) \
|
|
{ \
|
|
static const char *base_cached = NULL; \
|
|
const char *base; \
|
|
\
|
|
again: \
|
|
base = g_atomic_pointer_get(&base_cached); \
|
|
if (G_UNLIKELY(!base)) { \
|
|
/* The base URI can be set via environment variable. \
|
|
* This is mainly for testing, it's not usually supposed to be configured. \
|
|
* Consider this private API! */ \
|
|
base = g_getenv("" nmcs_env_host ""); \
|
|
base = nmcs_utils_uri_complete_interned(base) ?: ("" default_host ""); \
|
|
\
|
|
if (!g_atomic_pointer_compare_and_exchange(&base_cached, NULL, base)) \
|
|
goto again; \
|
|
\
|
|
if (!nm_streq(base, ("" default_host ""))) { \
|
|
_LOGD("test: mock %s=\"%s\" (default \"%s\")", \
|
|
"" nmcs_env_host "", \
|
|
base, \
|
|
"" default_host ""); \
|
|
} \
|
|
} \
|
|
\
|
|
return base; \
|
|
} \
|
|
_NM_DUMMY_STRUCT_FOR_TRAILING_SEMICOLON
|
|
|
|
/*****************************************************************************/
|
|
|
|
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__))
|
|
|
|
const char *nmcs_utils_uri_complete_interned(const char *uri);
|
|
|
|
/*****************************************************************************/
|
|
|
|
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 maybe_no_preserved_external_ip,
|
|
gboolean *out_version_id_changed,
|
|
GError **error);
|
|
|
|
#endif /* __NM_CLOUD_SETUP_UTILS_H__ */
|