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