diff options
Diffstat (limited to 'hicn-plugin/src/hicn.h')
-rw-r--r-- | hicn-plugin/src/hicn.h | 132 |
1 files changed, 86 insertions, 46 deletions
diff --git a/hicn-plugin/src/hicn.h b/hicn-plugin/src/hicn.h index 3d980bd49..7231773d7 100644 --- a/hicn-plugin/src/hicn.h +++ b/hicn-plugin/src/hicn.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2020 Cisco and/or its affiliates. + * Copyright (c) 2021-2022 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -16,20 +16,7 @@ #ifndef __HICN_H__ #define __HICN_H__ -#define ip_address_t hicn_ip_address_t -#define ip_address_cmp hicn_ip_address_cmp -#define ip_prefix_t hicn_ip_prefix_t -#define ip_prefix_cmp hicn_ip_prefix_cmp -#undef ip_prefix_len -#define ip_prefix_len hicn_ip_prefix_len #include <hicn/hicn.h> -#undef ip_address_t -#undef ip_address_cmp -#undef ip_prefix_t -#undef ip_prefix_cmp -#undef ip_prefix_len -#define ip_prefix_len(_a) (_a)->len - #include "faces/face.h" #include <netinet/in.h> @@ -43,10 +30,6 @@ * @file */ -/* Helper for avoiding warnings about type-punning */ -#define UNION_CAST(x, destType) \ - (((union {__typeof__(x) a; destType b;})x).b) - /* * Update CMakeLists.txt as we have to manually replace the type for * vppapigen @@ -54,59 +37,116 @@ typedef u8 weight_t; #define ISV6(isv6, dov6, dov4) isv6 ? dov6 : dov4 -#define HICN_IS_NAMEHASH_CACHED(b) (((u64)(b->opaque2)[0] != 0) || ((u64)(b->opaque2)[1] != 0)) +#define HICN_IS_NAMEHASH_CACHED(b) \ + (((u64) (b->opaque2)[0] != 0) || ((u64) (b->opaque2)[1] != 0)) #ifndef VLIB_BUFFER_MIN_CHAIN_SEG_SIZE #define VLIB_BUFFER_MIN_CHAIN_SEG_SIZE (128) #endif -/* vlib_buffer cloning utilities impose that current_lentgh is more that 2*CLIB_CACHE_LINE_BYTES. */ -/* This flag is used to mark packets whose lenght is less that 2*CLIB_CACHE_LINE_BYTES. */ -#define HICN_BUFFER_FLAGS_PKT_LESS_TWO_CL 0x02 -#define HICN_BUFFER_FLAGS_FROM_UDP4_TUNNEL 0x04 -#define HICN_BUFFER_FLAGS_FROM_UDP6_TUNNEL 0x08 +#define MAX_OUT_FACES 8 /* The following is stored in the opaque2 field in the vlib_buffer_t */ typedef struct { - /* hash of the name */ - u64 name_hash; - - /* ids to prefetch a PIT/CS entry */ - u32 node_id; - u32 bucket_id; - u8 hash_entry_id; - u8 hash_bucket_flags; - + /** + * Cached packet info + */ + hicn_packet_buffer_t pkbuf; + + /** + * IDs to prefetch a PIT/CS entry (4) + */ + u32 pcs_entry_id; + + /** + * DPO/Stategy VFT ID. This is also the DPO type (4) + */ + dpo_type_t vft_id; + + /** + * DPO context ID (4) + */ + u32 dpo_ctx_id; + + /** + * Cached packet info + */ + u16 payload_type; + hicn_lifetime_t lifetime; + + /** + * Ingress face (4) + */ + hicn_face_id_t face_id; + + /** + * hICN buffer flags (1) + */ u8 flags; - u8 dpo_ctx_id; /* used for data path */ - u8 vft_id; /* " */ - - hicn_face_id_t face_id; /* ingress iface, sizeof(u32) */ - u32 in_faces_vec_id; /* vector of possible input face for a data packet */ - - hicn_type_t type; } hicn_buffer_t; +STATIC_ASSERT (offsetof (hicn_buffer_t, pcs_entry_id) == 24, ""); +STATIC_ASSERT (offsetof (hicn_buffer_t, vft_id) == 28, ""); +STATIC_ASSERT (offsetof (hicn_buffer_t, dpo_ctx_id) == 32, ""); +STATIC_ASSERT (offsetof (hicn_buffer_t, payload_type) == 36, ""); +STATIC_ASSERT (offsetof (hicn_buffer_t, lifetime) == 40, ""); +STATIC_ASSERT (offsetof (hicn_buffer_t, face_id) == 44, ""); +STATIC_ASSERT (offsetof (hicn_buffer_t, flags) == 48, ""); +// + name = 16+4 = 20 +// opaque : u32[14] = 56 STATIC_ASSERT (sizeof (hicn_buffer_t) <= - STRUCT_SIZE_OF (vlib_buffer_t, opaque2), + STRUCT_SIZE_OF (vlib_buffer_t, opaque2), "hICN buffer opaque2 meta-data too large for vlib_buffer"); - always_inline hicn_buffer_t * -hicn_get_buffer (vlib_buffer_t * b0) +hicn_get_buffer (vlib_buffer_t *b0) { - return (hicn_buffer_t *) & (b0->opaque2[0]); + return (hicn_buffer_t *) &(b0->opaque2[0]); } +#if 0 always_inline u8 -hicn_is_v6 (hicn_header_t * pkt_hdr) +hicn_is_v6 (hicn_header_t *pkt_hdr) { return ((pkt_hdr->v4.ip.version_ihl >> 4) != 4); } -#endif /* __HICN_H__ */ +always_inline hicn_name_t * +hicn_buffer_get_name (vlib_buffer_t *b) +{ + return hicn_packet_get_name(&hicn_get_buffer (b)->pkbuf); +} +#endif +always_inline u8 +hicn_buffer_is_v6 (vlib_buffer_t *b0) +{ + hicn_packet_format_t format = + hicn_packet_get_format (&hicn_get_buffer (b0)->pkbuf); + return HICN_PACKET_FORMAT_IS_IPV6 (format); +} + +always_inline void +hicn_buffer_set_flags (vlib_buffer_t *b, u8 flags) +{ + hicn_buffer_t *hb = hicn_get_buffer (b); + hb->flags |= flags; +} + +always_inline hicn_lifetime_t +hicn_buffer_get_lifetime (vlib_buffer_t *b) +{ + return hicn_get_buffer (b)->lifetime; +} + +always_inline hicn_payload_type_t +hicn_buffer_get_payload_type (vlib_buffer_t *b) +{ + return hicn_get_buffer (b)->payload_type; +} + +#endif /* __HICN_H__ */ /* * fd.io coding-style-patch-verification: ON |