1 /*- 2 * BSD LICENSE 3 * 4 * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name of Intel Corporation nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 #include <string.h> 35 #include <stdio.h> 36 #include <stdint.h> 37 #include <stdarg.h> 38 #include <stdlib.h> 39 #include <errno.h> 40 #include <termios.h> 41 #include <ctype.h> 42 #include <sys/queue.h> 43 44 #include <cmdline_rdline.h> 45 #include <cmdline_parse.h> 46 #include <cmdline_socket.h> 47 #include <cmdline.h> 48 49 #include <rte_memory.h> 50 #include <rte_memzone.h> 51 #include <rte_tailq.h> 52 #include <rte_eal.h> 53 #include <rte_timer.h> 54 #include <rte_cycles.h> 55 #include <rte_log.h> 56 #include <rte_string_fns.h> 57 58 #include "test.h" 59 60 #define RTE_LOGTYPE_APP RTE_LOGTYPE_USER1 61 62 const char *prgname; /* to be set to argv[0] */ 63 64 #ifndef RTE_EXEC_ENV_BAREMETAL 65 static const char *recursive_call; /* used in linuxapp for MP and other tests */ 66 67 static int 68 no_action(void){ return 0; } 69 70 static int 71 do_recursive_call(void) 72 { 73 unsigned i; 74 struct { 75 const char *env_var; 76 int (*action_fn)(void); 77 } actions[] = { 78 { "run_secondary_instances", test_mp_secondary }, 79 { "test_missing_c_flag", no_action }, 80 { "test_missing_n_flag", no_action }, 81 { "test_no_hpet_flag", no_action }, 82 { "test_whitelist_flag", no_action }, 83 { "test_invalid_b_flag", no_action }, 84 { "test_invalid_r_flag", no_action }, 85 { "test_misc_flags", no_action }, 86 { "test_memory_flags", no_action }, 87 { "test_file_prefix", no_action }, 88 { "test_no_huge_flag", no_action }, 89 }; 90 91 if (recursive_call == NULL) 92 return -1; 93 for (i = 0; i < sizeof(actions)/sizeof(actions[0]); i++) { 94 if (strcmp(actions[i].env_var, recursive_call) == 0) 95 return (actions[i].action_fn)(); 96 } 97 printf("ERROR - missing action to take for %s\n", recursive_call); 98 return -1; 99 } 100 #endif 101 102 int 103 main(int argc, char **argv) 104 { 105 struct cmdline *cl; 106 int ret; 107 108 ret = rte_eal_init(argc, argv); 109 if (ret < 0) 110 return -1; 111 112 rte_timer_subsystem_init(); 113 114 argv += ret; 115 116 prgname = argv[0]; 117 118 #ifndef RTE_EXEC_ENV_BAREMETAL 119 if ((recursive_call = getenv(RECURSIVE_ENV_VAR)) != NULL) 120 return do_recursive_call(); 121 #endif 122 123 #ifdef RTE_LIBEAL_USE_HPET 124 if (rte_eal_hpet_init(1) < 0) 125 #endif 126 RTE_LOG(INFO, APP, 127 "HPET is not enabled, using TSC as default timer\n"); 128 129 130 131 cl = cmdline_stdin_new(main_ctx, "RTE>>"); 132 if (cl == NULL) { 133 return -1; 134 } 135 cmdline_interact(cl); 136 cmdline_stdin_exit(cl); 137 138 return 0; 139 } 140