1 /************************************
2 * 	Protocol.h
3 *************************************/
4 #ifndef	__PROTOCOL_H__
5 #define	__PROTOCOL_H__
6 
7 
8 #define IPV4				4
9 #define IPV6                6
10 
11 
12 struct ArpHeader {
13     struct arphdr       arp;
14     unsigned char       ar_sha[ETH_ALEN];   /* sender hardware address  */
15     unsigned char       ar_sip[4];      /* sender IP address        */
16     unsigned char       ar_tha[ETH_ALEN];   /* target hardware address  */
17     unsigned char       ar_tip[4];      /* target IP address        */
18 }/*__attribute__((packed))*/;
19 
20 
21 struct TransportHeaderT
22 {
23 	union
24 	{
25 		struct udphdr uhdr;
26 		struct tcphdr thdr;
27 	};
28 } __attribute__((packed));
29 typedef struct TransportHeaderT xporthdr;
30 
31 
32 typedef enum _E_NWPKT_IPFRAME_TYPE
33 {
34 	eNonIPPacket,
35 	eIPv4Packet,
36 	eIPv6Packet
37 }E_NWPKT_IPFRAME_TYPE;
38 
39 typedef enum _E_NWPKT_ETHFRAME_TYPE
40 {
41 	eEthUnsupportedFrame,
42 	eEth802LLCFrame,
43 	eEth802LLCSNAPFrame,
44 	eEth802QVLANFrame,
45 	eEthOtherFrame
46 } E_NWPKT_ETHFRAME_TYPE;
47 
48 typedef struct _S_ETHCS_PKT_INFO
49 {
50 	E_NWPKT_IPFRAME_TYPE eNwpktIPFrameType;
51 	E_NWPKT_ETHFRAME_TYPE eNwpktEthFrameType;
52 	USHORT	usEtherType;
53 	UCHAR	ucDSAP;
54 }S_ETHCS_PKT_INFO,*PS_ETHCS_PKT_INFO;
55 
56 typedef struct _ETH_CS_802_Q_FRAME
57 {
58 	ETH_HEADER_STRUC EThHdr;
59 	USHORT UserPriority:3;
60 	USHORT CFI:1;
61 	USHORT VLANID:12;
62 	USHORT EthType;
63 } __attribute__((packed)) ETH_CS_802_Q_FRAME;
64 
65 typedef struct _ETH_CS_802_LLC_FRAME
66 {
67 	ETH_HEADER_STRUC EThHdr;
68 	unsigned char DSAP;
69 	unsigned char SSAP;
70 	unsigned char Control;
71 }__attribute__((packed)) ETH_CS_802_LLC_FRAME;
72 
73 typedef struct _ETH_CS_802_LLC_SNAP_FRAME
74 {
75 	ETH_HEADER_STRUC EThHdr;
76 	unsigned char DSAP;
77 	unsigned char SSAP;
78 	unsigned char Control;
79 	unsigned char OUI[3];
80 	unsigned short usEtherType;
81 } __attribute__((packed)) ETH_CS_802_LLC_SNAP_FRAME;
82 
83 typedef struct _ETH_CS_ETH2_FRAME
84 {
85 	ETH_HEADER_STRUC EThHdr;
86 } __attribute__((packed)) ETH_CS_ETH2_FRAME;
87 
88 #define ETHERNET_FRAMETYPE_IPV4		ntohs(0x0800)
89 #define ETHERNET_FRAMETYPE_IPV6 	ntohs(0x86dd)
90 #define ETHERNET_FRAMETYPE_802QVLAN 	ntohs(0x8100)
91 
92 //Per SF CS Specification Encodings
93 typedef enum _E_SERVICEFLOW_CS_SPEC_
94 {
95 	eCSSpecUnspecified =0,
96 	eCSPacketIPV4,
97 	eCSPacketIPV6,
98 	eCS802_3PacketEthernet,
99 	eCS802_1QPacketVLAN,
100 	eCSPacketIPV4Over802_3Ethernet,
101 	eCSPacketIPV6Over802_3Ethernet,
102 	eCSPacketIPV4Over802_1QVLAN,
103 	eCSPacketIPV6Over802_1QVLAN,
104 	eCSPacketUnsupported
105 }E_SERVICEFLOW_CS_SPEC;
106 
107 
108 #define	IP6_HEADER_LEN	40
109 
110 #define IP_VERSION(byte)        (((byte&0xF0)>>4))
111 
112 
113 
114 #define MAC_ADDRESS_SIZE	6
115 #define	ETH_AND_IP_HEADER_LEN	14 + 20
116 #define L4_SRC_PORT_LEN 2
117 #define L4_DEST_PORT_LEN 2
118 
119 
120 
121 #define	CTRL_PKT_LEN		8 + ETH_AND_IP_HEADER_LEN
122 
123 #define	ETH_ARP_FRAME			0x806
124 #define	ETH_IPV4_FRAME			0x800
125 #define	ETH_IPV6_FRAME			0x86DD
126 #define UDP 					0x11
127 #define TCP         			0x06
128 
129 #define	ARP_OP_REQUEST			0x01
130 #define	ARP_OP_REPLY			0x02
131 #define	ARP_PKT_SIZE			60
132 
133 // This is the format for the TCP packet header
134 typedef struct _TCP_HEADER
135 {
136 	USHORT usSrcPort;
137 	USHORT usDestPort;
138 	ULONG  ulSeqNumber;
139 	ULONG  ulAckNumber;
140 	UCHAR  HeaderLength;
141     UCHAR  ucFlags;
142 	USHORT usWindowsSize;
143 	USHORT usChkSum;
144 	USHORT usUrgetPtr;
145 } TCP_HEADER,*PTCP_HEADER;
146 #define TCP_HEADER_LEN  	sizeof(TCP_HEADER)
147 #define TCP_ACK             0x10  //Bit 4 in tcpflags field.
148 #define GET_TCP_HEADER_LEN(byte) ((byte&0xF0)>>4)
149 
150 
151 #endif //__PROTOCOL_H__
152