aboutsummaryrefslogtreecommitdiffstats
path: root/epan/exported_pdu.c
diff options
context:
space:
mode:
authorPascal Quantin <pascal.quantin@gmail.com>2014-04-18 16:43:36 +0200
committerAnders Broman <a.broman58@gmail.com>2014-04-18 20:15:04 +0000
commitad33357e627c02d4b4f9b78e75a78fbfebd1d12f (patch)
tree94c5f33c77f33e16ee7cd1020be4c27c2b986e10 /epan/exported_pdu.c
parentbe76ba5f0df80f2e0f44f2c8bad9ee2e7341a729 (diff)
Exported PDU: add support for more than 32 tags
Change-Id: Idc9f105164919827a8a81c88b5a56de4fa25df0b Reviewed-on: https://code.wireshark.org/review/1197 Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/exported_pdu.c')
-rw-r--r--epan/exported_pdu.c387
1 files changed, 201 insertions, 186 deletions
diff --git a/epan/exported_pdu.c b/epan/exported_pdu.c
index c5c5b7a5f8..a1a205eca8 100644
--- a/epan/exported_pdu.c
+++ b/epan/exported_pdu.c
@@ -32,10 +32,14 @@
/**
* Allocates and fills the exp_pdu_data_t struct according to the wanted_exp_tags
- * bit_fileld, if proto_name is != NULL, wtap_encap must be -1 or vice-versa
+ * bit field of wanted_exp_tags_len bytes length
+ * If proto_name is != NULL, wtap_encap must be -1 or vice-versa
+ *
+ * The tags in the tag buffer SHOULD be added in numerical order.
*/
exp_pdu_data_t *
-load_export_pdu_tags(packet_info *pinfo, const char* proto_name, int wtap_encap _U_, guint32 tags_bit_field)
+load_export_pdu_tags(packet_info *pinfo, const char* proto_name, int wtap_encap _U_,
+ guint8 *wanted_exp_tags, guint16 wanted_exp_tags_len)
{
exp_pdu_data_t *exp_pdu_data;
int tag_buf_size = 0;
@@ -56,55 +60,61 @@ load_export_pdu_tags(packet_info *pinfo, const char* proto_name, int wtap_encap
tag_buf_size = tag_str_len + 4;
}
- if((tags_bit_field & EXP_PDU_TAG_IP_SRC_BIT) == EXP_PDU_TAG_IP_SRC_BIT){
- if(pinfo->net_src.type == AT_IPv4){
- 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;
+ /* Check first byte of optional tags bitmap */
+ if (wanted_exp_tags_len >= 1) {
+ if((wanted_exp_tags[0] & EXP_PDU_TAG_IP_SRC_BIT) == EXP_PDU_TAG_IP_SRC_BIT){
+ if(pinfo->net_src.type == AT_IPv4){
+ 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){
- if(pinfo->net_dst.type == AT_IPv4){
- 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;
+ if((wanted_exp_tags[0] & EXP_PDU_TAG_IP_DST_BIT) == EXP_PDU_TAG_IP_DST_BIT){
+ if(pinfo->net_dst.type == AT_IPv4){
+ 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;
+ }
}
- }
- if((tags_bit_field & EXP_PDU_TAG_SRC_PORT_BIT) == EXP_PDU_TAG_SRC_PORT_BIT){
- if (!port_type_defined) {
- tag_buf_size= tag_buf_size + EXP_PDU_TAG_PORT_TYPE_LEN + 4;
- port_type_defined = TRUE;
+ if((wanted_exp_tags[0] & EXP_PDU_TAG_SRC_PORT_BIT) == EXP_PDU_TAG_SRC_PORT_BIT){
+ if (!port_type_defined) {
+ tag_buf_size= tag_buf_size + EXP_PDU_TAG_PORT_TYPE_LEN + 4;
+ port_type_defined = TRUE;
+ }
+ tag_buf_size= tag_buf_size + EXP_PDU_TAG_SRC_PORT_LEN + 4;
}
- tag_buf_size= tag_buf_size + EXP_PDU_TAG_SRC_PORT_LEN + 4;
- }
- if((tags_bit_field & EXP_PDU_TAG_DST_PORT_BIT) == EXP_PDU_TAG_DST_PORT_BIT){
- if (!port_type_defined) {
- tag_buf_size= tag_buf_size + EXP_PDU_TAG_PORT_TYPE_LEN + 4;
+ if((wanted_exp_tags[0] & EXP_PDU_TAG_DST_PORT_BIT) == EXP_PDU_TAG_DST_PORT_BIT){
+ if (!port_type_defined) {
+ tag_buf_size= tag_buf_size + EXP_PDU_TAG_PORT_TYPE_LEN + 4;
+ }
+ tag_buf_size= tag_buf_size + EXP_PDU_TAG_DST_PORT_LEN + 4;
}
- tag_buf_size= tag_buf_size + EXP_PDU_TAG_DST_PORT_LEN + 4;
- }
- 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((wanted_exp_tags[0] & 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((wanted_exp_tags[0] & 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;
+ if((wanted_exp_tags[0] & 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;
+ }
}
- if((tags_bit_field & EXP_PDU_TAG_DVBCI_EVT_BIT) == EXP_PDU_TAG_DVBCI_EVT_BIT){
- tag_buf_size= tag_buf_size + EXP_PDU_TAG_DVBCI_EVT_LEN + 4;
+ /* Check second byte of optional tags bitmap */
+ if (wanted_exp_tags_len >= 2) {
+ if((wanted_exp_tags[1] & EXP_PDU_TAG_DVBCI_EVT_BIT) == EXP_PDU_TAG_DVBCI_EVT_BIT){
+ tag_buf_size= tag_buf_size + EXP_PDU_TAG_DVBCI_EVT_LEN + 4;
+ }
}
/* Add end of options length */
@@ -128,192 +138,197 @@ 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){
- if(pinfo->net_src.type == AT_IPv4){
- exp_pdu_data->tlv_buffer[i] = 0;
- i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV4_SRC;
- i++;
- exp_pdu_data->tlv_buffer[i] = 0;
- i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV4_SRC_LEN; /* tag length */
- i++;
- 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;
- i++;
- exp_pdu_data->tlv_buffer[i] = 0;
- 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;
+ /* Check first byte of optional tags bitmap */
+ if (wanted_exp_tags_len >= 1) {
+ if((wanted_exp_tags[0] & EXP_PDU_TAG_IP_SRC_BIT) == EXP_PDU_TAG_IP_SRC_BIT){
+ if(pinfo->net_src.type == AT_IPv4){
+ exp_pdu_data->tlv_buffer[i] = 0;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV4_SRC;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = 0;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV4_SRC_LEN; /* tag length */
+ i++;
+ 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;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = 0;
+ 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;
+ }
}
- }
- if((tags_bit_field & EXP_PDU_TAG_IP_DST_BIT) == EXP_PDU_TAG_IP_DST_BIT){
- if(pinfo->net_dst.type == AT_IPv4){
- exp_pdu_data->tlv_buffer[i] = 0;
- i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV4_DST;
- i++;
- exp_pdu_data->tlv_buffer[i] = 0;
- i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV4_DST_LEN; /* tag length */
- i++;
- 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;
- i++;
- exp_pdu_data->tlv_buffer[i] = 0;
- 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;
+ if((wanted_exp_tags[0] & EXP_PDU_TAG_IP_DST_BIT) == EXP_PDU_TAG_IP_DST_BIT){
+ if(pinfo->net_dst.type == AT_IPv4){
+ exp_pdu_data->tlv_buffer[i] = 0;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV4_DST;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = 0;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_IPV4_DST_LEN; /* tag length */
+ i++;
+ 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;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = 0;
+ 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;
+ }
}
- }
- if((tags_bit_field & EXP_PDU_TAG_SRC_PORT_BIT) == EXP_PDU_TAG_SRC_PORT_BIT){
- if (!port_type_defined) {
+ if((wanted_exp_tags[0] & EXP_PDU_TAG_SRC_PORT_BIT) == EXP_PDU_TAG_SRC_PORT_BIT){
+ if (!port_type_defined) {
+ exp_pdu_data->tlv_buffer[i] = 0;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_PORT_TYPE;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = 0;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_PORT_TYPE_LEN; /* tag length */
+ i++;
+ exp_pdu_data->tlv_buffer[i] = (pinfo->ptype & 0xff000000) >> 24;
+ exp_pdu_data->tlv_buffer[i+1] = (pinfo->ptype & 0x00ff0000) >> 16;
+ exp_pdu_data->tlv_buffer[i+2] = (pinfo->ptype & 0x0000ff00) >> 8;
+ exp_pdu_data->tlv_buffer[i+3] = (pinfo->ptype & 0x000000ff);
+ i = i +EXP_PDU_TAG_PORT_TYPE_LEN;
+ port_type_defined = TRUE;
+ }
exp_pdu_data->tlv_buffer[i] = 0;
i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_PORT_TYPE;
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_SRC_PORT;
i++;
exp_pdu_data->tlv_buffer[i] = 0;
i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_PORT_TYPE_LEN; /* tag length */
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_SRC_PORT_LEN; /* tag length */
i++;
- exp_pdu_data->tlv_buffer[i] = (pinfo->ptype & 0xff000000) >> 24;
- exp_pdu_data->tlv_buffer[i+1] = (pinfo->ptype & 0x00ff0000) >> 16;
- exp_pdu_data->tlv_buffer[i+2] = (pinfo->ptype & 0x0000ff00) >> 8;
- exp_pdu_data->tlv_buffer[i+3] = (pinfo->ptype & 0x000000ff);
- i = i +EXP_PDU_TAG_PORT_TYPE_LEN;
- port_type_defined = TRUE;
+ exp_pdu_data->tlv_buffer[i] = (pinfo->srcport & 0xff000000) >> 24;
+ exp_pdu_data->tlv_buffer[i+1] = (pinfo->srcport & 0x00ff0000) >> 16;
+ exp_pdu_data->tlv_buffer[i+2] = (pinfo->srcport & 0x0000ff00) >> 8;
+ exp_pdu_data->tlv_buffer[i+3] = (pinfo->srcport & 0x000000ff);
+ i = i +EXP_PDU_TAG_SRC_PORT_LEN;
}
- exp_pdu_data->tlv_buffer[i] = 0;
- i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_SRC_PORT;
- i++;
- exp_pdu_data->tlv_buffer[i] = 0;
- i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_SRC_PORT_LEN; /* tag length */
- i++;
- exp_pdu_data->tlv_buffer[i] = (pinfo->srcport & 0xff000000) >> 24;
- exp_pdu_data->tlv_buffer[i+1] = (pinfo->srcport & 0x00ff0000) >> 16;
- exp_pdu_data->tlv_buffer[i+2] = (pinfo->srcport & 0x0000ff00) >> 8;
- exp_pdu_data->tlv_buffer[i+3] = (pinfo->srcport & 0x000000ff);
- i = i +EXP_PDU_TAG_SRC_PORT_LEN;
- }
- if((tags_bit_field & EXP_PDU_TAG_DST_PORT_BIT) == EXP_PDU_TAG_DST_PORT_BIT){
- if (!port_type_defined) {
+ if((wanted_exp_tags[0] & EXP_PDU_TAG_DST_PORT_BIT) == EXP_PDU_TAG_DST_PORT_BIT){
+ if (!port_type_defined) {
+ exp_pdu_data->tlv_buffer[i] = 0;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_PORT_TYPE;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = 0;
+ i++;
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_PORT_TYPE_LEN; /* tag length */
+ i++;
+ exp_pdu_data->tlv_buffer[i] = (pinfo->ptype & 0xff000000) >> 24;
+ exp_pdu_data->tlv_buffer[i+1] = (pinfo->ptype & 0x00ff0000) >> 16;
+ exp_pdu_data->tlv_buffer[i+2] = (pinfo->ptype & 0x0000ff00) >> 8;
+ exp_pdu_data->tlv_buffer[i+3] = (pinfo->ptype & 0x000000ff);
+ i = i +EXP_PDU_TAG_PORT_TYPE_LEN;
+ }
exp_pdu_data->tlv_buffer[i] = 0;
i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_PORT_TYPE;
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_DST_PORT;
i++;
exp_pdu_data->tlv_buffer[i] = 0;
i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_PORT_TYPE_LEN; /* tag length */
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_DST_PORT_LEN; /* tag length */
i++;
- exp_pdu_data->tlv_buffer[i] = (pinfo->ptype & 0xff000000) >> 24;
- exp_pdu_data->tlv_buffer[i+1] = (pinfo->ptype & 0x00ff0000) >> 16;
- exp_pdu_data->tlv_buffer[i+2] = (pinfo->ptype & 0x0000ff00) >> 8;
- exp_pdu_data->tlv_buffer[i+3] = (pinfo->ptype & 0x000000ff);
- i = i +EXP_PDU_TAG_PORT_TYPE_LEN;
+ exp_pdu_data->tlv_buffer[i] = (pinfo->destport & 0xff000000) >> 24;
+ exp_pdu_data->tlv_buffer[i+1] = (pinfo->destport & 0x00ff0000) >> 16;
+ exp_pdu_data->tlv_buffer[i+2] = (pinfo->destport & 0x0000ff00) >> 8;
+ exp_pdu_data->tlv_buffer[i+3] = (pinfo->destport & 0x000000ff);
+ i = i +EXP_PDU_TAG_DST_PORT_LEN;
+ }
+
+ if((wanted_exp_tags[0] & EXP_PDU_TAG_SS7_OPC_BIT) == EXP_PDU_TAG_SS7_OPC_BIT){
+ if(pinfo->src.type == AT_SS7PC){
+ const mtp3_addr_pc_t *mtp3_addr = (const 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((wanted_exp_tags[0] & EXP_PDU_TAG_SS7_DPC_BIT) == EXP_PDU_TAG_SS7_DPC_BIT){
+ if(pinfo->dst.type == AT_SS7PC){
+ const mtp3_addr_pc_t *mtp3_addr = (const 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;
+ }
}
- exp_pdu_data->tlv_buffer[i] = 0;
- i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_DST_PORT;
- i++;
- exp_pdu_data->tlv_buffer[i] = 0;
- i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_DST_PORT_LEN; /* tag length */
- i++;
- exp_pdu_data->tlv_buffer[i] = (pinfo->destport & 0xff000000) >> 24;
- exp_pdu_data->tlv_buffer[i+1] = (pinfo->destport & 0x00ff0000) >> 16;
- exp_pdu_data->tlv_buffer[i+2] = (pinfo->destport & 0x0000ff00) >> 8;
- exp_pdu_data->tlv_buffer[i+3] = (pinfo->destport & 0x000000ff);
- i = i +EXP_PDU_TAG_DST_PORT_LEN;
- }
- if((tags_bit_field & EXP_PDU_TAG_SS7_OPC_BIT) == EXP_PDU_TAG_SS7_OPC_BIT){
- if(pinfo->src.type == AT_SS7PC){
- const mtp3_addr_pc_t *mtp3_addr = (const mtp3_addr_pc_t *)(pinfo->src.data);
+ if((wanted_exp_tags[0] & EXP_PDU_TAG_ORIG_FNO_BIT) == EXP_PDU_TAG_ORIG_FNO_BIT){
exp_pdu_data->tlv_buffer[i] = 0;
i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_SS7_OPC;
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_ORIG_FNO;
i++;
exp_pdu_data->tlv_buffer[i] = 0;
i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_SS7_OPC_LEN; /* tag length */
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_ORIG_FNO_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;
+ exp_pdu_data->tlv_buffer[i] = (pinfo->fd->num & 0xff000000) >> 24;
+ exp_pdu_data->tlv_buffer[i+1] = (pinfo->fd->num & 0x00ff0000) >> 16;
+ exp_pdu_data->tlv_buffer[i+2] = (pinfo->fd->num & 0x0000ff00) >> 8;
+ exp_pdu_data->tlv_buffer[i+3] = (pinfo->fd->num & 0x000000ff);
+ /*i = i +EXP_PDU_TAG_ORIG_FNO_LEN;*/
}
}
- if((tags_bit_field & EXP_PDU_TAG_SS7_DPC_BIT) == EXP_PDU_TAG_SS7_DPC_BIT){
- if(pinfo->dst.type == AT_SS7PC){
- const mtp3_addr_pc_t *mtp3_addr = (const mtp3_addr_pc_t *)(pinfo->dst.data);
+ if (wanted_exp_tags_len >= 2) {
+ if((wanted_exp_tags[1] & EXP_PDU_TAG_DVBCI_EVT_BIT) == EXP_PDU_TAG_DVBCI_EVT_BIT){
exp_pdu_data->tlv_buffer[i] = 0;
i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_SS7_DPC;
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_DVBCI_EVT;
i++;
exp_pdu_data->tlv_buffer[i] = 0;
i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_SS7_DPC_LEN; /* tag length */
+ exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_DVBCI_EVT_LEN;
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;
+ exp_pdu_data->tlv_buffer[i] = dvbci_get_evt_from_addrs(pinfo);
}
}
- if((tags_bit_field & EXP_PDU_TAG_ORIG_FNO_BIT) == EXP_PDU_TAG_ORIG_FNO_BIT){
- exp_pdu_data->tlv_buffer[i] = 0;
- i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_ORIG_FNO;
- i++;
- exp_pdu_data->tlv_buffer[i] = 0;
- i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_ORIG_FNO_LEN; /* tag length */
- i++;
- exp_pdu_data->tlv_buffer[i] = (pinfo->fd->num & 0xff000000) >> 24;
- exp_pdu_data->tlv_buffer[i+1] = (pinfo->fd->num & 0x00ff0000) >> 16;
- exp_pdu_data->tlv_buffer[i+2] = (pinfo->fd->num & 0x0000ff00) >> 8;
- exp_pdu_data->tlv_buffer[i+3] = (pinfo->fd->num & 0x000000ff);
- /*i = i +EXP_PDU_TAG_ORIG_FNO_LEN;*/
- }
-
- if((tags_bit_field & EXP_PDU_TAG_DVBCI_EVT_BIT) == EXP_PDU_TAG_DVBCI_EVT_BIT){
- exp_pdu_data->tlv_buffer[i] = 0;
- i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_DVBCI_EVT;
- i++;
- exp_pdu_data->tlv_buffer[i] = 0;
- i++;
- exp_pdu_data->tlv_buffer[i] = EXP_PDU_TAG_DVBCI_EVT_LEN;
- i++;
- exp_pdu_data->tlv_buffer[i] = dvbci_get_evt_from_addrs(pinfo);
- }
-
return exp_pdu_data;
}