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