aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-plugin/src/hicn.h
diff options
context:
space:
mode:
Diffstat (limited to 'hicn-plugin/src/hicn.h')
-rw-r--r--hicn-plugin/src/hicn.h118
1 files changed, 80 insertions, 38 deletions
diff --git a/hicn-plugin/src/hicn.h b/hicn-plugin/src/hicn.h
index 4ff4f6ae6..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>
@@ -57,37 +44,57 @@ typedef u8 weight_t;
#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 HICN_BUFFER_FLAGS_FROM_CS 0x10
+#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),
"hICN buffer opaque2 meta-data too large for vlib_buffer");
@@ -98,12 +105,47 @@ hicn_get_buffer (vlib_buffer_t *b0)
return (hicn_buffer_t *) &(b0->opaque2[0]);
}
+#if 0
always_inline u8
hicn_is_v6 (hicn_header_t *pkt_hdr)
{
return ((pkt_hdr->v4.ip.version_ihl >> 4) != 4);
}
+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__ */
/*