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