aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-light/src/hicn/core/msgbuf.h
diff options
context:
space:
mode:
Diffstat (limited to 'hicn-light/src/hicn/core/msgbuf.h')
-rw-r--r--hicn-light/src/hicn/core/msgbuf.h188
1 files changed, 132 insertions, 56 deletions
diff --git a/hicn-light/src/hicn/core/msgbuf.h b/hicn-light/src/hicn/core/msgbuf.h
index e437f1d09..26fd47540 100644
--- a/hicn-light/src/hicn/core/msgbuf.h
+++ b/hicn-light/src/hicn/core/msgbuf.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 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:
@@ -21,10 +21,10 @@
#ifndef HICNLIGHT_MSGBUF
#define HICNLIGHT_MSGBUF
-#include "name.h"
+#include <hicn/name.h>
#include "ticks.h"
-#include "messageHandler.h"
-#include <hicn/ctrl/hicn-light-ng.h>
+#include <hicn/hicn.h>
+#include <hicn/ctrl/hicn-light.h>
#define MTU 1500
#define INVALID_MSGBUF_ID ~0ul
@@ -32,33 +32,19 @@
#define msgbuf_id_is_valid(msgbuf_id) \
((unsigned long)msgbuf_id != INVALID_MSGBUF_ID)
-#define foreach_msg_type \
- _(UNDEFINED) \
- _(INTEREST) \
- _(DATA) \
- _(WLDR_NOTIFICATION) \
- _(MAPME) \
- _(COMMAND) \
- _(N)
-
-typedef enum {
-#define _(x) MSGBUF_TYPE_##x,
- foreach_msg_type
-#undef _
-} msgbuf_type_t;
-#undef foreach_msg_type
-
typedef struct {
- unsigned length;
- msgbuf_type_t type;
- unsigned connection_id;
- Ticks recv_ts;
- unsigned refs;
- unsigned path_label;
+ hicn_packet_buffer_t pkbuf;
+ unsigned connection_id; // ingress
+ Ticks recv_ts; // timestamp
+ unsigned refs; // refcount
+ unsigned path_label; // XXX what is this ?
+
+ // XXX Cache storage
union {
/* Interest or data packet */
struct {
- Name name;
+ hicn_name_t name;
+ u32 name_hash; // XXX should be always populate when name is assigned
} id;
/* Command packet */
struct {
@@ -68,53 +54,142 @@ typedef struct {
uint8_t packet[MTU];
} msgbuf_t;
-#define msgbuf_get_name(M) (&((M)->id.name))
+int msgbuf_initialize(msgbuf_t *msgbuf);
+int msgbuf_initialize_from_packet(msgbuf_t *msgbuf);
+
+#define msgbuf_get_pkbuf(M) (&(M)->pkbuf)
+
+static inline hicn_packet_type_t msgbuf_get_type(const msgbuf_t *msgbuf) {
+ return hicn_packet_get_type(msgbuf_get_pkbuf(msgbuf));
+}
+
+static inline void msgbuf_set_type(msgbuf_t *msgbuf, hicn_packet_type_t type) {
+ hicn_packet_set_type(msgbuf_get_pkbuf(msgbuf), type);
+}
+
+static inline const hicn_name_t *msgbuf_get_name(const msgbuf_t *msgbuf) {
+ hicn_packet_type_t type = msgbuf_get_type(msgbuf);
+ assert(type == HICN_PACKET_TYPE_INTEREST || type == HICN_PACKET_TYPE_DATA);
+ (void)type;
+
+ return &msgbuf->id.name;
+}
+
#define msgbuf_get_connection_id(M) ((M)->connection_id)
-#define msgbuf_get_type(M) ((M)->type)
-#define msgbuf_has_wldr(M) (messageHandler_HasWldr((M)->packet))
-#define msgbuf_get_len(M) ((M)->length)
#define msgbuf_get_packet(M) ((M)->packet)
#define msgbuf_get_command_type(M) ((M)->command.type)
+#if WITH_WLDR
+#define msgbuf_has_wldr(M) (messageHandler_HasWldr((M)->packet))
+#endif
+
+static inline void msgbuf_set_name(msgbuf_t *msgbuf, const hicn_name_t *name) {
+ msgbuf->id.name = *name;
+}
+
+static inline size_t msgbuf_get_len(const msgbuf_t *msgbuf) {
+ return hicn_packet_get_len(msgbuf_get_pkbuf(msgbuf));
+}
-// XXX TODO EXPLAIN THE CONSTANT
-#define msgbuf_get_lifetime(M) \
- (NSEC_TO_TICKS(messageHandler_GetInterestLifetime((M)->packet) * 1000000ULL))
+static inline void msgbuf_set_len(msgbuf_t *msgbuf, size_t len) {
+ int rc = hicn_packet_set_len(msgbuf_get_pkbuf(msgbuf), len);
+ assert(rc == HICN_LIB_ERROR_NONE); // XXX
+ _unused(rc);
+}
+
+static inline u32 msgbuf_get_name_hash(const msgbuf_t *msgbuf) {
+ hicn_packet_type_t type = msgbuf_get_type(msgbuf);
+ assert(type == HICN_PACKET_TYPE_INTEREST || type == HICN_PACKET_TYPE_DATA);
+ _unused(type);
+ return msgbuf->id.name_hash;
+}
// Lifetimes/expiry times in milliseconds
-#define msgbuf_get_interest_lifetime(M) \
- (messageHandler_GetInterestLifetime((M)->packet))
-#define msgbuf_get_data_expiry_time(M) \
- (messageHandler_GetContentExpiryTime((M)->packet))
+static inline u32 msgbuf_get_interest_lifetime(const msgbuf_t *msgbuf) {
+ u32 lifetime;
+ int rc = hicn_interest_get_lifetime(msgbuf_get_pkbuf(msgbuf), &lifetime);
+ assert(rc == HICN_LIB_ERROR_NONE); // XXX
+ _unused(rc);
+ return lifetime;
+}
+
+//#define msgbuf_get_lifetime(M)
+// (NSEC_TO_TICKS(messageHandler_GetInterestLifetime((M)->packet) *
+// 1000000ULL))
+#define msgbuf_get_lifetime msgbuf_get_interest_lifetime
static inline bool msgbuf_set_interest_lifetime(msgbuf_t *msgbuf,
u32 lifetime) {
- return messageHandler_SetInterestLifetime(msgbuf->packet, lifetime);
+ int rc = hicn_interest_set_lifetime(msgbuf_get_pkbuf(msgbuf), lifetime);
+ return (rc == HICN_LIB_ERROR_NONE);
}
-static inline bool msgbuf_set_data_expiry_time(msgbuf_t *msgbuf, u32 lifetime) {
- return messageHandler_SetDataExpiryTime(msgbuf->packet, lifetime);
+
+static inline u32 msgbuf_get_data_expiry_time(const msgbuf_t *msgbuf) {
+ u32 lifetime;
+ int rc = hicn_data_get_expiry_time(msgbuf_get_pkbuf(msgbuf), &lifetime);
+ assert(rc == HICN_LIB_ERROR_NONE); // XXX
+ _unused(rc);
+ return lifetime;
}
-#define msgbuf_is_probe(M) messageHandler_IsAProbe((M)->packet)
+static inline bool msgbuf_set_data_expiry_time(msgbuf_t *msgbuf, u32 lifetime) {
+ int rc = hicn_data_set_expiry_time(msgbuf_get_pkbuf(msgbuf), lifetime);
+ return (rc == HICN_LIB_ERROR_NONE);
+}
/* Path label */
-#define msgbuf_init_pathlabel(M) \
- ((M)->path_label = messageHandler_GetPathLabel((M)->packet))
-#define msgbuf_update_pathlabel(M, outface) \
- { \
- messageHandler_SetPathLabel((M)->packet, \
- messageHandler_GetPathLabel((M)->packet), \
- (M)->path_label); \
- messageHandler_UpdatePathLabel((M)->packet, outface); \
- }
-#define msgbuf_reset_pathlabel(M) \
- { \
- (M)->path_label = 0; \
- messageHandler_ResetPathLabel((M)->packet); \
- }
+static inline void msgbuf_init_pathlabel(msgbuf_t *msgbuf) {
+ hicn_path_label_t pl;
+ int rc = hicn_data_get_path_label(msgbuf_get_pkbuf(msgbuf), &pl);
+ assert(rc == HICN_LIB_ERROR_NONE);
+ _unused(rc);
+ msgbuf->path_label = pl;
+}
+
+static inline int msgbuf_get_path_label(const msgbuf_t *msgbuf,
+ hicn_path_label_t *pl) {
+ assert(msgbuf_get_type(msgbuf) == HICN_PACKET_TYPE_DATA);
+ return hicn_data_get_path_label(msgbuf_get_pkbuf(msgbuf), pl);
+}
+
+static inline int msgbuf_set_path_label(msgbuf_t *msgbuf,
+ hicn_path_label_t pl) {
+ assert(msgbuf_get_type(msgbuf) == HICN_PACKET_TYPE_DATA);
+ return hicn_data_set_path_label(msgbuf_get_pkbuf(msgbuf), pl);
+}
+
+static inline int msgbuf_update_pathlabel(msgbuf_t *msgbuf,
+ hicn_faceid_t outface) {
+ assert(msgbuf_get_type(msgbuf) == HICN_PACKET_TYPE_DATA);
+
+ hicn_path_label_t pl, newpl;
+ if (msgbuf_get_path_label(msgbuf, &pl) < 0) return -1;
+
+ update_path_label(pl, outface, &newpl);
+
+ return msgbuf_set_path_label(msgbuf, newpl);
+}
+
+static inline void msgbuf_reset_pathlabel(msgbuf_t *msgbuf) {
+ msgbuf->path_label = 0;
+ hicn_data_set_path_label(msgbuf_get_pkbuf(msgbuf), 0);
+ // ERROR ?
+}
+
+static inline void msgbuf_modify_suffix(msgbuf_t *msgbuf, uint32_t new_suffix) {
+ hicn_name_t name;
+ assert(msgbuf_get_type(msgbuf) == HICN_PACKET_TYPE_INTEREST);
+ hicn_interest_get_name(msgbuf_get_pkbuf(msgbuf), &name);
+ hicn_name_set_suffix(&name, new_suffix);
+ hicn_interest_set_name(msgbuf_get_pkbuf(msgbuf), &name);
+}
+
+bool msgbuf_is_command(const msgbuf_t *msgbuf);
+bool msgbuf_is_probe(const msgbuf_t *msgbuf);
/* WLDR */
+#if 0
#define msgbuf_reset_wldr_label(M) (messageHandler_ResetWldrLabel((M)->packet))
#define msgbuf_get_wldr_label(M) (messageHandler_GetWldrLabel((M)->packet))
#define msgbuf_get_wldr_expected_label(M) \
@@ -123,5 +198,6 @@ static inline bool msgbuf_set_data_expiry_time(msgbuf_t *msgbuf, u32 lifetime) {
(messageHandler_GetWldrLastReceived((M)->packet))
#define msgbuf_set_wldr_label(M, label) \
(messageHandler_GetWldrLabel((M)->packet, label))
+#endif
#endif /* HICNLIGHT_MSGBUF */