add support for retrieving pcap packet timestamps
This commit is contained in:
@@ -174,6 +174,9 @@ enum packet_action
|
|||||||
void packet_set_action(struct packet *pkt, enum packet_action action);
|
void packet_set_action(struct packet *pkt, enum packet_action action);
|
||||||
enum packet_action packet_get_action(const struct packet *pkt);
|
enum packet_action packet_get_action(const struct packet *pkt);
|
||||||
|
|
||||||
|
void packet_set_timeval(struct packet *pkt, const struct timeval *tv);
|
||||||
|
const struct timeval *packet_get_timeval(const struct packet *pkt);
|
||||||
|
|
||||||
const char *packet_get_raw_data(const struct packet *pkt);
|
const char *packet_get_raw_data(const struct packet *pkt);
|
||||||
uint16_t packet_get_raw_len(const struct packet *pkt);
|
uint16_t packet_get_raw_len(const struct packet *pkt);
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ struct metadata
|
|||||||
|
|
||||||
enum packet_direction direction;
|
enum packet_direction direction;
|
||||||
enum packet_action action;
|
enum packet_action action;
|
||||||
|
struct timeval tv;
|
||||||
const void *origin_ctx;
|
const void *origin_ctx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -121,6 +121,16 @@ enum packet_action packet_get_action(const struct packet *pkt)
|
|||||||
return pkt->meta.action;
|
return pkt->meta.action;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void packet_set_timeval(struct packet *pkt, const struct timeval *tv)
|
||||||
|
{
|
||||||
|
pkt->meta.tv = *tv;
|
||||||
|
}
|
||||||
|
|
||||||
|
const struct timeval *packet_get_timeval(const struct packet *pkt)
|
||||||
|
{
|
||||||
|
return &pkt->meta.tv;
|
||||||
|
}
|
||||||
|
|
||||||
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;
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ struct pcap_pkt
|
|||||||
{
|
{
|
||||||
char *data;
|
char *data;
|
||||||
int len;
|
int len;
|
||||||
|
struct timeval ts;
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
@@ -142,6 +143,7 @@ static void pcap_pkt_handler(u_char *user, const struct pcap_pkthdr *h, const u_
|
|||||||
}
|
}
|
||||||
pcap_pkt->data = (char *)pcap_pkt + sizeof(struct pcap_pkt);
|
pcap_pkt->data = (char *)pcap_pkt + sizeof(struct pcap_pkt);
|
||||||
pcap_pkt->len = h->caplen;
|
pcap_pkt->len = h->caplen;
|
||||||
|
pcap_pkt->ts = h->ts;
|
||||||
memcpy((char *)pcap_pkt->data, bytes, h->caplen);
|
memcpy((char *)pcap_pkt->data, bytes, h->caplen);
|
||||||
|
|
||||||
// calculate packet hash
|
// calculate packet hash
|
||||||
@@ -386,6 +388,7 @@ uint16_t dumpfile_io_ingress(struct dumpfile_io *handle, uint16_t thr_idx, struc
|
|||||||
memset(&pkt->meta, 0, sizeof(pkt->meta));
|
memset(&pkt->meta, 0, sizeof(pkt->meta));
|
||||||
packet_set_origin_ctx(pkt, pcap_pkt);
|
packet_set_origin_ctx(pkt, pcap_pkt);
|
||||||
packet_set_action(pkt, PACKET_ACTION_FORWARD);
|
packet_set_action(pkt, PACKET_ACTION_FORWARD);
|
||||||
|
packet_set_timeval(pkt, &pcap_pkt->ts);
|
||||||
nr_parsed++;
|
nr_parsed++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,6 +98,10 @@ static void metadata_from_mbuff_to_packet(marsio_buff_t *mbuff, struct packet *p
|
|||||||
|
|
||||||
packet_set_action(pkt, PACKET_ACTION_FORWARD);
|
packet_set_action(pkt, PACKET_ACTION_FORWARD);
|
||||||
packet_set_origin_ctx(pkt, mbuff);
|
packet_set_origin_ctx(pkt, mbuff);
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
const struct timeval tv = {};
|
||||||
|
packet_set_timeval(pkt, &tv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void metadata_from_packet_to_mbuff(struct packet *pkt, marsio_buff_t *mbuff)
|
static void metadata_from_packet_to_mbuff(struct packet *pkt, marsio_buff_t *mbuff)
|
||||||
|
|||||||
@@ -89,11 +89,11 @@ static void *on_sess_new(struct session *sess, void *plugin_ctx)
|
|||||||
if (session_get_type(sess) == SESSION_TYPE_TCP)
|
if (session_get_type(sess) == SESSION_TYPE_TCP)
|
||||||
{
|
{
|
||||||
memset(buff, 0, sizeof(buff));
|
memset(buff, 0, sizeof(buff));
|
||||||
sprintf(buff, "./log/debug_plugin_%s_c2s_segment", session_get0_readable_addr(sess));
|
sprintf(buff, "./log/debug_plugin.log.c2s_segment_%s", session_get0_readable_addr(sess));
|
||||||
ctx->c2s_tcp_seg_hexdump_fd = open(buff, O_WRONLY | O_APPEND | O_CREAT, 0644);
|
ctx->c2s_tcp_seg_hexdump_fd = open(buff, O_WRONLY | O_APPEND | O_CREAT, 0644);
|
||||||
|
|
||||||
memset(buff, 0, sizeof(buff));
|
memset(buff, 0, sizeof(buff));
|
||||||
sprintf(buff, "./log/debug_plugin_%s_s2c_segment", session_get0_readable_addr(sess));
|
sprintf(buff, "./log/debug_plugin.log.s2c_segment_%s", session_get0_readable_addr(sess));
|
||||||
ctx->s2c_tcp_seg_hexdump_fd = open(buff, O_WRONLY | O_APPEND | O_CREAT, 0644);
|
ctx->s2c_tcp_seg_hexdump_fd = open(buff, O_WRONLY | O_APPEND | O_CREAT, 0644);
|
||||||
}
|
}
|
||||||
session_exdata_set(sess, ctx->sess_exdata_idx, exdata);
|
session_exdata_set(sess, ctx->sess_exdata_idx, exdata);
|
||||||
@@ -142,7 +142,8 @@ static void on_sess_udp_msg(struct session *sess, int topic_id, const void *msg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
char buff[4096];
|
char buff[4096];
|
||||||
struct packet *pkt = (struct packet *)msg;
|
const struct packet *pkt = (const struct packet *)msg;
|
||||||
|
const struct timeval *tv = packet_get_timeval(pkt);
|
||||||
struct plugin_ctx *ctx = (struct plugin_ctx *)plugin_ctx;
|
struct plugin_ctx *ctx = (struct plugin_ctx *)plugin_ctx;
|
||||||
struct session_exdata *exdata = (struct session_exdata *)session_exdata_get(sess, ctx->sess_exdata_idx);
|
struct session_exdata *exdata = (struct session_exdata *)session_exdata_get(sess, ctx->sess_exdata_idx);
|
||||||
if (session_get_current_flow_direction(sess) == FLOW_DIRECTION_C2S)
|
if (session_get_current_flow_direction(sess) == FLOW_DIRECTION_C2S)
|
||||||
@@ -162,7 +163,7 @@ static void on_sess_udp_msg(struct session *sess, int topic_id, const void *msg,
|
|||||||
|
|
||||||
memset(buff, 0, sizeof(buff));
|
memset(buff, 0, sizeof(buff));
|
||||||
packet_dump_str(pkt, buff, sizeof(buff) - 1);
|
packet_dump_str(pkt, buff, sizeof(buff) - 1);
|
||||||
log_print(ctx->fd, "debug plugin", "rx UDP packet: \n%s", buff);
|
log_print(ctx->fd, "debug plugin", "rx UDP packet (tv_sec: %lu, tv_usec: %lu): \n%s", tv->tv_sec, tv->tv_usec, buff);
|
||||||
|
|
||||||
pthread_spin_lock(&ctx->lock);
|
pthread_spin_lock(&ctx->lock);
|
||||||
packet_dump_hex(pkt, ctx->fd);
|
packet_dump_hex(pkt, ctx->fd);
|
||||||
@@ -177,7 +178,8 @@ static void on_sess_tcp_msg(struct session *sess, int topic_id, const void *msg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
char buff[4096];
|
char buff[4096];
|
||||||
struct packet *pkt = (struct packet *)msg;
|
const struct packet *pkt = (const struct packet *)msg;
|
||||||
|
const struct timeval *tv = packet_get_timeval(pkt);
|
||||||
struct plugin_ctx *ctx = (struct plugin_ctx *)plugin_ctx;
|
struct plugin_ctx *ctx = (struct plugin_ctx *)plugin_ctx;
|
||||||
struct session_exdata *exdata = (struct session_exdata *)session_exdata_get(sess, ctx->sess_exdata_idx);
|
struct session_exdata *exdata = (struct session_exdata *)session_exdata_get(sess, ctx->sess_exdata_idx);
|
||||||
if (session_get_current_flow_direction(sess) == FLOW_DIRECTION_C2S)
|
if (session_get_current_flow_direction(sess) == FLOW_DIRECTION_C2S)
|
||||||
@@ -197,7 +199,7 @@ static void on_sess_tcp_msg(struct session *sess, int topic_id, const void *msg,
|
|||||||
|
|
||||||
memset(buff, 0, sizeof(buff));
|
memset(buff, 0, sizeof(buff));
|
||||||
packet_dump_str(pkt, buff, sizeof(buff) - 1);
|
packet_dump_str(pkt, buff, sizeof(buff) - 1);
|
||||||
log_print(ctx->fd, "debug plugin", "rx TCP packet: \n%s", buff);
|
log_print(ctx->fd, "debug plugin", "rx TCP packet (tv_sec: %lu, tv_usec: %lu): \n%s", tv->tv_sec, tv->tv_usec, buff);
|
||||||
|
|
||||||
pthread_spin_lock(&ctx->lock);
|
pthread_spin_lock(&ctx->lock);
|
||||||
packet_dump_hex(pkt, ctx->fd);
|
packet_dump_hex(pkt, ctx->fd);
|
||||||
@@ -212,7 +214,7 @@ static void on_sess_tcp_stream_msg(struct session *sess, int topic_id, const voi
|
|||||||
}
|
}
|
||||||
|
|
||||||
char buff[4096];
|
char buff[4096];
|
||||||
struct tcp_segment *seg = (struct tcp_segment *)msg;
|
const struct tcp_segment *seg = (const struct tcp_segment *)msg;
|
||||||
struct plugin_ctx *ctx = (struct plugin_ctx *)plugin_ctx;
|
struct plugin_ctx *ctx = (struct plugin_ctx *)plugin_ctx;
|
||||||
const char *data = tcp_segment_get_data(seg);
|
const char *data = tcp_segment_get_data(seg);
|
||||||
uint16_t len = tcp_segment_get_len(seg);
|
uint16_t len = tcp_segment_get_len(seg);
|
||||||
@@ -258,7 +260,7 @@ extern "C"
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->fd = open("./log/debug_plugin_log", O_WRONLY | O_APPEND | O_CREAT, 0644);
|
ctx->fd = open("./log/debug_plugin.log", O_WRONLY | O_APPEND | O_CREAT, 0644);
|
||||||
if (ctx->fd == -1)
|
if (ctx->fd == -1)
|
||||||
{
|
{
|
||||||
printf("[debug plugin] open log file failed: %s\n", strerror(errno));
|
printf("[debug plugin] open log file failed: %s\n", strerror(errno));
|
||||||
|
|||||||
Reference in New Issue
Block a user