LCOV - code coverage report
Current view: top level - root/contrail/vrouter/dpdk - vr_dpdk_conf.c (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 0 94 0.0 %
Date: 2026-11-09 02:10:49 Functions: 0 6 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.14