> -----Original Message----- > From: pbhagavat...@marvell.com <pbhagavat...@marvell.com> > Sent: Friday, August 16, 2024 8:39 PM > To: Jerin Jacob <jer...@marvell.com>; Nithin Kumar Dabilpuram > <ndabilpu...@marvell.com>; Kiran Kumar Kokkilagadda > <kirankum...@marvell.com>; zhirun....@intel.com; Pavan Nikhilesh > Bhagavatula <pbhagavat...@marvell.com>; Wathsala Vithanage > <wathsala.vithan...@arm.com>; Bruce Richardson > <bruce.richard...@intel.com>; Konstantin Ananyev > <konstantin.v.anan...@yandex.ru> > Cc: dev@dpdk.org > Subject: [PATCH v4 4/5] node: add error stats for ip4 lookup node > > From: Pavan Nikhilesh <pbhagavat...@marvell.com> > > Add error counters for ip4 LPM lookup failures in ip4_lookup node. > > Signed-off-by: Pavan Nikhilesh <pbhagavat...@marvell.com> > --- Acked-by: Kiran Kumar Kokkilagadda <kirankum...@marvell.com> > lib/node/ip4_lookup.c | 9 +++++++++ > lib/node/ip4_lookup_neon.h | 5 +++++ > lib/node/ip4_lookup_sse.h | 6 ++++++ > lib/node/node_private.h | 8 ++++++++ > 4 files changed, 28 insertions(+) > > diff --git a/lib/node/ip4_lookup.c b/lib/node/ip4_lookup.c index > 18955971f6..5a7921db75 100644 > --- a/lib/node/ip4_lookup.c > +++ b/lib/node/ip4_lookup.c > @@ -86,6 +86,7 @@ ip4_lookup_node_process_scalar(struct rte_graph *graph, > struct rte_node *node, > rc = rte_lpm_lookup(lpm, rte_be_to_cpu_32(ipv4_hdr- > >dst_addr), > &next_hop); > next_hop = (rc == 0) ? next_hop : drop_nh; > + NODE_INCREMENT_ERROR_ID(node, 0, (rc != 0), 1); > > node_mbuf_priv1(mbuf, dyn)->nh = (uint16_t)next_hop; > next_hop = next_hop >> 16; > @@ -219,11 +220,19 @@ ip4_lookup_node_init(const struct rte_graph *graph, > struct rte_node *node) > return 0; > } > > +static struct rte_node_errors ip4_lookup_errors = { > + .nb_errors = 1, > + .err_desc = { > + [0] = "ip4_lookup_error", > + }, > +}; > + > static struct rte_node_register ip4_lookup_node = { > .process = ip4_lookup_node_process_scalar, > .name = "ip4_lookup", > > .init = ip4_lookup_node_init, > + .errs = &ip4_lookup_errors, > > .nb_edges = RTE_NODE_IP4_LOOKUP_NEXT_PKT_DROP + 1, > .next_nodes = { > diff --git a/lib/node/ip4_lookup_neon.h b/lib/node/ip4_lookup_neon.h index > d5c8da3719..907c7c955a 100644 > --- a/lib/node/ip4_lookup_neon.h > +++ b/lib/node/ip4_lookup_neon.h > @@ -116,6 +116,10 @@ ip4_lookup_node_process_vec(struct rte_graph *graph, > struct rte_node *node, > priv01.u16[4] = result.u16[2]; > priv23.u16[0] = result.u16[4]; > priv23.u16[4] = result.u16[6]; > + NODE_INCREMENT_ERROR_ID(node, 0, result.u16[1] == > (drop_nh >> 16), 1); > + NODE_INCREMENT_ERROR_ID(node, 0, result.u16[3] == > (drop_nh >> 16), 1); > + NODE_INCREMENT_ERROR_ID(node, 0, result.u16[5] == > (drop_nh >> 16), 1); > + NODE_INCREMENT_ERROR_ID(node, 0, result.u16[7] == > (drop_nh >> 16), > +1); > > node_mbuf_priv1(mbuf0, dyn)->u = priv01.u64[0]; > node_mbuf_priv1(mbuf1, dyn)->u = priv01.u64[1]; @@ -202,6 > +206,7 @@ ip4_lookup_node_process_vec(struct rte_graph *graph, struct > rte_node *node, > &next_hop); > next_hop = (rc == 0) ? next_hop : drop_nh; > > + NODE_INCREMENT_ERROR_ID(node, 0, (rc != 0), 1); > node_mbuf_priv1(mbuf0, dyn)->nh = (uint16_t)next_hop; > next_hop = next_hop >> 16; > next0 = (uint16_t)next_hop; > diff --git a/lib/node/ip4_lookup_sse.h b/lib/node/ip4_lookup_sse.h index > 74dbf97533..a38131e629 100644 > --- a/lib/node/ip4_lookup_sse.h > +++ b/lib/node/ip4_lookup_sse.h > @@ -115,6 +115,11 @@ ip4_lookup_node_process_vec(struct rte_graph *graph, > struct rte_node *node, > /* Perform LPM lookup to get NH and next node */ > rte_lpm_lookupx4(lpm, dip, dst.u32, drop_nh); > > + NODE_INCREMENT_ERROR_ID(node, 0, dst.u16[1] == (drop_nh > >> 16), 1); > + NODE_INCREMENT_ERROR_ID(node, 0, dst.u16[3] == (drop_nh > >> 16), 1); > + NODE_INCREMENT_ERROR_ID(node, 0, dst.u16[5] == (drop_nh > >> 16), 1); > + NODE_INCREMENT_ERROR_ID(node, 0, dst.u16[7] == (drop_nh > >> 16), 1); > + > /* Extract next node id and NH */ > node_mbuf_priv1(mbuf0, dyn)->nh = dst.u32[0] & 0xFFFF; > next0 = (dst.u32[0] >> 16); > @@ -206,6 +211,7 @@ ip4_lookup_node_process_vec(struct rte_graph *graph, > struct rte_node *node, > rc = rte_lpm_lookup(lpm, rte_be_to_cpu_32(ipv4_hdr- > >dst_addr), > &next_hop); > next_hop = (rc == 0) ? next_hop : drop_nh; > + NODE_INCREMENT_ERROR_ID(node, 0, rc != 0, 1); > > node_mbuf_priv1(mbuf0, dyn)->nh = next_hop & 0xFFFF; > next0 = (next_hop >> 16); > diff --git a/lib/node/node_private.h b/lib/node/node_private.h index > 1de7306792..36b2a733db 100644 > --- a/lib/node/node_private.h > +++ b/lib/node/node_private.h > @@ -12,6 +12,8 @@ > #include <rte_mbuf.h> > #include <rte_mbuf_dyn.h> > > +#include <rte_graph_worker_common.h> > + > extern int rte_node_logtype; > #define RTE_LOGTYPE_NODE rte_node_logtype > > @@ -88,4 +90,10 @@ node_mbuf_priv2(struct rte_mbuf *m) > return (struct node_mbuf_priv2 *)rte_mbuf_to_priv(m); } > > +#define NODE_INCREMENT_ERROR_ID(node, id, cond, cnt) > \ > + { > \ > + if (unlikely(rte_graph_has_stats_feature() && (cond))) > \ > + ((uint64_t *)RTE_PTR_ADD(node, node->err_off))[id] += > (cnt); \ > + } > + > #endif /* __NODE_PRIVATE_H__ */ > -- > 2.25.1