LCOV - code coverage report
Current view: top level - app/graph - l3fwd.c (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 49 0.0 %
Date: 2025-01-02 22:41:34 Functions: 0 2 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright(c) 2023 Marvell.
       3                 :            :  */
       4                 :            : 
       5                 :            : #include <errno.h>
       6                 :            : #include <stdbool.h>
       7                 :            : #include <stdint.h>
       8                 :            : #include <stdio.h>
       9                 :            : #include <stdlib.h>
      10                 :            : #include <string.h>
      11                 :            : 
      12                 :            : #include <rte_common.h>
      13                 :            : #include <rte_ethdev.h>
      14                 :            : #include <rte_graph.h>
      15                 :            : #include <rte_graph_worker.h>
      16                 :            : #include <rte_lcore.h>
      17                 :            : #include <rte_node_eth_api.h>
      18                 :            : 
      19                 :            : #include "module_api.h"
      20                 :            : 
      21                 :            : static int
      22                 :          0 : l3fwd_pattern_configure(void)
      23                 :            : {
      24                 :            :         /* Graph initialization. 8< */
      25                 :            :         static const char * const default_patterns[] = {
      26                 :            :                 "ip4*",
      27                 :            :                 "ethdev_tx-*",
      28                 :            :                 "pkt_drop",
      29                 :            :         };
      30                 :            :         struct rte_graph_param graph_conf;
      31                 :            :         const char **node_patterns;
      32                 :            :         uint64_t pcap_pkts_count;
      33                 :            :         struct lcore_conf *qconf;
      34                 :            :         uint16_t nb_patterns;
      35                 :            :         uint8_t pcap_ena;
      36                 :            :         int rc, lcore_id;
      37                 :            :         char *pcap_file;
      38                 :            : 
      39                 :            :         nb_patterns = RTE_DIM(default_patterns);
      40                 :          0 :         node_patterns = malloc((ETHDEV_RX_QUEUE_PER_LCORE_MAX + nb_patterns) *
      41                 :            :                         sizeof(*node_patterns));
      42                 :          0 :         if (!node_patterns)
      43                 :            :                 return -ENOMEM;
      44                 :            :         memcpy(node_patterns, default_patterns,
      45                 :            :                         nb_patterns * sizeof(*node_patterns));
      46                 :            : 
      47                 :            :         memset(&graph_conf, 0, sizeof(graph_conf));
      48                 :          0 :         graph_conf.node_patterns = node_patterns;
      49                 :            : 
      50                 :            :         /* Pcap config */
      51                 :          0 :         graph_pcap_config_get(&pcap_ena, &pcap_pkts_count, &pcap_file);
      52                 :          0 :         graph_conf.pcap_enable = pcap_ena;
      53                 :          0 :         graph_conf.num_pkt_to_capture = pcap_pkts_count;
      54                 :          0 :         graph_conf.pcap_filename = strdup(pcap_file);
      55                 :            : 
      56                 :          0 :         for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
      57                 :            :                 rte_graph_t graph_id;
      58                 :            :                 rte_edge_t i;
      59                 :            : 
      60                 :          0 :                 if (rte_lcore_is_enabled(lcore_id) == 0)
      61                 :          0 :                         continue;
      62                 :            : 
      63                 :            :                 qconf = &lcore_conf[lcore_id];
      64                 :            : 
      65                 :            :                 /* Skip graph creation if no source exists */
      66                 :          0 :                 if (!qconf->n_rx_queue)
      67                 :          0 :                         continue;
      68                 :            : 
      69                 :            :                 /* Add rx node patterns of this lcore */
      70                 :          0 :                 for (i = 0; i < qconf->n_rx_queue; i++) {
      71                 :          0 :                         graph_conf.node_patterns[nb_patterns + i] =
      72                 :          0 :                                 qconf->rx_queue_list[i].node_name;
      73                 :            :                 }
      74                 :            : 
      75                 :          0 :                 graph_conf.nb_node_patterns = nb_patterns + i;
      76                 :          0 :                 graph_conf.socket_id = rte_lcore_to_socket_id(lcore_id);
      77                 :            : 
      78                 :          0 :                 snprintf(qconf->name, sizeof(qconf->name), "worker_%u",
      79                 :            :                                 lcore_id);
      80                 :            : 
      81                 :          0 :                 graph_id = rte_graph_create(qconf->name, &graph_conf);
      82                 :          0 :                 if (graph_id == RTE_GRAPH_ID_INVALID)
      83                 :          0 :                         rte_exit(EXIT_FAILURE,
      84                 :            :                                         "rte_graph_create(): graph_id invalid"
      85                 :            :                                         " for lcore %u\n", lcore_id);
      86                 :            : 
      87                 :          0 :                 qconf->graph_id = graph_id;
      88                 :          0 :                 qconf->graph = rte_graph_lookup(qconf->name);
      89                 :            :                 /* >8 End of graph initialization. */
      90                 :          0 :                 if (!qconf->graph)
      91                 :          0 :                         rte_exit(EXIT_FAILURE,
      92                 :            :                                         "rte_graph_lookup(): graph %s not found\n",
      93                 :            :                                         qconf->name);
      94                 :            :         }
      95                 :            : 
      96                 :          0 :         rc = route_ip4_add_to_lookup();
      97                 :          0 :         if (rc < 0)
      98                 :          0 :                 rte_exit(EXIT_FAILURE, "Unable to add v4 route to lookup table\n");
      99                 :            : 
     100                 :          0 :         rc = route_ip6_add_to_lookup();
     101                 :          0 :         if (rc < 0)
     102                 :          0 :                 rte_exit(EXIT_FAILURE, "Unable to add v6 route to lookup table\n");
     103                 :            : 
     104                 :          0 :         rc = neigh_ip4_add_to_rewrite();
     105                 :          0 :         if (rc < 0)
     106                 :          0 :                 rte_exit(EXIT_FAILURE, "Unable to add v4 to rewrite node\n");
     107                 :            : 
     108                 :          0 :         rc = neigh_ip6_add_to_rewrite();
     109                 :          0 :         if (rc < 0)
     110                 :          0 :                 rte_exit(EXIT_FAILURE, "Unable to add v6 to rewrite node\n");
     111                 :            : 
     112                 :            :         /* Launch per-lcore init on every worker lcore */
     113                 :          0 :         rte_eal_mp_remote_launch(graph_walk_start, NULL, SKIP_MAIN);
     114                 :            : 
     115                 :            :         /* Accumulate and print stats on main until exit */
     116                 :          0 :         if (rte_graph_has_stats_feature() && app_graph_stats_enabled())
     117                 :          0 :                 graph_stats_print();
     118                 :            : 
     119                 :            :         return rc;
     120                 :            : }
     121                 :            : 
     122                 :            : int
     123                 :          0 : usecase_l3fwd_configure(struct rte_node_ethdev_config *conf, uint16_t nb_confs, uint16_t nb_graphs)
     124                 :            : {
     125                 :            :         int rc;
     126                 :            : 
     127                 :          0 :         rc = rte_node_eth_config(conf, nb_confs, nb_graphs);
     128                 :          0 :         if (rc)
     129                 :          0 :                 rte_exit(EXIT_FAILURE, "rte_node_eth_config: err=%d\n", rc);
     130                 :            : 
     131                 :          0 :         rc = l3fwd_pattern_configure();
     132                 :          0 :         if (rc)
     133                 :          0 :                 rte_exit(EXIT_FAILURE, "l3fwd_pattern_failure: err=%d\n", rc);
     134                 :            : 
     135                 :          0 :         return rc;
     136                 :            : }

Generated by: LCOV version 1.14