Line data Source code
1 : /* 2 : * vr_dpdk_conf.c - DPDK specific callback functions for dpdkconf CLI. 3 : * 4 : * Copyright (c) 2020 Juniper Networks, Inc. All rights reserved. 5 : */ 6 : 7 : #include <vr_os.h> 8 : #include <vr_types.h> 9 : #include <string.h> 10 : #include <sys/types.h> 11 : #include <sys/stat.h> 12 : #include <fcntl.h> 13 : #include <stdio.h> 14 : #include <stdlib.h> 15 : #include <ctype.h> 16 : #include <rte_log.h> 17 : #include <rte_eal.h> 18 : 19 : #include "vr_dpdk.h" 20 : #include "vrouter.h" 21 : 22 : struct rte_log_dynamic_type { 23 : const char *name; 24 : uint32_t loglevel; 25 : }; 26 : 27 : int 28 0 : dpdk_conf_add_ddp(VR_INFO_ARGS) 29 : { 30 0 : VR_INFO_BUF_INIT(); 31 : int ret; 32 : 33 0 : ret = vr_dpdk_process_ddp_package(VR_DPDK_DDP_ADD); 34 0 : if(ret == 0) { 35 0 : vr_dpdk_set_ddp(); 36 0 : VI_PRINTF("Programming DDP image mplsogreudp - success \n\n"); 37 0 : return 0; 38 0 : } else if (ret == VR_DPDK_DDP_FAILED) { 39 0 : VI_PRINTF("Failed to load DDP profile, Check DPDK log file for errors\n\n"); 40 0 : } else if(ret == VR_DPDK_DDP_NOT_SUPPORTED) { 41 0 : VI_PRINTF("DDP works only on X710 NIC series\n\n"); 42 : } else { 43 0 : VI_PRINTF("Programming DDP image mplsogreudp - failed(%d) \n\n", ret); 44 : } 45 : /* If DDP firmware not programmed on any ports, then dont disable software 46 : * load balancing */ 47 0 : vr_dpdk_reset_ddp(); 48 0 : return 0; 49 : } 50 : 51 : int 52 0 : dpdk_conf_del_ddp(VR_INFO_ARGS) 53 : { 54 0 : VR_INFO_BUF_INIT(); 55 : int ret; 56 : 57 0 : ret = vr_dpdk_process_ddp_package(VR_DPDK_DDP_DELETE); 58 0 : if(ret == 0) { 59 0 : vr_dpdk_reset_ddp(); 60 0 : VI_PRINTF("Removing DDP image mplsogreudp - success \n\n"); 61 0 : } else if (ret == VR_DPDK_DDP_FAILED) { 62 0 : VI_PRINTF("Failed to remove DDP profile, Check DPDK log file for errors\n\n"); 63 0 : } else if(ret == VR_DPDK_DDP_NOT_SUPPORTED) { 64 0 : VI_PRINTF("DDP works only on X710 NIC series\n\n"); 65 : } else { 66 0 : VI_PRINTF("Removing DDP image mplsogreudp - failed(%d) \n\n", ret); 67 : } 68 0 : return 0; 69 : } 70 : 71 : int 72 0 : dpdk_conf_log(VR_INFO_ARGS) 73 : { 74 0 : VR_INFO_BUF_INIT(); 75 0 : char *log_type = strtok(msg_req->inbuf," "); 76 0 : char *log_level = strtok(NULL," "); 77 : 78 0 : if (strcmp(log_type,"GLOBAL") == 0 || strcmp(log_type,"global") == 0 || strcmp(log_type,"Global") == 0) { 79 0 : VI_PRINTF("\nSetting global Loglevel to :%s ", log_level); 80 0 : VI_PRINTF("\n\n"); 81 0 : rte_log_set_global_level((uint32_t) atoi(log_level)); 82 0 : return 0; 83 : } 84 0 : if (atoi(log_level) > RTE_LOG_DEBUG || atoi(log_level) < RTE_LOG_EMERG) 85 0 : return -1; 86 0 : if (atoi(log_type) == rte_log_register("pmd.net.i40e.driver")) { 87 : int i40e_logtype_driver; 88 0 : i40e_logtype_driver = rte_log_register("pmd.net.i40e.driver"); 89 0 : if (i40e_logtype_driver >= 0) 90 0 : rte_log_set_level(i40e_logtype_driver, atoi(log_level)); 91 0 : } else if (atoi(log_type) == rte_log_register("pmd.net.bond")) { 92 : int bond_logtype; 93 0 : bond_logtype = rte_log_register("pmd.net.bond"); 94 0 : if (bond_logtype >= 0) 95 0 : rte_log_set_level(bond_logtype, atoi(log_level)); 96 0 : } else if (atoi(log_type) == rte_log_register("pmd.net.ixgbe.driver")) { 97 : int ixgbe_logtype_driver; 98 0 : ixgbe_logtype_driver = rte_log_register("pmd.net.ixgbe.driver"); 99 0 : if (ixgbe_logtype_driver >= 0) 100 0 : rte_log_set_level(ixgbe_logtype_driver, atoi(log_level)); 101 0 : } else if (atoi(log_type) == rte_log_register("pmd.net.e1000.driver")) { 102 : int e1000_logtype_driver; 103 0 : e1000_logtype_driver = rte_log_register("pmd.net.e1000.driver"); 104 0 : if (e1000_logtype_driver >= 0) 105 0 : rte_log_set_level(e1000_logtype_driver, atoi(log_level)); 106 : } else { 107 0 : rte_log_set_level(atoi(log_type), atoi(log_level)); 108 : } 109 0 : if (rte_log_get_global_level() < atoi(log_level)) { 110 0 : rte_log_set_global_level((uint32_t) atoi(log_level)); 111 : } 112 : 113 0 : VI_PRINTF("\nLog level changed for %s,current level is %s\n\n", log_type, log_level); 114 0 : return 0; 115 : } 116 : 117 : static const char * 118 0 : loglevel_to_string(uint32_t level) 119 : { 120 0 : switch (level) { 121 0 : case 0: return "disabled"; 122 0 : case RTE_LOG_EMERG: return "emerg"; 123 0 : case RTE_LOG_ALERT: return "alert"; 124 0 : case RTE_LOG_CRIT: return "critical"; 125 0 : case RTE_LOG_ERR: return "error"; 126 0 : case RTE_LOG_WARNING: return "warning"; 127 0 : case RTE_LOG_NOTICE: return "notice"; 128 0 : case RTE_LOG_INFO: return "info"; 129 0 : case RTE_LOG_DEBUG: return "debug"; 130 0 : default: return "unknown"; 131 : } 132 : } 133 : 134 : static const char * 135 0 : logtype_to_string(uint32_t logtype, int i) 136 : { 137 0 : switch (logtype) { 138 0 : case RTE_LOGTYPE_USER1: return "vrouter"; 139 0 : case RTE_LOGTYPE_USER2: return "usock"; 140 0 : case RTE_LOGTYPE_USER3: return "uvhost"; 141 0 : case RTE_LOGTYPE_USER4: return "dpcore"; 142 0 : default: return rte_logs.dynamic_types[i].name; 143 : } 144 : } 145 : 146 : int 147 0 : dpdk_conf_log_list(VR_INFO_ARGS) 148 : { 149 0 : VR_INFO_BUF_INIT(); 150 : size_t i; 151 0 : VI_PRINTF("global log level is %s\n", loglevel_to_string(rte_log_get_global_level())); 152 0 : VI_PRINTF(" ------------------------------------------------------------ \n"); 153 0 : VI_PRINTF("| ID | LOGTYPE | LOGLEVEL |\n"); 154 0 : VI_PRINTF(" ------------------------------------------------------------ \n"); 155 0 : for (i = 0; i < rte_logs.dynamic_types_len; i++) { 156 0 : if (rte_logs.dynamic_types[i].name == NULL) 157 0 : continue; 158 0 : if (i <= 9) { 159 0 : VI_PRINTF("| %zu | %-34s | %-16s |", i, logtype_to_string(rte_log_register(rte_logs.dynamic_types[i].name),i), 160 : loglevel_to_string(rte_logs.dynamic_types[i].loglevel)); 161 0 : VI_PRINTF("\n"); 162 : } 163 : else { 164 0 : VI_PRINTF("| %zu | %-34s | %-16s |", i, logtype_to_string(rte_log_register(rte_logs.dynamic_types[i].name),i), 165 : loglevel_to_string(rte_logs.dynamic_types[i].loglevel)); 166 0 : VI_PRINTF("\n"); 167 : } 168 : } 169 0 : VI_PRINTF(" ------------------------------------------------------------ \n"); 170 0 : VI_PRINTF("\n"); 171 0 : return 0; 172 : }