/* * Copyright (c) 2015 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #include #include DECLARE_CJ_GLOBAL_LOG static clib_error_t * vnet_example_init (vlib_main_t * vm) { clib_error_t * error = 0; /* Due to crude comment-out of eliot's smp stuff */ vm->heap_size = 256<<20; if ((error = vlib_call_init_function (vm, pg_init))) return error; if ((error = vlib_call_init_function (vm, ip_main_init))) return error; if ((error = vlib_call_init_function (vm, ethernet_init))) return error; if ((error = vlib_call_init_function (vm, ethernet_arp_init))) return error; if ((error = vlib_call_init_function (vm, osi_init))) return error; if ((error = vlib_call_init_function (vm, srp_init))) return error; #if DPDK == 0 if ((error = vlib_call_init_function (vm, ixge_init))) return error; if ((error = vlib_call_init_function (vm, ixgev_init))) return error; if ((error = vlib_call_init_function (vm, ige_init))) return error; #else if ((error = vlib_call_init_function (vm, dpdk_init))) return error; #endif if ((error = vlib_call_init_function (vm, dhcp_proxy_init))) return error; if ((error = vlib_call_init_function (vm, mpls_init))) return error; if ((error = vlib_call_init_function (vm, mpls_interface_init))) return error; if ((error = vlib_call_init_function (vm, l2_init))) return error; if ((error = vlib_call_init_function (vm, l2tp_init))) return error; if ((error = unix_physmem_init (vm, /* physical_memory_required */ 0))) return error; if ((error = unix_physmem_init (vm, /* physical_memory_required */ 0))) return error; if ((error = vlib_call_init_function (vm, tuntap_init))) return error; vlib_unix_cli_set_prompt ("VNET: "); return error; } VLIB_INIT_FUNCTION (vnet_example_init); int main (int argc, char * argv[]) { clib_mem_init (0, (2ULL << 30)); return vlib_unix_main (argc, argv); } #if 0 #define foreach_tcp_test_error \ _ (SEGMENTS_RECEIVED, "segments received") typedef enum { #define _(sym,str) TCP_TEST_ERROR_##sym, foreach_tcp_test_error #undef _ TCP_TEST_N_ERROR, } tcp_test_error_t; static char * tcp_test_error_strings[] = { #define _(sym,string) string, foreach_tcp_test_error #undef _ }; static uword tcp_test (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { uword n_packets = frame->n_vectors; u32 * from, * to_next; u32 n_left_from, n_left_to_next, next; from = vlib_frame_vector_args (frame); n_left_from = n_packets; next = node->cached_next_index; while (n_left_from > 0) { vlib_get_next_frame (vm, node, next, to_next, n_left_to_next); while (n_left_from > 0 && n_left_to_next > 0) { vlib_buffer_t * p0; u32 bi0; u8 error0, next0; bi0 = to_next[0] = from[0]; from += 1; n_left_from -= 1; to_next += 1; n_left_to_next -= 1; p0 = vlib_get_buffer (vm, bi0); clib_warning ("got '%U'", format_vlib_buffer_contents, vm, p0); error0 = next0 = 0; p0->error = node->errors[error0]; if (PREDICT_FALSE (next0 != next)) { to_next -= 1; n_left_to_next += 1; vlib_put_next_frame (vm, node, next, n_left_to_next); next = next0; vlib_get_next_frame (vm, node, next, to_next, n_left_to_next); to_next[0] = bi0; to_next += 1; n_left_to_next -= 1; } } vlib_put_next_frame (vm, node, next, n_left_to_next); } return frame->n_vectors; } VLIB_REGISTER_NODE (tcp_test_node) = { .function = tcp_test, .name = "tcp-test", .vector_size = sizeof (u32), .n_next_nodes = 1, .next_nodes = { [0] = "error-drop", }, .n_errors = TCP_TEST_N_ERROR, .error_strings = tcp_test_error_strings, }; static clib_error_t * tcp_test_init (vlib_main_t * vm) { clib_error_t * error = 0; { tcp_listener_registration_t r = { .port = 1234, .flags = TCP_LISTENER_IP4, .data_node_index = tcp_test_node.index, .event_function = 0, }; tcp_register_listener (vm, &r); } return error; } VLIB_INIT_FUNCTION (tcp_test_init); #endif