summaryrefslogtreecommitdiff
path: root/clients/cloud-setup/nmcs-provider-azure.c
diff options
context:
space:
mode:
Diffstat (limited to 'clients/cloud-setup/nmcs-provider-azure.c')
-rw-r--r--clients/cloud-setup/nmcs-provider-azure.c46
1 files changed, 31 insertions, 15 deletions
diff --git a/clients/cloud-setup/nmcs-provider-azure.c b/clients/cloud-setup/nmcs-provider-azure.c
index 65ff058c77..b2490b87f9 100644
--- a/clients/cloud-setup/nmcs-provider-azure.c
+++ b/clients/cloud-setup/nmcs-provider-azure.c
@@ -98,13 +98,12 @@ typedef struct {
NMCSProviderGetConfigIfaceData *iface_get_config;
gssize iface_idx;
guint n_ips_prefix_pending;
- char * hwaddr;
+ const char * hwaddr;
} AzureIfaceData;
static void
_azure_iface_data_destroy(AzureIfaceData *iface_data)
{
- g_free(iface_data->hwaddr);
nm_g_slice_free(iface_data);
}
@@ -135,8 +134,7 @@ _get_config_fetch_done_cb(NMHttpClient * http_client,
fip_str = g_bytes_get_data(response, NULL);
iface_data->iface_get_config =
g_hash_table_lookup(get_config_data->result_dict, iface_data->hwaddr);
- iface_get_config = iface_data->iface_get_config;
- iface_get_config->iface_idx = iface_data->iface_idx;
+ iface_get_config = iface_data->iface_get_config;
if (is_ipv4) {
if (!nm_utils_parse_inaddr_bin(AF_INET, fip_str, NULL, &tmp_addr)) {
@@ -301,6 +299,7 @@ _get_config_iface_cb(GObject *source, GAsyncResult *result, gpointer user_data)
NMCSProviderGetConfigTaskData *get_config_data;
gs_unref_bytes GBytes *response = NULL;
AzureIfaceData * iface_data = user_data;
+ gs_free char * v_hwaddr = NULL;
gs_free_error GError *error = NULL;
gs_free const char * uri = NULL;
char buf[100];
@@ -315,27 +314,44 @@ _get_config_iface_cb(GObject *source, GAsyncResult *result, gpointer user_data)
if (error)
goto out_done;
- iface_data->hwaddr = nmcs_utils_hwaddr_normalize_gbytes(response);
-
- if (!iface_data->hwaddr)
+ v_hwaddr = nmcs_utils_hwaddr_normalize_gbytes(response);
+ if (!v_hwaddr) {
+ _LOGI("interface[%" G_GSSIZE_FORMAT "]: invalid MAC address returned",
+ iface_data->iface_idx);
+ error = nm_utils_error_new(NM_UTILS_ERROR_UNKNOWN,
+ "invalid MAC address for index %" G_GSSIZE_FORMAT,
+ iface_data->iface_idx);
goto out_done;
+ }
- iface_data->iface_get_config =
- g_hash_table_lookup(get_config_data->result_dict, iface_data->hwaddr);
-
- if (!iface_data->iface_get_config) {
+ if (!g_hash_table_lookup_extended(get_config_data->result_dict,
+ v_hwaddr,
+ (gpointer *) &iface_data->hwaddr,
+ (gpointer *) &iface_data->iface_get_config)) {
if (!get_config_data->any) {
- _LOGD("interface[%" G_GSSIZE_FORMAT "]: ignore hwaddr %s",
- iface_data->iface_idx,
- iface_data->hwaddr);
+ _LOGD("get-config: skip fetching meta data for %s (%" G_GSSIZE_FORMAT ")",
+ v_hwaddr,
+ iface_data->iface_idx);
goto out_done;
}
iface_data->iface_get_config = nmcs_provider_get_config_iface_data_new(FALSE);
g_hash_table_insert(get_config_data->result_dict,
- g_strdup(iface_data->hwaddr),
+ (char *) (iface_data->hwaddr = g_steal_pointer(&v_hwaddr)),
iface_data->iface_get_config);
+ } else {
+ if (iface_data->iface_get_config->iface_idx >= 0) {
+ _LOGI("interface[%" G_GSSIZE_FORMAT "]: duplicate MAC address %s returned",
+ iface_data->iface_idx,
+ iface_data->hwaddr);
+ error = nm_utils_error_new(NM_UTILS_ERROR_UNKNOWN,
+ "duplicate MAC address for index %" G_GSSIZE_FORMAT,
+ iface_data->iface_idx);
+ goto out_done;
+ }
}
+ iface_data->iface_get_config->iface_idx = iface_data->iface_idx;
+
_LOGD("interface[%" G_GSSIZE_FORMAT "]: found a matching device with hwaddr %s",
iface_data->iface_idx,
iface_data->hwaddr);