From 95170bf3a69597b49238bb7ff396d41f6dc94f30 Mon Sep 17 00:00:00 2001 From: Jordan Augé Date: Wed, 30 Oct 2019 17:56:08 +0100 Subject: [HICN-369] Implement reconciliation state machine in face manager incl. reattempts in case of errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ia4ecf621fbd513d9e29313d2aaa487aa65811183 Signed-off-by: Jordan Augé --- ctrl/facemgr/src/facelet.h | 192 --------------------------------------------- 1 file changed, 192 deletions(-) delete mode 100644 ctrl/facemgr/src/facelet.h (limited to 'ctrl/facemgr/src/facelet.h') diff --git a/ctrl/facemgr/src/facelet.h b/ctrl/facemgr/src/facelet.h deleted file mode 100644 index 16c23b12e..000000000 --- a/ctrl/facemgr/src/facelet.h +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright (c) 2017-2019 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: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * \file facelet.h - * \brief Facelet - * - * A facelet consists in partial information and annotations collected towards - * the contruction of the final face that will be sent to the forwarder. - * - * It might also consist in a pattern allowing the deletion of a group of face - * for instance. - */ -#ifndef FACEMGR_FACELET_H -#define FACEMGR_FACELET_H - -#include - -#include -#include - -#define MAXSZ_FACELET 1024 - -/* NOTE: Any test should be sufficient */ -#define IS_VALID_NETDEVICE(netdevice) ((netdevice.index != 0) && (netdevice.name[0] != '\0')) - -typedef struct facelet_s facelet_t; - -/* Facelet status */ -#define foreach_facelet_status \ - _(UNDEFINED) \ - _(NEW) \ - _(CLEAN) \ - _(DIRTY) \ - _(CONFLICT) \ - _(DELETED) \ - _(IGNORED) \ - _(ERROR) \ - _(N) - -typedef enum { -#define _(x) FACELET_STATUS_ ## x, - foreach_facelet_status -#undef _ -} facelet_status_t; - -extern const char * facelet_status_str[]; - -/* Facelet attribute status */ - -/* - * We expect an attribute in the cache to be able to take any value but - * UNDEFINED and N, which facelet events should either be UNSET or CLEAN - */ -#define foreach_facelet_attr_status \ - _(UNDEFINED, '?') \ - _(UNSET, 'X') \ - _(CLEAN, ' ') \ - _(DIRTY, '*') \ - _(PENDING, 'P') \ - _(CONFLICT, '!') \ - _(N, '-') - -typedef enum { -#define _(x, y) FACELET_ATTR_STATUS_ ## x, - foreach_facelet_attr_status -#undef _ -} facelet_attr_status_t; - -extern const char * facelet_attr_status_str[]; -extern const char * facelet_attr_status_str_short[]; - -/* Facelet attribute */ - -#define foreach_facelet_attr \ - _(netdevice_type_t, netdevice_type) \ - _(netdevice_t, netdevice) \ - _(int, family) \ - _(ip_address_t, local_addr) \ - _(u16, local_port) \ - _(ip_address_t, remote_addr) \ - _(u16, remote_port) \ - _(face_state_t, admin_state) \ - _(face_state_t, state) \ - _(facemgr_face_type_t, face_type) - -#define foreach_facelet_event \ - _(UNDEFINED) \ - _(GET) \ - _(CREATE) \ - _(UPDATE) \ - _(DELETE) \ - _(SET_PARAMS) \ - _(SET_UP) \ - _(SET_DOWN) \ - _(SET_TAGS) \ - _(CLEAR_TAGS) \ - _(ADD_TAG) \ - _(REMOVE_TAG) \ - _(N) - -#define MAXSZ_EVENT__ 10 -#define MAXSZ_EVENT_ MAXSZ_EVENT_ + 1 - -/** - * \brief Enumeration of the possible types of event - */ -typedef enum { -#define _(x) FACELET_EVENT_ ## x, -foreach_facelet_event -#undef _ -} facelet_event_t; - -extern const char * facelet_event_str[]; - -/** - * \brief Create a facelet. - */ -facelet_t * facelet_create(); - -facelet_t * facelet_create_from_netdevice(netdevice_t * netdevice); - -int facelet_validate_face(const facelet_t * facelet); - -facelet_t * facelet_create_from_face(face_t * face); - -void facelet_free(facelet_t * facelet); - -facelet_t * facelet_dup(const facelet_t * current_facelet); - -int facelet_cmp(const facelet_t * f1, const facelet_t * f2); - -/* NOTE: only clean attributes are matched */ -bool facelet_match(const facelet_t * facelet, const facelet_t * facelet_match); - -/** - * \brief Returns whether the specified facelet has all key attributes defined. - * - * Key attributes are netdevice and family. If both are present, this allows to - * uniquely identify a facelet, otherwise it is a 'wildcard' facelet - * specification and might match several facelets. - */ -bool facelet_has_key(const facelet_t * facelet); - -#define FACELET_ACCESSORS_H(TYPE, NAME) \ -bool facelet_has_ ## NAME(const facelet_t * facelet); \ -facelet_attr_status_t facelet_get_ ## NAME ## _status(const facelet_t * facelet);\ -int facelet_get_ ## NAME(const facelet_t * facelet, TYPE * NAME); \ -int facelet_set_ ## NAME(facelet_t * facelet, TYPE NAME); \ -int facelet_unset_ ## NAME(facelet_t * facelet); - -#define _(TYPE, NAME) FACELET_ACCESSORS_H(TYPE, NAME) -foreach_facelet_attr -#undef _ - -int facelet_get_face(const facelet_t * facelet, face_t ** pface); - -int facelet_merge(facelet_t * facelet, const facelet_t * facelet_to_merge); - -facelet_status_t facelet_get_status(const facelet_t * facelet); -void facelet_set_status(facelet_t * facelet, facelet_status_t status); - -void facelet_set_bj_done(facelet_t * facelet); -void facelet_unset_bj_done(facelet_t * facelet); -bool facelet_is_bj_done(const facelet_t * facelet); -void facelet_set_au_done(facelet_t * facelet); -bool facelet_is_au_done(const facelet_t * facelet); - -facelet_event_t facelet_get_event(const facelet_t * facelet); -void facelet_set_event(facelet_t * facelet, facelet_event_t event); - -int facelet_snprintf(char * buf, size_t size, facelet_t * facelet); - -#define DUMP_FACELET(msg, facelet) do { \ - char buf[MAXSZ_FACELET]; \ - facelet_snprintf(buf, MAXSZ_FACELET, facelet); \ - DEBUG("%s : %s", msg, buf); \ -} while(0) - -#endif /* FACEMGR_FACELET_H */ -- cgit 1.2.3-korg