/************************************ * Protocol.h *************************************/ #ifndef __PROTOCOL_H__ #define __PROTOCOL_H__ #define IPV4 4 #define IPV6 6 struct ArpHeader { struct arphdr arp; unsigned char ar_sha[ETH_ALEN]; /* sender hardware address */ unsigned char ar_sip[4]; /* sender IP address */ unsigned char ar_tha[ETH_ALEN]; /* target hardware address */ unsigned char ar_tip[4]; /* target IP address */ }/*__attribute__((packed))*/; struct TransportHeaderT { union { struct udphdr uhdr; struct tcphdr thdr; }; } __attribute__((packed)); typedef struct TransportHeaderT xporthdr; typedef enum _E_NWPKT_IPFRAME_TYPE { eNonIPPacket, eIPv4Packet, eIPv6Packet }E_NWPKT_IPFRAME_TYPE; typedef enum _E_NWPKT_ETHFRAME_TYPE { eEthUnsupportedFrame, eEth802LLCFrame, eEth802LLCSNAPFrame, eEth802QVLANFrame, eEthOtherFrame } E_NWPKT_ETHFRAME_TYPE; typedef struct _S_ETHCS_PKT_INFO { E_NWPKT_IPFRAME_TYPE eNwpktIPFrameType; E_NWPKT_ETHFRAME_TYPE eNwpktEthFrameType; USHORT usEtherType; UCHAR ucDSAP; }S_ETHCS_PKT_INFO,*PS_ETHCS_PKT_INFO; typedef struct _ETH_CS_802_Q_FRAME { ETH_HEADER_STRUC EThHdr; USHORT UserPriority:3; USHORT CFI:1; USHORT VLANID:12; USHORT EthType; } __attribute__((packed)) ETH_CS_802_Q_FRAME; typedef struct _ETH_CS_802_LLC_FRAME { ETH_HEADER_STRUC EThHdr; unsigned char DSAP; unsigned char SSAP; unsigned char Control; }__attribute__((packed)) ETH_CS_802_LLC_FRAME; typedef struct _ETH_CS_802_LLC_SNAP_FRAME { ETH_HEADER_STRUC EThHdr; unsigned char DSAP; unsigned char SSAP; unsigned char Control; unsigned char OUI[3]; unsigned short usEtherType; } __attribute__((packed)) ETH_CS_802_LLC_SNAP_FRAME; typedef struct _ETH_CS_ETH2_FRAME { ETH_HEADER_STRUC EThHdr; } __attribute__((packed)) ETH_CS_ETH2_FRAME; #define ETHERNET_FRAMETYPE_IPV4 ntohs(0x0800) #define ETHERNET_FRAMETYPE_IPV6 ntohs(0x86dd) #define ETHERNET_FRAMETYPE_802QVLAN ntohs(0x8100) //Per SF CS Specification Encodings typedef enum _E_SERVICEFLOW_CS_SPEC_ { eCSSpecUnspecified =0, eCSPacketIPV4, eCSPacketIPV6, eCS802_3PacketEthernet, eCS802_1QPacketVLAN, eCSPacketIPV4Over802_3Ethernet, eCSPacketIPV6Over802_3Ethernet, eCSPacketIPV4Over802_1QVLAN, eCSPacketIPV6Over802_1QVLAN, eCSPacketUnsupported }E_SERVICEFLOW_CS_SPEC; #define IP6_HEADER_LEN 40 #define IP_VERSION(byte) (((byte&0xF0)>>4)) #define MAC_ADDRESS_SIZE 6 #define ETH_AND_IP_HEADER_LEN 14 + 20 #define L4_SRC_PORT_LEN 2 #define L4_DEST_PORT_LEN 2 #define CTRL_PKT_LEN 8 + ETH_AND_IP_HEADER_LEN #define ETH_ARP_FRAME 0x806 #define ETH_IPV4_FRAME 0x800 #define ETH_IPV6_FRAME 0x86DD #define UDP 0x11 #define TCP 0x06 #define ARP_OP_REQUEST 0x01 #define ARP_OP_REPLY 0x02 #define ARP_PKT_SIZE 60 // This is the format for the TCP packet header typedef struct _TCP_HEADER { USHORT usSrcPort; USHORT usDestPort; ULONG ulSeqNumber; ULONG ulAckNumber; UCHAR HeaderLength; UCHAR ucFlags; USHORT usWindowsSize; USHORT usChkSum; USHORT usUrgetPtr; } TCP_HEADER,*PTCP_HEADER; #define TCP_HEADER_LEN sizeof(TCP_HEADER) #define TCP_ACK 0x10 //Bit 4 in tcpflags field. #define GET_TCP_HEADER_LEN(byte) ((byte&0xF0)>>4) #endif //__PROTOCOL_H__