aboutsummaryrefslogtreecommitdiffstats
path: root/doxygen
AgeCommit message (Expand)AuthorFilesLines
2017-06-22NAT64: documentationMatus Fabian1-0/+1
2017-06-09Sample plugin: Add sample plugin documentationRay Kinsella2-2/+2
2017-05-30Flowprobe: Stateful flows and IPv6, L4 recordingOle Troan1-1/+1
2017-05-10doxygen: Fix some pathsChris Luke1-1/+3
2017-05-05First commit SR MPLSPablo Camarillo1-0/+1
2017-03-29Bugfixing and documentation for SRv6Pablo Camarillo2-9/+10
2017-02-22Add ref to test framework docs in doxygen output.Dave Wallace2-5/+8
2017-02-02Added support for openSUSEMarco Varlese1-1/+4
2017-01-11Remove vcgn pluginDamjan Marion1-2/+1
2017-01-10Revert "vppctl: bash completion for vppctl commands"Damjan Marion1-8/+17
2017-01-09vppctl: bash completion for vppctl commandsPadraig Connolly1-17/+8
2017-01-01Move java,lua api and remaining plugins to src/Damjan Marion1-4/+3
2016-12-28Repair Doxygen build infrastructureChris Luke2-11/+29
2016-11-28Add support for using documentation siphons in multiple waysChris Luke19-32/+199
2016-11-28dpdk: add ipsec cryptodev supportSergio Gonzalez Monroy1-0/+1
2016-10-27Per-packet IPFIX record generation pluginDave Barach1-0/+1
2016-10-04Minor tweaks to hqos docChris Luke1-3/+4
2016-09-27Fix missing output in generated CLI/configChris Luke3-7/+8
2016-09-23Enable doc building on MacOSChris Luke1-1/+25
2016-09-21Refactor pre-Doxy siphon scripts; VPP-396Chris Luke24-657/+1486
2016-09-21Move doxytags file to html output directoryChris Luke1-1/+1
2016-09-21Copy the 16.09 release notes to masterChris Luke1-0/+1
2016-09-20Add structure to some of the documentation; VPP-223Chris Luke2-1/+15
2016-09-09Check for zero-sized Graphvix config file on Ubuntu; VPP-396Chris Luke1-1/+2
2016-09-09On Ubuntu check for graphviz system configChris Luke1-0/+3
2016-09-07VPP-346 Improve Doxygen include path mechanismChris Luke2-23/+55
2016-09-06VPP-346 More VPP doc fixesChris Luke3-15/+48
2016-09-02VPP-221 Improve doxygen dependency checkChris Luke1-1/+5
2016-09-01VPP-346 A swathe of doc fixesChris Luke4-16/+94
2016-08-31VPP-221 Loosen Doxygen CLI command struct parserChris Luke2-1/+2
2016-08-31VPP-221 CLI auto-documentation infrastructureChris Luke6-5/+793
2016-08-06Add DPDK definition to DOXYGENKeith Burns (alagalah)1-2/+3
2016-07-26Fix missing include dirs in doxygenChris Luke1-1/+1
2016-07-07Add some doxygen tagsDave Barach1-0/+1
2016-05-16VPP-57 Add missing license headers in doc filesChris Luke1-0/+22
2016-05-15VPP-62 Add a doxy filter to enable vpe.api docChris Luke3-5/+67
2016-05-13VPP-57 Add Doxygen to VPPChris Luke6-0/+2717
TR(pi) ,aux_data +(pi) #endif /* * A prefetch stride of 2 is quasi-equivalent to doubling the number * of stages with every other pipeline stage empty. */ /* * This is a typical first pipeline stage, which prefetches * buffer metadata and the first line of pkt data. * * To use it: * #define stage0 generic_stage0 * * This implementation won't use the aux data argument */ static STAGE_INLINE void generic_stage0 (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_buffer_t * b AUX_DATA_ARG) { vlib_prefetch_buffer_header (b, STORE); CLIB_PREFETCH (b->data, CLIB_CACHE_LINE_BYTES, STORE); } #if NSTAGES == 2 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from; u32 n_left_from; int pi; vlib_buffer_t *bufs[VLIB_FRAME_SIZE]; u16 nexts[VLIB_FRAME_SIZE]; AUX_DATA_DECL; n_left_from = frame->n_vectors; from = vlib_frame_args (frame); vlib_get_buffers (vm, from, bufs, n_left_from); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == n_left_from) break; stage0 (vm, node, bufs[pi] AUX_DATA_PTR (pi)); } for (; pi < n_left_from; pi++) { stage0 (vm, node, bufs[pi]); nexts[pi - 1] = last_stage (vm, node, bufs[pi - 1] AUX_DATA_PTR (pi - 1)); } for (; pi < (n_left_from + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < n_left_from)) nexts[pi - 1] = last_stage (vm, node, bufs[pi - 1] AUX_DATA_PTR (pi - 1)); } vlib_buffer_enqueue_to_next (vm, node, from, nexts, frame->n_vectors); return frame->n_vectors; } #endif #if NSTAGES == 3 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from; u32 n_left_from; int pi; vlib_buffer_t *bufs[VLIB_FRAME_SIZE]; u16 nexts[VLIB_FRAME_SIZE]; AUX_DATA_DECL; n_left_from = frame->n_vectors; from = vlib_frame_args (frame); vlib_get_buffers (vm, from, bufs, n_left_from); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == n_left_from) break; stage0 (vm, node, bufs[pi] AUX_DATA_PTR (pi)); if (pi - 1 >= 0) stage1 (vm, node, bufs[pi - 1]); } for (; pi < n_left_from; pi++) { stage0 (vm, node, bufs[pi] AUX_DATA_PTR (pi)); stage1 (vm, node, bufs[pi - 1] AUX_DATA_PTR (pi - 1)); nexts[pi - 2] = last_stage (vm, node, bufs[pi - 2] AUX_DATA_PTR (pi - 2)); } for (; pi < (n_left_from + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < n_left_from)) stage1 (vm, node, bufs[pi - 1] AUX_DATA_PTR (pi - 1)); if (((pi - 2) >= 0) && ((pi - 2) < n_left_from)) nexts[pi - 2] = last_stage (vm, node, bufs[pi - 2] AUX_DATA_PTR (pi - 2)); } vlib_buffer_enqueue_to_next (vm, node, from, nexts, frame->n_vectors); return frame->n_vectors; } #endif #if NSTAGES == 4 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from; u32 n_left_from; int pi; vlib_buffer_t *bufs[VLIB_FRAME_SIZE]; u16 nexts[VLIB_FRAME_SIZE]; AUX_DATA_DECL; n_left_from = frame->n_vectors; from = vlib_frame_args (frame); vlib_get_buffers (vm, from, bufs, n_left_from); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == n_left_from) break; stage0 (vm, node, bufs[pi] AUX_DATA_PTR (pi)); if (pi - 1 >= 0) stage1 (vm, node, bufs[pi - 1] AUX_DATA_PTR (pi - 1)); if (pi - 2 >= 0) stage2 (vm, node, bufs[pi - 2] AUX_DATA_PTR (pi - 2)); } for (; pi < n_left_from; pi++) { stage0 (vm, node, bufs[pi] AUX_DATA_PTR (pi)); stage1 (vm, node, bufs[pi - 1] AUX_DATA_PTR (pi - 1)); stage2 (vm, node, bufs[pi - 2] AUX_DATA_PTR (pi - 2)); nexts[pi - 3] = last_stage (vm, node, bufs[pi - 3] AUX_DATA_PTR (pi - 3)); } for (; pi < (n_left_from + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < n_left_from)) stage1 (vm, node, bufs[pi - 1] AUX_DATA_PTR (pi - 1)); if (((pi - 2) >= 0) && ((pi - 2) < n_left_from)) stage2 (vm, node, bufs[pi - 2] AUX_DATA_PTR (pi - 2)); if (((pi - 3) >= 0) && ((pi - 3) < n_left_from)) nexts[pi - 3] = last_stage (vm, node, bufs[pi - 3] AUX_DATA_PTR (pi - 3)); } vlib_buffer_enqueue_to_next (vm, node, from, nexts, frame->n_vectors); return frame->n_vectors; } #endif #if NSTAGES == 5 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from; u32 n_left_from; int pi; vlib_buffer_t *bufs[VLIB_FRAME_SIZE]; u16 nexts[VLIB_FRAME_SIZE]; AUX_DATA_DECL; n_left_from = frame->n_vectors; from = vlib_frame_args (frame); vlib_get_buffers (vm, from, bufs, n_left_from); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == n_left_from) break; stage0 (vm, node, bufs[pi] AUX_DATA_PTR (pi)); if (pi - 1 >= 0) stage1 (vm, node, bufs[pi - 1] AUX_DATA_PTR (pi - 1)); if (pi - 2 >= 0) stage2 (vm, node, bufs[pi - 2] AUX_DATA_PTR (pi - 2)); if (pi - 3 >= 0) stage3 (vm, node, bufs[pi - 3] AUX_DATA_PTR (pi - 3)); } for (; pi < n_left_from; pi++) { stage0 (vm, node, bufs[pi] AUX_DATA_PTR (pi)); stage1 (vm, node, bufs[pi - 1] AUX_DATA_PTR (pi - 1)); stage2 (vm, node, bufs[pi - 2] AUX_DATA_PTR (pi - 2)); stage3 (vm, node, bufs[pi - 3] AUX_DATA_PTR (pi - 3)); nexts[pi - 4] = last_stage (vm, node, bufs[pi - 4] AUX_DATA_PTR (pi - 4)); } for (; pi < (n_left_from + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < n_left_from)) stage1 (vm, node, bufs[pi - 1] AUX_DATA_PTR (pi - 1)); if (((pi - 2) >= 0) && ((pi - 2) < n_left_from)) stage2 (vm, node, bufs[pi - 2] AUX_DATA_PTR (pi - 2)); if (((pi - 3) >= 0) && ((pi - 3) < n_left_from)) stage3 (vm, node, bufs[pi - 3] AUX_DATA_PTR (pi - 3)); if (((pi - 4) >= 0) && ((pi - 4) < n_left_from)) nexts[pi - 4] = last_stage (vm, node, bufs[pi - 4] AUX_DATA_PTR (pi - 4)); } vlib_buffer_enqueue_to_next (vm, node, from, nexts, frame->n_vectors); return frame->n_vectors; } #endif #if NSTAGES == 6 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from; u32 n_left_from; int pi; vlib_buffer_t *bufs[VLIB_FRAME_SIZE]; u16 nexts[VLIB_FRAME_SIZE]; AUX_DATA_DECL; n_left_from = frame->n_vectors; from = vlib_frame_args (frame); vlib_get_buffers (vm, from, bufs, n_left_from); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == n_left_from) break; stage0 (vm, node, bufs[pi] AUX_DATA_PTR (pi)); if (pi - 1 >= 0) stage1 (vm, node, bufs[pi - 1] AUX_DATA_PTR (pi - 1)); if (pi - 2 >= 0) stage2 (vm, node, bufs[pi - 2] AUX_DATA_PTR (pi - 2)); if (pi - 3 >= 0) stage3 (vm, node, bufs[pi - 3] AUX_DATA_PTR (pi - 3)); if (pi - 4 >= 0) stage4 (vm, node, bufs[pi - 4] AUX_DATA_PTR (pi - 4)); } for (; pi < n_left_from; pi++) { stage0 (vm, node, bufs[pi] AUX_DATA_PTR (pi)); stage1 (vm, node, bufs[pi - 1] AUX_DATA_PTR (pi - 1)); stage2 (vm, node, bufs[pi - 2] AUX_DATA_PTR (pi - 2)); stage3 (vm, node, bufs[pi - 3] AUX_DATA_PTR (pi - 3)); stage4 (vm, node, bufs[pi - 4] AUX_DATA_PTR (pi - 4)); nexts[pi - 5] = last_stage (vm, node, bufs[pi - 5] AUX_DATA_PTR (pi - 5)); } for (; pi < (n_left_from + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < n_left_from)) stage1 (vm, node, bufs[pi - 1] AUX_DATA_PTR (pi - 1)); if (((pi - 2) >= 0) && ((pi - 2) < n_left_from)) stage2 (vm, node, bufs[pi - 2] AUX_DATA_PTR (pi - 2)); if (((pi - 3) >= 0) && ((pi - 3) < n_left_from)) stage3 (vm, node, bufs[pi - 3] AUX_DATA_PTR (pi - 3)); if (((pi - 4) >= 0) && ((pi - 4) < n_left_from)) stage4 (vm, node, bufs[pi - 4] AUX_DATA_PTR (pi - 4)); if (((pi - 5) >= 0) && ((pi - 5) < n_left_from)) nexts[pi - 5] = last_stage (vm, node, bufs[pi - 5] AUX_DATA_PTR (pi - 5)); } vlib_buffer_enqueue_to_next (vm, node, from, nexts, frame->n_vectors); return frame->n_vectors; } #endif /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */