summaryrefslogtreecommitdiffstats
path: root/build-data
AgeCommit message (Expand)AuthorFilesLines
2017-07-17Fix unlinking of /dev/shm files.Dave Wallace1-1/+1
2017-05-09Fix remaining 32-bit compile issuesDamjan Marion1-0/+5
2017-05-03Fix vnet unit testsFilip Tehlar1-0/+4
2017-04-25Add support for 32-bit x86 compilation in MakefilesDamjan Marion1-2/+5
2017-04-20Extend ebuild to specify "configure" subdir, enable verify for sample-pluginDamjan Marion1-0/+5
2017-04-19Fix "make dist" to include version number, docouple it from rpm packagingDamjan Marion1-17/+0
2017-03-27Python API: Fixup of debian package after cFFI changes.Ole Troan1-4/+0
2017-03-10Retire vpp_liteDamjan Marion2-55/+0
2017-02-07Multiple platofrm support for dpdk/Makefile, fix optimizationsDamjan Marion3-51/+0
2017-01-31Prep work for Coverity upload processing via JenkinsDave Barach1-0/+6
2017-01-27dpdk: rework cryptodev ipsec build and setupSergio Gonzalez Monroy3-6/+6
2017-01-20Add dpdk development packagingDamjan Marion3-8/+5
2017-01-16Add --without-libssl configure parameterDamjan Marion4-10/+10
2017-01-13vppctl: new bash completion for vppctl commandsPadraig Connolly1-0/+8
2017-01-10Added a sub-case to take into Thunderx platformMarco1-0/+7
2017-01-10Revert "vppctl: bash completion for vppctl commands"Damjan Marion1-8/+0
2017-01-09vppctl: bash completion for vppctl commandsPadraig Connolly1-0/+8
2017-01-03Do not require external vppapigen when not cross-compilingDamjan Marion1-1/+1
2017-01-01Move java,lua api and remaining plugins to src/Damjan Marion6-100/+16
2016-12-28Reorganize source tree to use single autotools instanceDamjan Marion22-332/+23
2016-12-26dpdk: Add support for Mellanox ConnectX-4 devicesDamjan Marion4-0/+12
2016-12-09Add make test code coverage reporting using gcovJuraj Sloboda1-0/+5
2016-12-06Add "vpp-api-install" to plugins_configure_depend in build-data/packages/plug...Andrew Yourtchenko1-1/+2
2016-12-02API: Packaging of JSON files.Ole Troan2-3/+13
2016-11-30Enabling AES-GCM-128 with 16B ICV supportRadu Nicolau1-0/+4
2016-11-30Start spliting vpe.api into logically related piecesDave Barach1-0/+23
2016-11-28dpdk: add ipsec cryptodev supportSergio Gonzalez Monroy4-0/+11
2016-11-12Add clang to 'make verify'Damjan Marion1-0/+5
2016-11-04VPP-498: Prepare vpp RPM packaging for use by downstream distros.Thomas F Herbert1-1/+5
2016-10-29Initial deb packaging of vpp-python-apiEd Warnicke1-0/+4
2016-10-11VPP-474 Revert "FIX sysctl configuration directory"Miroslav Miklus1-1/+1
2016-10-10HONEYCOMB-228 Snat plugin jvpp supportMarek Gradzki1-1/+2
2016-09-27FIX sysctl configuration directoryMiroslav Miklus1-1/+1
2016-08-29VPP-310 Mapping algorithm compute wrong ea-bitsOle Troan1-0/+3
2016-08-25VPP Python language binding - plugin supportOle Troan1-8/+10
2016-08-16Create python package for jvpp generation.Ed Warnicke1-2/+8
2016-08-12VPP: NXP dpaa2 platform porting to dpdk-16.07Sachin1-7/+7
2016-07-21VPP-123: remove japi (the old Java API)Marek Gradzki1-1/+1
2016-07-13Add plugins debian packagingDamjan Marion2-1/+6
2016-07-08Multiple changes in the plugin build infraDamjan Marion1-3/+1
2016-07-06Retire PLATFORM=virlDamjan Marion1-42/+0
2016-07-01Simple ip4 NAT pluginDave Barach1-0/+4
2016-06-28Fix native build on non x86_64 systemsDamjan Marion2-0/+11
2016-06-27Plugins: Clean up the plugin directory so that each plugin has its ownOle Troan5-10/+10
2016-06-22Fix for build failure due to iOAM plugin header file pathShwetha1-0/+5
2016-06-19Improving cross_ldflags arguments for dpaa2 platformSachin1-1/+2
2016-06-18Enhanced RPM build process to make rpm for any given platformSachin1-1/+2
2016-06-17NXP DPAA2 Poll Mode Driver Support in DPDKSachin1-4/+6
2016-06-156rd: Move to pluginOle Troan1-0/+38
2016-06-10NXP dpaa2 platform initial supportSachin Saxena1-0/+63
"k">struct timespec start; struct timespec stop; } vcl_test_stats_t; typedef struct { int fd; uint32_t txbuf_size; char *txbuf; uint32_t rxbuf_size; char *rxbuf; vcl_test_cfg_t cfg; vcl_test_stats_t stats; } vcl_test_session_t; static inline void vcl_test_stats_accumulate (vcl_test_stats_t * accum, vcl_test_stats_t * incr) { accum->rx_xacts += incr->rx_xacts; accum->rx_bytes += incr->rx_bytes; accum->rx_eagain += incr->rx_eagain; accum->rx_incomp += incr->rx_incomp; accum->tx_xacts += incr->tx_xacts; accum->tx_bytes += incr->tx_bytes; accum->tx_eagain += incr->tx_eagain; accum->tx_incomp += incr->tx_incomp; } static inline void vcl_test_cfg_init (vcl_test_cfg_t * cfg) { cfg->magic = VCL_TEST_CFG_CTRL_MAGIC; cfg->test = VCL_TEST_TYPE_NONE; cfg->ctrl_handle = ~0; cfg->num_test_sessions = 1; cfg->verbose = 0; cfg->rxbuf_size = VCL_TEST_CFG_RXBUF_SIZE_DEF; cfg->num_writes = VCL_TEST_CFG_NUM_WRITES_DEF; cfg->txbuf_size = VCL_TEST_CFG_TXBUF_SIZE_DEF; cfg->total_bytes = cfg->num_writes * cfg->txbuf_size; } static inline int vcl_test_cfg_verify (vcl_test_cfg_t * cfg, vcl_test_cfg_t * valid_cfg) { /* Note: txbuf & rxbuf on server are the same buffer, * so txbuf_size is not included in this check. */ return ((cfg->magic == valid_cfg->magic) && (cfg->test == valid_cfg->test) && (cfg->verbose == valid_cfg->verbose) && (cfg->rxbuf_size == valid_cfg->rxbuf_size) && (cfg->num_writes == valid_cfg->num_writes) && (cfg->total_bytes == valid_cfg->total_bytes)); } static inline void vcl_test_buf_alloc (vcl_test_cfg_t * cfg, uint8_t is_rxbuf, uint8_t ** buf, uint32_t * bufsize) { uint32_t alloc_size = is_rxbuf ? cfg->rxbuf_size : cfg->txbuf_size; uint8_t *lb = realloc (*buf, (size_t) alloc_size); if (lb) { if (is_rxbuf) cfg->rxbuf_size = *bufsize = alloc_size; else cfg->txbuf_size = *bufsize = alloc_size; *buf = lb; } else { vtwrn ("realloc failed. using buffer size %d instead of %u", *bufsize, alloc_size); } } static inline void vcl_test_session_buf_alloc (vcl_test_session_t * socket) { socket->rxbuf_size = socket->cfg.rxbuf_size; socket->txbuf_size = socket->cfg.txbuf_size; vcl_test_buf_alloc (&socket->cfg, 0 /* is_rxbuf */ , (uint8_t **) & socket->txbuf, &socket->txbuf_size); vcl_test_buf_alloc (&socket->cfg, 1 /* is_rxbuf */ , (uint8_t **) & socket->rxbuf, &socket->rxbuf_size); } static inline char * vcl_test_type_str (vcl_test_t t) { switch (t) { case VCL_TEST_TYPE_NONE: return "NONE"; case VCL_TEST_TYPE_ECHO: return "ECHO"; case VCL_TEST_TYPE_UNI: return "UNI"; case VCL_TEST_TYPE_BI: return "BI"; case VCL_TEST_TYPE_EXIT: return "EXIT"; default: return "Unknown"; } } static inline void vcl_test_cfg_dump (vcl_test_cfg_t * cfg, uint8_t is_client) { char *spc = " "; printf (" test config (%p):\n" VCL_TEST_SEPARATOR_STRING " magic: 0x%08x\n" " seq_num: 0x%08x\n" "%-5s test: %s (%d)\n" " ctrl handle: %d (0x%x)\n" "%-5s num test sockets: %u (0x%08x)\n" "%-5s verbose: %s (%d)\n" "%-5s rxbuf size: %lu (0x%08lx)\n" "%-5s txbuf size: %lu (0x%08lx)\n" "%-5s num writes: %lu (0x%08lx)\n" " client tx bytes: %lu (0x%08lx)\n" VCL_TEST_SEPARATOR_STRING, (void *) cfg, cfg->magic, cfg->seq_num, is_client && (cfg->test == VCL_TEST_TYPE_UNI) ? "'" VCL_TEST_TOKEN_RUN_UNI "'" : is_client && (cfg->test == VCL_TEST_TYPE_BI) ? "'" VCL_TEST_TOKEN_RUN_BI "'" : spc, vcl_test_type_str (cfg->test), cfg->test, cfg->ctrl_handle, cfg->ctrl_handle, is_client ? "'" VCL_TEST_TOKEN_NUM_TEST_SESS "'" : spc, cfg->num_test_sessions, cfg->num_test_sessions, is_client ? "'" VCL_TEST_TOKEN_VERBOSE "'" : spc, cfg->verbose ? "on" : "off", cfg->verbose, is_client ? "'" VCL_TEST_TOKEN_RXBUF_SIZE "'" : spc, cfg->rxbuf_size, cfg->rxbuf_size, is_client ? "'" VCL_TEST_TOKEN_TXBUF_SIZE "'" : spc, cfg->txbuf_size, cfg->txbuf_size, is_client ? "'" VCL_TEST_TOKEN_NUM_WRITES "'" : spc, cfg->num_writes, cfg->num_writes, cfg->total_bytes, cfg->total_bytes); } static inline void vcl_test_stats_dump (char *header, vcl_test_stats_t * stats, uint8_t show_rx, uint8_t show_tx, uint8_t verbose) { struct timespec diff; double duration, rate; uint64_t total_bytes; if ((stats->stop.tv_nsec - stats->start.tv_nsec) < 0) { diff.tv_sec = stats->stop.tv_sec - stats->start.tv_sec - 1; diff.tv_nsec = stats->stop.tv_nsec - stats->start.tv_nsec + 1e9; } else { diff.tv_sec = stats->stop.tv_sec - stats->start.tv_sec; diff.tv_nsec = stats->stop.tv_nsec - stats->start.tv_nsec; } duration = (double) diff.tv_sec + (1e-9 * diff.tv_nsec); total_bytes = stats->tx_bytes + stats->rx_bytes; rate = (double) total_bytes *8 / duration / 1e9; printf ("\n%s: Streamed %lu bytes\n" " in %lf seconds (%lf Gbps %s-duplex)!\n", header, total_bytes, duration, rate, (show_rx && show_tx) ? "full" : "half"); if (show_tx) { printf (VCL_TEST_SEPARATOR_STRING " tx stats (0x%p):\n" VCL_TEST_SEPARATOR_STRING " writes: %lu (0x%08lx)\n" " tx bytes: %lu (0x%08lx)\n" " tx eagain: %u (0x%08x)\n" " tx incomplete: %u (0x%08x)\n", (void *) stats, stats->tx_xacts, stats->tx_xacts, stats->tx_bytes, stats->tx_bytes, stats->tx_eagain, stats->tx_eagain, stats->tx_incomp, stats->tx_incomp); } if (show_rx) { printf (VCL_TEST_SEPARATOR_STRING " rx stats (0x%p):\n" VCL_TEST_SEPARATOR_STRING " reads: %lu (0x%08lx)\n" " rx bytes: %lu (0x%08lx)\n" " rx eagain: %u (0x%08x)\n" " rx incomplete: %u (0x%08x)\n", (void *) stats, stats->rx_xacts, stats->rx_xacts, stats->rx_bytes, stats->rx_bytes, stats->rx_eagain, stats->rx_eagain, stats->rx_incomp, stats->rx_incomp); } if (verbose) printf (" start.tv_sec: %ld\n" " start.tv_nsec: %ld\n" " stop.tv_sec: %ld\n" " stop.tv_nsec: %ld\n", stats->start.tv_sec, stats->start.tv_nsec, stats->stop.tv_sec, stats->stop.tv_nsec); printf (VCL_TEST_SEPARATOR_STRING); } static inline int vcl_comp_tspec (struct timespec *a, struct timespec *b) { if (a->tv_sec < b->tv_sec) return -1; else if (a->tv_sec > b->tv_sec) return 1; else if (a->tv_nsec < b->tv_nsec) return -1; else if (a->tv_nsec > b->tv_nsec) return 1; else return 0; } static inline int vcl_test_read (int fd, uint8_t * buf, uint32_t nbytes, vcl_test_stats_t * stats) { int rx_bytes, errno_val; do { if (stats) stats->rx_xacts++; rx_bytes = vppcom_session_read (fd, buf, nbytes); if (rx_bytes < 0) { errno = -rx_bytes; rx_bytes = -1; } if (stats) { if ((rx_bytes == 0) || ((rx_bytes < 0) && ((errno == EAGAIN) || (errno == EWOULDBLOCK)))) stats->rx_eagain++; else if (rx_bytes < nbytes) stats->rx_incomp++; } } while ((rx_bytes == 0) || ((rx_bytes < 0) && ((errno == EAGAIN) || (errno == EWOULDBLOCK)))); if (rx_bytes < 0) { vterr ("vppcom_session_read()", -errno); } else if (stats) stats->rx_bytes += rx_bytes; return (rx_bytes); } static inline int vcl_test_read_ds (int fd, vppcom_data_segments_t ds, vcl_test_stats_t * stats) { int rx_bytes, errno_val; do { if (stats) stats->rx_xacts++; rx_bytes = vppcom_session_read_segments (fd, ds); if (rx_bytes < 0) { errno = -rx_bytes; rx_bytes = -1; } if (stats) { if ((rx_bytes == 0) || ((rx_bytes < 0) && ((errno == EAGAIN) || (errno == EWOULDBLOCK)))) stats->rx_eagain++; } } while ((rx_bytes == 0) || ((rx_bytes < 0) && ((errno == EAGAIN) || (errno == EWOULDBLOCK)))); if (rx_bytes < 0) { vterr ("vppcom_session_read()", -errno); } else if (stats) stats->rx_bytes += rx_bytes; return (rx_bytes); } static inline int vcl_test_write (int fd, uint8_t * buf, uint32_t nbytes, vcl_test_stats_t * stats, uint32_t verbose) { int tx_bytes = 0, nbytes_left = nbytes, rv; do { if (stats) stats->tx_xacts++; rv = vppcom_session_write (fd, buf, nbytes_left); if (rv < 0) { errno = -rv; rv = -1; } if (rv < 0) { if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) { if (stats) stats->tx_eagain++; break; } else break; } tx_bytes += rv; if (tx_bytes != nbytes) { nbytes_left = nbytes_left - rv; if (stats) stats->tx_incomp++; } } while (tx_bytes != nbytes); if (tx_bytes < 0) { vterr ("vpcom_session_write", -errno); } else if (stats) stats->tx_bytes += tx_bytes; return (tx_bytes); } #endif /* __vcl_test_h__ */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */