xref: /dpdk/lib/node/node_private.h (revision e9fd1ebf981f361844aea9ec94e17f4bda5e1479)
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_PREFIX(level, NODE, "%s: %s():%u ",                       \
20 		node_name RTE_LOG_COMMA __func__ RTE_LOG_COMMA __LINE__,       \
21 		__VA_ARGS__)
22 
23 #define node_err(node_name, ...) NODE_LOG(ERR, node_name, __VA_ARGS__)
24 #define node_info(node_name, ...) NODE_LOG(INFO, node_name, __VA_ARGS__)
25 #define node_dbg(node_name, ...) NODE_LOG(DEBUG, node_name, __VA_ARGS__)
26 
27 /**
28  * Node mbuf private data to store next hop, ttl and checksum.
29  */
30 struct node_mbuf_priv1 {
31 	union {
32 		/* IP4/IP6 rewrite */
33 		struct {
34 			uint16_t nh;
35 			uint16_t ttl;
36 			uint32_t cksum;
37 		};
38 
39 		uint64_t u;
40 	};
41 };
42 
43 static const struct rte_mbuf_dynfield node_mbuf_priv1_dynfield_desc = {
44 	.name = "rte_node_dynfield_priv1",
45 	.size = sizeof(struct node_mbuf_priv1),
46 	.align = alignof(struct node_mbuf_priv1),
47 };
48 extern int node_mbuf_priv1_dynfield_offset;
49 
50 /**
51  * Node mbuf private area 2.
52  */
53 struct node_mbuf_priv2 {
54 	uint64_t priv_data;
55 } __rte_cache_aligned;
56 
57 #define NODE_MBUF_PRIV2_SIZE sizeof(struct node_mbuf_priv2)
58 
59 #define OBJS_PER_CLINE (RTE_CACHE_LINE_SIZE / sizeof(void *))
60 
61 /**
62  * Get mbuf_priv1 pointer from rte_mbuf.
63  *
64  * @param
65  *   Pointer to the rte_mbuf.
66  *
67  * @return
68  *   Pointer to the mbuf_priv1.
69  */
70 static __rte_always_inline struct node_mbuf_priv1 *
71 node_mbuf_priv1(struct rte_mbuf *m, const int offset)
72 {
73 	return RTE_MBUF_DYNFIELD(m, offset, struct node_mbuf_priv1 *);
74 }
75 
76 /**
77  * Get mbuf_priv2 pointer from rte_mbuf.
78  *
79  * @param
80  *   Pointer to the rte_mbuf.
81  *
82  * @return
83  *   Pointer to the mbuf_priv2.
84  */
85 static __rte_always_inline struct node_mbuf_priv2 *
86 node_mbuf_priv2(struct rte_mbuf *m)
87 {
88 	return (struct node_mbuf_priv2 *)rte_mbuf_to_priv(m);
89 }
90 
91 #endif /* __NODE_PRIVATE_H__ */
92