Add support for version 2.6 of netscaler capture format.
svn path=/trunk/; revision=49250
static int hf_ns_clflags_fr = -1;
static int hf_ns_clflags_fp = -1;
+static int hf_ns_activity = -1;
+static int hf_ns_activity_perf_collection = -1;
+static int hf_ns_activity_pcb_zombie = -1;
+static int hf_ns_activity_natpcb_zombie = -1;
+static int hf_ns_activity_lbstats_sync = -1;
+static int hf_ns_activity_stats_req = -1;
+
+
static gint ett_ns = -1;
static gint ett_ns_flags = -1;
+static gint ett_ns_activity_flags = -1;
static const value_string ns_dir_vals[] = {
{ NSPR_PDPKTRACEFULLTX_V10, "TX" },
{ NSPR_PDPKTRACEFULLTX_V23, "TX" },
{ NSPR_PDPKTRACEFULLTX_V24, "TX" },
{ NSPR_PDPKTRACEFULLTX_V25, "TX" },
+ { NSPR_PDPKTRACEFULLTX_V26, "TX" },
{ NSPR_PDPKTRACEFULLTXB_V22, "TXB" },
{ NSPR_PDPKTRACEFULLTXB_V23, "TXB" },
{ NSPR_PDPKTRACEFULLTXB_V24, "TXB" },
{ NSPR_PDPKTRACEFULLTXB_V25, "TXB" },
+ { NSPR_PDPKTRACEFULLTXB_V26, "TXB" },
{ NSPR_PDPKTRACEFULLRX_V22, "RX" },
{ NSPR_PDPKTRACEFULLRX_V23, "RX" },
{ NSPR_PDPKTRACEFULLRX_V24, "RX" },
{ NSPR_PDPKTRACEFULLRX_V25, "RX" },
+ { NSPR_PDPKTRACEFULLRX_V26, "RX" },
{ NSPR_PDPKTRACEFULLNEWRX_V24, "NEW_RX" },
{ NSPR_PDPKTRACEFULLNEWRX_V25, "NEW_RX" },
+ { NSPR_PDPKTRACEFULLNEWRX_V26, "NEW_RX" },
{ NSPR_PDPKTRACEPARTTX_V22, "TX" },
{ NSPR_PDPKTRACEPARTTX_V23, "TX" },
{ NSPR_PDPKTRACEPARTTX_V24, "TX" },
{ NSPR_PDPKTRACEPARTTX_V25, "TX" },
+ { NSPR_PDPKTRACEPARTTX_V26, "TX" },
{ NSPR_PDPKTRACEPARTTXB_V22, "TXB" },
{ NSPR_PDPKTRACEPARTTXB_V23, "TXB" },
{ NSPR_PDPKTRACEPARTTXB_V24, "TXB" },
{ NSPR_PDPKTRACEPARTTXB_V25, "TXB" },
+ { NSPR_PDPKTRACEPARTTXB_V26, "TXB" },
{ NSPR_PDPKTRACEPARTRX_V22, "RX" },
{ NSPR_PDPKTRACEPARTRX_V23, "RX" },
{ NSPR_PDPKTRACEPARTRX_V24, "RX" },
{ NSPR_PDPKTRACEPARTRX_V25, "RX" },
+ { NSPR_PDPKTRACEPARTRX_V26, "RX" },
{ NSPR_PDPKTRACEPARTNEWRX_V24, "NEW_RX" },
{ NSPR_PDPKTRACEPARTNEWRX_V25, "NEW_RX" },
+ { NSPR_PDPKTRACEPARTNEWRX_V26, "NEW_RX" },
{ 0, NULL }
};
#define CL_RSSH 0x10
#define CL_RES 0xE0
+#define NS_PE_STATE_PERF_COLLECTION_IN_PROG 0x00000001
+#define NS_PE_STATE_PCB_ZOMBIE_IN_PROG 0x00000002
+#define NS_PE_STATE_NATPCB_ZOMBIE_IN_PROG 0x00000004
+#define NS_PE_STATE_LBSTATS_SYNC_IN_PROG 0x00000008
+#define NS_PE_STATE_STATS_REQ_IN_PROG 0x00000010
+
static void
dissect_nstrace(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
guint8 flagoffset, flagval;
guint8 src_vmname_len = 0, dst_vmname_len = 0;
guint8 variable_ns_len = 0;
+ guint flagval32;
if (pnstr->rec_type == NSPR_HEADER_VERSION205)
{
switch (pnstr->rec_type)
{
+ case NSPR_HEADER_VERSION206:
+ flagoffset = pnstr->ns_activity_offset;
+ flagval32 = tvb_get_letohl(tvb, flagoffset);
+ flagitem = proto_tree_add_uint_format(ns_tree, hf_ns_activity, tvb, flagoffset, 4, flagval32,
+ "Activity Flags: 0x%04x", flagval32);
+ flagtree = proto_item_add_subtree(flagitem, ett_ns_activity_flags);
+ proto_tree_add_item(flagtree, hf_ns_activity_perf_collection, tvb, flagoffset, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(flagtree, hf_ns_activity_pcb_zombie, tvb, flagoffset, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(flagtree, hf_ns_activity_natpcb_zombie, tvb, flagoffset, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(flagtree, hf_ns_activity_lbstats_sync, tvb, flagoffset, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(flagtree, hf_ns_activity_stats_req, tvb, flagoffset, 4, ENC_LITTLE_ENDIAN);
+
case NSPR_HEADER_VERSION205:
if(src_vmname_len){
{ "Flow processor (FP)", "nstrace.flags.fp", FT_BOOLEAN, 8, TFS(&tfs_set_notset), CL_FP,
NULL, HFILL}},
+ { &hf_ns_activity,
+ { "NetScaler Activity", "nstrace.activity", FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL}},
+
+ { &hf_ns_activity_perf_collection,
+ { "Perf Collection", "nstrace.activity.perfcollection", FT_BOOLEAN, 32, NULL, NS_PE_STATE_PERF_COLLECTION_IN_PROG,
+ NULL, HFILL}},
+
+ { &hf_ns_activity_pcb_zombie,
+ { "PCB Zombie", "nstrace.activity.pcbzombie", FT_BOOLEAN, 32, NULL, NS_PE_STATE_PCB_ZOMBIE_IN_PROG,
+ NULL, HFILL}},
+
+ { &hf_ns_activity_natpcb_zombie,
+ { "NATPCB Zombie", "nstrace.activity.natpcbzombie", FT_BOOLEAN, 32, NULL, NS_PE_STATE_NATPCB_ZOMBIE_IN_PROG,
+ NULL, HFILL}},
+
+ { &hf_ns_activity_lbstats_sync,
+ { "LB Stats Sync", "nstrace.activity.lbstatssync", FT_BOOLEAN, 32, NULL, NS_PE_STATE_LBSTATS_SYNC_IN_PROG,
+ NULL, HFILL}},
+
+ { &hf_ns_activity_stats_req,
+ { "Stats Req", "nstrace.activity.statsreq", FT_BOOLEAN, 32, NULL, NS_PE_STATE_STATS_REQ_IN_PROG,
+ NULL, HFILL}},
+
};
static gint *ett[] = {
&ett_ns,
&ett_ns_flags,
+ &ett_ns_activity_flags,
};
proto_nstrace = proto_register_protocol("NetScaler Trace", "NS Trace", "ns");
#define fp_src_vmname fp_Data
#define fp_src_vmname fp_Data
+/* New full packet trace structure v26 for vm info tracing */
+typedef struct nspr_pktracefull_v26
+{
+ 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_reserved;
+ guint8 fp_ns_activity[4];
+ guint8 fp_reserved_32[12]; /* Adding more field to reduce wireshark changes every time */
+ guint8 fp_Data[4]; /* packet data starts here */
+} nspr_pktracefull_v26_t;
+#define nspr_pktracefull_v26_s ((guint32)(sizeof(nspr_pktracefull_v26_t) - 4))
/* partial packet trace structure */
typedef struct nspr_pktracepart_v10
#define pp_src_vmname pp_Data
#define pp_dst_vmname pp_Data
+/* New partial packet trace structure v26 for vm info tracing */
+typedef struct nspr_pktracepart_v26
+{
+ 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_reserved;
+ guint8 pp_ns_activity[4];
+ guint8 pp_reserved_32[12]; /* Adding more field to reduce wireshark changes every time */
+ guint8 pp_Data[4]; /* packet data starts here */
+} nspr_pktracepart_v26_t;
+#define nspr_pktracepart_v26_s ((guint32)(sizeof(nspr_pktracepart_v26_t) -4))
+
#define myoffsetof(type,fieldname) (&(((type*)0)->fieldname))
#define __TNO(phdr,enumprefix,structprefix,structname,hdrname,structfieldname) \
__TNO(phdr,enumprefix,structprefix,structname,dst_vmname_len,dst_vmname_len)\
__TNO(phdr,enumprefix,structprefix,structname,data,Data)
+#define TRACE_V26_REC_LEN_OFF(phdr,enumprefix,structprefix,structname) \
+ TRACE_V25_REC_LEN_OFF(phdr,enumprefix,structprefix,structname)\
+ __TNO(phdr,enumprefix,structprefix,structname,ns_activity,ns_activity)\
+
TRACE_V10_REC_LEN_OFF(NULL,v10_part,pp,pktracepart_v10)
TRACE_V10_REC_LEN_OFF(NULL,v10_full,fp,pktracefull_v10)
TRACE_V20_REC_LEN_OFF(NULL,v20_part,pp,pktracepart_v20)
TRACE_V24_REC_LEN_OFF(NULL,v24_full,fp,pktracefull_v24)
TRACE_V25_REC_LEN_OFF(NULL,v25_part,pp,pktracepart_v25)
TRACE_V25_REC_LEN_OFF(NULL,v25_full,fp,pktracefull_v25)
+ TRACE_V26_REC_LEN_OFF(NULL,v26_part,pp,pktracepart_v26)
+ TRACE_V26_REC_LEN_OFF(NULL,v26_full,fp,pktracefull_v26)
#undef __TNV1O
#undef __TNV1L
#define TIMEDEFV22(fp,type) TIMEDEFV20(fp,type)
#define TIMEDEFV24(fp,type) TIMEDEFV23(fp,type)
#define TIMEDEFV25(fp,type) TIMEDEFV24(fp,type)
+#define TIMEDEFV26(fp,type) TIMEDEFV24(fp,type)
#define PPSIZEDEFV20(phdr,pp,ver) \
do {\
(phdr)->presence_flags |= WTAP_HAS_CAP_LEN;\
#define PPSIZEDEFV23(phdr,pp,ver) PPSIZEDEFV20(phdr,pp,ver)
#define PPSIZEDEFV24(phdr,pp,ver) PPSIZEDEFV20(phdr,pp,ver)
#define PPSIZEDEFV25(phdr,pp,ver) PPSIZEDEFV20(phdr,pp,ver)
+#define PPSIZEDEFV26(phdr,pp,ver) PPSIZEDEFV20(phdr,pp,ver)
#define FPSIZEDEFV20(phdr,fp,ver)\
do {\
#define FPSIZEDEFV23(phdr,fp,ver) FPSIZEDEFV20(phdr,fp,ver)
#define FPSIZEDEFV24(phdr,fp,ver) FPSIZEDEFV20(phdr,fp,ver)
#define FPSIZEDEFV25(phdr,fp,ver) FPSIZEDEFV20(phdr,fp,ver)
+#define FPSIZEDEFV26(phdr,fp,ver) FPSIZEDEFV20(phdr,fp,ver)
#define PACKET_DESCRIBE(phdr,FPTIMEDEF,SIZEDEF,ver,enumprefix,type,structname,TYPE)\
do {\
GENERATE_CASE_PART_V25(&wth->phdr,24,204);
GENERATE_CASE_FULL_V25(&wth->phdr,25,205);
GENERATE_CASE_PART_V25(&wth->phdr,25,205);
+ GENERATE_CASE_FULL_V25(&wth->phdr,26,206);
+ GENERATE_CASE_PART_V25(&wth->phdr,26,206);
#undef GENERATE_CASE_FULL
#undef GENERATE_CASE_FULL_V25
GENERATE_CASE_PART_V25(phdr,24,204)
GENERATE_CASE_FULL_V25(phdr,25,205)
GENERATE_CASE_PART_V25(phdr,25,205)
+ GENERATE_CASE_FULL_V25(phdr,26,206)
+ GENERATE_CASE_PART_V25(phdr,26,206)
}
#undef GENERATE_CASE_FULL
case NSPR_HEADER_VERSION203:
case NSPR_HEADER_VERSION204:
case NSPR_HEADER_VERSION205:
+ case NSPR_HEADER_VERSION206:
if (wdh->file_type == WTAP_FILE_NETSCALER_1_0)
{
*err = WTAP_ERR_UNSUPPORTED_FILE_TYPE;
#define NSPR_PDPKTRACEPARTRX_V25 0xB6 /* Received packets before NIC pipelining */
#define NSPR_PDPKTRACEPARTNEWRX_V25 0xB7 /* Received packets after NIC pipelining */
+/* NS DEBUG INFO PER PACKET */
+#define NSPR_PDPKTRACEFULLTX_V26 0xA0 /* Transmitted */
+#define NSPR_PDPKTRACEFULLTXB_V26 0xA1 /* In transmit buffer */
+#define NSPR_PDPKTRACEFULLRX_V26 0xA2 /* Received packets before NIC pipelining */
+#define NSPR_PDPKTRACEFULLNEWRX_V26 0xA3 /* Received packets after NIC pipelining */
+#define NSPR_PDPKTRACEPARTTX_V26 0xA4 /* Transmitted */
+#define NSPR_PDPKTRACEPARTTXB_V26 0xA5 /* In transmit buffer */
+#define NSPR_PDPKTRACEPARTRX_V26 0xA6 /* Received packets before NIC pipelining */
+#define NSPR_PDPKTRACEPARTNEWRX_V26 0xA7 /* Received packets after NIC pipelining */
+
/* Record types */
#define NSPR_HEADER_VERSION100 0x10
#define NSPR_HEADER_VERSION200 0x20
#define NSPR_HEADER_VERSION203 0x23
#define NSPR_HEADER_VERSION204 0x24
#define NSPR_HEADER_VERSION205 0x25
+#define NSPR_HEADER_VERSION206 0x26
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);
guint8 clflags_offset;
guint8 src_vmname_len_offset;
guint8 dst_vmname_len_offset;
+ guint8 ns_activity_offset;
guint8 data_offset;
};