xref: /f-stack/dpdk/lib/librte_node/node_private.h (revision 2d9fd380)
1*2d9fd380Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2*2d9fd380Sjfb8856606  * Copyright(C) 2020 Marvell International Ltd.
3*2d9fd380Sjfb8856606  */
4*2d9fd380Sjfb8856606 
5*2d9fd380Sjfb8856606 #ifndef __NODE_PRIVATE_H__
6*2d9fd380Sjfb8856606 #define __NODE_PRIVATE_H__
7*2d9fd380Sjfb8856606 
8*2d9fd380Sjfb8856606 #include <rte_common.h>
9*2d9fd380Sjfb8856606 #include <rte_log.h>
10*2d9fd380Sjfb8856606 #include <rte_mbuf.h>
11*2d9fd380Sjfb8856606 #include <rte_mbuf_dyn.h>
12*2d9fd380Sjfb8856606 
13*2d9fd380Sjfb8856606 extern int rte_node_logtype;
14*2d9fd380Sjfb8856606 #define NODE_LOG(level, node_name, ...)                                        \
15*2d9fd380Sjfb8856606 	rte_log(RTE_LOG_##level, rte_node_logtype,                             \
16*2d9fd380Sjfb8856606 		RTE_FMT("NODE %s: %s():%u " RTE_FMT_HEAD(__VA_ARGS__, ) "\n",  \
17*2d9fd380Sjfb8856606 			node_name, __func__, __LINE__,                         \
18*2d9fd380Sjfb8856606 			RTE_FMT_TAIL(__VA_ARGS__, )))
19*2d9fd380Sjfb8856606 
20*2d9fd380Sjfb8856606 #define node_err(node_name, ...) NODE_LOG(ERR, node_name, __VA_ARGS__)
21*2d9fd380Sjfb8856606 #define node_info(node_name, ...) NODE_LOG(INFO, node_name, __VA_ARGS__)
22*2d9fd380Sjfb8856606 #define node_dbg(node_name, ...) NODE_LOG(DEBUG, node_name, __VA_ARGS__)
23*2d9fd380Sjfb8856606 
24*2d9fd380Sjfb8856606 /**
25*2d9fd380Sjfb8856606  * Node mbuf private data to store next hop, ttl and checksum.
26*2d9fd380Sjfb8856606  */
27*2d9fd380Sjfb8856606 struct node_mbuf_priv1 {
28*2d9fd380Sjfb8856606 	union {
29*2d9fd380Sjfb8856606 		/* IP4 rewrite */
30*2d9fd380Sjfb8856606 		struct {
31*2d9fd380Sjfb8856606 			uint16_t nh;
32*2d9fd380Sjfb8856606 			uint16_t ttl;
33*2d9fd380Sjfb8856606 			uint32_t cksum;
34*2d9fd380Sjfb8856606 		};
35*2d9fd380Sjfb8856606 
36*2d9fd380Sjfb8856606 		uint64_t u;
37*2d9fd380Sjfb8856606 	};
38*2d9fd380Sjfb8856606 };
39*2d9fd380Sjfb8856606 
40*2d9fd380Sjfb8856606 static const struct rte_mbuf_dynfield node_mbuf_priv1_dynfield_desc = {
41*2d9fd380Sjfb8856606 	.name = "rte_node_dynfield_priv1",
42*2d9fd380Sjfb8856606 	.size = sizeof(struct node_mbuf_priv1),
43*2d9fd380Sjfb8856606 	.align = __alignof__(struct node_mbuf_priv1),
44*2d9fd380Sjfb8856606 };
45*2d9fd380Sjfb8856606 extern int node_mbuf_priv1_dynfield_offset;
46*2d9fd380Sjfb8856606 
47*2d9fd380Sjfb8856606 /**
48*2d9fd380Sjfb8856606  * Node mbuf private area 2.
49*2d9fd380Sjfb8856606  */
50*2d9fd380Sjfb8856606 struct node_mbuf_priv2 {
51*2d9fd380Sjfb8856606 	uint64_t priv_data;
52*2d9fd380Sjfb8856606 } __rte_cache_aligned;
53*2d9fd380Sjfb8856606 
54*2d9fd380Sjfb8856606 #define NODE_MBUF_PRIV2_SIZE sizeof(struct node_mbuf_priv2)
55*2d9fd380Sjfb8856606 
56*2d9fd380Sjfb8856606 #define OBJS_PER_CLINE (RTE_CACHE_LINE_SIZE / sizeof(void *))
57*2d9fd380Sjfb8856606 
58*2d9fd380Sjfb8856606 /**
59*2d9fd380Sjfb8856606  * Get mbuf_priv1 pointer from rte_mbuf.
60*2d9fd380Sjfb8856606  *
61*2d9fd380Sjfb8856606  * @param
62*2d9fd380Sjfb8856606  *   Pointer to the rte_mbuf.
63*2d9fd380Sjfb8856606  *
64*2d9fd380Sjfb8856606  * @return
65*2d9fd380Sjfb8856606  *   Pointer to the mbuf_priv1.
66*2d9fd380Sjfb8856606  */
67*2d9fd380Sjfb8856606 static __rte_always_inline struct node_mbuf_priv1 *
node_mbuf_priv1(struct rte_mbuf * m,const int offset)68*2d9fd380Sjfb8856606 node_mbuf_priv1(struct rte_mbuf *m, const int offset)
69*2d9fd380Sjfb8856606 {
70*2d9fd380Sjfb8856606 	return RTE_MBUF_DYNFIELD(m, offset, struct node_mbuf_priv1 *);
71*2d9fd380Sjfb8856606 }
72*2d9fd380Sjfb8856606 
73*2d9fd380Sjfb8856606 /**
74*2d9fd380Sjfb8856606  * Get mbuf_priv2 pointer from rte_mbuf.
75*2d9fd380Sjfb8856606  *
76*2d9fd380Sjfb8856606  * @param
77*2d9fd380Sjfb8856606  *   Pointer to the rte_mbuf.
78*2d9fd380Sjfb8856606  *
79*2d9fd380Sjfb8856606  * @return
80*2d9fd380Sjfb8856606  *   Pointer to the mbuf_priv2.
81*2d9fd380Sjfb8856606  */
82*2d9fd380Sjfb8856606 static __rte_always_inline struct node_mbuf_priv2 *
node_mbuf_priv2(struct rte_mbuf * m)83*2d9fd380Sjfb8856606 node_mbuf_priv2(struct rte_mbuf *m)
84*2d9fd380Sjfb8856606 {
85*2d9fd380Sjfb8856606 	return (struct node_mbuf_priv2 *)rte_mbuf_to_priv(m);
86*2d9fd380Sjfb8856606 }
87*2d9fd380Sjfb8856606 
88*2d9fd380Sjfb8856606 #endif /* __NODE_PRIVATE_H__ */
89