diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2013-06-19 21:49:12 +0000 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2013-06-19 21:49:12 +0000 |
commit | 014e2deec6cab710eaf28bfab891c0d6d36f11b4 (patch) | |
tree | cadf0f762d1c26edf86c075225889dcc56135dd5 /epan/exported_pdu.c | |
parent | 19d2f6dac4c84a5c24aaf2c39cf790b3e6f4a366 (diff) | |
download | wireshark-014e2deec6cab710eaf28bfab891c0d6d36f11b4.tar.gz wireshark-014e2deec6cab710eaf28bfab891c0d6d36f11b4.tar.bz2 wireshark-014e2deec6cab710eaf28bfab891c0d6d36f11b4.zip |
Add export of SS7 OPC/DPC
svn path=/trunk/; revision=50060
Diffstat (limited to 'epan/exported_pdu.c')
-rw-r--r-- | epan/exported_pdu.c | 91 |
1 files changed, 73 insertions, 18 deletions
diff --git a/epan/exported_pdu.c b/epan/exported_pdu.c index 8908a575d4..4a549c1844 100644 --- a/epan/exported_pdu.c +++ b/epan/exported_pdu.c @@ -29,6 +29,7 @@ #include <epan/packet.h> #include <epan/exported_pdu.h> +#include <epan/dissectors/packet-mtp3.h> /** * Allocates and fills the exp_pdu_data_t struct according to the wanted_exp_tags @@ -57,22 +58,18 @@ load_export_pdu_tags(packet_info *pinfo, const char* proto_name, int wtap_encap } if((tags_bit_field & EXP_PDU_TAG_IP_SRC_BIT) == EXP_PDU_TAG_IP_SRC_BIT){ - /* tag+length */ - tag_buf_size+=4; if(pinfo->net_src.type == AT_IPv4){ - tag_buf_size = tag_buf_size + EXP_PDU_TAG_IPV4_SRC_LEN; - }else{ - tag_buf_size = tag_buf_size + EXP_PDU_TAG_IPV6_SRC_LEN; + tag_buf_size += 4 + EXP_PDU_TAG_IPV4_SRC_LEN; + }else if(pinfo->net_src.type == AT_IPv6){ + tag_buf_size += 4 + EXP_PDU_TAG_IPV6_SRC_LEN; } } if((tags_bit_field & EXP_PDU_TAG_IP_DST_BIT) == EXP_PDU_TAG_IP_DST_BIT){ - /* tag+length */ - tag_buf_size+=4; if(pinfo->net_dst.type == AT_IPv4){ - tag_buf_size = tag_buf_size + EXP_PDU_TAG_IPV4_DST_LEN; - }else{ - tag_buf_size = tag_buf_size + EXP_PDU_TAG_IPV6_DST_LEN; + tag_buf_size += 4 + EXP_PDU_TAG_IPV4_DST_LEN; + }else if(pinfo->net_dst.type == AT_IPv6){ + tag_buf_size += 4 + EXP_PDU_TAG_IPV6_DST_LEN; } } @@ -101,6 +98,18 @@ load_export_pdu_tags(packet_info *pinfo, const char* proto_name, int wtap_encap } } + if((tags_bit_field & EXP_PDU_TAG_SS7_OPC_BIT) == EXP_PDU_TAG_SS7_OPC_BIT){ + if(pinfo->src.type == AT_SS7PC){ + tag_buf_size += 4 + EXP_PDU_TAG_SS7_OPC_LEN; + } + } + + if((tags_bit_field & EXP_PDU_TAG_SS7_DPC_BIT) == EXP_PDU_TAG_SS7_DPC_BIT){ + if(pinfo->dst.type == AT_SS7PC){ + tag_buf_size += 4 + EXP_PDU_TAG_SS7_DPC_LEN; + } + } + if((tags_bit_field & EXP_PDU_TAG_ORIG_FNO_BIT) == EXP_PDU_TAG_ORIG_FNO_BIT){ tag_buf_size= tag_buf_size + EXP_PDU_TAG_ORIG_FNO_LEN + 4; } @@ -136,7 +145,9 @@ load_export_pdu_tags(packet_info *pinfo, const char* proto_name, int wtap_encap i++; exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV4_SRC_LEN; /* tag length */ i++; - }else{ + memcpy(exp_pdu_data->tlv_buffer+i, pinfo->net_src.data, EXP_PDU_TAG_IPV4_SRC_LEN); + i += EXP_PDU_TAG_IPV4_SRC_LEN; + }else if(pinfo->net_src.type == AT_IPv6){ exp_pdu_data->tlv_buffer[i] = 0; i++; exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV6_SRC; @@ -145,10 +156,9 @@ load_export_pdu_tags(packet_info *pinfo, const char* proto_name, int wtap_encap i++; exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV6_SRC_LEN; /* tag length */ i++; + memcpy(exp_pdu_data->tlv_buffer+i, pinfo->net_src.data, EXP_PDU_TAG_IPV6_SRC_LEN); + i += EXP_PDU_TAG_IPV6_SRC_LEN; } - - memcpy(exp_pdu_data->tlv_buffer+i, pinfo->net_src.data, pinfo->net_src.len); - i += (pinfo->net_src.type == AT_IPv4) ? EXP_PDU_TAG_IPV4_SRC_LEN : EXP_PDU_TAG_IPV6_SRC_LEN; } if((tags_bit_field & EXP_PDU_TAG_IP_DST_BIT) == EXP_PDU_TAG_IP_DST_BIT){ @@ -161,7 +171,9 @@ load_export_pdu_tags(packet_info *pinfo, const char* proto_name, int wtap_encap i++; exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV4_DST_LEN; /* tag length */ i++; - }else{ + memcpy(exp_pdu_data->tlv_buffer+i, pinfo->net_dst.data, EXP_PDU_TAG_IPV4_DST_LEN); + i += EXP_PDU_TAG_IPV4_DST_LEN; + }else if(pinfo->net_dst.type == AT_IPv6){ exp_pdu_data->tlv_buffer[i] = 0; i++; exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV6_DST; @@ -170,10 +182,9 @@ load_export_pdu_tags(packet_info *pinfo, const char* proto_name, int wtap_encap i++; exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV6_DST_LEN; /* tag length */ i++; + memcpy(exp_pdu_data->tlv_buffer+i, pinfo->net_dst.data, EXP_PDU_TAG_IPV6_DST_LEN); + i += EXP_PDU_TAG_IPV6_DST_LEN; } - - memcpy(exp_pdu_data->tlv_buffer+i, pinfo->net_dst.data, pinfo->net_dst.len); - i += (pinfo->net_dst.type == AT_IPv4) ? EXP_PDU_TAG_IPV4_DST_LEN : EXP_PDU_TAG_IPV6_DST_LEN; } if((tags_bit_field & EXP_PDU_TAG_SRC_PORT_BIT) == EXP_PDU_TAG_SRC_PORT_BIT){ @@ -261,6 +272,50 @@ load_export_pdu_tags(packet_info *pinfo, const char* proto_name, int wtap_encap } } + if((tags_bit_field & EXP_PDU_TAG_SS7_OPC_BIT) == EXP_PDU_TAG_SS7_OPC_BIT){ + if(pinfo->src.type == AT_SS7PC){ + mtp3_addr_pc_t *mtp3_addr = (mtp3_addr_pc_t *)(pinfo->src.data); + exp_pdu_data->tlv_buffer[i] = 0; + i++; + exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_SS7_OPC; + i++; + exp_pdu_data->tlv_buffer[i] = 0; + i++; + exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_SS7_OPC_LEN; /* tag length */ + i++; + exp_pdu_data->tlv_buffer[i] = (mtp3_addr->pc & 0xff000000) >> 24; + exp_pdu_data->tlv_buffer[i+1] = (mtp3_addr->pc & 0x00ff0000) >> 16; + exp_pdu_data->tlv_buffer[i+2] = (mtp3_addr->pc & 0x0000ff00) >> 8; + exp_pdu_data->tlv_buffer[i+3] = (mtp3_addr->pc & 0x000000ff); + exp_pdu_data->tlv_buffer[i+4] = (mtp3_addr->type & 0xff00) >> 8; + exp_pdu_data->tlv_buffer[i+5] = (mtp3_addr->type & 0x00ff); + exp_pdu_data->tlv_buffer[i+6] = mtp3_addr->ni; + i += EXP_PDU_TAG_SS7_OPC_LEN; + } + } + + if((tags_bit_field & EXP_PDU_TAG_SS7_DPC_BIT) == EXP_PDU_TAG_SS7_DPC_BIT){ + if(pinfo->dst.type == AT_SS7PC){ + mtp3_addr_pc_t *mtp3_addr = (mtp3_addr_pc_t *)(pinfo->dst.data); + exp_pdu_data->tlv_buffer[i] = 0; + i++; + exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_SS7_DPC; + i++; + exp_pdu_data->tlv_buffer[i] = 0; + i++; + exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_SS7_DPC_LEN; /* tag length */ + i++; + exp_pdu_data->tlv_buffer[i] = (mtp3_addr->pc & 0xff000000) >> 24; + exp_pdu_data->tlv_buffer[i+1] = (mtp3_addr->pc & 0x00ff0000) >> 16; + exp_pdu_data->tlv_buffer[i+2] = (mtp3_addr->pc & 0x0000ff00) >> 8; + exp_pdu_data->tlv_buffer[i+3] = (mtp3_addr->pc & 0x000000ff); + exp_pdu_data->tlv_buffer[i+4] = (mtp3_addr->type & 0xff00) >> 8; + exp_pdu_data->tlv_buffer[i+5] = (mtp3_addr->type & 0x00ff); + exp_pdu_data->tlv_buffer[i+6] = mtp3_addr->ni; + i += EXP_PDU_TAG_SS7_DPC_LEN; + } + } + if((tags_bit_field & EXP_PDU_TAG_ORIG_FNO_BIT) == EXP_PDU_TAG_ORIG_FNO_BIT){ exp_pdu_data->tlv_buffer[i] = 0; i++; |