support packet_tag_set/get()
This commit is contained in:
@@ -183,7 +183,10 @@ const char *packet_get_payload_data(const struct packet *pkt);
|
|||||||
uint16_t packet_get_payload_len(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_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
|
* packet manager
|
||||||
|
|||||||
@@ -80,6 +80,9 @@ struct packet
|
|||||||
uint16_t data_len;
|
uint16_t data_len;
|
||||||
uint16_t trim_len; // trim eth padding
|
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) pool_tqe; // for packet pool
|
||||||
TAILQ_ENTRY(packet) frag_tqe; // for IP reassembly
|
TAILQ_ENTRY(packet) frag_tqe; // for IP reassembly
|
||||||
TAILQ_ENTRY(packet) stage_tqe; // for packet manager
|
TAILQ_ENTRY(packet) stage_tqe; // for packet manager
|
||||||
|
|||||||
@@ -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)
|
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);
|
assert(exdata_rt);
|
||||||
exdata_set(exdata_rt, idx, ex_ptr);
|
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);
|
assert(exdata_rt);
|
||||||
return exdata_get(exdata_rt, idx);
|
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)
|
void packet_set_user_data(struct packet *pkt, void *data)
|
||||||
{
|
{
|
||||||
pkt->user_data = data;
|
pkt->user_data = data;
|
||||||
|
|||||||
@@ -14,6 +14,11 @@ global:
|
|||||||
packet_get_raw_len;
|
packet_get_raw_len;
|
||||||
packet_get_payload_data;
|
packet_get_payload_data;
|
||||||
packet_get_payload_len;
|
packet_get_payload_len;
|
||||||
|
packet_set_exdata;
|
||||||
|
packet_get_exdata;
|
||||||
|
packet_tag_set;
|
||||||
|
packet_tag_get;
|
||||||
|
|
||||||
packet_manager_on_init;
|
packet_manager_on_init;
|
||||||
packet_manager_on_exit;
|
packet_manager_on_exit;
|
||||||
packet_manager_on_thread_init;
|
packet_manager_on_thread_init;
|
||||||
@@ -43,6 +48,7 @@ global:
|
|||||||
session_set_discard;
|
session_set_discard;
|
||||||
session_get_exdata;
|
session_get_exdata;
|
||||||
session_set_exdata;
|
session_set_exdata;
|
||||||
|
|
||||||
session_manager_on_init;
|
session_manager_on_init;
|
||||||
session_manager_on_exit;
|
session_manager_on_exit;
|
||||||
session_manager_on_thread_init;
|
session_manager_on_thread_init;
|
||||||
|
|||||||
Reference in New Issue
Block a user