#define DUMP_SIZE(t) printf("sizeof(" #t ") = %u\n", (unsigned)sizeof(t));
DUMP_SIZE(struct rte_mbuf);
DUMP_SIZE(struct rte_pktmbuf);
- DUMP_SIZE(struct rte_ctrlmbuf);
DUMP_SIZE(struct rte_mempool);
DUMP_SIZE(struct rte_ring);
#undef DUMP_SIZE
struct rte_mbuf *m;
m = __rte_mbuf_raw_alloc(mp);
- __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+ __rte_mbuf_sanity_check_raw(m, 0);
return (m);
}
mb_ctor_arg = (struct mbuf_ctor_arg *) opaque_arg;
mb = (struct rte_mbuf *) raw_mbuf;
- mb->type = RTE_MBUF_PKT;
mb->pool = mp;
mb->buf_addr = (void *) ((char *)mb + mb_ctor_arg->seg_buf_offset);
mb->buf_physaddr = (uint64_t) (rte_mempool_virt2phy(mp, mb) +
mb_ctor_arg->seg_buf_offset);
mb->buf_len = mb_ctor_arg->seg_buf_size;
- mb->type = RTE_MBUF_PKT;
mb->ol_flags = 0;
mb->pkt.data = (char *) mb->buf_addr + RTE_PKTMBUF_HEADROOM;
mb->pkt.nb_segs = 1;
struct rte_mbuf *m;
m = __rte_mbuf_raw_alloc(mp);
- __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+ __rte_mbuf_sanity_check_raw(m, 0);
return (m);
}
#define DUMP_SIZE(t) printf("sizeof(" #t ") = %u\n", (unsigned)sizeof(t));
DUMP_SIZE(struct rte_mbuf);
DUMP_SIZE(struct rte_pktmbuf);
- DUMP_SIZE(struct rte_ctrlmbuf);
DUMP_SIZE(struct rte_mempool);
DUMP_SIZE(struct rte_ring);
#undef DUMP_SIZE
#define MAKE_STRING(x) # x
static struct rte_mempool *pktmbuf_pool = NULL;
-static struct rte_mempool *ctrlmbuf_pool = NULL;
#if defined RTE_MBUF_REFCNT && defined RTE_MBUF_REFCNT_ATOMIC
GOTO_FAIL("Buffer should be continuous");
memset(hdr, 0x55, MBUF_TEST_HDR2_LEN);
- rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
- rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 0);
+ rte_mbuf_sanity_check(m, 1);
+ rte_mbuf_sanity_check(m, 0);
rte_pktmbuf_dump(stdout, m, 0);
/* this prepend should fail */
return -1;
}
-/*
- * test control mbuf
- */
-static int
-test_one_ctrlmbuf(void)
-{
- struct rte_mbuf *m = NULL;
- char message[] = "This is a message carried by a ctrlmbuf";
-
- printf("Test ctrlmbuf API\n");
-
- /* alloc a mbuf */
-
- m = rte_ctrlmbuf_alloc(ctrlmbuf_pool);
- if (m == NULL)
- GOTO_FAIL("Cannot allocate mbuf");
- if (rte_ctrlmbuf_len(m) != 0)
- GOTO_FAIL("Bad length");
-
- /* set data */
- rte_ctrlmbuf_data(m) = &message;
- rte_ctrlmbuf_len(m) = sizeof(message);
-
- /* read data */
- if (rte_ctrlmbuf_data(m) != message)
- GOTO_FAIL("Invalid data pointer");
- if (rte_ctrlmbuf_len(m) != sizeof(message))
- GOTO_FAIL("Invalid len");
-
- rte_mbuf_sanity_check(m, RTE_MBUF_CTRL, 0);
-
- /* free mbuf */
- rte_ctrlmbuf_free(m);
- m = NULL;
- return 0;
-
-fail:
- if (m)
- rte_ctrlmbuf_free(m);
- return -1;
-}
-
static int
testclone_testupdate_testdetach(void)
{
pid = fork();
if (pid == 0) {
- rte_mbuf_sanity_check(buf, RTE_MBUF_PKT, 1); /* should panic */
+ rte_mbuf_sanity_check(buf, 1); /* should panic */
exit(0); /* return normally if it doesn't panic */
} else if (pid < 0){
printf("Fork Failed\n");
return -1;
}
- badbuf = *buf;
- badbuf.type = (uint8_t)-1;
- if (verify_mbuf_check_panics(&badbuf)) {
- printf("Error with bad-type mbuf test\n");
- return -1;
- }
-
badbuf = *buf;
badbuf.pool = NULL;
if (verify_mbuf_check_panics(&badbuf)) {
return -1;
}
- /* create ctrlmbuf pool if it does not exist */
- if (ctrlmbuf_pool == NULL) {
- ctrlmbuf_pool =
- rte_mempool_create("test_ctrlmbuf_pool", NB_MBUF,
- sizeof(struct rte_mbuf), 32, 0,
- NULL, NULL,
- rte_ctrlmbuf_init, NULL,
- SOCKET_ID_ANY, 0);
- }
-
- /* test control mbuf */
- if (test_one_ctrlmbuf() < 0) {
- printf("test_one_ctrlmbuf() failed\n");
- return -1;
- }
-
/* test free pktmbuf segment one by one */
if (test_pktmbuf_free_segment() < 0) {
printf("test_pktmbuf_free_segment() failed.\n");
rte_panic("Unable to allocate new message\n");
/* Fill request message */
- req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
req->type = APP_MSG_REQ_RX_PORT_ENABLE;
req->rx_up.port = params->port;
do {
status = rte_ring_sc_dequeue(ring_resp, &msg);
} while (status != 0);
- resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
/* Check response */
if (resp->result != 0)
printf("Request LINK_UP failed (%u)\n", resp->result);
rte_panic("Unable to allocate new message\n");
/* Fill request message */
- req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
req->type = APP_MSG_REQ_RX_PORT_DISABLE;
req->rx_down.port = params->port;
do {
status = rte_ring_sc_dequeue(ring_resp, &msg);
} while (status != 0);
- resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
/* Check response */
if (resp->result != 0)
rte_panic("Unable to allocate new message\n");
/* Fill request message */
- req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
req->type = APP_MSG_REQ_ARP_ADD;
req->arp_add.out_iface = rule.arp.key.out_iface;
req->arp_add.nh_ip = rule.arp.key.nh_ip;
do {
status = rte_ring_sc_dequeue(ring_resp, &msg);
} while (status != 0);
- resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
/* Check response */
if (resp->result != 0)
rte_panic("Unable to allocate new message\n");
/* Fill request message */
- req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
req->type = APP_MSG_REQ_ARP_DEL;
req->arp_del.out_iface = rule.arp.key.out_iface;
req->arp_del.nh_ip = rule.arp.key.nh_ip;
do {
status = rte_ring_sc_dequeue(ring_resp, &msg);
} while (status != 0);
- resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
/* Check response */
if (resp->result != 0)
rte_panic("Unable to allocate new message\n");
/* Fill request message */
- req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
req->type = APP_MSG_REQ_RT_ADD;
req->routing_add.ip = rule.routing.key.ip;
req->routing_add.depth = rule.routing.key.depth;
do {
status = rte_ring_sc_dequeue(ring_resp, &msg);
} while (status != 0);
- resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
/* Check response */
if (resp->result != 0)
rte_panic("Unable to allocate new message\n");
/* Fill request message */
- req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
req->type = APP_MSG_REQ_RT_DEL;
req->routing_del.ip = rule.routing.key.ip;
req->routing_del.depth = rule.routing.key.depth;
do {
status = rte_ring_sc_dequeue(ring_resp, &msg);
} while (status != 0);
- resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
/* Check response */
if (resp->result != 0)
rte_panic("Unable to allocate new message\n");
/* Fill request message */
- req = (struct app_msg_req *) msg->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data(msg);
req->type = APP_MSG_REQ_FW_ADD;
req->firewall_add.add_params.priority = rule.firewall.priority;
req->firewall_add.add_params.field_value[1].value.u32 =
do {
status = rte_ring_sc_dequeue(ring_resp, (void **) &msg);
} while (status != 0);
- resp = (struct app_msg_resp *) msg->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data(msg);
/* Check response */
if (resp->result != 0)
rte_panic("Unable to allocate new message\n");
/* Fill request message */
- req = (struct app_msg_req *) msg->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data(msg);
memset(&req->firewall_del, 0, sizeof(req->firewall_del));
req->type = APP_MSG_REQ_FW_DEL;
req->firewall_del.delete_params.field_value[1].value.u32 =
do {
status = rte_ring_sc_dequeue(ring_resp, (void **) &msg);
} while (status != 0);
- resp = (struct app_msg_resp *) msg->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data(msg);
/* Check response */
if (resp->result != 0)
rte_panic("Unable to allocate new message\n");
/* Fill request message */
- req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
memset(req, 0, sizeof(struct app_msg_req));
req->type = APP_MSG_REQ_FC_ADD_ALL;
do {
status = rte_ring_sc_dequeue(ring_resp, &msg);
} while (status != 0);
- resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
/* Check response */
if (resp->result != 0)
rte_panic("Unable to allocate new message\n");
/* Fill request message */
- req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
memset(req, 0, sizeof(struct app_msg_req));
req->type = APP_MSG_REQ_FC_ADD;
do {
status = rte_ring_sc_dequeue(ring_resp, &msg);
} while (status != 0);
- resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
/* Check response */
if (resp->result != 0)
rte_panic("Unable to allocate new message\n");
/* Fill request message */
- req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
memset(req, 0, sizeof(struct app_msg_req));
req->type = APP_MSG_REQ_FC_DEL;
do {
status = rte_ring_sc_dequeue(ring_resp, &msg);
} while (status != 0);
- resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
/* Check response */
if (resp->result != 0)
rte_panic("Unable to allocate new message\n");
req = (struct app_msg_req *)
- ((struct rte_mbuf *)msg)->ctrl.data;
+ rte_ctrlmbuf_data((struct rte_mbuf *)msg);
req->type = APP_MSG_REQ_PING;
/* Send request */
table_id = params->table_id;
/* Handle request */
- req = (struct app_msg_req *) msg->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data(msg);
switch (req->type) {
case APP_MSG_REQ_PING:
{
}
/* Fill in response message */
- resp = (struct app_msg_resp *) msg->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data(msg);
resp->result = result;
/* Send response */
table_id = params->table_id;
/* Handle request */
- req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
switch (req->type) {
case APP_MSG_REQ_PING:
{
}
/* Fill in response message */
- resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
resp->result = result;
/* Send response */
arp_table_id = params->arp_table_id;
/* Handle request */
- req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
switch (req->type) {
case APP_MSG_REQ_PING:
{
}
/* Fill in response message */
- resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
resp->result = result;
/* Send response */
port_in_id = params->port_in_id;
/* Handle request */
- req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+ req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
switch (req->type) {
case APP_MSG_REQ_PING:
{
}
/* Fill in response message */
- resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+ resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
resp->result = result;
/* Send response */
hdr->ol_flags = pkt->ol_flags;
- __rte_mbuf_sanity_check(hdr, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(hdr, 1);
return (hdr);
}
*/
void
rte_ctrlmbuf_init(struct rte_mempool *mp,
- __attribute__((unused)) void *opaque_arg,
- void *_m,
- __attribute__((unused)) unsigned i)
+ __attribute__((unused)) void *opaque_arg,
+ void *_m,
+ __attribute__((unused)) unsigned i)
{
- struct rte_mbuf *m = _m;
-
- memset(m, 0, mp->elt_size);
-
- /* start of buffer is just after mbuf structure */
- m->buf_addr = (char *)m + sizeof(struct rte_mbuf);
- m->buf_physaddr = rte_mempool_virt2phy(mp, m) +
- sizeof(struct rte_mbuf);
- m->buf_len = (uint16_t) (mp->elt_size - sizeof(struct rte_mbuf));
-
- /* init some constant fields */
- m->type = RTE_MBUF_CTRL;
- m->ctrl.data = (char *)m->buf_addr;
- m->pool = (struct rte_mempool *)mp;
+ rte_pktmbuf_init(mp, opaque_arg, _m, i);
}
/*
m->pkt.data = (char*) m->buf_addr + RTE_MIN(RTE_PKTMBUF_HEADROOM, m->buf_len);
/* init some constant fields */
- m->type = RTE_MBUF_PKT;
m->pool = mp;
m->pkt.nb_segs = 1;
m->pkt.in_port = 0xff;
/* do some sanity checks on a mbuf: panic if it fails */
void
-rte_mbuf_sanity_check(const struct rte_mbuf *m, enum rte_mbuf_type t,
- int is_header)
+rte_mbuf_sanity_check(const struct rte_mbuf *m, int is_header)
{
const struct rte_mbuf *m_seg;
unsigned nb_segs;
if (m == NULL)
rte_panic("mbuf is NULL\n");
- if (m->type != (uint8_t)t)
- rte_panic("bad mbuf type\n");
/* generic checks */
if (m->pool == NULL)
rte_panic("bad ref cnt\n");
#endif
- /* nothing to check for ctrl messages */
- if (m->type == RTE_MBUF_CTRL)
+ /* nothing to check for sub-segments */
+ if (is_header == 0)
return;
- /* check pkt consistency */
- else if (m->type == RTE_MBUF_PKT) {
-
- /* nothing to check for sub-segments */
- if (is_header == 0)
- return;
-
- nb_segs = m->pkt.nb_segs;
- m_seg = m;
- while (m_seg && nb_segs != 0) {
- m_seg = m_seg->pkt.next;
- nb_segs --;
- }
- if (nb_segs != 0)
- rte_panic("bad nb_segs\n");
- return;
+ nb_segs = m->pkt.nb_segs;
+ m_seg = m;
+ while (m_seg && nb_segs != 0) {
+ m_seg = m_seg->pkt.next;
+ nb_segs--;
}
-
- rte_panic("unknown mbuf type\n");
+ if (nb_segs != 0)
+ rte_panic("bad nb_segs\n");
}
/* dump a mbuf on console */
unsigned int len;
unsigned nb_segs;
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(m, 1);
fprintf(f, "dump mbuf at 0x%p, phys=%"PRIx64", buf_len=%u\n",
m, (uint64_t)m->buf_physaddr, (unsigned)m->buf_len);
nb_segs = m->pkt.nb_segs;
while (m && nb_segs != 0) {
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 0);
+ __rte_mbuf_sanity_check(m, 0);
fprintf(f, " segment at 0x%p, data=0x%p, data_len=%u\n",
m, m->pkt.data, (unsigned)m->pkt.data_len);
* buffers. The message buffers are stored in a mempool, using the
* RTE mempool library.
*
- * This library provide an API to allocate/free mbufs, manipulate
- * control message buffer (ctrlmbuf), which are generic message
- * buffers, and packet buffers (pktmbuf), which are used to carry
- * network packets.
+ * This library provide an API to allocate/free packet mbufs, which are
+ * used to carry network packets.
*
* To understand the concepts of packet buffers or mbufs, you
* should read "TCP/IP Illustrated, Volume 2: The Implementation,
* Addison-Wesley, 1995, ISBN 0-201-63354-X from Richard Stevens"
* http://www.kohala.com/start/tcpipiv2.html
- *
- * The main modification of this implementation is the use of mbuf for
- * transports other than packets. mbufs can have other types.
*/
#include <stdint.h>
/* deprecated feature, renamed in RTE_MBUF_REFCNT */
#pragma GCC poison RTE_MBUF_SCATTER_GATHER
-/**
- * A control message buffer.
- */
-struct rte_ctrlmbuf {
- void *data; /**< Pointer to data. */
- uint32_t data_len; /**< Length of data. */
-};
-
-
/*
* Packet Offload Features Flags. It also carry packet type information.
* Critical resources. Both rx/tx shared these bits. Be cautious on any change
};
/**
- * This enum indicates the mbuf type.
- */
-enum rte_mbuf_type {
- RTE_MBUF_CTRL, /**< Control mbuf. */
- RTE_MBUF_PKT, /**< Packet mbuf. */
-};
-
-/**
- * The generic rte_mbuf, containing a packet mbuf or a control mbuf.
+ * The generic rte_mbuf, containing a packet mbuf.
*/
struct rte_mbuf {
struct rte_mempool *pool; /**< Pool from which mbuf was allocated. */
#else
uint16_t refcnt_reserved; /**< Do not use this field */
#endif
- uint8_t type; /**< Type of mbuf. */
- uint8_t reserved; /**< Unused field. Required for padding. */
+ uint16_t reserved; /**< Unused field. Required for padding */
uint16_t ol_flags; /**< Offload features. */
- union {
- struct rte_ctrlmbuf ctrl;
- struct rte_pktmbuf pkt;
- };
+ struct rte_pktmbuf pkt;
union {
uint8_t metadata[0];
#ifdef RTE_LIBRTE_MBUF_DEBUG
/** check mbuf type in debug mode */
-#define __rte_mbuf_sanity_check(m, t, is_h) rte_mbuf_sanity_check(m, t, is_h)
+#define __rte_mbuf_sanity_check(m, is_h) rte_mbuf_sanity_check(m, is_h)
/** check mbuf type in debug mode if mbuf pointer is not null */
-#define __rte_mbuf_sanity_check_raw(m, t, is_h) do { \
+#define __rte_mbuf_sanity_check_raw(m, is_h) do { \
if ((m) != NULL) \
- rte_mbuf_sanity_check(m, t, is_h); \
+ rte_mbuf_sanity_check(m, is_h); \
} while (0)
/** MBUF asserts in debug mode */
#else /* RTE_LIBRTE_MBUF_DEBUG */
/** check mbuf type in debug mode */
-#define __rte_mbuf_sanity_check(m, t, is_h) do { } while(0)
+#define __rte_mbuf_sanity_check(m, is_h) do { } while (0)
/** check mbuf type in debug mode if mbuf pointer is not null */
-#define __rte_mbuf_sanity_check_raw(m, t, is_h) do { } while(0)
+#define __rte_mbuf_sanity_check_raw(m, is_h) do { } while (0)
/** MBUF asserts in debug mode */
-#define RTE_MBUF_ASSERT(exp) do { } while(0)
+#define RTE_MBUF_ASSERT(exp) do { } while (0)
#endif /* RTE_LIBRTE_MBUF_DEBUG */
*
* @param m
* The mbuf to be checked.
- * @param t
- * The expected type of the mbuf.
* @param is_header
* True if the mbuf is a packet header, false if it is a sub-segment
* of a packet (in this case, some fields like nb_segs are not checked)
*/
void
-rte_mbuf_sanity_check(const struct rte_mbuf *m, enum rte_mbuf_type t,
- int is_header);
+rte_mbuf_sanity_check(const struct rte_mbuf *m, int is_header);
/**
* @internal Allocate a new mbuf from mempool *mp*.
* The use of that function is reserved for RTE internal needs.
- * Please use either rte_ctrlmbuf_alloc() or rte_pktmbuf_alloc().
+ * Please use rte_pktmbuf_alloc().
*
* @param mp
* The mempool from which mbuf is allocated.
/**
* @internal Put mbuf back into its original mempool.
* The use of that function is reserved for RTE internal needs.
- * Please use either rte_ctrlmbuf_free() or rte_pktmbuf_free().
+ * Please use rte_pktmbuf_free().
*
* @param m
* The mbuf to be freed.
* The index of the mbuf in the pool table.
*/
void rte_ctrlmbuf_init(struct rte_mempool *mp, void *opaque_arg,
- void *m, unsigned i);
+ void *m, unsigned i);
/**
* Allocate a new mbuf (type is ctrl) from mempool *mp*.
* - The pointer to the new mbuf on success.
* - NULL if allocation failed.
*/
-static inline struct rte_mbuf *rte_ctrlmbuf_alloc(struct rte_mempool *mp)
-{
- struct rte_mbuf *m;
- if ((m = __rte_mbuf_raw_alloc(mp)) != NULL) {
- m->ctrl.data = m->buf_addr;
- m->ctrl.data_len = 0;
- __rte_mbuf_sanity_check(m, RTE_MBUF_CTRL, 0);
- }
- return (m);
-}
+#define rte_ctrlmbuf_alloc(mp) rte_pktmbuf_alloc(mp)
/**
* Free a control mbuf back into its original mempool.
* @param m
* The control mbuf to be freed.
*/
-static inline void rte_ctrlmbuf_free(struct rte_mbuf *m)
-{
- __rte_mbuf_sanity_check(m, RTE_MBUF_CTRL, 0);
-#ifdef RTE_MBUF_REFCNT
- if (rte_mbuf_refcnt_update(m, -1) == 0)
-#endif /* RTE_MBUF_REFCNT */
- __rte_mbuf_raw_free(m);
-}
+#define rte_ctrlmbuf_free(m) rte_pktmbuf_free(m)
/**
* A macro that returns the pointer to the carried data.
* @param m
* The control mbuf.
*/
-#define rte_ctrlmbuf_data(m) ((m)->ctrl.data)
+#define rte_ctrlmbuf_data(m) ((m)->pkt.data)
/**
* A macro that returns the length of the carried data.
* @param m
* The control mbuf.
*/
-#define rte_ctrlmbuf_len(m) ((m)->ctrl.data_len)
+#define rte_ctrlmbuf_len(m) rte_pktmbuf_data_len(m)
/* Operations on pkt mbuf */
/**
* The packet mbuf constructor.
*
- * This function initializes some fields in the mbuf structure that are not
- * modified by the user once created (mbuf type, origin pool, buffer start
+ * This function initializes some fields in the mbuf structure that are
+ * not modified by the user once created (origin pool, buffer start
* address, and so on). This function is given as a callback function to
* rte_mempool_create() at pool creation time.
*
m->pkt.data = (char*) m->buf_addr + buf_ofs;
m->pkt.data_len = 0;
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(m, 1);
}
/**
- * Allocate a new mbuf (type is pkt) from a mempool.
+ * Allocate a new mbuf from a mempool.
*
* This new mbuf contains one segment, which has a length of 0. The pointer
* to data is initialized to have some bytes of headroom in the buffer
mi->pkt.nb_segs = 1;
mi->ol_flags = md->ol_flags;
- __rte_mbuf_sanity_check(mi, RTE_MBUF_PKT, 1);
- __rte_mbuf_sanity_check(md, RTE_MBUF_PKT, 0);
+ __rte_mbuf_sanity_check(mi, 1);
+ __rte_mbuf_sanity_check(md, 0);
}
/**
static inline struct rte_mbuf* __attribute__((always_inline))
__rte_pktmbuf_prefree_seg(struct rte_mbuf *m)
{
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 0);
+ __rte_mbuf_sanity_check(m, 0);
#ifdef RTE_MBUF_REFCNT
if (likely (rte_mbuf_refcnt_read(m) == 1) ||
{
struct rte_mbuf *m_next;
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(m, 1);
while (m != NULL) {
m_next = m->pkt.next;
return (NULL);
}
- __rte_mbuf_sanity_check(mc, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(mc, 1);
return (mc);
}
*/
static inline void rte_pktmbuf_refcnt_update(struct rte_mbuf *m, int16_t v)
{
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(m, 1);
do {
rte_mbuf_refcnt_update(m, v);
*/
static inline uint16_t rte_pktmbuf_headroom(const struct rte_mbuf *m)
{
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(m, 1);
return (uint16_t) ((char*) m->pkt.data - (char*) m->buf_addr);
}
*/
static inline uint16_t rte_pktmbuf_tailroom(const struct rte_mbuf *m)
{
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(m, 1);
return (uint16_t)(m->buf_len - rte_pktmbuf_headroom(m) -
m->pkt.data_len);
}
{
struct rte_mbuf *m2 = (struct rte_mbuf *)m;
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(m, 1);
while (m2->pkt.next != NULL)
m2 = m2->pkt.next;
return m2;
static inline char *rte_pktmbuf_prepend(struct rte_mbuf *m,
uint16_t len)
{
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(m, 1);
if (unlikely(len > rte_pktmbuf_headroom(m)))
return NULL;
void *tail;
struct rte_mbuf *m_last;
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(m, 1);
m_last = rte_pktmbuf_lastseg(m);
if (unlikely(len > rte_pktmbuf_tailroom(m_last)))
*/
static inline char *rte_pktmbuf_adj(struct rte_mbuf *m, uint16_t len)
{
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(m, 1);
if (unlikely(len > m->pkt.data_len))
return NULL;
{
struct rte_mbuf *m_last;
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(m, 1);
m_last = rte_pktmbuf_lastseg(m);
if (unlikely(len > m_last->pkt.data_len))
*/
static inline int rte_pktmbuf_is_contiguous(const struct rte_mbuf *m)
{
- __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+ __rte_mbuf_sanity_check(m, 1);
return !!(m->pkt.nb_segs == 1);
}
struct rte_mbuf *m;
m = __rte_mbuf_raw_alloc(mp);
- __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+ __rte_mbuf_sanity_check_raw(m, 0);
return (m);
}
struct rte_mbuf *m;
m = __rte_mbuf_raw_alloc(mp);
- __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+ __rte_mbuf_sanity_check_raw(m, 0);
return (m);
}
struct rte_mbuf *m;
m = __rte_mbuf_raw_alloc(mp);
- __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+ __rte_mbuf_sanity_check_raw(m, 0);
return m;
}
for (i = 0; i < rxq->rx_free_thresh; i++) {
mb = rxep[i].mbuf;
rte_mbuf_refcnt_set(mb, 1);
- mb->type = RTE_MBUF_PKT;
mb->pkt.next = NULL;
mb->pkt.data = (char *)mb->buf_addr + RTE_PKTMBUF_HEADROOM;
mb->pkt.nb_segs = 1;
}
rte_mbuf_refcnt_set(mbuf, 1);
- mbuf->type = RTE_MBUF_PKT;
mbuf->pkt.next = NULL;
mbuf->pkt.data = (char *)mbuf->buf_addr + RTE_PKTMBUF_HEADROOM;
mbuf->pkt.nb_segs = 1;
struct rte_mbuf *m;
m = __rte_mbuf_raw_alloc(mp);
- __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+ __rte_mbuf_sanity_check_raw(m, 0);
return (m);
}
/* populate the static rte mbuf fields */
mb = rxep[i].mbuf;
rte_mbuf_refcnt_set(mb, 1);
- mb->type = RTE_MBUF_PKT;
mb->pkt.next = NULL;
mb->pkt.data = (char *)mb->buf_addr + RTE_PKTMBUF_HEADROOM;
mb->pkt.nb_segs = 1;
}
rte_mbuf_refcnt_set(mbuf, 1);
- mbuf->type = RTE_MBUF_PKT;
mbuf->pkt.next = NULL;
mbuf->pkt.data = (char *)mbuf->buf_addr + RTE_PKTMBUF_HEADROOM;
mbuf->pkt.nb_segs = 1;
struct rte_mbuf *m;
m = __rte_mbuf_raw_alloc(mp);
- __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+ __rte_mbuf_sanity_check_raw(m, 0);
return m;
}
struct rte_mbuf *m;
m = __rte_mbuf_raw_alloc(mp);
- __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+ __rte_mbuf_sanity_check_raw(m, 0);
return m;
}
struct rte_mbuf *m;
m = __rte_mbuf_raw_alloc(mp);
- __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+ __rte_mbuf_sanity_check_raw(m, 0);
return m;
}