1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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 */
|