aegis-dos-protection/test/libdpdk_dummy/include/rte_mbuf.h
2021-10-23 16:53:40 +02:00

120 lines
3.0 KiB
C

#pragma once
#include <cstddef>
#include <rte_branch_prediction.h>
#include <rte_common.h>
#include <rte_config.h>
#include <rte_mbuf_core.h>
#include <rte_mempool.h>
#include <stdint.h>
#define __rte_mbuf_sanity_check(m, is_h) \
do { \
} while (0)
static inline uint16_t rte_pktmbuf_headroom(const struct rte_mbuf* m) {
__rte_mbuf_sanity_check(m, 0);
return m->data_off;
}
static inline void rte_pktmbuf_reset_headroom(struct rte_mbuf* m) {
m->data_off = (uint16_t)RTE_PKTMBUF_HEADROOM;
//(uint16_t)RTE_MIN((uint16_t)RTE_PKTMBUF_HEADROOM, (uint16_t)m->buf_len);
}
static inline void rte_pktmbuf_reset(struct rte_mbuf* m) {
m->next = NULL;
m->pkt_len = 0;
m->tx_offload = 0;
m->vlan_tci = 0;
m->vlan_tci_outer = 0;
m->nb_segs = 1;
m->port = UINT16_MAX;
m->ol_flags &= (1ULL << 61);
m->packet_type = 0;
rte_pktmbuf_reset_headroom(m);
m->data_len = 0;
__rte_mbuf_sanity_check(m, 1);
}
static struct rte_mbuf* rte_pktmbuf_alloc(struct rte_mempool* mp) {
struct rte_mbuf* m = NULL;
m = new struct rte_mbuf;
if (m != NULL) {
m->refcnt = 1;
m->nb_segs = 1;
m->next = NULL;
rte_pktmbuf_reset(m);
m->buf_addr = new uint8_t[2000];
m->buf_len = 0;
}
return m;
}
static inline void rte_pktmbuf_free(struct rte_mbuf* m) {
struct rte_mbuf* m_next;
if (m != NULL)
__rte_mbuf_sanity_check(m, 1);
delete[] m->buf_addr;
m->buf_addr = nullptr;
while (m != NULL) {
m_next = m->next;
delete m;
m = m_next;
}
}
static inline char* rte_pktmbuf_prepend(struct rte_mbuf* m, uint16_t len) {
__rte_mbuf_sanity_check(m, 1);
if (unlikely(len > rte_pktmbuf_headroom(m))) {
return NULL;
}
/* NB: elaborating the subtraction like this instead of using
* -= allows us to ensure the result type is uint16_t
* avoiding compiler warnings on gcc 8.1 at least */
m->data_off = static_cast<uint16_t>(m->data_off - len);
m->data_len = static_cast<uint16_t>(m->data_len + len);
m->pkt_len = (m->pkt_len + len);
return (char*)m->buf_addr + m->data_off;
}
static inline uint16_t rte_pktmbuf_tailroom(const struct rte_mbuf* m) {
__rte_mbuf_sanity_check(m, 0);
return (uint16_t)(m->buf_len - rte_pktmbuf_headroom(m) - m->data_len);
}
static inline struct rte_mbuf* rte_pktmbuf_lastseg(struct rte_mbuf* m) {
__rte_mbuf_sanity_check(m, 1);
while (m->next != NULL)
m = m->next;
return m;
}
static inline char* rte_pktmbuf_append(struct rte_mbuf* m, uint16_t len) {
void* tail;
struct rte_mbuf* m_last;
__rte_mbuf_sanity_check(m, 1);
m_last = rte_pktmbuf_lastseg(m);
if (unlikely(len > rte_pktmbuf_tailroom(m_last)))
return NULL;
tail = (char*)m_last->buf_addr + m_last->data_off + m_last->data_len;
m_last->data_len = (uint16_t)(m_last->data_len + len);
m->pkt_len = (m->pkt_len + len);
return (char*)tail;
}