diff --git a/include/stellar/packet.h b/include/stellar/packet.h index efd0be2..4e588b0 100644 --- a/include/stellar/packet.h +++ b/include/stellar/packet.h @@ -174,6 +174,9 @@ enum packet_action void packet_set_action(struct packet *pkt, enum packet_action action); 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); uint16_t packet_get_raw_len(const struct packet *pkt); diff --git a/src/packet/packet_private.h b/src/packet/packet_private.h index 27b1f6e..ead56b3 100644 --- a/src/packet/packet_private.h +++ b/src/packet/packet_private.h @@ -28,6 +28,7 @@ struct metadata enum packet_direction direction; enum packet_action action; + struct timeval tv; const void *origin_ctx; }; diff --git a/src/packet/packet_utils.cpp b/src/packet/packet_utils.cpp index 2aef882..ec2bbe3 100644 --- a/src/packet/packet_utils.cpp +++ b/src/packet/packet_utils.cpp @@ -121,6 +121,16 @@ enum packet_action packet_get_action(const struct packet *pkt) 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) { pkt->user_data = data; diff --git a/src/packet_io/dumpfile_io.cpp b/src/packet_io/dumpfile_io.cpp index 0a6fb6d..cd60a33 100644 --- a/src/packet_io/dumpfile_io.cpp +++ b/src/packet_io/dumpfile_io.cpp @@ -40,6 +40,7 @@ struct pcap_pkt { char *data; 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->len = h->caplen; + pcap_pkt->ts = h->ts; memcpy((char *)pcap_pkt->data, bytes, h->caplen); // 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)); packet_set_origin_ctx(pkt, pcap_pkt); packet_set_action(pkt, PACKET_ACTION_FORWARD); + packet_set_timeval(pkt, &pcap_pkt->ts); nr_parsed++; } } diff --git a/src/packet_io/marsio_io.cpp b/src/packet_io/marsio_io.cpp index 89f8b26..fb9de31 100644 --- a/src/packet_io/marsio_io.cpp +++ b/src/packet_io/marsio_io.cpp @@ -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_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) diff --git a/test/debug_plugin/debug_plugin.cpp b/test/debug_plugin/debug_plugin.cpp index 6d6f85c..27c6a28 100644 --- a/test/debug_plugin/debug_plugin.cpp +++ b/test/debug_plugin/debug_plugin.cpp @@ -89,11 +89,11 @@ static void *on_sess_new(struct session *sess, void *plugin_ctx) if (session_get_type(sess) == SESSION_TYPE_TCP) { 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); 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); } 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]; - 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 session_exdata *exdata = (struct session_exdata *)session_exdata_get(sess, ctx->sess_exdata_idx); 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)); 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); 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]; - 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 session_exdata *exdata = (struct session_exdata *)session_exdata_get(sess, ctx->sess_exdata_idx); 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)); 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); 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]; - 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; const char *data = tcp_segment_get_data(seg); uint16_t len = tcp_segment_get_len(seg); @@ -258,7 +260,7 @@ extern "C" 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) { printf("[debug plugin] open log file failed: %s\n", strerror(errno));