diff --git a/include/stellar/packet.h b/include/stellar/packet.h index 2760261..b2d3f22 100644 --- a/include/stellar/packet.h +++ b/include/stellar/packet.h @@ -183,7 +183,10 @@ const char *packet_get_payload_data(const struct packet *pkt); uint16_t packet_get_payload_len(const struct packet *pkt); void packet_set_exdata(struct packet *pkt, int idx, void *ex_ptr); -void *packet_get_exdata(struct packet *pkt, int idx); +void *packet_get_exdata(const struct packet *pkt, int idx); + +void packet_tag_set(struct packet *pkt, uint64_t key_bits, uint64_t val_bits); +void packet_tag_get(const struct packet *pkt, uint64_t *key_bits, uint64_t *val_bits); /****************************************************************************** * packet manager diff --git a/infra/packet_manager/packet_internal.h b/infra/packet_manager/packet_internal.h index 0dac488..e15f25a 100644 --- a/infra/packet_manager/packet_internal.h +++ b/infra/packet_manager/packet_internal.h @@ -80,6 +80,9 @@ struct packet uint16_t data_len; uint16_t trim_len; // trim eth padding + uint64_t tag_key_bits; + uint64_t tag_val_bits; + TAILQ_ENTRY(packet) pool_tqe; // for packet pool TAILQ_ENTRY(packet) frag_tqe; // for IP reassembly TAILQ_ENTRY(packet) stage_tqe; // for packet manager diff --git a/infra/packet_manager/packet_utils.c b/infra/packet_manager/packet_utils.c index 42f8eb3..042c94d 100644 --- a/infra/packet_manager/packet_utils.c +++ b/infra/packet_manager/packet_utils.c @@ -956,18 +956,30 @@ uint16_t packet_get_payload_len(const struct packet *pkt) void packet_set_exdata(struct packet *pkt, int idx, void *ex_ptr) { - struct exdata_runtime *exdata_rt = (struct exdata_runtime *)packet_get_user_data(pkt); + struct exdata_runtime *exdata_rt = (struct exdata_runtime *)pkt->user_data; assert(exdata_rt); exdata_set(exdata_rt, idx, ex_ptr); } -void *packet_get_exdata(struct packet *pkt, int idx) +void *packet_get_exdata(const struct packet *pkt, int idx) { - struct exdata_runtime *exdata_rt = (struct exdata_runtime *)packet_get_user_data(pkt); + struct exdata_runtime *exdata_rt = (struct exdata_runtime *)pkt->user_data; assert(exdata_rt); return exdata_get(exdata_rt, idx); } +void packet_tag_set(struct packet *pkt, uint64_t key_bits, uint64_t val_bits) +{ + pkt->tag_key_bits |= key_bits; + pkt->tag_val_bits |= val_bits; +} + +void packet_tag_get(const struct packet *pkt, uint64_t *key_bits, uint64_t *val_bits) +{ + *key_bits = pkt->tag_key_bits; + *val_bits = pkt->tag_val_bits; +} + void packet_set_user_data(struct packet *pkt, void *data) { pkt->user_data = data; diff --git a/infra/version.map b/infra/version.map index 85ec0ed..e714fa4 100644 --- a/infra/version.map +++ b/infra/version.map @@ -14,6 +14,11 @@ global: packet_get_raw_len; packet_get_payload_data; packet_get_payload_len; + packet_set_exdata; + packet_get_exdata; + packet_tag_set; + packet_tag_get; + packet_manager_on_init; packet_manager_on_exit; packet_manager_on_thread_init; @@ -43,6 +48,7 @@ global: session_set_discard; session_get_exdata; session_set_exdata; + session_manager_on_init; session_manager_on_exit; session_manager_on_thread_init;