|
Packit |
857059 |
/* BEGIN_ICS_COPYRIGHT5 ****************************************
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Copyright (c) 2015-2017, Intel Corporation
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Redistribution and use in source and binary forms, with or without
|
|
Packit |
857059 |
modification, are permitted provided that the following conditions are met:
|
|
Packit |
857059 |
|
|
Packit |
857059 |
* Redistributions of source code must retain the above copyright notice,
|
|
Packit |
857059 |
this list of conditions and the following disclaimer.
|
|
Packit |
857059 |
* Redistributions in binary form must reproduce the above copyright
|
|
Packit |
857059 |
notice, this list of conditions and the following disclaimer in the
|
|
Packit |
857059 |
documentation and/or other materials provided with the distribution.
|
|
Packit |
857059 |
* Neither the name of Intel Corporation nor the names of its contributors
|
|
Packit |
857059 |
may be used to endorse or promote products derived from this software
|
|
Packit |
857059 |
without specific prior written permission.
|
|
Packit |
857059 |
|
|
Packit |
857059 |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
Packit |
857059 |
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit |
857059 |
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
Packit |
857059 |
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
Packit |
857059 |
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit |
857059 |
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
Packit |
857059 |
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
Packit |
857059 |
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
Packit |
857059 |
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
Packit |
857059 |
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
Packit |
857059 |
|
|
Packit |
857059 |
* ** END_ICS_COPYRIGHT5 ****************************************/
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* [ICS VERSION STRING: unknown] */
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#ifndef __H_IBA_PCAP
|
|
Packit |
857059 |
#define __H_IBA_PCAP
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include "iba/stl_types.h"
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include "iba/public/ipackon.h"
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define BLOCKSIZE 64
|
|
Packit |
857059 |
#if 1
|
|
Packit |
857059 |
#define DEFAULT_NUMBLOCKS (2*1024*1024)
|
|
Packit |
857059 |
#else
|
|
Packit |
857059 |
#define DEFAULT_NUMBLOCKS (500)
|
|
Packit |
857059 |
#endif
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define STL_WIRESHARK_MAJOR 2
|
|
Packit |
857059 |
#define STL_WIRESHARK_MINOR 4
|
|
Packit |
857059 |
/*PCAP Nanosecond format magic*/
|
|
Packit |
857059 |
#define STL_WIRESHARK_MAGIC 0xa1b23c4d
|
|
Packit |
857059 |
#define STL_WIRESHARK_ERF 197
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define ERF_TYPE_OPA_SNC 28
|
|
Packit |
857059 |
#define ERF_TYPE_OPA_9B 29
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define FILTER_COND 0
|
|
Packit |
857059 |
#define FILTER_DLID 1
|
|
Packit |
857059 |
#define FILTER_SLID 2
|
|
Packit |
857059 |
#define FILTER_MCLASS 3
|
|
Packit |
857059 |
#define FILTER_PKEY 4
|
|
Packit |
857059 |
#define FILTER_PTYPE 5
|
|
Packit |
857059 |
#define FILTER_SVCLEV 6
|
|
Packit |
857059 |
#define FILTER_ATTRID 7
|
|
Packit |
857059 |
#define FILTER_QP 8
|
|
Packit |
857059 |
#define FILTER_TRANS_ID_HIGH 9
|
|
Packit |
857059 |
#define FILTER_TRANS_ID_LOW 10
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define PACKETTYPE_RC 0
|
|
Packit |
857059 |
#define PACKETTYPE_UC 1
|
|
Packit |
857059 |
#define PACKETTYPE_RD 2
|
|
Packit |
857059 |
#define PACKETTYPE_UD 3
|
|
Packit |
857059 |
#define PACKETTYPE_ERR 9999
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define COND_TYPE_AND 0
|
|
Packit |
857059 |
#define COND_TYPE_OR 1
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define DEFAULT_TRIGGER_LAG 10
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define PKEY_MASK 0x7fff
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// For Future Use if we add a higher complexity to our debugging
|
|
Packit |
857059 |
#define DBG_FLAGS_BIT0_X_SNC 1
|
|
Packit |
857059 |
#define DBG_FLAGS_BIT1_X_L2 1<<1
|
|
Packit |
857059 |
#define DBG_FLAGS_BIT2_X_MAD 1<<2
|
|
Packit |
857059 |
#define DBG_FLAGS_BIT3_X_PAYLOAD 1<<3
|
|
Packit |
857059 |
#define DBG_FLAGS_BIT4_P_SNC 1<<4
|
|
Packit |
857059 |
#define DBG_FLAGS_BIT5_P_SNC 1<<5
|
|
Packit |
857059 |
#define DBG_FLAGS_BIT6_P_L2 1<<6
|
|
Packit |
857059 |
#define DBG_FLAGS_BIT7_P_MAD 1<<7
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define DEBUG_TOOL_MODE 1
|
|
Packit |
857059 |
#define WFR_MODE 2
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define IS_FI_MODE(m) (m == WFR_MODE)
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define STL_WFR_INBOUND 1
|
|
Packit |
857059 |
#define STL_WFR_OUTBOUND 0
|
|
Packit |
857059 |
#define STL_WFR_RCV_BYPASS 0x4
|
|
Packit |
857059 |
#define STL_WFR_RCV_IB 0x2
|
|
Packit |
857059 |
#define STL_L2_16B 0x2
|
|
Packit |
857059 |
#define STL_L2_9B 0x3
|
|
Packit |
857059 |
#define STL_9B_LNH_BTH 0x2
|
|
Packit |
857059 |
#define STL_9B_LNH_GRH 0x3
|
|
Packit |
857059 |
#define STL_16B_L4_FM 0x8
|
|
Packit |
857059 |
#define STL_16B_L4_IB 0x9
|
|
Packit |
857059 |
#define STL_16B_L4_IB_GLOBAL 0xa
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define STL_16B_L4_FM_SIZE 8
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _packet {
|
|
Packit |
857059 |
uint64 blockNum;
|
|
Packit |
857059 |
uint64 size;
|
|
Packit |
857059 |
uint64 numBlocks;
|
|
Packit |
857059 |
time_t ts_sec;
|
|
Packit |
857059 |
long ts_nsec;
|
|
Packit |
857059 |
struct _packet *next;
|
|
Packit |
857059 |
} packet;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pcapHdr_s {
|
|
Packit |
857059 |
uint32 magicNumber;
|
|
Packit |
857059 |
uint16 versionMajor;
|
|
Packit |
857059 |
uint16 versionMinor;
|
|
Packit |
857059 |
int32 tzOffset;
|
|
Packit |
857059 |
uint32 sigFigs;
|
|
Packit |
857059 |
uint32 snapLen;
|
|
Packit |
857059 |
uint32 networkType;
|
|
Packit |
857059 |
} pcapHdr_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pcapRecHdr_s {
|
|
Packit |
857059 |
uint32 ts_nsec;
|
|
Packit |
857059 |
uint32 ts_sec;
|
|
Packit |
857059 |
uint32 packetSize;
|
|
Packit |
857059 |
uint32 packetOrigSize;
|
|
Packit |
857059 |
} pcapRecHdr_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct extHeader_s {
|
|
Packit |
857059 |
uint64 ts;
|
|
Packit |
857059 |
uint8 linkType; /* Lyink Type 26 = STL; 21 = IB */
|
|
Packit |
857059 |
uint8 flags; /* ERF flags */
|
|
Packit |
857059 |
uint16 length; /* Record Length in Bytes */
|
|
Packit |
857059 |
uint16 lossCtr; /* Number of packets lost between two captured packets */
|
|
Packit |
857059 |
uint16 realLength; /* Wire Length in Bytes */
|
|
Packit |
857059 |
} extHeader_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _WFR_SnC_HDR {
|
|
Packit |
857059 |
uint8 PortNumber; // Should be 1 for WFR
|
|
Packit |
857059 |
uint8 Direction; // 0=Egress (Out), 1=Ingress (In)
|
|
Packit |
857059 |
uint8 Reserved[6];
|
|
Packit |
857059 |
union {
|
|
Packit |
857059 |
uint64 AsReg64;
|
|
Packit |
857059 |
STL_FIELDUNION14(PBC, 64, // if Direction == 0
|
|
Packit |
857059 |
reserved_63_48:16,
|
|
Packit |
857059 |
pbcstaticratecontrolcnt:16,
|
|
Packit |
857059 |
pbcintr:1,
|
|
Packit |
857059 |
pbcdcinfo:1,
|
|
Packit |
857059 |
pbctestebp:1,
|
|
Packit |
857059 |
pbcpacketbypass:1,
|
|
Packit |
857059 |
pbcinserthcrc:2,
|
|
Packit |
857059 |
pbccreditreturn:1,
|
|
Packit |
857059 |
pbcinsertbypassicrc:1,
|
|
Packit |
857059 |
pbctestbadicrc:1,
|
|
Packit |
857059 |
pbcfecn:1,
|
|
Packit |
857059 |
reserved_21_16:6,
|
|
Packit |
857059 |
pbcvl:4,
|
|
Packit |
857059 |
pbclengthdws:12);
|
|
Packit |
857059 |
STL_FIELDUNION17(RHF, 64, // if Direction == 1
|
|
Packit |
857059 |
icrcerr:1,
|
|
Packit |
857059 |
reserved_62_62:1,
|
|
Packit |
857059 |
eccerr:1,
|
|
Packit |
857059 |
lenerr:1,
|
|
Packit |
857059 |
tiderr:1,
|
|
Packit |
857059 |
rcvtypeerr:3,
|
|
Packit |
857059 |
dcerr:1,
|
|
Packit |
857059 |
dcuncerr:1,
|
|
Packit |
857059 |
khdrlenerr:1,
|
|
Packit |
857059 |
hdrqoffset:9,
|
|
Packit |
857059 |
egroffset:12,
|
|
Packit |
857059 |
rcvseq:4,
|
|
Packit |
857059 |
dcinfo:1,
|
|
Packit |
857059 |
egrindex:11,
|
|
Packit |
857059 |
useegrbfr:1,
|
|
Packit |
857059 |
rcvtype:3,
|
|
Packit |
857059 |
pktlen:12);
|
|
Packit |
857059 |
} u;
|
|
Packit |
857059 |
} WFR_SnC_HDR;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define DESTQP_MASK 0x00ffffff
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _filterFunc_s {
|
|
Packit |
857059 |
int (*filterFunc)(packet *, uint32);
|
|
Packit |
857059 |
uint32 filterVal;
|
|
Packit |
857059 |
int ioctl;
|
|
Packit |
857059 |
int notFlag;
|
|
Packit |
857059 |
} filterFunc_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _qibPacketFilterCommand_s {
|
|
Packit |
857059 |
int opcode;
|
|
Packit |
857059 |
int length;
|
|
Packit |
857059 |
void *value_ptr;
|
|
Packit |
857059 |
} qibPacketFilterCommand_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* Driver ioctls */
|
|
Packit |
857059 |
#define QIB_SNOOP_IOC_MAGIC IB_IOCTL_MAGIC
|
|
Packit |
857059 |
#define QIB_SNOOP_IOC_BASE_SEQ 0x80
|
|
Packit |
857059 |
/* This starts our ioctl sequence
|
|
Packit |
857059 |
* numbers *way* off from the ones
|
|
Packit |
857059 |
* defined in ib_core
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
#define QIB_SNOOP_IOCGETLINKSTATE \
|
|
Packit |
857059 |
_IO(QIB_SNOOP_IOC_MAGIC, QIB_SNOOP_IOC_BASE_SEQ)
|
|
Packit |
857059 |
#define QIB_SNOOP_IOCSETLINKSTATE \
|
|
Packit |
857059 |
_IO(QIB_SNOOP_IOC_MAGIC, QIB_SNOOP_IOC_BASE_SEQ+1)
|
|
Packit |
857059 |
#define QIB_SNOOP_IOCCLEARQUEUE \
|
|
Packit |
857059 |
_IO(QIB_SNOOP_IOC_MAGIC, QIB_SNOOP_IOC_BASE_SEQ+2)
|
|
Packit |
857059 |
#define QIB_SNOOP_IOCCLEARFILTER \
|
|
Packit |
857059 |
_IO(QIB_SNOOP_IOC_MAGIC, QIB_SNOOP_IOC_BASE_SEQ+3)
|
|
Packit |
857059 |
#define QIB_SNOOP_IOCSETFILTER \
|
|
Packit |
857059 |
_IO(QIB_SNOOP_IOC_MAGIC, QIB_SNOOP_IOC_BASE_SEQ+4)
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
enum qib_packet_filter_opcodes {
|
|
Packit |
857059 |
FILTER_BY_LID,
|
|
Packit |
857059 |
FILTER_BY_DLID,
|
|
Packit |
857059 |
FILTER_BY_MAD_MGMT_CLASS,
|
|
Packit |
857059 |
FILTER_BY_QP_NUMBER,
|
|
Packit |
857059 |
FILTER_BY_PKT_TYPE,
|
|
Packit |
857059 |
FILTER_BY_SERVICE_LEVEL,
|
|
Packit |
857059 |
FILTER_BY_PKEY
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define IB_PACKET_SIZE 4208
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define STL_MAX_PACKET_SIZE 16*1024 // 16K
|
|
Packit |
857059 |
#define WIRESHARK_MAX_LENGTH 65535
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define PACKET_OUT_FILE "packetDump.pcap"
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include "iba/public/ipackoff.h"
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#endif /* __H_IBA_PCAP */
|