From: Ankur Dwivedi <adwivedi@marvell.com>
To: <dev@dpdk.org>
Cc: <jerinj@marvell.com>, <vladimir.medvedkin@intel.com>,
<ndabilpuram@marvell.com>, <pbhagavatula@marvell.com>,
<skori@marvell.com>, <rkudurumalla@marvell.com>,
Ankur Dwivedi <adwivedi@marvell.com>
Subject: [PATCH v1 06/12] app/graph: add IP4 lookup mode command
Date: Tue, 15 Apr 2025 17:40:46 +0530 [thread overview]
Message-ID: <20250415121052.1497155-7-adwivedi@marvell.com> (raw)
In-Reply-To: <20250415121052.1497155-1-adwivedi@marvell.com>
Adds a command to setup lookup mode for IP4 packets. By default the
LPM mode is used.
FIB can be given as a lookup mode by specifying the mode in CLI file.
When FIB is given as lookup mode, the next node of packet classification
node is updated to use IP4 lookup fib node.
Signed-off-by: Ankur Dwivedi <adwivedi@marvell.com>
---
app/graph/commands.list | 1 +
app/graph/ip4_route.c | 34 ++++++++++++++++++++++++++++++----
app/graph/l3fwd.c | 12 ++++++++++++
app/graph/module_api.h | 7 +++++++
doc/guides/tools/graph.rst | 12 ++++++++----
5 files changed, 58 insertions(+), 8 deletions(-)
diff --git a/app/graph/commands.list b/app/graph/commands.list
index c027f73b0e..7a1bf0c708 100644
--- a/app/graph/commands.list
+++ b/app/graph/commands.list
@@ -23,6 +23,7 @@ ethdev_rx map port <STRING>dev queue <UINT32>qid core <UINT32>core_id # Port-Que
help ethdev_rx # Print help on ethdev_rx commands
ipv4_lookup route add ipv4 <IPv4>ip netmask <IPv4>mask via <IPv4>via_ip # Add IPv4 route to LPM table
+ipv4_lookup mode <STRING>lkup_mode # Set IPv4 lookup mode
help ipv4_lookup # Print help on ipv4_lookup commands
ipv6_lookup route add ipv6 <IPv6>ip netmask <IPv6>mask via <IPv6>via_ip # Add IPv6 route to LPM6 table
diff --git a/app/graph/ip4_route.c b/app/graph/ip4_route.c
index 48ea912597..9af2c26078 100644
--- a/app/graph/ip4_route.c
+++ b/app/graph/ip4_route.c
@@ -18,8 +18,13 @@
static const char
cmd_ipv4_lookup_help[] = "ipv4_lookup route add ipv4 <ip> netmask <mask> via <ip>";
+static const char
+cmd_ipv4_lookup_mode_help[] = "ipv4_lookup mode <lpm|fib>";
+
struct ip4_route route4 = TAILQ_HEAD_INITIALIZER(route4);
+enum ip4_lookup_mode ip4_lookup_m = IP4_LOOKUP_LPM;
+
void
route_ip4_list_clean(void)
{
@@ -62,6 +67,7 @@ route4_rewirte_table_update(struct route_ipv4_config *ipv4route)
{
uint8_t depth;
int portid;
+ int rc;
portid = ethdev_portid_by_ip4(ipv4route->via, ipv4route->netmask);
if (portid < 0) {
@@ -71,8 +77,14 @@ route4_rewirte_table_update(struct route_ipv4_config *ipv4route)
depth = convert_netmask_to_depth(ipv4route->netmask);
- return rte_node_ip4_route_add(ipv4route->ip, depth, portid,
- RTE_NODE_IP4_LOOKUP_NEXT_REWRITE);
+ if (ip4_lookup_m == IP4_LOOKUP_FIB)
+ rc = rte_node_ip4_fib_route_add(ipv4route->ip, depth, portid,
+ RTE_NODE_IP4_LOOKUP_NEXT_REWRITE);
+ else
+ rc = rte_node_ip4_route_add(ipv4route->ip, depth, portid,
+ RTE_NODE_IP4_LOOKUP_NEXT_REWRITE);
+
+ return rc;
}
static int
@@ -134,9 +146,9 @@ cmd_help_ipv4_lookup_parsed(__rte_unused void *parsed_result, __rte_unused struc
len = strlen(conn->msg_out);
conn->msg_out += len;
- snprintf(conn->msg_out, conn->msg_out_len_max, "\n%s\n%s\n",
+ snprintf(conn->msg_out, conn->msg_out_len_max, "\n%s\n%s\n%s\n",
"--------------------------- ipv4_lookup command help ---------------------------",
- cmd_ipv4_lookup_help);
+ cmd_ipv4_lookup_help, cmd_ipv4_lookup_mode_help);
len = strlen(conn->msg_out);
conn->msg_out_len_max -= len;
@@ -158,3 +170,17 @@ cmd_ipv4_lookup_route_add_ipv4_parsed(void *parsed_result, __rte_unused struct c
if (rc < 0)
printf(MSG_CMD_FAIL, res->ipv4_lookup);
}
+
+void
+cmd_ipv4_lookup_mode_parsed(void *parsed_result, __rte_unused struct cmdline *cl,
+ void *data __rte_unused)
+{
+ struct cmd_ipv4_lookup_mode_result *res = parsed_result;
+
+ if (!strcmp(res->lkup_mode, "lpm"))
+ ip4_lookup_m = IP4_LOOKUP_LPM;
+ else if (!strcmp(res->lkup_mode, "fib"))
+ ip4_lookup_m = IP4_LOOKUP_FIB;
+ else
+ printf(MSG_CMD_FAIL, res->ipv4_lookup);
+}
diff --git a/app/graph/l3fwd.c b/app/graph/l3fwd.c
index a2648df27d..cb64e66026 100644
--- a/app/graph/l3fwd.c
+++ b/app/graph/l3fwd.c
@@ -53,6 +53,18 @@ l3fwd_pattern_configure(void)
graph_conf.num_pkt_to_capture = pcap_pkts_count;
graph_conf.pcap_filename = strdup(pcap_file);
+ if (ip4_lookup_m == IP4_LOOKUP_FIB) {
+ const char *fib_n = "ip4_lookup_fib";
+ const char *lpm_n = "ip4_lookup";
+ rte_node_t pkt_cls;
+#define IP4_LKUP_ACTIVE_EDGE 1
+#define IP4_LKUP_INACTIVE_EDGE 3
+
+ pkt_cls = rte_node_from_name("pkt_cls");
+ rte_node_edge_update(pkt_cls, IP4_LKUP_ACTIVE_EDGE, &fib_n, 1);
+ rte_node_edge_update(pkt_cls, IP4_LKUP_INACTIVE_EDGE, &lpm_n, 1);
+ }
+
for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
rte_graph_t graph_id;
rte_edge_t i;
diff --git a/app/graph/module_api.h b/app/graph/module_api.h
index b872872dc1..b8188d30d5 100644
--- a/app/graph/module_api.h
+++ b/app/graph/module_api.h
@@ -27,6 +27,13 @@
extern volatile bool force_quit;
extern struct conn *conn;
+enum ip4_lookup_mode {
+ IP4_LOOKUP_LPM,
+ IP4_LOOKUP_FIB
+};
+
+extern enum ip4_lookup_mode ip4_lookup_m;
+
bool app_graph_stats_enabled(void);
bool app_graph_exit(void);
diff --git a/doc/guides/tools/graph.rst b/doc/guides/tools/graph.rst
index d8c147d73e..2caf441591 100644
--- a/doc/guides/tools/graph.rst
+++ b/doc/guides/tools/graph.rst
@@ -235,10 +235,14 @@ file to express the requested use case configuration.
| | | message. | | |
+--------------------------------------+-----------------------------------+-------------------+----------+
| | ipv4_lookup route add ipv4 <ip> | | Command to add a route into | :ref:`3 <scopes>` | Yes |
- | | netmask <mask> via <ip> | | ``ipv4_lookup`` LPM table. It is| | |
- | | | needed if user wishes to route | | |
- | | | the packets based on LPM lookup | | |
- | | | table. | | |
+ | | netmask <mask> via <ip> | | ``ipv4_lookup`` LPM table or | | |
+ | | | FIB. It is needed if user wishes| | |
+ | | | to route the packets based on | | |
+ | | | LPM lookup table or FIB. | | |
+ +--------------------------------------+-----------------------------------+-------------------+----------+
+ | | ipv4_lookup mode <lpm|fib> | | Command to set ipv4 lookup mode | :ref:`1 <scopes>` | Yes |
+ | | | to either LPM or FIB. By default| | |
+ | | | the lookup mode is LPM. | | |
+--------------------------------------+-----------------------------------+-------------------+----------+
| help ipv4_lookup | | Command to dump ``ipv4_lookup`` | :ref:`2 <scopes>` | Yes |
| | | help message. | | |
--
2.25.1
next prev parent reply other threads:[~2025-04-15 12:11 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-15 12:10 [PATCH v1 00/12] add lookup fib nodes in graph library Ankur Dwivedi
2025-04-15 12:10 ` [PATCH v1 01/12] fib: move macro to header file Ankur Dwivedi
2025-04-15 12:10 ` [PATCH v1 02/12] node: add IP4 lookup FIB node Ankur Dwivedi
2025-04-16 7:32 ` Nitin Saxena
2025-04-16 10:26 ` [EXTERNAL] " Ankur Dwivedi
2025-04-16 9:34 ` Medvedkin, Vladimir
2025-04-16 10:07 ` [EXTERNAL] " Ankur Dwivedi
2025-04-15 12:10 ` [PATCH v1 03/12] node: add IP4 FIB route add Ankur Dwivedi
2025-04-15 12:10 ` [PATCH v1 04/12] node: add process callback for IP4 FIB Ankur Dwivedi
2025-04-16 7:54 ` Nitin Saxena
2025-04-16 12:54 ` Medvedkin, Vladimir
2025-04-18 7:38 ` [EXTERNAL] " Ankur Dwivedi
2025-04-15 12:10 ` [PATCH v1 05/12] node: add next node in packet classification Ankur Dwivedi
2025-04-15 12:10 ` Ankur Dwivedi [this message]
2025-04-15 12:10 ` [PATCH v1 07/12] fib: move macro to header file Ankur Dwivedi
2025-04-15 12:10 ` [PATCH v1 08/12] node: add IP6 lookup FIB node Ankur Dwivedi
2025-04-15 12:10 ` [PATCH v1 09/12] node: add IP6 FIB route add Ankur Dwivedi
2025-04-15 12:10 ` [PATCH v1 10/12] node: add process callback for IP6 FIB Ankur Dwivedi
2025-04-15 12:10 ` [PATCH v1 11/12] node: add next node in packet classification Ankur Dwivedi
2025-04-15 12:10 ` [PATCH v1 12/12] app/graph: add IP6 lookup mode command Ankur Dwivedi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250415121052.1497155-7-adwivedi@marvell.com \
--to=adwivedi@marvell.com \
--cc=dev@dpdk.org \
--cc=jerinj@marvell.com \
--cc=ndabilpuram@marvell.com \
--cc=pbhagavatula@marvell.com \
--cc=rkudurumalla@marvell.com \
--cc=skori@marvell.com \
--cc=vladimir.medvedkin@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).