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