NDN-DPDK
High-Speed Named Data Networking Forwarder
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
nexthop-filter.h
Go to the documentation of this file.
1 #ifndef NDNDPDK_FIB_NEXTHOP_FILTER_H
2 #define NDNDPDK_FIB_NEXTHOP_FILTER_H
3 
6 #include "entry.h"
7 
13 typedef uint32_t FibNexthopFilter;
14 
15 static_assert(CHAR_BIT * sizeof(FibNexthopFilter) >= FibMaxNexthops, "");
16 
22 __attribute__((nonnull)) static inline int
23 FibNexthopFilter_Reject(FibNexthopFilter* filter, const FibEntry* entry, FaceID nh) {
24  for (uint8_t i = 0; i < entry->nNexthops; ++i) {
25  if (entry->nexthops[i] == nh) {
26  rte_bit_set(filter, i);
27  break;
28  }
29  }
30  static_assert(__builtin_types_compatible_p(typeof(*filter), uint32_t), "");
31  return entry->nNexthops - rte_popcount32(*filter);
32 }
33 
34 #endif // NDNDPDK_FIB_NEXTHOP_FILTER_H
uint16_t FaceID
Numeric face identifier.
Definition: faceid.h:13
@ FibMaxNexthops
Definition: enum.h:8
uint32_t FibNexthopFilter
A filter over FIB nexthops.
Definition: nexthop-filter.h:13
A FIB entry.
Definition: entry.h:27
uint8_t nNexthops
number of nexthops
Definition: entry.h:50
FaceID nexthops[FibMaxNexthops]
Definition: entry.h:61