Blame IbaTools/opapacketcapture/opapacketcapture.h

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 */