MCPcopy Create free account
hub / github.com/NetSys/bess / PlainPacketPool

Method PlainPacketPool

core/packet_pool.cc:166–195  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

164}
165
166PlainPacketPool::PlainPacketPool(size_t capacity, int socket_id)
167 : PacketPool(capacity, socket_id) {
168 pool_->flags |= MEMPOOL_F_NO_PHYS_CONTIG;
169
170 size_t page_shift = __builtin_ffs(getpagesize());
171 size_t element_size =
172 pool_->header_size + pool_->elt_size + pool_->trailer_size;
173 size_t size = rte_mempool_xmem_size(pool_->size, element_size, page_shift,
174 pool_->flags);
175
176 void *addr = mmap(nullptr, size, PROT_READ | PROT_WRITE,
177 MAP_SHARED | MAP_ANONYMOUS, -1, 0);
178 if (addr == MAP_FAILED) {
179 PLOG(FATAL) << "mmap()";
180 }
181
182 // No error check, as we do not provide a guarantee that memory is pinned.
183 int ret = mlock(addr, size);
184 pinned_ = (ret == 0); // may fail as non-root users have mlock limit
185
186 ret = rte_mempool_populate_iova(pool_, static_cast<char *>(addr),
187 RTE_BAD_IOVA, size, DoMunmap, nullptr);
188 if (ret < static_cast<ssize_t>(pool_->size)) {
189 LOG(WARNING) << "rte_mempool_populate_iova() returned " << ret
190 << " (rte_errno=" << rte_errno << ", "
191 << rte_strerror(rte_errno) << ")";
192 }
193
194 PostPopulate();
195}
196
197BessPacketPool::BessPacketPool(size_t capacity, int socket_id)
198 : PacketPool(capacity, socket_id),

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected