diff options
author | Ido Barnea <ibarnea@cisco.com> | 2016-05-11 10:47:16 +0300 |
---|---|---|
committer | Ido Barnea <ibarnea@cisco.com> | 2016-05-18 19:23:23 +0300 |
commit | 03d70c4218be1932e4d69dc52bf24106f85dcafb (patch) | |
tree | 86402d59d7465cb6e98ee40a0a1ff82be7ff1485 /src/pal | |
parent | cb13e66205717a8fcf69185ba350adab3438ffa0 (diff) |
unit tests + simulator work
Diffstat (limited to 'src/pal')
-rwxr-xr-x | src/pal/linux/mbuf.cpp | 228 | ||||
-rwxr-xr-x | src/pal/linux/mbuf.h | 2 | ||||
-rw-r--r-- | src/pal/linux_dpdk/dpdk22/rte_config.h | 1 |
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 |