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-08-03 02:19:58 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             :  */
       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             : }

Generated by: LCOV version 1.14