diff options
-rw-r--r-- | epan/dissectors/packet-nstrace.c | 39 | ||||
-rw-r--r-- | wiretap/netscaler.c | 83 | ||||
-rw-r--r-- | wiretap/netscaler.h | 11 | ||||
-rw-r--r-- | wiretap/wtap.h | 3 |
4 files changed, 125 insertions, 11 deletions
diff --git a/epan/dissectors/packet-nstrace.c b/epan/dissectors/packet-nstrace.c index 80b9bd5afd..fdb4dbdb28 100644 --- a/epan/dissectors/packet-nstrace.c +++ b/epan/dissectors/packet-nstrace.c @@ -34,6 +34,8 @@ static int proto_nstrace = -1; static int hf_ns_nicno = -1; +static int hf_ns_src_vm = -1; +static int hf_ns_dst_vm = -1; static int hf_ns_dir = -1; static int hf_ns_pcbdevno = -1; static int hf_ns_l_pcbdevno = -1; @@ -76,23 +78,31 @@ static const value_string ns_dir_vals[] = { { NSPR_PDPKTRACEFULLTX_V22, "TX" }, { NSPR_PDPKTRACEFULLTX_V23, "TX" }, { NSPR_PDPKTRACEFULLTX_V24, "TX" }, + { NSPR_PDPKTRACEFULLTX_V25, "TX" }, { NSPR_PDPKTRACEFULLTXB_V22, "TXB" }, { NSPR_PDPKTRACEFULLTXB_V23, "TXB" }, { NSPR_PDPKTRACEFULLTXB_V24, "TXB" }, + { NSPR_PDPKTRACEFULLTXB_V25, "TXB" }, { NSPR_PDPKTRACEFULLRX_V22, "RX" }, { NSPR_PDPKTRACEFULLRX_V23, "RX" }, { NSPR_PDPKTRACEFULLRX_V24, "RX" }, + { NSPR_PDPKTRACEFULLRX_V25, "RX" }, { NSPR_PDPKTRACEFULLNEWRX_V24, "NEW_RX" }, + { NSPR_PDPKTRACEFULLNEWRX_V25, "NEW_RX" }, { NSPR_PDPKTRACEPARTTX_V22, "TX" }, { NSPR_PDPKTRACEPARTTX_V23, "TX" }, { NSPR_PDPKTRACEPARTTX_V24, "TX" }, + { NSPR_PDPKTRACEPARTTX_V25, "TX" }, { NSPR_PDPKTRACEPARTTXB_V22, "TXB" }, { NSPR_PDPKTRACEPARTTXB_V23, "TXB" }, { NSPR_PDPKTRACEPARTTXB_V24, "TXB" }, + { NSPR_PDPKTRACEPARTTXB_V25, "TXB" }, { NSPR_PDPKTRACEPARTRX_V22, "RX" }, { NSPR_PDPKTRACEPARTRX_V23, "RX" }, { NSPR_PDPKTRACEPARTRX_V24, "RX" }, + { NSPR_PDPKTRACEPARTRX_V25, "RX" }, { NSPR_PDPKTRACEPARTNEWRX_V24, "NEW_RX" }, + { NSPR_PDPKTRACEPARTNEWRX_V25, "NEW_RX" }, { 0, NULL } }; @@ -118,6 +128,16 @@ dissect_nstrace(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) const gchar *flags[] = {"FP", "FR", "DFD", "SRSS", "RSSH"}; gboolean first_flag = TRUE; guint8 flagoffset, flagval; + guint8 src_vmname_len, dst_vmname_len; + guint8 variable_ns_len = 0; + + if (pnstr->rec_type == NSPR_HEADER_VERSION205) + { + src_vmname_len = tvb_get_guint8(tvb,pnstr->src_vmname_len_offset); + dst_vmname_len = tvb_get_guint8(tvb,pnstr->dst_vmname_len_offset); + variable_ns_len = src_vmname_len + dst_vmname_len; + pnstr->eth_offset += variable_ns_len; + } ti = proto_tree_add_protocol_format(tree, proto_nstrace, tvb, 0, pnstr->eth_offset, "NetScaler Packet Trace"); ns_tree = proto_item_add_subtree(ti, ett_ns); @@ -127,6 +147,16 @@ dissect_nstrace(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) switch (pnstr->rec_type) { + case NSPR_HEADER_VERSION205: + + if(src_vmname_len){ + proto_tree_add_item(ns_tree,hf_ns_src_vm,tvb,pnstr->data_offset,src_vmname_len,ENC_LITTLE_ENDIAN); + } + + if(dst_vmname_len){ + proto_tree_add_item(ns_tree,hf_ns_dst_vm,tvb,pnstr->data_offset+src_vmname_len,dst_vmname_len,ENC_LITTLE_ENDIAN); + } + case NSPR_HEADER_VERSION204: @@ -196,6 +226,14 @@ proto_register_ns(void) { &hf_ns_nicno, { "Nic No", "nstrace.nicno", FT_UINT8, BASE_DEC,NULL, 0x0, NULL, HFILL }}, + + { &hf_ns_src_vm, + { "Src Vm Name", "nstrace.src_vm", FT_STRINGZ, BASE_NONE,NULL, 0x0, + NULL, HFILL }}, + + { &hf_ns_dst_vm, + { "Dst Vm Name", "nstrace.dst_vm", FT_STRINGZ, BASE_NONE,NULL, 0x0, + NULL, HFILL }}, { &hf_ns_coreid, { "Core Id", "nstrace.coreid", FT_UINT16, BASE_DEC,NULL, 0x0, @@ -256,6 +294,7 @@ proto_register_ns(void) { &hf_ns_clflags_fp, { "Flow processor (FP)", "nstrace.flags.fp", FT_BOOLEAN, 8, TFS(&tfs_set_notset), CL_FP, NULL, HFILL}}, + }; static gint *ett[] = { diff --git a/wiretap/netscaler.c b/wiretap/netscaler.c index 0b349d43c5..1902f8406a 100644 --- a/wiretap/netscaler.c +++ b/wiretap/netscaler.c @@ -261,6 +261,28 @@ typedef struct nspr_pktracefull_v24 } nspr_pktracefull_v24_t; #define nspr_pktracefull_v24_s (sizeof(nspr_pktracefull_v24_t) - 4) +/* New full packet trace structure v25 for vm info tracing */ +typedef struct nspr_pktracefull_v25 +{ + NSPR_HEADER3B_V22(fp); /* long performance header */ + guint8 fp_DevNo; /* Network Device (NIC) number */ + guint8 fp_AbsTimeHr[8]; /*High resolution absolute time in nanosec*/ + guint8 fp_PcbDevNo[4]; /* PCB devno */ + guint8 fp_lPcbDevNo[4]; /* link PCB devno */ + guint8 fp_VlanTag[2]; /* vlan tag */ + guint8 fp_Coreid[2]; /* coreid of the packet */ + guint8 fp_srcNodeId[2]; /* source node # */ + guint8 fp_destNodeId[2]; /* destination node # */ + guint8 fp_clFlags; /* cluster flags */ + guint8 fp_src_vmname_len; /* vm src info */ + guint8 fp_dst_vmname_len; /* vm src info */ + guint8 fp_Data[4]; /* packet data starts here */ +} nspr_pktracefull_v25_t; +#define nspr_pktracefull_v25_s (sizeof(nspr_pktracefull_v25_t) - 4) +#define fp_src_vmname fp_Data +#define fp_src_vmname fp_Data + + /* partial packet trace structure */ typedef struct nspr_pktracepart_v10 { @@ -347,6 +369,29 @@ typedef struct nspr_pktracepart_v24 } nspr_pktracepart_v24_t; #define nspr_pktracepart_v24_s (sizeof(nspr_pktracepart_v24_t) -4) +/* New partial packet trace structure v25 for vm info tracing */ +typedef struct nspr_pktracepart_v25 +{ + NSPR_HEADER3B_V22(pp); /* long performance header */ + guint8 pp_DevNo; /* Network Device (NIC) number */ + guint8 pp_AbsTimeHr[8]; /*High resolution absolute time in nanosec*/ + guint8 pp_PktSizeOrg[2]; /* Original packet size */ + guint8 pp_PktOffset[2]; /* starting offset in packet */ + guint8 pp_PcbDevNo[4]; /* PCB devno */ + guint8 pp_lPcbDevNo[4]; /* link PCB devno */ + guint8 pp_VlanTag[2]; /* vlan tag */ + guint8 pp_Coreid[2]; /* Coreid of the packet */ + guint8 pp_srcNodeId[2]; /* source node # */ + guint8 pp_destNodeId[2]; /* destination node # */ + guint8 pp_clFlags; /* cluster flags */ + guint8 pp_src_vmname_len; /* vm info */ + guint8 pp_dst_vmname_len; /* vm info */ + guint8 pp_Data[4]; /* packet data starts here */ +} nspr_pktracepart_v25_t; +#define nspr_pktracepart_v25_s (sizeof(nspr_pktracepart_v25_t) -4) +#define pp_src_vmname pp_Data +#define pp_dst_vmname pp_Data + #define myoffsetof(type,fieldname) (&(((type*)0)->fieldname)) #define __TNO(enumprefix,structprefix,structname,hdrname,structfieldname) \ @@ -394,7 +439,12 @@ typedef struct nspr_pktracepart_v24 __TNO(enumprefix,structprefix,structname,destnodeid,destNodeId)\ __TNO(enumprefix,structprefix,structname,clflags,clFlags) - +#define TRACE_V25_REC_LEN_OFF(enumprefix,structprefix,structname) \ + TRACE_V24_REC_LEN_OFF(enumprefix,structprefix,structname)\ + __TNO(enumprefix,structprefix,structname,src_vmname_len,src_vmname_len)\ + __TNO(enumprefix,structprefix,structname,dst_vmname_len,dst_vmname_len)\ + __TNO(enumprefix,structprefix,structname,data,Data) + TRACE_V10_REC_LEN_OFF(v10_part,pp,pktracepart_v10) TRACE_V10_REC_LEN_OFF(v10_full,fp,pktracefull_v10) TRACE_V20_REC_LEN_OFF(v20_part,pp,pktracepart_v20) @@ -407,6 +457,9 @@ typedef struct nspr_pktracepart_v24 TRACE_V23_REC_LEN_OFF(v23_full,fp,pktracefull_v23) TRACE_V24_REC_LEN_OFF(v24_part,pp,pktracepart_v24) TRACE_V24_REC_LEN_OFF(v24_full,fp,pktracefull_v24) + TRACE_V25_REC_LEN_OFF(v25_part,pp,pktracepart_v25) + TRACE_V25_REC_LEN_OFF(v25_full,fp,pktracefull_v25) + #undef __TNV1O #undef __TNV1L #undef __TNO @@ -843,6 +896,7 @@ static gboolean nstrace_read_v10(wtap *wth, int *err, gchar **err_info, gint64 * #define TIMEDEFV21(fp,type) TIMEDEFV20(fp,type) #define TIMEDEFV22(fp,type) TIMEDEFV20(fp,type) #define TIMEDEFV24(fp,type) TIMEDEFV23(fp,type) +#define TIMEDEFV25(fp,type) TIMEDEFV24(fp,type) #define PPSIZEDEFV20(pp,ver) \ do {\ wth->phdr.presence_flags |= WTAP_HAS_CAP_LEN;\ @@ -854,6 +908,7 @@ static gboolean nstrace_read_v10(wtap *wth, int *err, gchar **err_info, gint64 * #define PPSIZEDEFV22(pp,ver) PPSIZEDEFV20(pp,ver) #define PPSIZEDEFV23(pp,ver) PPSIZEDEFV20(pp,ver) #define PPSIZEDEFV24(pp,ver) PPSIZEDEFV20(pp,ver) +#define PPSIZEDEFV25(pp,ver) PPSIZEDEFV20(pp,ver) #define FPSIZEDEFV20(fp,ver)\ do {\ @@ -865,6 +920,7 @@ static gboolean nstrace_read_v10(wtap *wth, int *err, gchar **err_info, gint64 * #define FPSIZEDEFV22(pp,ver) FPSIZEDEFV20(fp,ver) #define FPSIZEDEFV23(pp,ver) FPSIZEDEFV20(fp,ver) #define FPSIZEDEFV24(pp,ver) FPSIZEDEFV20(fp,ver) +#define FPSIZEDEFV25(pp,ver) FPSIZEDEFV20(fp,ver) #define PACKET_DESCRIBE(FPTIMEDEF,SIZEDEF,ver,enumprefix,type,structname,TYPE)\ do {\ @@ -910,38 +966,40 @@ static gboolean nstrace_read_v20(wtap *wth, int *err, gchar **err_info, gint64 * case NSPR_PDPKTRACEFULLTXB_V##type:\ case NSPR_PDPKTRACEFULLRX_V##type:\ PACKET_DESCRIBE(TIMEDEF,FPSIZEDEFV,type,v##type##_full,fp,pktracefull_v##type,acttype); -#define GENERATE_CASE_V24(type,acttype) \ +#define GENERATE_CASE_V25(type,acttype) \ case NSPR_PDPKTRACEFULLTX_V##type:\ case NSPR_PDPKTRACEFULLTXB_V##type:\ case NSPR_PDPKTRACEFULLRX_V##type:\ case NSPR_PDPKTRACEFULLNEWRX_V##type:\ PACKET_DESCRIBE(TIMEDEF,FPSIZEDEFV,type,v##type##_full,fp,pktracefull_v##type,acttype); - GENERATE_CASE_V24(24,204); + GENERATE_CASE_V25(25,205); + GENERATE_CASE_V25(24,204); GENERATE_CASE(23,203); GENERATE_CASE(22,202); GENERATE_CASE(21,201); GENERATE_CASE(20,200); #undef GENERATE_CASE -#undef GENERATE_CASE_V24 +#undef GENERATE_CASE_V25 #define GENERATE_CASE(type,acttype) \ case NSPR_PDPKTRACEPARTTX_V##type:\ case NSPR_PDPKTRACEPARTTXB_V##type:\ case NSPR_PDPKTRACEPARTRX_V##type:\ PACKET_DESCRIBE(TIMEDEF,PPSIZEDEFV,type,v##type##_part,pp,pktracepart_v##type,acttype); -#define GENERATE_CASE_V24(type,acttype) \ +#define GENERATE_CASE_V25(type,acttype) \ case NSPR_PDPKTRACEPARTTX_V##type:\ case NSPR_PDPKTRACEPARTTXB_V##type:\ case NSPR_PDPKTRACEPARTRX_V##type:\ case NSPR_PDPKTRACEPARTNEWRX_V##type:\ PACKET_DESCRIBE(TIMEDEF,PPSIZEDEFV,type,v##type##_part,pp,pktracepart_v##type,acttype); - GENERATE_CASE_V24(24,204); + GENERATE_CASE_V25(25,205); + GENERATE_CASE_V25(24,204); GENERATE_CASE(23,203); GENERATE_CASE(22,202); GENERATE_CASE(21,201); GENERATE_CASE(20,200); #undef GENERATE_CASE -#undef GENERATE_CASE_V24 +#undef GENERATE_CASE_V25 case NSPR_ABSTIME_V20: { @@ -1063,7 +1121,7 @@ static gboolean nstrace_seek_read(wtap *wth, gint64 seek_off, } } else if (wth->file_type == WTAP_FILE_NETSCALER_2_0) { -#define GENERATE_CASE_FULL_V24(type,acttype) \ +#define GENERATE_CASE_FULL_V25(type,acttype) \ case NSPR_PDPKTRACEFULLTX_V##type:\ case NSPR_PDPKTRACEFULLTXB_V##type:\ case NSPR_PDPKTRACEFULLRX_V##type:\ @@ -1072,7 +1130,7 @@ static gboolean nstrace_seek_read(wtap *wth, gint64 seek_off, pseudo_header->nstr.rec_type = NSPR_HEADER_VERSION##acttype;\ break;\ -#define GENERATE_CASE_PART_V24(type,acttype) \ +#define GENERATE_CASE_PART_V25(type,acttype) \ case NSPR_PDPKTRACEPARTTX_V##type:\ case NSPR_PDPKTRACEPARTTXB_V##type:\ case NSPR_PDPKTRACEPARTRX_V##type:\ @@ -1091,8 +1149,10 @@ static gboolean nstrace_seek_read(wtap *wth, gint64 seek_off, GENERATE_CASE_PART(22,202) GENERATE_CASE_FULL(23,203) GENERATE_CASE_PART(23,203) - GENERATE_CASE_FULL_V24(24,204) - GENERATE_CASE_PART_V24(24,204) + GENERATE_CASE_FULL_V25(24,204) + GENERATE_CASE_PART_V25(24,204) + GENERATE_CASE_FULL_V25(25,205) + GENERATE_CASE_PART_V25(25,205) } } @@ -1347,6 +1407,7 @@ static gboolean nstrace_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr, case NSPR_HEADER_VERSION202: case NSPR_HEADER_VERSION203: case NSPR_HEADER_VERSION204: + case NSPR_HEADER_VERSION205: if (wdh->file_type == WTAP_FILE_NETSCALER_1_0) { *err = WTAP_ERR_UNSUPPORTED_FILE_TYPE; diff --git a/wiretap/netscaler.h b/wiretap/netscaler.h index 4c65207bc2..04eddb3397 100644 --- a/wiretap/netscaler.h +++ b/wiretap/netscaler.h @@ -77,6 +77,16 @@ #define NSPR_PDPKTRACEPARTRX_V24 0xFE /* Received packets before NIC pipelining */ #define NSPR_PDPKTRACEPARTNEWRX_V24 0xFF /* Received packets after NIC pipelining */ +/* vm info tracing*/ +#define NSPR_PDPKTRACEFULLTX_V25 0xB0 /* Transmitted */ +#define NSPR_PDPKTRACEFULLTXB_V25 0xB1 /* In transmit buffer */ +#define NSPR_PDPKTRACEFULLRX_V25 0xB2 /* Received packets before NIC pipelining */ +#define NSPR_PDPKTRACEFULLNEWRX_V25 0xB3 /* Received packets after NIC pipelining */ +#define NSPR_PDPKTRACEPARTTX_V25 0xB4 /* Transmitted */ +#define NSPR_PDPKTRACEPARTTXB_V25 0xB5 /* In transmit buffer */ +#define NSPR_PDPKTRACEPARTRX_V25 0xB6 /* Received packets before NIC pipelining */ +#define NSPR_PDPKTRACEPARTNEWRX_V25 0xB7 /* Received packets after NIC pipelining */ + /* Record types */ #define NSPR_HEADER_VERSION100 0x10 #define NSPR_HEADER_VERSION200 0x20 @@ -84,6 +94,7 @@ #define NSPR_HEADER_VERSION202 0x22 #define NSPR_HEADER_VERSION203 0x23 #define NSPR_HEADER_VERSION204 0x24 +#define NSPR_HEADER_VERSION205 0x25 int nstrace_open(wtap *wth, int *err, gchar **err_info); int nstrace_10_dump_can_write_encap(int encap); int nstrace_20_dump_can_write_encap(int encap); diff --git a/wiretap/wtap.h b/wiretap/wtap.h index 9e0397af17..fb957fa467 100644 --- a/wiretap/wtap.h +++ b/wiretap/wtap.h @@ -360,6 +360,9 @@ struct nstr_phdr { guint8 srcnodeid_offset; guint8 destnodeid_offset; guint8 clflags_offset; + guint8 src_vmname_len_offset; + guint8 dst_vmname_len_offset; + guint8 data_offset; }; /* Packet "pseudo-header" information for Ethernet capture files. */ |