https://github.com/torvalds/linux
Tip revision: 805a6af8dba5dfdd35ec35dc52ec0122400b2610 authored by Linus Torvalds on 04 January 2012, 23:55:44 UTC
Linux 3.2
Linux 3.2
Tip revision: 805a6af
Protocol.h
/************************************
* 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__