aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap/netscaler.c
diff options
context:
space:
mode:
Diffstat (limited to 'wiretap/netscaler.c')
-rw-r--r--wiretap/netscaler.c87
1 files changed, 84 insertions, 3 deletions
diff --git a/wiretap/netscaler.c b/wiretap/netscaler.c
index 5f07aaca94..ead6ea33eb 100644
--- a/wiretap/netscaler.c
+++ b/wiretap/netscaler.c
@@ -244,6 +244,23 @@ typedef struct nspr_pktracefull_v23
} nspr_pktracefull_v23_t;
#define nspr_pktracefull_v23_s (sizeof(nspr_pktracefull_v23_t) - 2)
+/* New full packet trace structure v24 for cluster tracing */
+typedef struct nspr_pktracefull_v24
+{
+ 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_Data[2]; /* packet data starts here */
+} nspr_pktracefull_v24_t;
+#define nspr_pktracefull_v24_s (sizeof(nspr_pktracefull_v24_t) - 4)
+
/* partial packet trace structure */
typedef struct nspr_pktracepart_v10
{
@@ -311,6 +328,25 @@ typedef struct nspr_pktracepart_v23
} nspr_pktracepart_v23_t;
#define nspr_pktracepart_v23_s (sizeof(nspr_pktracepart_v23_t) -4)
+/* New partial packet trace structure v24 for cluster tracing */
+typedef struct nspr_pktracepart_v24
+{
+ 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_Data[4]; /* packet data starts here */
+} nspr_pktracepart_v24_t;
+#define nspr_pktracepart_v24_s (sizeof(nspr_pktracepart_v24_t) -4)
+
#define myoffsetof(type,fieldname) (&(((type*)0)->fieldname))
#define __TNO(enumprefix,structprefix,structname,hdrname,structfieldname) \
@@ -352,6 +388,12 @@ typedef struct nspr_pktracepart_v23
TRACE_V22_REC_LEN_OFF(enumprefix,structprefix,structname)\
__TNO(enumprefix,structprefix,structname,coreid,Coreid)
+#define TRACE_V24_REC_LEN_OFF(enumprefix,structprefix,structname) \
+ TRACE_V23_REC_LEN_OFF(enumprefix,structprefix,structname)\
+ __TNO(enumprefix,structprefix,structname,srcnodeid,srcNodeId)\
+ __TNO(enumprefix,structprefix,structname,destnodeid,destNodeId)\
+ __TNO(enumprefix,structprefix,structname,clflags,clFlags)
+
TRACE_V10_REC_LEN_OFF(v10_part,pp,pktracepart_v10)
TRACE_V10_REC_LEN_OFF(v10_full,fp,pktracefull_v10)
@@ -363,7 +405,8 @@ typedef struct nspr_pktracepart_v23
TRACE_V22_REC_LEN_OFF(v22_full,fp,pktracefull_v22)
TRACE_V23_REC_LEN_OFF(v23_part,pp,pktracepart_v23)
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)
#undef __TNV1O
#undef __TNV1L
#undef __TNO
@@ -798,7 +841,7 @@ gboolean nstrace_read_v10(wtap *wth, int *err, gchar **err_info, gint64 *data_of
#define TIMEDEFV21(fp,type) TIMEDEFV20(fp,type)
#define TIMEDEFV22(fp,type) TIMEDEFV20(fp,type)
-
+#define TIMEDEFV24(fp,type) TIMEDEFV23(fp,type)
#define PPSIZEDEFV20(pp,ver) \
do {\
wth->phdr.presence_flags |= WTAP_HAS_CAP_LEN;\
@@ -809,6 +852,7 @@ gboolean nstrace_read_v10(wtap *wth, int *err, gchar **err_info, gint64 *data_of
#define PPSIZEDEFV21(pp,ver) PPSIZEDEFV20(pp,ver)
#define PPSIZEDEFV22(pp,ver) PPSIZEDEFV20(pp,ver)
#define PPSIZEDEFV23(pp,ver) PPSIZEDEFV20(pp,ver)
+#define PPSIZEDEFV24(pp,ver) PPSIZEDEFV20(pp,ver)
#define FPSIZEDEFV20(fp,ver)\
do {\
@@ -819,6 +863,7 @@ gboolean nstrace_read_v10(wtap *wth, int *err, gchar **err_info, gint64 *data_of
#define FPSIZEDEFV21(pp,ver) FPSIZEDEFV20(fp,ver)
#define FPSIZEDEFV22(pp,ver) FPSIZEDEFV20(fp,ver)
#define FPSIZEDEFV23(pp,ver) FPSIZEDEFV20(fp,ver)
+#define FPSIZEDEFV24(pp,ver) FPSIZEDEFV20(fp,ver)
#define PACKET_DESCRIBE(FPTIMEDEF,SIZEDEF,ver,enumprefix,type,structname,TYPE)\
do {\
@@ -864,22 +909,38 @@ gboolean nstrace_read_v20(wtap *wth, int *err, gchar **err_info, gint64 *data_of
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) \
+ 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(23,203);
GENERATE_CASE(22,202);
GENERATE_CASE(21,201);
GENERATE_CASE(20,200);
#undef GENERATE_CASE
+#undef GENERATE_CASE_V24
#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) \
+ 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(23,203);
GENERATE_CASE(22,202);
GENERATE_CASE(21,201);
GENERATE_CASE(20,200);
#undef GENERATE_CASE
+#undef GENERATE_CASE_V24
case NSPR_ABSTIME_V20:
{
@@ -1001,6 +1062,24 @@ 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) \
+ case NSPR_PDPKTRACEFULLTX_V##type:\
+ case NSPR_PDPKTRACEFULLTXB_V##type:\
+ case NSPR_PDPKTRACEFULLRX_V##type:\
+ case NSPR_PDPKTRACEFULLNEWRX_V##type:\
+ TRACE_V##type##_REC_LEN_OFF(v##type##_full,fp,pktracefull_v##type);\
+ pseudo_header->nstr.rec_type = NSPR_HEADER_VERSION##acttype;\
+ break;\
+
+#define GENERATE_CASE_PART_V24(type,acttype) \
+ case NSPR_PDPKTRACEPARTTX_V##type:\
+ case NSPR_PDPKTRACEPARTTXB_V##type:\
+ case NSPR_PDPKTRACEPARTRX_V##type:\
+ case NSPR_PDPKTRACEPARTNEWRX_V##type:\
+ TRACE_V##type##_REC_LEN_OFF(v##type##_part,pp,pktracepart_v##type);\
+ pseudo_header->nstr.rec_type = NSPR_HEADER_VERSION##acttype;\
+ break;\
+
switch ((( nspr_hd_v20_t*)pd)->phd_RecordType)
{
GENERATE_CASE_FULL(20,200)
@@ -1011,6 +1090,8 @@ 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)
}
}
@@ -1264,7 +1345,7 @@ static gboolean nstrace_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
case NSPR_HEADER_VERSION201:
case NSPR_HEADER_VERSION202:
case NSPR_HEADER_VERSION203:
-
+ case NSPR_HEADER_VERSION204:
if (wdh->file_type == WTAP_FILE_NETSCALER_1_0)
{
*err = WTAP_ERR_UNSUPPORTED_FILE_TYPE;