diff options
Diffstat (limited to 'hicn-light/src/hicn/core/strategy.h')
-rw-r--r-- | hicn-light/src/hicn/core/strategy.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/hicn-light/src/hicn/core/strategy.h b/hicn-light/src/hicn/core/strategy.h new file mode 100644 index 000000000..9f1a7dac7 --- /dev/null +++ b/hicn-light/src/hicn/core/strategy.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 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 strategy.h + * \brief hICN forwarding strategy + */ +#ifndef HICNLIGHT_STRATEGY_H +#define HICNLIGHT_STRATEGY_H + +/* + * Forwarding strategy + * + * The forwarding strategy decides to elect one or several next hops among those + * available in the FIB entry, after an eventual application of the policy. This + * means it should be aware of the different flags set in the nexthops_t data + * structure by previous forwarding steps, that might have excluded certain + * nexthops. + * + * A strategy is defined by its type and comes with : + * - options, initialized at setup and that might eventually be updated (this + * is allowed on a per-strategy basis. + * - a state (eventually) empty, that is used to inform its decisions, and + * might be updated for each interest sent (lookup_nexthops), data received + * (on_data) or timeout event (on_timeout). + * + * All this information (type, options, state) is made available through a + * strategy_entry_t which is stored together with nexthops in the FIB entry. + * + * Per-nexthop strategy informaton is stored in the nexthops table itself. As it + * would be difficult and suboptimal to provide a correct strategy-dependent + * initialization in the FIB nad nexthops data structures, it is thus the + * responsibility of the forwarding strategy to initialize its state and nexthop + * related state when appropriate (eg. at initialization, or when a nexthop is + * added). + */ + +#include "nexthops.h" +#include "strategy_vft.h" + +typedef struct strategy_entry_s { + const void *forwarder; + strategy_type_t type; + strategy_options_t options; + strategy_state_t state; +} strategy_entry_t; + +int strategy_initialize(strategy_entry_t *entry, const void *forwarder); + +int strategy_finalize(strategy_entry_t *entry); + +nexthops_t *strategy_lookup_nexthops(strategy_entry_t *entry, + nexthops_t *nexthops, + const msgbuf_t *msgbuf); + +int strategy_add_nexthop(strategy_entry_t *entry, nexthops_t *nexthops, + off_t offset); + +int strategy_remove_nexthop(strategy_entry_t *entry, nexthops_t *nexthops, + off_t offset); + +int strategy_on_data(strategy_entry_t *entry, nexthops_t *nexthops, + const nexthops_t *data_nexthops, const msgbuf_t *msgbuf, + Ticks pitEntryCreation, Ticks objReception); + +int strategy_on_timeout(strategy_entry_t *entry, nexthops_t *nexthops, + const nexthops_t *timeout_nexthops); + +#endif /* HICNLIGHT_STRATEGY_H */ |