ndn-embeds 0.1.0
Lightweight NDN protocol stack for embedded systems
Loading...
Searching...
No Matches
pit.hpp
Go to the documentation of this file.
1
12#pragma once
13
14#include "ndn/common.hpp"
15#include "ndn/interest.hpp"
16#include "ndn/name.hpp"
17#include <functional>
18
19namespace ndn {
20
22constexpr size_t PIT_MAX_ENTRIES = 50;
23
25constexpr size_t PIT_MAX_FACES_PER_ENTRY = 5;
26
32enum class PitInsertResult : uint8_t {
33 New,
35 Duplicate,
36 Full,
37};
38
46class PitEntry {
47public:
52 const Name& name() const { return name_; }
53
58 uint32_t nonce() const { return nonce_; }
59
64 TimeMs expireTime() const { return expireTime_; }
65
74 size_t faceCount() const { return numFaces_; }
75
81 FaceId face(size_t index) const;
82
88 bool hasFace(FaceId faceId) const;
89
95 bool addFace(FaceId faceId);
98private:
99 friend class Pit;
100 Name name_;
101 uint32_t nonce_ = 0;
102 TimeMs expireTime_ = 0;
103 std::array<FaceId, PIT_MAX_FACES_PER_ENTRY> incomingFaces_{};
104 uint8_t numFaces_ = 0;
105 bool inUse_ = false;
106};
107
137class Pit {
138public:
154 PitInsertResult insert(const Interest& interest, FaceId incomingFace,
155 PitEntry** outEntry = nullptr);
156
162 PitEntry* find(const Name& name);
163
169 const PitEntry* find(const Name& name) const;
170
175 void remove(PitEntry* entry);
176
181 void remove(const Name& name);
193 using TimeoutCallback = std::function<void(const PitEntry&)>;
194
203 void processTimeouts(TimeMs now, TimeoutCallback callback = nullptr);
214 size_t size() const { return size_; }
215
220 size_t capacity() const { return PIT_MAX_ENTRIES; }
221
225 struct Stats {
226 uint32_t insertions = 0;
227 uint32_t aggregations = 0;
228 uint32_t duplicates = 0;
229 uint32_t timeouts = 0;
230 };
231
236 const Stats& stats() const { return stats_; }
239private:
240 std::array<PitEntry, PIT_MAX_ENTRIES> entries_{};
241 size_t size_ = 0;
242 Stats stats_{};
243};
244
245} // namespace ndn
NDN Interest packet.
Definition interest.hpp:50
NDN Name class.
Definition name.hpp:64
PIT entry.
Definition pit.hpp:46
size_t faceCount() const
Get the number of registered Faces.
Definition pit.hpp:74
bool hasFace(FaceId faceId) const
Check if a given Face is registered.
Definition pit.cpp:16
FaceId face(size_t index) const
Get the Face ID at a given index.
Definition pit.cpp:9
uint32_t nonce() const
Get the Interest nonce.
Definition pit.hpp:58
const Name & name() const
Get the Interest Name.
Definition pit.hpp:52
TimeMs expireTime() const
Get the entry expiration time.
Definition pit.hpp:64
bool addFace(FaceId faceId)
Add a Face.
Definition pit.cpp:25
Pending Interest Table.
Definition pit.hpp:137
size_t capacity() const
Get the maximum number of entries.
Definition pit.hpp:220
PitInsertResult insert(const Interest &interest, FaceId incomingFace, PitEntry **outEntry=nullptr)
Insert an Interest.
Definition pit.cpp:40
void processTimeouts(TimeMs now, TimeoutCallback callback=nullptr)
Process timed-out entries.
Definition pit.cpp:121
const Stats & stats() const
Get statistics.
Definition pit.hpp:236
size_t size() const
Get the current number of entries.
Definition pit.hpp:214
std::function< void(const PitEntry &)> TimeoutCallback
Timeout callback.
Definition pit.hpp:193
PitEntry * find(const Name &name)
Find an entry by Name.
Definition pit.cpp:88
void remove(PitEntry *entry)
Remove an entry.
Definition pit.cpp:106
Common definitions for the NDN protocol stack.
uint64_t TimeMs
Timestamp type (milliseconds)
Definition common.hpp:107
uint16_t FaceId
Face identifier.
Definition common.hpp:96
@ Full
Table is full.
NDN Interest packet.
NDN Name class.
PitInsertResult
PIT insertion result.
Definition pit.hpp:32
@ New
New entry created.
@ Aggregated
Face added to existing entry (aggregation)
@ Duplicate
Same nonce detected (loop)
constexpr size_t PIT_MAX_FACES_PER_ENTRY
Maximum number of Faces per PIT entry.
Definition pit.hpp:25
constexpr size_t PIT_MAX_ENTRIES
Maximum number of PIT entries.
Definition pit.hpp:22
PIT statistics.
Definition pit.hpp:225
uint32_t insertions
Number of new insertions.
Definition pit.hpp:226
uint32_t duplicates
Number of duplicate detections (loops)
Definition pit.hpp:228
uint32_t timeouts
Number of timeouts.
Definition pit.hpp:229
uint32_t aggregations
Number of aggregations.
Definition pit.hpp:227