diff options
Diffstat (limited to 'ctrl/facemgr/src/interfaces/hicn_light')
-rw-r--r-- | ctrl/facemgr/src/interfaces/hicn_light/hicn_light.c | 85 |
1 files changed, 41 insertions, 44 deletions
diff --git a/ctrl/facemgr/src/interfaces/hicn_light/hicn_light.c b/ctrl/facemgr/src/interfaces/hicn_light/hicn_light.c index b396782f5..2275d1cff 100644 --- a/ctrl/facemgr/src/interfaces/hicn_light/hicn_light.c +++ b/ctrl/facemgr/src/interfaces/hicn_light/hicn_light.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Cisco and/or its affiliates. + * Copyright (c) 2021-2022 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -23,6 +23,7 @@ #include <time.h> // time #include <hicn/ctrl.h> +#include <hicn/ctrl/socket.h> #include <hicn/facemgr.h> #include <hicn/util/ip_address.h> #include <hicn/util/log.h> @@ -110,7 +111,7 @@ int hl_process_state(interface_t *interface) assert(!data->polled_routes); stop_poll_timer(interface); - // DEBUG("[hl_process_state] Querying route list"); + DEBUG("[hl_process_state] Querying route list"); if (hc_route_list_async(data->sp) < 0) { DEBUG("[hl_process_state] Error querying route list"); return -1; @@ -119,7 +120,8 @@ int hl_process_state(interface_t *interface) break; case HL_STATE_ROUTES_RECEIVED: - // DEBUG("[hl_process_state] Querying face list"); + DEBUG("[hl_process_state] Got route list"); + DEBUG("[hl_process_state] Querying face list"); if (hc_face_list_async(data->sp) < 0) { DEBUG("[hl_process_state] Error querying face list"); return -1; @@ -128,6 +130,7 @@ int hl_process_state(interface_t *interface) break; case HL_STATE_FACES_RECEIVED: + DEBUG("[hl_process_state] Got face list"); data->state = HL_STATE_IDLE; start_poll_timer(interface); break; @@ -215,11 +218,12 @@ int hl_connect_timeout(interface_t *interface, int fd, void *unused) { * connected to succeed. */ int _hl_connect(interface_t *interface) { + ERROR("[MACCHA] CONNECT"); hl_data_t *data = interface->data; assert(!data->s); assert(!data->sp); - data->s = hc_sock_create(); + data->s = hc_sock_create(FORWARDER_TYPE_HICNLIGHT, NULL); if (data->s <= 0) { ERROR("[hc_connect] Could not create control socket"); goto ERR_SOCK; @@ -230,7 +234,7 @@ int _hl_connect(interface_t *interface) { goto ERR_CONNECT; } - data->sp = hc_sock_create(); + data->sp = hc_sock_create(FORWARDER_TYPE_HICNLIGHT, NULL); if (data->sp <= 0) { ERROR("[hc_connect] Could not create polling socket"); goto ERR_SOCK_POLL; @@ -339,16 +343,12 @@ int hl_finalize(interface_t *interface) { } int hl_on_event(interface_t *interface, facelet_t *facelet) { - hc_face_t hc_face; hc_route_t route; int rc; int ret = 0; hl_data_t *data = (hl_data_t *)interface->data; face_t *face = NULL; - hc_face.id = 0; - memset(hc_face.name, 0, sizeof(hc_face.name)); - /* NOTE * - One example where this fails (and it is normal) is when we delete a * face that was not completely created, because for instance bonjour did @@ -373,14 +373,13 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { facelet_snprintf(buf, MAXSZ_FACELET, facelet); DEBUG("Create facelet %s", buf); - hc_face.face = *face; - rc = hc_face_create(data->s, &hc_face); + rc = hc_face_create(data->s, face); if (rc < 0) { ERROR("Failed to create face\n"); ret = -FACELET_ERROR_REASON_UNSPECIFIED_ERROR; goto ERR; } - INFO("Created face id=%d - %s", hc_face.id, buf); + INFO("Created face id=%d - %s", face->id, buf); } hicn_route_t **route_array; @@ -393,7 +392,7 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { if (n == 0) { /* Adding default routes */ route = (hc_route_t){ - .face_id = hc_face.id, + .face_id = face->id, .family = AF_INET, .remote_addr = IPV4_ANY, .len = 0, @@ -406,7 +405,7 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { } route = (hc_route_t){ - .face_id = hc_face.id, + .face_id = face->id, .family = AF_INET6, .remote_addr = IPV6_ANY, .len = 0, @@ -421,7 +420,7 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { } else { for (unsigned i = 0; i < n; i++) { hicn_route_t *hicn_route = route_array[i]; - ip_prefix_t prefix; + hicn_ip_prefix_t prefix; int cost; if (hicn_route_get_prefix(hicn_route, &prefix) < 0) { ERROR("Failed to get route prefix"); @@ -434,8 +433,8 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { continue; } route = (hc_route_t){ - .face_id = hc_face.id, - .name = "", /* take face_id into account */ + .face_id = face->id, + .face_name = "", /* take face_id into account */ .family = prefix.family, .remote_addr = prefix.address, .len = prefix.len, @@ -454,8 +453,7 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { case FACELET_EVENT_DELETE: /* Removing a face should also remove associated routes */ - hc_face.face = *face; - rc = hc_face_delete(data->s, &hc_face, 1); + rc = hc_face_delete(data->s, face); // delete_listener= */ 1); if (rc < 0) { ERROR("Failed to delete face\n"); ret = -FACELET_ERROR_REASON_UNSPECIFIED_ERROR; @@ -464,7 +462,7 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { char buf[MAXSZ_FACELET]; facelet_snprintf(buf, MAXSZ_FACELET, facelet); - INFO("Deleted face id=%d", hc_face.id); + INFO("Deleted face id=%d", face->id); break; @@ -472,10 +470,9 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { /* Currently, only admin_state & priority are supported */ if (facelet_get_admin_state_status(facelet) == FACELET_ATTR_STATUS_DIRTY) { - hc_face.face = *face; - hc_face_t *face_found; + hc_data_t *face_found; - rc = hc_face_get(data->s, &hc_face, &face_found); + rc = hc_face_get(data->s, face, &face_found); if (rc < 0) { ERROR("Failed to find face\n"); ret = -FACELET_ERROR_REASON_INTERNAL_ERROR; @@ -487,8 +484,10 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { goto ERR; } char conn_id_or_name[SYMBOLIC_NAME_LEN]; - snprintf(conn_id_or_name, SYMBOLIC_NAME_LEN, "%d", face_found->id); - free(face_found); + + const hc_object_t *object = hc_data_get_object(face_found, 0); + snprintf(conn_id_or_name, SYMBOLIC_NAME_LEN, "%d", object->face.id); + hc_data_free(face_found); face_state_t admin_state; if (facelet_get_admin_state(facelet, &admin_state) < 0) { @@ -504,16 +503,14 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { goto ERR; } facelet_set_admin_state_status(facelet, FACELET_ATTR_STATUS_CLEAN); - INFO("Updated face id=%d - admin_state=%s", hc_face.id, + INFO("Updated face id=%d - admin_state=%s", face->id, face_state_str(admin_state)); } -#ifdef WITH_POLICY if (facelet_get_netdevice_type_status(facelet) == FACELET_ATTR_STATUS_DIRTY) { - hc_face.face = *face; - hc_face_t *face_found; + hc_data_t *face_found; - rc = hc_face_get(data->s, &hc_face, &face_found); + rc = hc_face_get(data->s, face, &face_found); if (rc < 0) { ERROR("Failed to find face\n"); goto ERR; @@ -523,8 +520,9 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { goto ERR; } char conn_id_or_name[SYMBOLIC_NAME_LEN]; - snprintf(conn_id_or_name, SYMBOLIC_NAME_LEN, "%d", face_found->id); - free(face_found); + const hc_object_t *object = hc_data_get_object(face_found, 0); + snprintf(conn_id_or_name, SYMBOLIC_NAME_LEN, "%d", object->face.id); + hc_data_free(face_found); netdevice_type_t netdevice_type; if (facelet_get_netdevice_type(facelet, &netdevice_type) < 0) { @@ -565,15 +563,14 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { goto ERR; } facelet_set_netdevice_type_status(facelet, FACELET_ATTR_STATUS_CLEAN); - INFO("Updated face id=%d - netdevice_type=%s", hc_face.id, + INFO("Updated face id=%d - netdevice_type=%s", face->id, netdevice_type_str(netdevice_type)); } if (facelet_get_priority_status(facelet) == FACELET_ATTR_STATUS_DIRTY) { INFO("Updating priority..."); - hc_face.face = *face; - hc_face_t *face_found; + hc_data_t *face_found; - rc = hc_face_get(data->s, &hc_face, &face_found); + rc = hc_face_get(data->s, face, &face_found); if (rc < 0) { ERROR("Failed to find face\n"); goto ERR; @@ -583,8 +580,9 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { goto ERR; } char conn_id_or_name[SYMBOLIC_NAME_LEN]; - snprintf(conn_id_or_name, SYMBOLIC_NAME_LEN, "%d", face_found->id); - free(face_found); + const hc_object_t *object = hc_data_get_object(face_found, 0); + snprintf(conn_id_or_name, SYMBOLIC_NAME_LEN, "%d", object->face.id); + hc_data_free(face_found); uint32_t priority; if (facelet_get_priority(facelet, &priority) < 0) { @@ -601,9 +599,8 @@ int hl_on_event(interface_t *interface, facelet_t *facelet) { } facelet_set_priority_status(facelet, FACELET_ATTR_STATUS_CLEAN); - INFO("Updated face id=%d - priority=%d", hc_face.id, priority); + INFO("Updated face id=%d - priority=%d", face->id, priority); } -#endif /* WITH_POLICY */ break; default: @@ -637,7 +634,7 @@ int hl_callback(interface_t *interface, int fd, void *unused) { } /* In case of error, reconnect to forwarder */ - if (hc_sock_callback(data->sp, &results) < 0) { + if (hc_sock_receive_all(data->sp, &results) < 0) { INFO("Closing socket... reconnecting..."); if (interface_unregister_fd(interface, hc_sock_get_fd(data->sp)) < 0) { ERROR("[hl_callback] Error unregistering fd"); @@ -657,7 +654,7 @@ int hl_callback(interface_t *interface, int fd, void *unused) { } /* Shall we wait for more data ? */ - if (!results->complete) { + if (!hc_data_is_complete(results)) { INFO("[hl_callback] results incomplete"); return ret; } @@ -704,7 +701,7 @@ int hl_callback(interface_t *interface, int fd, void *unused) { /* We can ignore faces on localhost */ - facelet_t *facelet = facelet_create_from_face(&f->face); + facelet_t *facelet = facelet_create_from_face(f); if (!facelet) { ERROR("[hl_callback] Could not create facelet... skipping"); continue; @@ -725,7 +722,7 @@ int hl_callback(interface_t *interface, int fd, void *unused) { if (r->len == 0) continue; - ip_prefix_t prefix = { + hicn_ip_prefix_t prefix = { .family = r->family, .address = r->remote_addr, .len = r->len, |