diff options
| author | 刘学利 <[email protected]> | 2023-06-25 10:54:16 +0000 |
|---|---|---|
| committer | 刘学利 <[email protected]> | 2023-06-25 10:54:16 +0000 |
| commit | ca8eff0a2ecbe29655de10bc4a161f6fd9622d58 (patch) | |
| tree | 03ed7377f98f5035f24d98a32779ded449231d83 /src/tsg_send_log.cpp | |
| parent | 1431bca1b2be193405ea75101aac6613a47480ba (diff) | |
TSG-15656: 输出MAC地址v6.0.26
Diffstat (limited to 'src/tsg_send_log.cpp')
| -rw-r--r-- | src/tsg_send_log.cpp | 153 |
1 files changed, 152 insertions, 1 deletions
diff --git a/src/tsg_send_log.cpp b/src/tsg_send_log.cpp index 6e3e65f..5a70345 100644 --- a/src/tsg_send_log.cpp +++ b/src/tsg_send_log.cpp @@ -779,6 +779,156 @@ static int mac_to_string(unsigned char *mac, char *buff) return 0; } +//I2E: outcoming +int direction_I2E(struct tsg_log_instance_t *_instance, struct TLD_handle_t *_handle, struct layer_addr *mac_addr, unsigned char dir) +{ + if(mac_addr==NULL) + { + return 0; + } + + char src_mac_string[32]={0}; + char dst_mac_string[32]={0}; + char default_mac[6]={0,0,0,0,0,0}; + + switch(dir) + { + case DIR_C2S: // C2S and I2E = outcoming + mac_to_string(mac_addr->mac->src_addr.h_source, src_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_OUTCOMING_SRC_MAC].name, (void *)src_mac_string, TLD_TYPE_STRING); + mac_to_string(mac_addr->mac->src_addr.h_dest, dst_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_OUTCOMING_DST_MAC].name, (void *)dst_mac_string, TLD_TYPE_STRING); + break; + case DIR_S2C: // S2C and I2E = incoming + mac_to_string(mac_addr->mac->dst_addr.h_source, src_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_INCOMING_SRC_MAC].name, (void *)src_mac_string, TLD_TYPE_STRING); + mac_to_string(mac_addr->mac->dst_addr.h_dest, dst_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_INCOMING_DST_MAC].name, (void *)dst_mac_string, TLD_TYPE_STRING); + break; + case DIR_DOUBLE: // first pkt + mac_to_string(mac_addr->mac->src_addr.h_source, src_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_OUTCOMING_SRC_MAC].name, (void *)src_mac_string, TLD_TYPE_STRING); + mac_to_string(mac_addr->mac->src_addr.h_dest, dst_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_OUTCOMING_DST_MAC].name, (void *)dst_mac_string, TLD_TYPE_STRING); + + if((memcmp(mac_addr->mac->dst_addr.h_source, default_mac, 6))==0) + { + TLD_append(_handle, _instance->id2field[LOG_COMMON_OUTCOMING_SRC_MAC].name, (void *)dst_mac_string, TLD_TYPE_STRING); + TLD_append(_handle, _instance->id2field[LOG_COMMON_OUTCOMING_DST_MAC].name, (void *)src_mac_string, TLD_TYPE_STRING); + } + else + { + mac_to_string(mac_addr->mac->dst_addr.h_source, src_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_INCOMING_SRC_MAC].name, (void *)src_mac_string, TLD_TYPE_STRING); + mac_to_string(mac_addr->mac->dst_addr.h_dest, dst_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_INCOMING_DST_MAC].name, (void *)dst_mac_string, TLD_TYPE_STRING); + } + break; + default: + break; + } + + return 0; +} + +//E2I: outcoming +int direction_E2I(struct tsg_log_instance_t *_instance, struct TLD_handle_t *_handle, struct layer_addr *mac_addr, unsigned char dir) +{ + if(mac_addr==NULL) + { + return 0; + } + + char src_mac_string[32]={0}; + char dst_mac_string[32]={0}; + char default_mac[6]={0,0,0,0,0,0}; + switch(dir) + { + case DIR_C2S: // C2S and E2I = incoming + mac_to_string(mac_addr->mac->src_addr.h_source, src_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_INCOMING_SRC_MAC].name, (void *)src_mac_string, TLD_TYPE_STRING); + mac_to_string(mac_addr->mac->src_addr.h_dest, dst_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_INCOMING_DST_MAC].name, (void *)dst_mac_string, TLD_TYPE_STRING); + break; + case DIR_S2C: // S2C and E2I = outcoming + mac_to_string(mac_addr->mac->dst_addr.h_source, src_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_OUTCOMING_SRC_MAC].name, (void *)src_mac_string, TLD_TYPE_STRING); + mac_to_string(mac_addr->mac->dst_addr.h_dest, dst_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_OUTCOMING_DST_MAC].name, (void *)dst_mac_string, TLD_TYPE_STRING); + break; + case DIR_DOUBLE: // first pkt + mac_to_string(mac_addr->mac->src_addr.h_source, src_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_INCOMING_SRC_MAC].name, (void *)src_mac_string, TLD_TYPE_STRING); + mac_to_string(mac_addr->mac->src_addr.h_dest, dst_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_INCOMING_DST_MAC].name, (void *)dst_mac_string, TLD_TYPE_STRING); + + if((memcmp(mac_addr->mac->dst_addr.h_source, default_mac, 6))==0) + { + TLD_append(_handle, _instance->id2field[LOG_COMMON_OUTCOMING_SRC_MAC].name, (void *)dst_mac_string, TLD_TYPE_STRING); + TLD_append(_handle, _instance->id2field[LOG_COMMON_OUTCOMING_DST_MAC].name, (void *)src_mac_string, TLD_TYPE_STRING); + } + else + { + mac_to_string(mac_addr->mac->dst_addr.h_source, src_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_OUTCOMING_SRC_MAC].name, (void *)src_mac_string, TLD_TYPE_STRING); + mac_to_string(mac_addr->mac->dst_addr.h_dest, dst_mac_string); + TLD_append(_handle, _instance->id2field[LOG_COMMON_OUTCOMING_DST_MAC].name, (void *)dst_mac_string, TLD_TYPE_STRING); + } + break; + default: + break; + } + + return 0; +} + +static int set_mac(struct tsg_log_instance_t *_instance, struct TLD_handle_t *_handle, const struct streaminfo *a_stream) +{ + struct layer_addr *mac_addr=NULL; + struct streaminfo *ptmp = (struct streaminfo *)a_stream; + + while(ptmp) + { + switch(ptmp->addr.addrtype) + { + case ADDR_TYPE_MAC: + mac_addr=&(ptmp->addr); + break; + default: + break; + } + + ptmp=ptmp->pfather; + } + + const struct session_runtime_action_context *srt_action_context=session_runtime_action_context_get(a_stream); + if(srt_action_context==NULL) + { + return 0; + } + + char direction=srt_action_context_get_direction(srt_action_context); + if(direction>0) + { + switch(direction) + { + case 'E': + direction_I2E(_instance, _handle, mac_addr, a_stream->dir); + break; + case 'I': + direction_E2I(_instance, _handle, mac_addr, a_stream->dir); + break; + default: + return 0; + } + + return 1; + } + + return 0; +} + + static int set_link_mac(struct tsg_log_instance_t *_instance, struct TLD_handle_t *_handle, struct layer_addr_mac *mac, Value *tunnel_object) { int flag=0; @@ -1651,7 +1801,8 @@ int TLD_append_streaminfo(struct tsg_log_instance_t *instance, struct TLD_handle set_packet_bytes(_instance, _handle, a_stream); set_session_attributes(_instance, _handle, a_stream); set_lua_scripts_result(_instance, _handle, a_stream); - + + set_mac(_instance, _handle, a_stream); set_session_flags(_instance, _handle, a_stream); set_l4_protocol(_instance, _handle, a_stream); |
