summaryrefslogtreecommitdiffstats
path: root/src/plugins
AgeCommit message (Expand)AuthorFilesLines
2017-11-16dpdk/ipsec: use physmem when creating poolsSergio Gonzalez Monroy3-84/+116
2017-11-15memif: fix uninitialized pointer read coverity errorSteven1-0/+2
2017-11-14Fix typos in configure.ac and dpdk/buffer.cDamjan Marion1-8/+8
2017-11-13dpdk: introduce AVX512 variants of node functionsDamjan Marion5-60/+131
2017-11-13NAT: Buufer overflow for memcpy()Ole Troan1-3/+2
2017-11-11ACL: Add coding-style-patch-verification and indent.Jon Loeliger1-965/+1260
2017-11-11ACLs: Use better error return codes than "-1" everywhere.Jon Loeliger1-14/+14
2017-11-11dpdk: optimize buffer alloc/freeDamjan Marion1-49/+118
2017-11-11Handle CPU flags from autotools projectDamjan Marion1-1/+1
2017-11-09memif: use clib_socket_t for socket connectionsDamjan Marion4-210/+122
2017-11-09Port restricted NAT44 (VPP-1048)Matus Fabian2-8/+149
2017-11-08memif: do not mask head and tail pointersDamjan Marion3-68/+40
2017-11-08ACL plugin support tagged subinterfacesPavel Kotucek2-40/+311
2017-11-08NAT64 to use IPv4 address from interface (VPP-1051)Matus Fabian5-0/+217
2017-11-07SNAT: IP fragmentation (VPP-890)Matus Fabian13-33/+2999
2017-11-07NAT: DS-Lite (VPP-1040)Matus Fabian13-24/+1636
2017-11-03NAT64: Input feature arc on virtual interface via interface RX DPO.Ole Troan1-2/+44
2017-11-03Set up P2P flag to gtpu interfaceHongjun Ni1-0/+1
2017-11-01nat plugin - fix test logicGabriel Ganne1-1/+1
2017-11-01dpdk/ipsec: align memorySergio Gonzalez Monroy2-5/+7
2017-11-01dpdk/ipsec: fix digest physical addressSergio Gonzalez Monroy3-7/+7
2017-10-31lb plugin tests - wipe flowtable after each unit testGabriel Ganne1-0/+38
2017-10-30Minor copyedit fixes to ACL Hash doc.Jon Loeliger1-7/+6
2017-10-27acl-plugin: increase the amount of memory for classifier tables used by MACIP...Andrew Yourtchenko1-1/+1
2017-10-26NAT: delete session API/CLI (VPP-1041)Matus Fabian4-0/+172
2017-10-26acl-plugin: refactor the "show acl-plugin" CLI, use vlib_cli_output() vs. for...Andrew Yourtchenko1-181/+194
2017-10-25vlib: add support for multiple buffer poolsDamjan Marion6-15/+37
2017-10-25One armed NAT (VPP-1035)Matus Fabian8-33/+289
2017-10-24Add extern to *_main global variable declarations in header files.Dave Wallace10-7/+14
2017-10-18Plugin for IP-Address to Interface PuntingPierre Pfister6-0/+871
2017-10-18ipsec: use boolean or vs. bitwise or to avoid compiler errorAndrew Yourtchenko2-6/+6
2017-10-16lb plugin - fix format() type mismatchesGabriel Ganne1-2/+3
2017-10-14NAT: fix delete of sessions for 1:1 NAT if 1 worker (VPP-1023)Matus Fabian1-1/+1
2017-10-14change format_get_indent() to use u32 instead of uwordGabriel Ganne3-4/+4
2017-10-14plugins/dpdk: align memory to avoid potential segfault and false sharingGeorgina Sheehan1-1/+1
2017-10-13acl-plugin: display "::" for INADDR6_ANY on ACL outputSteve Shin2-5/+10
2017-10-13acl-plugin: split the "show" commands and add an option to show ACLs by inter...Andrew Yourtchenko1-317/+407
2017-10-12dpdk/ipsec: coverity fixesSergio Gonzalez Monroy3-8/+8
2017-10-10dpdk: fix mempool size calculationDamjan Marion1-2/+3
2017-10-09vppapigen: support per-file (major,minor,patch) version stampsDave Barach15-0/+26
2017-10-09NAT: hairpinning rework (VPP-1003)Matus Fabian2-14/+114
2017-10-09NAT: fixed ICMP broken translation for GRE tunnel interface (VPP-1008)Matus Fabian3-31/+27
2017-10-06Separate CP and DP fib table for PPPoEHongjun Ni3-56/+66
2017-10-05dpdk/ipsec: rework plus improved cli commandsSergio Gonzalez Monroy8-1658/+2421
2017-10-04[aarch64] Fixes CLI crashes on dpaa2 platform.Christophe Fontaine7-21/+21
2017-10-04dpdk: use vpp physmem allocator for dpdk buffersDamjan Marion2-63/+144
2017-10-04memif: crash on slave modeSteven1-0/+1
2017-10-03Repair vlib API socket serverDave Barach30-30/+16
2017-09-28General documentation updatesChris Luke2-3/+5
2017-09-27Fix: unnecesary uio binding for Mellanox NICSteve Shin1-1/+3
span>; u32 counter_index; l2t_session_t *session = 0; u32 session_index; u32 next_index; u8 l2tp_decap_local = (l2t_decap_local_node.index == n->index); /* Other-than-output pkt? We're done... */ if (vnet_buffer (b)->l2t.next_index != L2T_DECAP_NEXT_L2_INPUT) { next_index = vnet_buffer (b)->l2t.next_index; goto done; } em->counters[node_counter_base_index + L2T_DECAP_ERROR_USER_TO_NETWORK] += 1; session_index = vnet_buffer (b)->l2t.session_index; counter_index = session_index_to_counter_index (session_index, SESSION_COUNTER_USER_TO_NETWORK); /* per-mapping byte stats include the ethernet header */ vlib_increment_combined_counter (&lm->counter_main, vlib_get_thread_index (), counter_index, 1 /* packet_increment */ , vlib_buffer_length_in_chain (vm, b) + sizeof (ethernet_header_t)); session = pool_elt_at_index (lm->sessions, session_index); l2tp = vlib_buffer_get_current (b) + sizeof (*ip6); if (PREDICT_FALSE (l2tp->session_id != session->local_session_id)) { /* Key matched but session id does not. Assume packet is not for us. */ em->counters[node_counter_base_index + L2T_DECAP_ERROR_SESSION_ID_MISMATCH] += 1; next_index = L2T_DECAP_NEXT_NO_INTERCEPT; goto done; } if (PREDICT_FALSE (l2tp->cookie != session->local_cookie[0])) { if (l2tp->cookie != session->local_cookie[1]) { /* Key and session ID matched, but cookie doesn't. Drop this packet. */ b->error = node->errors[L2T_DECAP_ERROR_COOKIE_MISMATCH]; next_index = L2T_DECAP_NEXT_DROP; goto done; } } vnet_buffer (b)->sw_if_index[VLIB_RX] = session->sw_if_index; if (PREDICT_FALSE (!(session->admin_up))) { b->error = node->errors[L2T_DECAP_ERROR_ADMIN_DOWN]; next_index = L2T_DECAP_NEXT_DROP; goto done; } /* strip the ip6 and L2TP header */ vlib_buffer_advance (b, sizeof (*ip6) + session->l2tp_hdr_size); /* Required to make the l2 tag push / pop code work on l2 subifs */ vnet_update_l2_len (b); if (PREDICT_FALSE (b->flags & VLIB_BUFFER_IS_TRACED)) { l2t_trace_t *t = vlib_add_trace (vm, node, b, sizeof (*t)); t->is_user_to_network = 1; t->our_address.as_u64[0] = ip6->dst_address.as_u64[0]; t->our_address.as_u64[1] = ip6->dst_address.as_u64[1]; t->client_address.as_u64[0] = ip6->src_address.as_u64[0]; t->client_address.as_u64[1] = ip6->src_address.as_u64[1]; t->session_index = session_index; } return L2T_DECAP_NEXT_L2_INPUT; done: if (next_index == L2T_DECAP_NEXT_NO_INTERCEPT) { /* Small behavioral change between l2tp-decap and l2tp-decap-local */ if (l2tp_decap_local) { b->error = node->errors[L2T_DECAP_ERROR_NO_SESSION]; next_index = L2T_DECAP_NEXT_DROP; } else { /* Go to next node on the ip6 configuration chain */ if (PREDICT_TRUE (session != 0)) vnet_feature_next (&next_index, b); } } if (PREDICT_FALSE (b->flags & VLIB_BUFFER_IS_TRACED)) { l2t_trace_t *t = vlib_add_trace (vm, node, b, sizeof (*t)); t->is_user_to_network = 1; t->our_address.as_u64[0] = ip6->dst_address.as_u64[0]; t->our_address.as_u64[1] = ip6->dst_address.as_u64[1]; t->client_address.as_u64[0] = ip6->src_address.as_u64[0]; t->client_address.as_u64[1] = ip6->src_address.as_u64[1]; t->session_index = ~0; } return next_index; } #include <vnet/pipeline.h> static uword l2t_decap_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { return dispatch_pipeline (vm, node, frame); } /* * l2tp-decap and l2tp-decap-local have very slightly different behavior. * When a packet has no associated session l2tp-decap let it go to ip6 forward, * while l2tp-decap-local drops it. */ /* *INDENT-OFF* */ VLIB_REGISTER_NODE (l2t_decap_node) = { .function = l2t_decap_node_fn, .name = "l2tp-decap", .vector_size = sizeof (u32), .format_trace = format_l2t_trace, .type = VLIB_NODE_TYPE_INTERNAL, .n_errors = ARRAY_LEN(l2t_decap_error_strings), .error_strings = l2t_decap_error_strings, .n_next_nodes = L2T_DECAP_N_NEXT, /* edit / add dispositions here */ .next_nodes = { [L2T_DECAP_NEXT_L2_INPUT] = "l2-input", [L2T_DECAP_NEXT_DROP] = "error-drop", }, }; /* *INDENT-ON* */ VLIB_NODE_FUNCTION_MULTIARCH (l2t_decap_node, l2t_decap_node_fn); /* *INDENT-OFF* */ VLIB_REGISTER_NODE (l2t_decap_local_node) = { .function = l2t_decap_node_fn, .name = "l2tp-decap-local", .vector_size = sizeof (u32), .format_trace = format_l2t_trace, .type = VLIB_NODE_TYPE_INTERNAL, .n_errors = ARRAY_LEN(l2t_decap_error_strings), .error_strings = l2t_decap_error_strings, .n_next_nodes = L2T_DECAP_N_NEXT, /* edit / add dispositions here */ .next_nodes = { [L2T_DECAP_NEXT_L2_INPUT] = "l2-input", [L2T_DECAP_NEXT_DROP] = "error-drop", }, }; /* *INDENT-ON* */ void l2tp_decap_init (void) { ip6_register_protocol (IP_PROTOCOL_L2TP, l2t_decap_local_node.index); } /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */