diff --git a/entry/src/kni_entry.cpp b/entry/src/kni_entry.cpp index b6272eb..a5770c8 100644 --- a/entry/src/kni_entry.cpp +++ b/entry/src/kni_entry.cpp @@ -54,7 +54,13 @@ struct pme_info{ int tfe_release; int sapp_release; //kafka log - struct streaminfo *stream; + struct layer_addr *addr; + unsigned char dir; + uint64_t server_bytes; + uint64_t client_bytes; + uint64_t server_pkts; + uint64_t client_pkts; + time_t start_time; time_t end_time; uint64_t con_duration_ms; @@ -143,7 +149,7 @@ static struct pme_info* pme_info_new(const struct streaminfo *stream, int thread uuid_t uu; uuid_generate_random(uu); uuid_unparse(uu, pmeinfo->stream_trace_id); - pmeinfo->stream = (struct streaminfo*)stream; + pmeinfo->addr = layer_addr_dup(&(stream->addr)); pmeinfo->start_time = time(NULL); pmeinfo->logger = logger; FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TOT_STM], 0, FS_OP_ADD, 1); @@ -168,7 +174,7 @@ static int sendlog_to_kafka(struct pme_info *pmeinfo, void *local_logger){ //con_duration_ms cJSON_AddNumberToObject(log_obj, "con_duration_ms", (pmeinfo->end_time - pmeinfo->start_time) * 1000); //stream_info: addr_type, trans_proto, client_ip, client_port, server_ip, server_port - const struct layer_addr *addr = &(pmeinfo->stream->addr); + const struct layer_addr *addr = pmeinfo->addr; char client_ip_str[INET6_ADDRSTRLEN] = ""; char server_ip_str[INET6_ADDRSTRLEN] = ""; switch(addr->addrtype){ @@ -224,7 +230,7 @@ static int sendlog_to_kafka(struct pme_info *pmeinfo, void *local_logger){ //direction: 0 cJSON_AddNumberToObject(log_obj, "direction", 0); //stream_dir: from sapp - cJSON_AddNumberToObject(log_obj, "stream_dir", pmeinfo->stream->dir); + cJSON_AddNumberToObject(log_obj, "stream_dir", pmeinfo->dir); //cap_ip: kni ip char local_ipv4_str[INET6_ADDRSTRLEN]; inet_ntop(AF_INET, &(g_kni_handle->local_ipv4), local_ipv4_str, sizeof(local_ipv4_str)); @@ -236,13 +242,13 @@ static int sendlog_to_kafka(struct pme_info *pmeinfo, void *local_logger){ //sni: ssl only cJSON_AddStringToObject(log_obj, "sni", pmeinfo->sni); //c2s_pkt_num - cJSON_AddNumberToObject(log_obj, "c2s_pkt_num", pmeinfo->stream->ptcpdetail->serverpktnum); + cJSON_AddNumberToObject(log_obj, "c2s_pkt_num", pmeinfo->server_pkts); //s2c_pkt_num - cJSON_AddNumberToObject(log_obj, "s2c_pkt_num", pmeinfo->stream->ptcpdetail->clientpktnum); + cJSON_AddNumberToObject(log_obj, "s2c_pkt_num", pmeinfo->client_pkts); //c2s_byte_num - cJSON_AddNumberToObject(log_obj, "c2s_byte_num", pmeinfo->stream->ptcpdetail->serverbytes); + cJSON_AddNumberToObject(log_obj, "c2s_byte_num", pmeinfo->server_bytes); //s2c_byte_num - cJSON_AddNumberToObject(log_obj, "s2c_byte_num", pmeinfo->stream->ptcpdetail->clientbytes); + cJSON_AddNumberToObject(log_obj, "s2c_byte_num", pmeinfo->client_bytes); int ret = -1; char *log_msg = cJSON_PrintUnformatted(log_obj); cJSON_Delete(log_obj); @@ -284,6 +290,8 @@ static void pme_info_destroy(struct pme_info *pmeinfo){ if(pmeinfo->server_tcpopt != NULL){ FREE(&(pmeinfo->server_tcpopt)); } + layer_addr_free(pmeinfo->addr); + pmeinfo->addr=NULL; FREE(&pmeinfo); } /* TODO: segment fault @@ -631,6 +639,11 @@ static char close_opstate(const struct streaminfo *stream, struct pme_info *pmei kni_stream_addr_trans((struct ipaddr*)(&stream->addr), stream_addr, sizeof(stream_addr)); int len = pktinfo->ip_totlen; int ret; + pmeinfo->server_bytes=stream->ptcpdetail->serverbytes; + pmeinfo->client_bytes=stream->ptcpdetail->clientbytes; + pmeinfo->server_pkts=stream->ptcpdetail->serverpktnum; + pmeinfo->client_pkts=stream->ptcpdetail->clientpktnum; + pmeinfo->dir=stream->dir; switch(pmeinfo->action){ case KNI_ACTION_INTERCEPT: ret = send_to_tfe(g_kni_handle->marsio_handle, buf, len, thread_seq, pmeinfo->tfe_id); @@ -855,7 +868,6 @@ static long traceid2pme_htable_search_cb(void *data, const uchar *key, uint size wrapped_kni_cmsg_get(pmeinfo, cmsg, TFE_CMSG_SSL_PINNING_STATE, sizeof(pmeinfo->pinningst), logger); wrapped_kni_cmsg_get(pmeinfo, cmsg, TFE_CMSG_SSL_CERT_VERIFY, sizeof(pmeinfo->ssl_cert_verify), logger); wrapped_kni_cmsg_get(pmeinfo, cmsg, TFE_CMSG_SSL_ERROR, sizeof(pmeinfo->ssl_error), logger); - FREE(&cmsg); pmeinfo->tfe_release = 1; pmeinfo->end_time = time(NULL); int key_size = strnlen(pmeinfo->stream_trace_id, sizeof(pmeinfo->stream_trace_id)); @@ -870,7 +882,7 @@ static long traceid2pme_htable_search_cb(void *data, const uchar *key, uint size "traceid2pme_htable", pmeinfo->stream_trace_id, key_size); } } - FREE(&cmsg); + kni_cmsg_destroy(cmsg); return 0; }