typedef struct nspr_header_v10
{
- guint16 ph_RecordType; /* Record Type */
- guint16 ph_RecordSize; /* Record Size including header */
+ guint8 ph_RecordType[2]; /* Record Type */
+ guint8 ph_RecordSize[2]; /* Record Size including header */
} nspr_header_v10_t;
#define nspr_header_v10_s sizeof(nspr_header_v10_t)
/* This is V20 short header (2 bytes long) to be included where needed */
#define NSPR_HEADER_V20(prefix) \
- guint8 prefix##_RecordType; /* Record Type */ \
- guint8 prefix##_RecordSize /* Record Size including header */ \
+ guint8 prefix##_RecordType; /* Record Type */ \
+ guint8 prefix##_RecordSize /* Record Size including header */ \
/* end of declaration */
/* This is new long header (3 bytes long) to be included where needed */
/* Performance Data Header with device number */
typedef struct nspr_headerdev_v10
{
- guint16 ph_RecordType; /* Record Type */
- guint16 ph_RecordSize; /* Record Size including header */
- guint32 ph_DevNo; /* Network Device (NIC/CONN) number */
+ guint8 ph_RecordType[2]; /* Record Type */
+ guint8 ph_RecordSize[2]; /* Record Size including header */
+ guint8 ph_DevNo[4]; /* Network Device (NIC/CONN) number */
} nspr_headerdev_v10_t;
#define nspr_headerdev_v10_s sizeof(nspr_headerdev_v10_t)
nspr_header_v10_t phd; /* performance header */
guint8 sig_EndianType; /* Endian Type for the data */
guint8 sig_Reserved0;
- guint16 sig_Reserved1;
+ guint8 sig_Reserved1[2];
gchar sig_Signature[NSPR_SIGSIZE_V10]; /* Signature value */
} nspr_signature_v10_t;
#define nspr_signature_v10_s sizeof(nspr_signature_v10_t)
typedef struct nspr_abstime_v10
{
nspr_header_v10_t phd; /* performance header */
- guint32 abs_RelTime; /* relative time is ms from last time */
- guint32 abs_Time; /* absolute time in seconds from 1970 */
+ guint8 abs_RelTime[4]; /* relative time is ms from last time */
+ guint8 abs_Time[4]; /* absolute time in seconds from 1970 */
} nspr_abstime_v10_t;
#define nspr_abstime_v10_s sizeof(nspr_abstime_v10_t)
typedef struct nspr_abstime_v20
{
NSPR_HEADER_V20(abs); /* short performance header */
- guint16 abs_RelTime; /* relative time is ms from last time */
- guint32 abs_Time; /* absolute time in seconds from 1970 */
+ guint8 abs_RelTime[2]; /* relative time is ms from last time */
+ guint8 abs_Time[4]; /* absolute time in seconds from 1970 */
} nspr_abstime_v20_t;
#define nspr_abstime_v20_s sizeof(nspr_abstime_v20_t)
typedef struct nspr_pktracefull_v10
{
nspr_headerdev_v10_t phd; /* performance header */
- guint32 fp_RelTimeHr; /* High resolution relative time */
- guint8 fp_Data[1]; /* packet data starts here */
+ guint8 fp_RelTimeHr[4]; /* High resolution relative time */
+ guint8 fp_Data[1]; /* packet data starts here */
} nspr_pktracefull_v10_t;
#define nspr_pktracefull_v10_s (nspr_hdev_v10_s + 4)
/* new full packet trace structure v20 */
typedef struct nspr_pktracefull_v20
{
- NSPR_HEADER3B_V20(fp); /* long performance header */
- guint8 fp_DevNo; /* Network Device (NIC) number */
- guint32 fp_RelTimeHr; /* High resolution relative time */
- guint8 fp_Data[4]; /* packet data starts here */
+ NSPR_HEADER3B_V20(fp); /* long performance header */
+ guint8 fp_DevNo; /* Network Device (NIC) number */
+ guint8 fp_RelTimeHr[4]; /* High resolution relative time */
+ guint8 fp_Data[4]; /* packet data starts here */
} nspr_pktracefull_v20_t;
#define nspr_pktracefull_v20_s (sizeof(nspr_pktracefull_v20_t) - 4)
/* new full packet trace structure v21 */
typedef struct nspr_pktracefull_v21
{
- NSPR_HEADER3B_V21(fp); /* long performance header */
- guint8 fp_DevNo; /* Network Device (NIC) number */
- guint32 fp_RelTimeHr; /* High resolution relative time */
- guint32 fp_PcbDevNo; /* PCB devno */
- guint32 fp_lPcbDevNo; /* link PCB devno */
- guint8 fp_Data[4]; /* packet data starts here */
+ NSPR_HEADER3B_V21(fp); /* long performance header */
+ guint8 fp_DevNo; /* Network Device (NIC) number */
+ guint8 fp_RelTimeHr[4]; /* High resolution relative time */
+ guint8 fp_PcbDevNo[4]; /* PCB devno */
+ guint8 fp_lPcbDevNo[4]; /* link PCB devno */
+ guint8 fp_Data[4]; /* packet data starts here */
} nspr_pktracefull_v21_t;
#define nspr_pktracefull_v21_s (sizeof(nspr_pktracefull_v21_t) - 4)
/* new full packet trace structure v22 */
typedef struct nspr_pktracefull_v22
{
- NSPR_HEADER3B_V22(fp); /* long performance header */
- guint8 fp_DevNo; /* Network Device (NIC) number */
- guint32 fp_RelTimeHr; /* High resolution relative time */
- guint32 fp_PcbDevNo; /* PCB devno */
- guint32 fp_lPcbDevNo; /* link PCB devno */
- guint16 fp_VlanTag;
- guint8 fp_Data[4]; /* packet data starts here */
+ NSPR_HEADER3B_V22(fp); /* long performance header */
+ guint8 fp_DevNo; /* Network Device (NIC) number */
+ guint8 fp_RelTimeHr[4]; /* High resolution relative time */
+ guint8 fp_PcbDevNo[4]; /* PCB devno */
+ guint8 fp_lPcbDevNo[4]; /* link PCB devno */
+ guint8 fp_VlanTag[2]; /* vlan tag */
+ guint8 fp_Data[2]; /* packet data starts here */
} nspr_pktracefull_v22_t;
-#define nspr_pktracefull_v22_s (sizeof(nspr_pktracefull_v22_t) - 4)
+#define nspr_pktracefull_v22_s (sizeof(nspr_pktracefull_v22_t) - 2)
typedef struct nspr_pktracefull_v23
{
- NSPR_HEADER3B_V22(fp); /* long performance header */
- guint8 fp_DevNo; /* Network Device (NIC) number */
- guint32 fp_AbsTimeLowHdr; /* High resolution low time */
- guint32 fp_AbsTimeHighHdr; /* Higher value of the absolute time */
- guint32 fp_PcbDevNo; /* PCB devno */
- guint32 fp_lPcbDevNo; /* link PCB devno */
- guint16 fp_VlanTag; /* vlan tag */
- guint16 fp_Coreid; /* coreid of the packet */
- guint8 fp_Data[4]; /* packet data starts here */
+ NSPR_HEADER3B_V22(fp); /* long performance header */
+ guint8 fp_DevNo; /* Network Device (NIC) number */
+ guint8 fp_AbsTimeHr[8]; /* High resolution absolute time */
+ 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_Data[2]; /* packet data starts here */
} nspr_pktracefull_v23_t;
-#define nspr_pktracefull_v23_s (sizeof(nspr_pktracefull_v23_t) - 4)
+#define nspr_pktracefull_v23_s (sizeof(nspr_pktracefull_v23_t) - 2)
/* partial packet trace structure */
typedef struct nspr_pktracepart_v10
{
nspr_headerdev_v10_t phd; /* performance header */
- guint32 pp_RelTimeHr; /* High resolution relative time */
- guint16 pp_PktSizeOrg; /* Original packet size */
- guint16 pp_PktOffset; /* starting offset in packet */
- guint8 pp_Data[1]; /* packet data starts here */
+ guint8 pp_RelTimeHr[4]; /* High resolution relative time */
+ guint8 pp_PktSizeOrg[2]; /* Original packet size */
+ guint8 pp_PktOffset[2]; /* starting offset in packet */
+ guint8 pp_Data[1]; /* packet data starts here */
} nspr_pktracepart_v10_t;
#define nspr_pktracepart_v10_s (nspr_pktracefull_v10_s + 4)
/* new partial packet trace structure */
typedef struct nspr_pktracepart_v20
{
- NSPR_HEADER3B_V20(pp); /* long performance header */
- guint8 pp_DevNo; /* Network Device (NIC) number */
- guint32 pp_RelTimeHr; /* High resolution relative time */
- guint16 pp_PktSizeOrg; /* Original packet size */
- guint16 pp_PktOffset; /* starting offset in packet */
- guint8 pp_Data[4]; /* packet data starts here */
+ NSPR_HEADER3B_V20(pp); /* long performance header */
+ guint8 pp_DevNo; /* Network Device (NIC) number */
+ guint8 pp_RelTimeHr[4]; /* High resolution relative time */
+ guint8 pp_PktSizeOrg[2]; /* Original packet size */
+ guint8 pp_PktOffset[2]; /* starting offset in packet */
+ guint8 pp_Data[4]; /* packet data starts here */
} nspr_pktracepart_v20_t;
#define nspr_pktracepart_v20_s (sizeof(nspr_pktracepart_v20_t) -4)
/* new partial packet trace structure */
typedef struct nspr_pktracepart_v21
{
- NSPR_HEADER3B_V21(pp); /* long performance header */
- guint8 pp_DevNo; /* Network Device (NIC) number */
- guint32 pp_RelTimeHr; /* High resolution relative time */
- guint16 pp_PktSizeOrg; /* Original packet size */
- guint16 pp_PktOffset; /* starting offset in packet */
- guint32 pp_PcbDevNo; /* PCB devno */
- guint32 pp_lPcbDevNo; /* link PCB devno */
- guint8 pp_Data[4]; /* packet data starts here */
+ NSPR_HEADER3B_V21(pp); /* long performance header */
+ guint8 pp_DevNo; /* Network Device (NIC) number */
+ guint8 pp_RelTimeHr[4]; /* High resolution relative time */
+ 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_Data[4]; /* packet data starts here */
} nspr_pktracepart_v21_t;
#define nspr_pktracepart_v21_s (sizeof(nspr_pktracepart_v21_t) -4)
/* new partial packet trace structure v22 */
typedef struct nspr_pktracepart_v22
{
- NSPR_HEADER3B_V22(pp); /* long performance header */
- guint8 pp_DevNo; /* Network Device (NIC) number */
- guint32 pp_RelTimeHr; /* High resolution relative time */
- guint16 pp_PktSizeOrg; /* Original packet size */
- guint16 pp_PktOffset; /* starting offset in packet */
- guint32 pp_PcbDevNo; /* PCB devno */
- guint32 pp_lPcbDevNo; /* link PCB devno */
- guint16 pp_VlanTag; /* Vlan Tag */
- guint8 pp_Data[4]; /* packet data starts here */
+ NSPR_HEADER3B_V22(pp); /* long performance header */
+ guint8 pp_DevNo; /* Network Device (NIC) number */
+ guint8 pp_RelTimeHr[4]; /* High resolution relative time */
+ 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_Data[2]; /* packet data starts here */
} nspr_pktracepart_v22_t;
-#define nspr_pktracepart_v22_s (sizeof(nspr_pktracepart_v22_t) -4)
+#define nspr_pktracepart_v22_s (sizeof(nspr_pktracepart_v22_t) -2)
typedef struct nspr_pktracepart_v23
{
- NSPR_HEADER3B_V22(pp); /* long performance header */
- guint8 pp_DevNo; /* Network Device (NIC) number */
- guint32 pp_AbsTimeLowHdr; /* High resolution low time */
- guint32 pp_AbsTimeHighHdr; /* Higher value of the absolute time */
- guint16 pp_PktSizeOrg; /* Original packet size */
- guint16 pp_PktOffset; /* starting offset in packet */
- guint32 pp_PcbDevNo; /* PCB devno */
- guint32 pp_lPcbDevNo; /* link PCB devno */
- guint16 pp_VlanTag; /* vlan tag */
- guint16 pp_Coreid; /* Coreid of the packet */
- guint8 pp_Data[4]; /* packet data starts here */
+ NSPR_HEADER3B_V22(pp); /* long performance header */
+ guint8 pp_DevNo; /* Network Device (NIC) number */
+ guint8 pp_AbsTimeHr[8]; /* High resolution absolute time */
+ 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_Data[4]; /* packet data starts here */
} nspr_pktracepart_v23_t;
#define nspr_pktracepart_v23_s (sizeof(nspr_pktracepart_v23_t) -4)
gint64 *data_offset);
gboolean nstrace_seek_read(wtap *wth, gint64 seek_off,
union wtap_pseudo_header *pseudo_header,
- guchar *pd, int length,
- int *err, gchar **err_info _U_);
+ guint8 *pd, int length,
+ int *err, gchar **err_info);
void nstrace_close(wtap *wth);
void nstrace_sequential_close(wtap *wth);
guint64 ns_hrtime2nsec(guint32 tm);
static gboolean nstrace_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const union wtap_pseudo_header *pseudo_header, const guchar *pd, int *err);
+ const union wtap_pseudo_header *pseudo_header, const guint8 *pd, int *err);
#define GET_READ_PAGE_SIZE(remaining_file_size) ((gint32)((remaining_file_size>NSPR_PAGESIZE)?NSPR_PAGESIZE:remaining_file_size))
if ((file_seek(wth->fh, 0, SEEK_SET, err)) == -1)
{
- *err = file_error(wth->fh);
+ *err = file_error(wth->fh, err_info);
g_free(nstrace_buf);
return 0;
}
bytes_read = file_read(nstrace_buf, page_size, wth->fh);
if (bytes_read != page_size)
{
- *err = file_error(wth->fh);
+ *err = file_error(wth->fh, err_info);
g_free(nstrace_buf);
return 0;
}
/* Reset the read pointer to start of the file. */
if ((file_seek(wth->fh, 0, SEEK_SET, err)) == -1)
{
- *err = file_error(wth->fh);
+ *err = file_error(wth->fh, err_info);
g_free(nstrace->pnstrace_buf);
g_free(nstrace);
return 0;
bytes_read = file_read(nstrace_buf, page_size, wth->fh);
if (bytes_read != page_size)
{
- *err = file_error(wth->fh);
+ *err = file_error(wth->fh, err_info);
g_free(nstrace->pnstrace_buf);
g_free(nstrace);
return 0;
case NSPR_ABSTIME_V10:
- ns_setabstime(nstrace, pletohl(&((nspr_abstime_v10_t *) fp)->abs_Time), pletohl(&((nspr_abstime_v10_t *) fp)->abs_RelTime));
+ ns_setabstime(nstrace, pletohl(((nspr_abstime_v10_t *) fp)->abs_Time), pletohl(&((nspr_abstime_v10_t *) fp)->abs_RelTime));
nstrace_buf_offset += pletohs(&fp->nsprRecordSize);
break;
case NSPR_RELTIME_V10:
- ns_setrelativetime(nstrace, ((nspr_abstime_v10_t *) fp)->abs_RelTime);
+ ns_setrelativetime(nstrace, pletohl(((nspr_abstime_v10_t *) fp)->abs_RelTime));
nstrace_buf_offset += pletohs(&fp->nsprRecordSize);
break;
#define TIMEDEFV20(fp,type) \
do {\
- nsg_creltime += ns_hrtime2nsec(pletohl(&fp->type##_RelTimeHr));\
+ nsg_creltime += ns_hrtime2nsec(pletohl(fp->type##_RelTimeHr));\
wth->phdr.ts.secs = nstrace->nspm_curtime + (guint32) (nsg_creltime / 1000000000);\
wth->phdr.ts.nsecs = (guint32) (nsg_creltime % 1000000000);\
}while(0)
#define TIMEDEFV23(fp,type) \
do {\
- /* access _AbsTimeHighHdr as a 64bit value */\
- nsg_creltime = (((guint64)fp->type##_AbsTimeHighHdr<<32) | (fp->type##_AbsTimeLowHdr));\
+ /* access _AbsTimeHr as a 64bit value */\
+ nsg_creltime = pletohll(fp->type##_AbsTimeHr);\
wth->phdr.ts.secs = (guint32) (nsg_creltime / 1000000000);\
wth->phdr.ts.nsecs = (guint32) (nsg_creltime % 1000000000);\
}while(0)
gboolean nstrace_seek_read(wtap *wth, gint64 seek_off,
- union wtap_pseudo_header *pseudo_header, guchar *pd, int length,
- int *err, gchar **err_info _U_)
+ union wtap_pseudo_header *pseudo_header, guint8 *pd, int length,
+ int *err, gchar **err_info)
{
int bytes_read;
** Read the packet data.
*/
bytes_read = file_read(pd, length, wth->random_fh);
- if (bytes_read != length)
+ if (bytes_read != length) {
+ *err = file_error(wth->random_fh, err_info);
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
return FALSE;
+ }
if (wth->file_type == WTAP_FILE_NETSCALER_1_0)
{
/* Returns TRUE on success, FALSE on failure; sets "*err" to an error code on
** failure */
-gboolean nstrace_dump_open(wtap_dumper *wdh, gboolean cant_seek, int *err)
+gboolean nstrace_dump_open(wtap_dumper *wdh, int *err _U_)
{
nstrace_dump_t *nstrace;
- if (cant_seek)
- {
- *err = WTAP_ERR_CANT_WRITE_TO_PIPE;
- return FALSE;
- }
-
wdh->subtype_write = nstrace_dump;
nstrace = (nstrace_dump_t *)g_malloc(sizeof(nstrace_dump_t));
if (wdh->file_type == WTAP_FILE_NETSCALER_1_0)
{
+ guint16 val16b;
nspr_signature_v10_t sig10;
/* populate the record */
- sig10.phd.ph_RecordType = htoles(NSPR_SIGNATURE_V10);
- sig10.phd.ph_RecordSize = htoles(nspr_signature_v10_s);
+ val16b = htoles(NSPR_SIGNATURE_V10);
+ memcpy(sig10.phd.ph_RecordType, &val16b, sizeof sig10.phd.ph_RecordType);
+ val16b = htoles(nspr_signature_v10_s);
+ memcpy(sig10.phd.ph_RecordSize, &val16b, sizeof sig10.phd.ph_RecordSize);
memset(sig10.sig_Signature, 0, NSPR_SIGSIZE_V10);
g_strlcpy(sig10.sig_Signature, NSPR_SIGSTR_V10, NSPR_SIGSIZE_V10);
static gboolean
nstrace_add_abstime(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const guchar *pd, int *err)
+ const guint8 *pd, int *err)
{
nstrace_dump_t *nstrace = (nstrace_dump_t *)wdh->priv;
guint64 nsg_creltime;
if (wdh->file_type == WTAP_FILE_NETSCALER_1_0)
{
+ guint16 val16;
+ guint32 reltime;
+ guint64 abstime;
nspr_abstime_v10_t abs10;
- nspr_pktracefull_v10_t fp10;
/* populate the record */
- abs10.phd.ph_RecordType = htoles(NSPR_ABSTIME_V10);
- abs10.phd.ph_RecordSize = htoles(nspr_abstime_v10_s);
+ val16 = htoles(NSPR_ABSTIME_V10);
+ memcpy(abs10.phd.ph_RecordType, &val16, sizeof abs10.phd.ph_RecordType);
+ val16 = htoles(nspr_abstime_v10_s);
+ memcpy(abs10.phd.ph_RecordSize, &val16, sizeof abs10.phd.ph_RecordSize);
- memcpy(&fp10, pd, nspr_pktracefull_v10_s);
- nsg_creltime = ns_hrtime2nsec(fp10.fp_RelTimeHr);
+ memcpy(&reltime, ((const nspr_pktracefull_v10_t *)pd)->fp_RelTimeHr, sizeof reltime);
+ nsg_creltime = ns_hrtime2nsec(reltime);
- abs10.abs_RelTime = 0;
- abs10.abs_Time = htolel((guint32)phdr->ts.secs - (guint32)(nsg_creltime/1000000000));
+ memset(abs10.abs_RelTime, 0, sizeof abs10.abs_RelTime);
+ abstime = htolel((guint32)phdr->ts.secs - (guint32)(nsg_creltime/1000000000));
+ memcpy(abs10.abs_Time, &abstime, sizeof abs10.abs_Time);
/* Write the record into the file */
if (!wtap_dump_file_write(wdh, &abs10, nspr_abstime_v10_s, err))
} else if (wdh->file_type == WTAP_FILE_NETSCALER_2_0)
{
+ guint32 reltime;
+ guint64 abstime;
nspr_abstime_v20_t abs20;
- nspr_pktracefull_v20_t fp20;
abs20.abs_RecordType = NSPR_ABSTIME_V20;
abs20.abs_RecordSize = nspr_abstime_v20_s;
- memcpy(&fp20, pd, nspr_pktracefull_v20_s);
- nsg_creltime = ns_hrtime2nsec(fp20.fp_RelTimeHr);
+ memcpy(&reltime, ((const nspr_pktracefull_v20_t *)pd)->fp_RelTimeHr, sizeof reltime);
+ nsg_creltime = ns_hrtime2nsec(reltime);
- abs20.abs_RelTime = 0;
- abs20.abs_Time = htolel((guint32)phdr->ts.secs - (guint32)(nsg_creltime/1000000000));
+ memset(abs20.abs_RelTime, 0, sizeof abs20.abs_RelTime);
+ abstime = htolel((guint32)phdr->ts.secs - (guint32)(nsg_creltime/1000000000));
+ memcpy(abs20.abs_RelTime, &abstime, sizeof abs20.abs_RelTime);
/* Write the record into the file */
if (!wtap_dump_file_write(wdh, &abs20, nspr_abstime_v20_s, err))
/* Write a record for a packet to a dump file.
Returns TRUE on success, FALSE on failure. */
static gboolean nstrace_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
- const union wtap_pseudo_header *pseudo_header, const guchar *pd, int *err)
+ const union wtap_pseudo_header *pseudo_header, const guint8 *pd, int *err)
{
nstrace_dump_t *nstrace = (nstrace_dump_t *)wdh->priv;