summaryrefslogtreecommitdiffstats
path: root/src/pal
diff options
context:
space:
mode:
authorIdo Barnea <ibarnea@cisco.com>2016-05-11 10:47:16 +0300
committerIdo Barnea <ibarnea@cisco.com>2016-05-18 19:23:23 +0300
commit03d70c4218be1932e4d69dc52bf24106f85dcafb (patch)
tree86402d59d7465cb6e98ee40a0a1ff82be7ff1485 /src/pal
parentcb13e66205717a8fcf69185ba350adab3438ffa0 (diff)
unit tests + simulator work
Diffstat (limited to 'src/pal')
-rwxr-xr-xsrc/pal/linux/mbuf.cpp228
-rwxr-xr-xsrc/pal/linux/mbuf.h2
-rw-r--r--src/pal/linux_dpdk/dpdk22/rte_config.h1
3 files changed, 120 insertions, 111 deletions
diff --git a/src/pal/linux/mbuf.cpp b/src/pal/linux/mbuf.cpp
index d6fdf461..846c776c 100755
--- a/src/pal/linux/mbuf.cpp
+++ b/src/pal/linux/mbuf.cpp
@@ -19,10 +19,16 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
+/*
+ * This file is compiled only for simulation.
+ * Since in simulation, we do not use DPDK libraries, all mbuf functions needed for simulation are duplictated here.
+ * with some small changes.
+ */
+
#include "mbuf.h"
#include <stdio.h>
#include <assert.h>
-#include <stdlib.h>
+#include <stdlib.h>
#include <ctype.h>
#include "sanb_atomic.h"
@@ -47,7 +53,7 @@ void utl_rte_pktmbuf_check(struct rte_mbuf *m){
}
rte_mempool_t * utl_rte_mempool_create_non_pkt(const char *name,
- unsigned n,
+ unsigned n,
unsigned elt_size,
unsigned cache_size,
uint32_t _id ,
@@ -62,7 +68,7 @@ rte_mempool_t * utl_rte_mempool_create_non_pkt(const char *name,
}
rte_mempool_t * utl_rte_mempool_create(const char *name,
- unsigned n,
+ unsigned n,
unsigned elt_size,
unsigned cache_size,
uint32_t _id,
@@ -90,7 +96,7 @@ uint16_t rte_mbuf_refcnt_update(rte_mbuf_t *m, int16_t value)
{
utl_rte_pktmbuf_check(m);
uint32_t a=sanb_atomic_add_return_32_old(&m->refcnt_reserved, value);
- return (a);
+ return (a);
}
@@ -99,10 +105,10 @@ uint16_t rte_mbuf_refcnt_update(rte_mbuf_t *m, int16_t value)
void rte_pktmbuf_reset(struct rte_mbuf *m)
{
utl_rte_pktmbuf_check(m);
- m->next = NULL;
- m->pkt_len = 0;
- m->nb_segs = 1;
- m->in_port = 0xff;
+ m->next = NULL;
+ m->pkt_len = 0;
+ m->nb_segs = 1;
+ m->in_port = 0xff;
m->refcnt_reserved=1;
#if RTE_PKTMBUF_HEADROOM > 0
@@ -112,7 +118,7 @@ void rte_pktmbuf_reset(struct rte_mbuf *m)
m->data_off = RTE_PKTMBUF_HEADROOM ;
#endif
- m->data_len = 0;
+ m->data_len = 0;
}
@@ -151,9 +157,9 @@ void rte_pktmbuf_free_seg(rte_mbuf_t *m){
if ( md != m ) {
rte_pktmbuf_detach(m);
if (rte_mbuf_refcnt_update(md, -1) == 0) {
- free(md);
- }
-
+ free(md);
+ }
+
}
free(m);
@@ -164,112 +170,116 @@ void rte_pktmbuf_free_seg(rte_mbuf_t *m){
void rte_pktmbuf_free(rte_mbuf_t *m){
- rte_mbuf_t *m_next;
+ rte_mbuf_t *m_next;
utl_rte_pktmbuf_check(m);
- while (m != NULL) {
- m_next = m->next;
- rte_pktmbuf_free_seg(m);
- m = m_next;
- }
+ while (m != NULL) {
+ m_next = m->next;
+ rte_pktmbuf_free_seg(m);
+ m = m_next;
+ }
}
static inline struct rte_mbuf *rte_pktmbuf_lastseg(struct rte_mbuf *m)
{
- struct rte_mbuf *m2 = (struct rte_mbuf *)m;
+ struct rte_mbuf *m2 = (struct rte_mbuf *)m;
utl_rte_pktmbuf_check(m);
- while (m2->next != NULL)
- m2 = m2->next;
- return m2;
+ while (m2->next != NULL)
+ m2 = m2->next;
+ return m2;
}
static inline uint16_t rte_pktmbuf_headroom(const struct rte_mbuf *m)
{
- return m->data_off;
+ return m->data_off;
}
static inline uint16_t rte_pktmbuf_tailroom(const struct rte_mbuf *m)
{
- return (uint16_t)(m->buf_len - rte_pktmbuf_headroom(m) -
- m->data_len);
+ return (uint16_t)(m->buf_len - rte_pktmbuf_headroom(m) -
+ m->data_len);
}
char *rte_pktmbuf_append(struct rte_mbuf *m, uint16_t len)
{
- void *tail;
- struct rte_mbuf *m_last;
- utl_rte_pktmbuf_check(m);
+ void *tail;
+ struct rte_mbuf *m_last;
+ utl_rte_pktmbuf_check(m);
- m_last = rte_pktmbuf_lastseg(m);
- if (len > rte_pktmbuf_tailroom(m_last))
- return NULL;
+ m_last = rte_pktmbuf_lastseg(m);
+ if (len > rte_pktmbuf_tailroom(m_last))
+ return NULL;
- tail = (char*) m_last->buf_addr + 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;
+ tail = (char*) m_last->buf_addr + 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;
}
char *rte_pktmbuf_adj(struct rte_mbuf *m, uint16_t len)
{
- utl_rte_pktmbuf_check(m);
+ utl_rte_pktmbuf_check(m);
- if (len > m->data_len)
- return NULL;
+ if (len > m->data_len)
+ return NULL;
- m->data_len = (uint16_t)(m->data_len - len);
- m->data_off += len;
- m->pkt_len = (m->pkt_len - len);
- return (char *)m->buf_addr + m->data_off;
+ m->data_len = (uint16_t)(m->data_len - len);
+ m->data_off += len;
+ m->pkt_len = (m->pkt_len - len);
+ return (char *)m->buf_addr + m->data_off;
}
int rte_pktmbuf_trim(struct rte_mbuf *m, uint16_t len)
{
- struct rte_mbuf *m_last;
+ struct rte_mbuf *m_last;
utl_rte_pktmbuf_check(m);
- m_last = rte_pktmbuf_lastseg(m);
- if (len > m_last->data_len)
- return -1;
+ m_last = rte_pktmbuf_lastseg(m);
+ if (len > m_last->data_len)
+ return -1;
- m_last->data_len = (uint16_t)(m_last->data_len - len);
- m->pkt_len = (m->pkt_len - len);
- return 0;
+ m_last->data_len = (uint16_t)(m_last->data_len - len);
+ m->pkt_len = (m->pkt_len - len);
+ return 0;
}
+int rte_pktmbuf_is_contiguous(const struct rte_mbuf *m)
+{
+ return (m->nb_segs == 1);
+}
static void
rte_pktmbuf_hexdump(const void *buf, unsigned int len)
{
- unsigned int i, out, ofs;
- const unsigned char *data = (unsigned char *)buf;
+ unsigned int i, out, ofs;
+ const unsigned char *data = (unsigned char *)buf;
#define LINE_LEN 80
- char line[LINE_LEN];
-
- printf(" dump data at 0x%p, len=%u\n", data, len);
- ofs = 0;
- while (ofs < len) {
- out = snprintf(line, LINE_LEN, " %08X", ofs);
- for (i = 0; ofs+i < len && i < 16; i++)
- out += snprintf(line+out, LINE_LEN - out, " %02X",
- data[ofs+i]&0xff);
- for (; i <= 16; i++)
- out += snprintf(line+out, LINE_LEN - out, " ");
- for (i = 0; ofs < len && i < 16; i++, ofs++) {
- unsigned char c = data[ofs];
- if (!isascii(c) || !isprint(c))
- c = '.';
- out += snprintf(line+out, LINE_LEN - out, "%c", c);
- }
- printf("%s\n", line);
- }
+ char line[LINE_LEN];
+
+ printf(" dump data at 0x%p, len=%u\n", data, len);
+ ofs = 0;
+ while (ofs < len) {
+ out = snprintf(line, LINE_LEN, " %08X", ofs);
+ for (i = 0; ofs+i < len && i < 16; i++)
+ out += snprintf(line+out, LINE_LEN - out, " %02X",
+ data[ofs+i]&0xff);
+ for (; i <= 16; i++)
+ out += snprintf(line+out, LINE_LEN - out, " ");
+ for (i = 0; ofs < len && i < 16; i++, ofs++) {
+ unsigned char c = data[ofs];
+ if (!isascii(c) || !isprint(c))
+ c = '.';
+ out += snprintf(line+out, LINE_LEN - out, "%c", c);
+ }
+ printf("%s\n", line);
+ }
}
@@ -295,30 +305,30 @@ void rte_exit(int exit_code, const char *format, ...){
void
rte_pktmbuf_dump(const struct rte_mbuf *m, unsigned dump_len)
{
- unsigned int len;
- unsigned nb_segs;
-
-
- printf("dump mbuf at 0x%p, phys=0x%p, buf_len=%u\n",
- m, m->buf_addr, (unsigned)m->buf_len);
- printf(" pkt_len=%u, nb_segs=%u, "
- "in_port=%u\n", m->pkt_len,
- (unsigned)m->nb_segs, (unsigned)m->in_port);
- nb_segs = m->nb_segs;
-
- while (m && nb_segs != 0) {
-
- printf(" segment at 0x%p, data=0x%p, data_len=%u\n",
- m, m->buf_addr, (unsigned)m->data_len);
- len = dump_len;
- if (len > m->data_len)
- len = m->data_len;
- if (len != 0)
- rte_pktmbuf_hexdump(m->buf_addr, len);
- dump_len -= len;
- m = m->next;
- nb_segs --;
- }
+ unsigned int len;
+ unsigned nb_segs;
+
+
+ printf("dump mbuf at 0x%p, phys=0x%p, buf_len=%u\n",
+ m, m->buf_addr, (unsigned)m->buf_len);
+ printf(" pkt_len=%u, nb_segs=%u, "
+ "in_port=%u\n", m->pkt_len,
+ (unsigned)m->nb_segs, (unsigned)m->in_port);
+ nb_segs = m->nb_segs;
+
+ while (m && nb_segs != 0) {
+
+ printf(" segment at 0x%p, data=0x%p, data_len=%u\n",
+ m, m->buf_addr, (unsigned)m->data_len);
+ len = dump_len;
+ if (len > m->data_len)
+ len = m->data_len;
+ if (len != 0)
+ rte_pktmbuf_hexdump(m->buf_addr, len);
+ dump_len -= len;
+ m = m->next;
+ nb_segs --;
+ }
}
@@ -337,25 +347,25 @@ rte_mbuf_t * utl_rte_pktmbuf_add_after2(rte_mbuf_t *m1,rte_mbuf_t *m2){
void rte_pktmbuf_attach(struct rte_mbuf *mi, struct rte_mbuf *md)
{
- rte_mbuf_refcnt_update(md, 1);
- mi->buf_addr = md->buf_addr;
- mi->buf_len = md->buf_len;
- mi->data_off = md->data_off;
+ rte_mbuf_refcnt_update(md, 1);
+ mi->buf_addr = md->buf_addr;
+ mi->buf_len = md->buf_len;
+ mi->data_off = md->data_off;
- mi->next = NULL;
+ mi->next = NULL;
mi->data_len = md->data_len;
- mi->pkt_len = mi->data_len;
- mi->nb_segs = 1;
+ mi->pkt_len = mi->data_len;
+ mi->nb_segs = 1;
}
void rte_pktmbuf_detach(struct rte_mbuf *m)
{
- const struct rte_mempool *mp = m->pool;
- void *buf = RTE_MBUF_TO_BADDR(m);
- uint32_t buf_len = mp->elt_size - sizeof(*m);
+ const struct rte_mempool *mp = m->pool;
+ void *buf = RTE_MBUF_TO_BADDR(m);
+ uint32_t buf_len = mp->elt_size - sizeof(*m);
- m->buf_addr = buf;
- m->buf_len = (uint16_t)buf_len;
+ m->buf_addr = buf;
+ m->buf_len = (uint16_t)buf_len;
#if RTE_PKTMBUF_HEADROOM > 0
m->data_off = (RTE_PKTMBUF_HEADROOM <= m->buf_len) ?
@@ -365,7 +375,7 @@ void rte_pktmbuf_detach(struct rte_mbuf *m)
#endif
- m->data_len = 0;
+ m->data_len = 0;
}
@@ -403,7 +413,7 @@ uint64_t rte_rand(void){
void test_pkt_mbuf(){
rte_mempool_t * mp1=utl_rte_mempool_create("big-const",
- CONST_NB_MBUF,
+ CONST_NB_MBUF,
CONST_MBUF_SIZE,
32);
rte_mbuf_t * m1 = rte_pktmbuf_alloc(mp1);
@@ -411,7 +421,7 @@ void test_pkt_mbuf(){
char *p=rte_pktmbuf_append(m1, 10);
int i;
-
+
for (i=0; i<10;i++) {
p[i]=i;
}
diff --git a/src/pal/linux/mbuf.h b/src/pal/linux/mbuf.h
index 50f00b94..174c757d 100755
--- a/src/pal/linux/mbuf.h
+++ b/src/pal/linux/mbuf.h
@@ -97,7 +97,7 @@ char *rte_pktmbuf_append(rte_mbuf_t *m, uint16_t len);
char *rte_pktmbuf_adj(struct rte_mbuf *m, uint16_t len);
int rte_pktmbuf_trim(rte_mbuf_t *m, uint16_t len);
-
+int rte_pktmbuf_is_contiguous(const struct rte_mbuf *m);
void rte_pktmbuf_attach(struct rte_mbuf *mi, struct rte_mbuf *md);
diff --git a/src/pal/linux_dpdk/dpdk22/rte_config.h b/src/pal/linux_dpdk/dpdk22/rte_config.h
index e1f5cb23..8670743b 100644
--- a/src/pal/linux_dpdk/dpdk22/rte_config.h
+++ b/src/pal/linux_dpdk/dpdk22/rte_config.h
@@ -58,7 +58,6 @@
#undef RTE_ETHDEV_QUEUE_STAT_CNTRS
#define RTE_ETHDEV_QUEUE_STAT_CNTRS 16
#undef RTE_ETHDEV_RXTX_CALLBACKS
-#define RTE_ETHDEV_RXTX_CALLBACKS 1
#undef RTE_NIC_BYPASS
#undef RTE_LIBRTE_EM_PMD
#define RTE_LIBRTE_EM_PMD 1