summaryrefslogtreecommitdiffstats
path: root/src/vlib/CMakeLists.txt
AgeCommit message (Collapse)AuthorFilesLines
2021-09-17build: use GNUInstallDirs install destinationsNick Brown1-1/+1
So as to be compliant with distribution layouts, as recommend by: https://cmake.org/cmake/help/latest/command/install.html#installing-files Type: make Change-Id: Ic46ace4f26aab1aa4902cbd013c40a92c480680d Signed-off-by: Nick Brown <nickbroon@gmail.com>
2021-04-30build: declare some CMake variables as advancedDamjan Marion1-2/+2
Type: make Change-Id: I780c1c81a50cb92bc89c05856efd8ef88479c0ab Signed-off-by: Damjan Marion <damarion@cisco.com>
2021-04-30misc: experimental configure scriptDamjan Marion1-2/+2
Type: make Change-Id: Iaeb9d22eec9a7a763b63899814a44e78c8050f1f Signed-off-by: Damjan Marion <damarion@cisco.com>
2021-04-21vlib: don't inline vlib_buffer_enqueue_to_*Damjan Marion1-0/+2
Function call in this case is not bad thing, as those functions are called once per frame. Type: improvement Change-Id: I7bd61cf746b905e2c8e3085ebb2ff001c0a52da8 Signed-off-by: Damjan Marion <damarion@cisco.com>
2020-05-20vlib: mmap process stacksDamjan Marion1-0/+12
Instead of allocating stack from the main heap, this patch mmaps stack memory together with guard page. This aproach reduces main heap usage, and stack memory is prefaulted on demand, so bigger process stacks will have zero impact on memory usage as long as stack memory is not needed for real. In addition, it fixes issue with systems which have bigger default page size (observed with 65536). Type: improvement Change-Id: I593365c603d4702e428967d80fd425fdee2c4a21 Signed-off-by: Damjan Marion <damarion@cisco.com>
2020-04-28vlib: startup multi-arch variant configurationRay Kinsella1-0/+2
Support for startup node multi-arch variant selection through startup.conf. This is to facilitate unit, functional testing and benchmarking of non-default multi-arch variant node code path. Also added parameters to make test, to specific using multi-arch variants in unit testing. Type: improvement Signed-off-by: Ray Kinsella <mdr@ashroe.eu> Change-Id: I94fd332bb629683b7a7dd770ee9f615a9a424060
2020-04-27vlib: deprecate i2c and cjDave Barach1-4/+0
i2c follows its only use case - the original 82599 driver - into extras/deprecated. cj is/was an emergency debug tool unused in several years. Move to extras/deprecated/vlib Type: refactor Signed-off-by: Dave Barach <dave@barachs.net> Change-Id: Ib55b65373f62630db295c562974bd8f2456c3107
2020-04-13buffers: configurable buffer fault injectorDave Barach1-0/+8
When configured at compile time via the cmake VPP_BUFFER_FAULT_INJECTOR option, the buffer allocator will appear to fail a certain fraction of the time. By default, the allocator succeeds 80% of the time. Detailed command line configuration options are available, but only when the image has been compiled with cmake option described above: vlib { buffer-alloc-success-rate [0.0 ... 1.0] buffer-alloc-success-seed <nnnn> } Modify vlib_buffer_pool_create(...) so 0 is always an invalid buffer index. Debug images: add checks for bad buffer index enqueues, and also verify that f->n_vectors doesn't accidentally map one or more instances of the frame poison pattern 0xfefefefe. Type: improvement Signed-off-by: Dave Barach <dave@barachs.net> Change-Id: Iab939858014463d1e664682805013d334d6fcbe5
2020-03-31vlib: move pci api types from vnet/pci to vlib/pciJakub Grajciar1-0/+7
Type: fix Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: I1a60809a8bbbbb8ac8b65ab990d51aae1229647f Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2019-12-09vlib: improve test coverageDave Barach1-1/+0
Add tests. Remove unused rule-based parser code. Type: test Signed-off-by: Dave Barach <dave@barachs.net> Change-Id: I3ca3a9dd9da8ee8f3a47004c98f2f5644db10057
2019-06-24vlib: packet tracer support for pkt thread handoffsDave Barach1-0/+1
Type: feature Change-Id: Ia3d9a47679202c2a47cd3746b50e86c6b8627ef6 Signed-off-by: Dave Barach <dave@barachs.net>
2019-03-28Punt InfraNeale Ranns1-0/+4
A punt/exception path that provides: 1) clients that use the infra 2) clients can create punt reasons 3) clients can register to recieve packets that are punted for a given reason to be sent to the desired node. 4) nodes which punt packets fill in the {reason,protocol} of the buffere (in the meta-data) and send to the new node "punt-dispatch" 5) punt-dispatch sends packets to the registered nodes or drops Change-Id: Ia4f144337f1387cbe585b4f375d0842aefffcde5 Signed-off-by: Neale Ranns <nranns@cisco.com>
2019-03-13Move the punt/drop nodes into vlibNeale Ranns1-0/+4
The core VLIB library now has a means to dispoe of buffers. the vlib punt/drop node counts node errors. the vnet punt/drop node counts interface errors. speed up both nodes with the usual reciepe. before: error-drop 8.33e1 after: drop 4.51e1 error-drop 6.81e0 Change-Id: If2e919458a3f2e9d71dbf9c6f1352dafb186a05b Signed-off-by: Neale Ranns <nranns@cisco.com>
2019-01-01buffers: remove unused codeDamjan Marion1-1/+0
Change-Id: If2bbfbc52994f5de0879763e0b7a7864498debb6 Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-12-19vlib: support Hyper-v/Azure VMBusStephen Hemminger1-1/+20
This patch adds support for VMBus to the VPP infrastructure. Since the only device that matters is the netvsc Poll Mode Driver in DPDK, the infrastructure is much simpler than PCI. Change-Id: Ie96c897ad9c426716c2398e4528688ce2217419b Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2018-10-23Numa-aware, growable physical memory allocator (pmalloc)Damjan Marion1-1/+1
Change-Id: Ic4c46bc733afae8bf0d8146623ed15633928de30 Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-10-01API / CLI event-log tracingDave Barach1-3/+0
Add an "elog trace [api][cli][barrier]" debug CLI command. Removed the barrier elog test command. Remove unused reliable multicast code. Change-Id: Ib3ecde901b7c49fe92b313d0087cd7e776adcdce Signed-off-by: Dave Barach <dave@barachs.net>
2018-09-17STATS: Dynamically mapped shared memory segmentOle Troan1-0/+1
Move from using a hash to a vector with offsets into shared memory. Limit exposure of VPP data structures and include files to external stats library and applications. Change-Id: Ic06129f12d10cf4c4946a86d9bc734eacff2c7da Signed-off-by: Ole Troan <ot@cisco.com>
2018-09-07cmake: set packaging component for different filesDamjan Marion1-1/+5
Change-Id: I033a1f5cdb24f77462cb5ec90a62226d93f52925 Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-08-26cmake: add add_vpp_library and add_vpp_executable macrosDamjan Marion1-11/+5
Change-Id: I1382021a6f616571b4b3243ba8c8999239d10815 Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-08-17CMake as an alternative to autotools (experimental)Damjan Marion1-0/+98
Change-Id: Ibc59323e849810531dd0963e85493efad3b86857 Signed-off-by: Damjan Marion <damarion@cisco.com>
OUT_N_ERROR, } nat66_in2out_error_t; static char *nat66_in2out_error_strings[] = { #define _(sym,string) string, foreach_nat66_in2out_error #undef _ }; typedef enum { NAT66_IN2OUT_NEXT_IP6_LOOKUP, NAT66_IN2OUT_NEXT_DROP, NAT66_IN2OUT_N_NEXT, } nat66_in2out_next_t; static inline u8 nat66_not_translate (u32 rx_fib_index, ip6_address_t ip6_addr) { nat66_main_t *nm = &nat66_main; u32 sw_if_index; snat_interface_t *i; fib_node_index_t fei = FIB_NODE_INDEX_INVALID; fib_prefix_t pfx = { .fp_proto = FIB_PROTOCOL_IP6, .fp_len = 128, .fp_addr = { .ip6 = ip6_addr, }, }; fei = fib_table_lookup (rx_fib_index, &pfx); if (FIB_NODE_INDEX_INVALID == fei) return 1; sw_if_index = fib_entry_get_resolving_interface (fei); if (sw_if_index == ~0) { fei = fib_table_lookup (nm->outside_fib_index, &pfx); if (FIB_NODE_INDEX_INVALID == fei) return 1; sw_if_index = fib_entry_get_resolving_interface (fei); } /* *INDENT-OFF* */ pool_foreach (i, nm->interfaces, ({ /* NAT packet aimed at outside interface */ if (nat_interface_is_outside (i) && sw_if_index == i->sw_if_index) return 0; })); /* *INDENT-ON* */ return 1; } VLIB_NODE_FN (nat66_in2out_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 n_left_from, *from, *to_next; nat66_in2out_next_t next_index; u32 pkts_processed = 0; u32 thread_index = vm->thread_index; nat66_main_t *nm = &nat66_main; from = vlib_frame_vector_args (frame); n_left_from = frame->n_vectors; next_index = node->cached_next_index; while (n_left_from > 0) { u32 n_left_to_next; vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); while (n_left_from > 0 && n_left_to_next > 0) { u32 bi0; vlib_buffer_t *b0; u32 next0 = NAT66_IN2OUT_NEXT_IP6_LOOKUP; ip6_header_t *ip60; u16 l4_offset0, frag_offset0; u8 l4_protocol0; nat66_static_mapping_t *sm0; u32 sw_if_index0, fib_index0; udp_header_t *udp0; tcp_header_t *tcp0; icmp46_header_t *icmp0; u16 *checksum0 = 0; ip_csum_t csum0; /* speculatively enqueue b0 to the current next frame */ bi0 = from[0]; to_next[0] = bi0; from += 1; to_next += 1; n_left_from -= 1; n_left_to_next -= 1; b0 = vlib_get_buffer (vm, bi0); ip60 = vlib_buffer_get_current (b0); if (PREDICT_FALSE (ip6_parse (vm, b0, ip60, b0->current_length, &l4_protocol0, &l4_offset0, &frag_offset0))) { next0 = NAT66_IN2OUT_NEXT_DROP; b0->error = node->errors[NAT66_IN2OUT_ERROR_UNKNOWN]; goto trace0; } sw_if_index0 = vnet_buffer (b0)->sw_if_index[VLIB_RX]; fib_index0 = fib_table_get_index_for_sw_if_index (FIB_PROTOCOL_IP6, sw_if_index0); if (nat66_not_translate (fib_index0, ip60->dst_address)) goto trace0; sm0 = nat66_static_mapping_get (&ip60->src_address, fib_index0, 1); if (PREDICT_FALSE (!sm0)) { goto trace0; } if (l4_protocol0 == IP_PROTOCOL_UDP) { udp0 = (udp_header_t *) u8_ptr_add (ip60, l4_offset0); checksum0 = &udp0->checksum; } else if (l4_protocol0 == IP_PROTOCOL_TCP) { tcp0 = (tcp_header_t *) u8_ptr_add (ip60, l4_offset0); checksum0 = &tcp0->checksum; } else if (l4_protocol0 == IP_PROTOCOL_ICMP6) { icmp0 = (icmp46_header_t *) u8_ptr_add (ip60, l4_offset0); checksum0 = &icmp0->checksum; } else goto skip_csum0; csum0 = ip_csum_sub_even (*checksum0, ip60->src_address.as_u64[0]); csum0 = ip_csum_sub_even (csum0, ip60->src_address.as_u64[1]); csum0 = ip_csum_add_even (csum0, sm0->e_addr.as_u64[0]); csum0 = ip_csum_add_even (csum0, sm0->e_addr.as_u64[1]); *checksum0 = ip_csum_fold (csum0); skip_csum0: ip60->src_address.as_u64[0] = sm0->e_addr.as_u64[0]; ip60->src_address.as_u64[1] = sm0->e_addr.as_u64[1]; vlib_increment_combined_counter (&nm->session_counters, thread_index, sm0 - nm->sm, 1, vlib_buffer_length_in_chain (vm, b0)); trace0: if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE) && (b0->flags & VLIB_BUFFER_IS_TRACED))) { nat66_in2out_trace_t *t = vlib_add_trace (vm, node, b0, sizeof (*t)); t->sw_if_index = vnet_buffer (b0)->sw_if_index[VLIB_RX]; t->next_index = next0; } pkts_processed += next0 != NAT66_IN2OUT_NEXT_DROP; /* verify speculative enqueue, maybe switch current next frame */ vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, bi0, next0); } vlib_put_next_frame (vm, node, next_index, n_left_to_next); } vlib_node_increment_counter (vm, nm->in2out_node_index, NAT66_IN2OUT_ERROR_IN2OUT_PACKETS, pkts_processed); return frame->n_vectors; } /* *INDENT-OFF* */ VLIB_REGISTER_NODE (nat66_in2out_node) = { .name = "nat66-in2out", .vector_size = sizeof (u32), .format_trace = format_nat66_in2out_trace, .type = VLIB_NODE_TYPE_INTERNAL, .n_errors = ARRAY_LEN (nat66_in2out_error_strings), .error_strings = nat66_in2out_error_strings, .n_next_nodes = NAT66_IN2OUT_N_NEXT, /* edit / add dispositions here */ .next_nodes = { [NAT66_IN2OUT_NEXT_DROP] = "error-drop", [NAT66_IN2OUT_NEXT_IP6_LOOKUP] = "ip6-lookup", }, }; /* *INDENT-ON* */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */