Hybrid ICN (hICN) plugin  v21.06-rc0-4-g18fa668
fibEntry.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017-2019 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
37 #ifndef fibEntry_h
38 #define fibEntry_h
39 
40 #include <hicn/core/name.h>
42 
43 #ifdef WITH_POLICY
44 #include <hicn/core/connectionTable.h>
45 #endif /* WITH_POLICY */
46 
47 #ifdef WITH_MAPME
48 #include <parc/algol/parc_EventTimer.h>
49 #include <parc/algol/parc_Iterator.h>
50 #endif /* WITH_MAPME */
51 
52 struct fib_entry;
53 typedef struct fib_entry FibEntry;
54 
55 #ifdef WITH_POLICY
56 struct forwarder;
57 FibEntry *fibEntry_Create(Name *name, strategy_type fwdStrategy, const struct forwarder * table);
58 #else
59 FibEntry *fibEntry_Create(Name *name, strategy_type fwdStrategy);
60 #endif
61 
67 void fibEntry_Release(FibEntry **fibEntryPtr);
68 
80 FibEntry *fibEntry_Acquire(const FibEntry *fibEntry);
81 
82 void fibEntry_SetStrategy(FibEntry *fibEntry, strategy_type strategy,
83  unsigned related_prefixes_len,
84  Name **related_prefixes);
85 
86 void fibEntry_AddNexthop(FibEntry *fibEntry, unsigned connectionId);
87 
88 void fibEntry_RemoveNexthopByConnectionId(FibEntry *fibEntry,
89  unsigned connectionId);
90 
91 size_t fibEntry_NexthopCount(const FibEntry *fibEntry);
92 
100 const NumberSet *fibEntry_GetNexthops(const FibEntry *fibEntry);
101 
102 #ifdef WITH_POLICY
103 void fibEntry_ReceiveObjectMessage(FibEntry *fibEntry,
104 #else
105 void fibEntry_ReceiveObjectMessage(const FibEntry *fibEntry,
106 #endif /* WITH_POLICY */
107  const NumberSet *egressId,
108  const Message *objectMessage,
109  Ticks pitEntryCreation,
110  Ticks objReception);
111 
112 #ifdef WITH_POLICY
113 hicn_policy_t fibEntry_GetPolicy(const FibEntry *fibEntry);
114 void fibEntry_ReconsiderPolicy(FibEntry *fibEntry);
115 void fibEntry_SetPolicy(FibEntry *fibEntry, hicn_policy_t policy);
116 void fibEntry_UpdateStats(FibEntry *fibEntry, uint64_t now);
117 NumberSet * fibEntry_GetAvailableNextHops(const FibEntry *fibEntry, unsigned in_connection);
118 NumberSet * fibEntry_GetPreviousNextHops(const FibEntry *fibEntry);
119 void fibEntry_SetPreviousNextHops(FibEntry *fibEntry, const NumberSet * nexthops);
120 
121 void fibEntry_OnTimeout(FibEntry *fibEntry, const NumberSet *egressId);
122 const NumberSet *fibEntry_GetNexthopsFromForwardingStrategy(
123  FibEntry *fibEntry, const Message *interestMessage, bool is_retransmission);
124 
125 #else
126 void fibEntry_OnTimeout(const FibEntry *fibEntry, const NumberSet *egressId);
127 const NumberSet *fibEntry_GetNexthopsFromForwardingStrategy(
128  const FibEntry *fibEntry, const Message *interestMessage);
129 #endif /* WITH_POLICY */
130 
131 
132 strategy_type fibEntry_GetFwdStrategyType(const FibEntry *fibEntry);
133 
134 StrategyImpl *fibEntry_GetFwdStrategy(const FibEntry *fibEntry);
135 
141 Name *fibEntry_GetPrefix(const FibEntry *fibEntry);
142 
143 #ifdef WITH_MAPME
144 
151 void *fibEntry_getUserData(const FibEntry *fibEntry);
152 
161 void fibEntry_setUserData(FibEntry *fibEntry, const void *userDataOwner,
162  const void *userData, void (*userDataRelease)(const void *, void **));
163 
164 #endif /* WITH_MAPME */
165 
166 #endif // fibEntry_h
strategy_impl
Definition: strategyImpl.h:52
fibEntry_GetNexthops
const NumberSet * fibEntry_GetNexthops(const FibEntry *fibEntry)
hicn_policy_t
Definition: policy.h:216
fibEntry_Release
void fibEntry_Release(FibEntry **fibEntryPtr)
fibEntry_GetPrefix
Name * fibEntry_GetPrefix(const FibEntry *fibEntry)
fibEntry_Acquire
FibEntry * fibEntry_Acquire(const FibEntry *fibEntry)
strategyImpl.h
Defines the function structure for a Strategy implementation.