31 #ifndef __DEV_NET_PKTFIFO_HH__ 32 #define __DEV_NET_PKTFIFO_HH__ 57 : packet(s.packet), number(s.number), slack(s.slack), priv(s.priv)
62 : packet(p), number(n), slack(0), priv(-1)
95 : _counter(0), _maxsize(max), _size(0), _reserved(0) {}
98 unsigned packets()
const {
return fifo.size(); }
99 unsigned maxsize()
const {
return _maxsize; }
100 unsigned size()
const {
return _size; }
102 unsigned avail()
const {
return _maxsize - _size - _reserved; }
103 bool empty()
const {
return size() <= 0; }
104 bool full()
const {
return avail() <= 0; }
109 assert(avail() >=
len);
114 iterator
begin() {
return fifo.begin(); }
115 iterator
end() {
return fifo.end(); }
117 const_iterator
begin()
const {
return fifo.begin(); }
118 const_iterator
end()
const {
return fifo.end(); }
125 assert(_reserved <= ptr->
length);
126 if (avail() < ptr->length - _reserved)
129 _size += ptr->length;
133 entry.
number = _counter++;
134 fifo.push_back(entry);
144 iterator entry = fifo.begin();
145 _size -= entry->packet->length;
146 _size -= entry->slack;
147 entry->packet = NULL;
153 for (iterator
i = begin();
i != end(); ++
i)
160 void remove(iterator
i)
162 if (
i != fifo.begin()) {
165 assert(prev != fifo.end());
166 prev->slack +=
i->packet->length;
167 prev->slack +=
i->slack;
169 _size -=
i->packet->length;
177 bool copyout(
void *dest,
unsigned offset,
unsigned len);
183 return i->number - fifo.begin()->number;
188 auto end = fifo.end();
191 return (--end)->number - i->number;
197 for (
auto i = begin();
i != end(); ++
i)
198 total +=
i->packet->length +
i->slack;
201 panic(
"total (%d) is not == to size (%d)\n", total, _size);
212 #endif // __DEV_NET_PKTFIFO_HH__ #define panic(...)
This implements a cprintf based panic() function.
int countPacketsBefore(const_iterator i) const
void unserialize(const std::string &base, CheckpointIn &cp)
fifo_list::const_iterator const_iterator
std::list< PacketFifoEntry > fifo
std::list< PacketFifoEntry > fifo_list
std::shared_ptr< EthPacketData > EthPacketPtr
unsigned reserve(unsigned len=0)
PacketFifoEntry(const PacketFifoEntry &s)
PacketFifoEntry(EthPacketPtr p, uint64_t n)
const FlagsType total
Print the total.
std::ostream CheckpointOut
fifo_list::iterator iterator
int countPacketsAfter(const_iterator i) const
const_iterator end() const
void serialize(const std::string &base, CheckpointOut &cp) const
unsigned reserved() const
bool push(EthPacketPtr ptr)
const_iterator begin() const