blob: b8a4009bdf0cb74568ce20321cdc92db078b4a27 [file] [log] [blame]
Stephen Hemmingerf8942e02010-09-08 14:46:36 -07001/************************************
2* Protocol.h
3*************************************/
4#ifndef __PROTOCOL_H__
5#define __PROTOCOL_H__
6
7
8#define IPV4 4
9#define IPV6 6
10
11
12struct 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
21struct TransportHeaderT
22{
23 union
24 {
25 struct udphdr uhdr;
26 struct tcphdr thdr;
27 };
28} __attribute__((packed));
29typedef struct TransportHeaderT xporthdr;
30
31
32typedef enum _E_NWPKT_IPFRAME_TYPE
33{
34 eNonIPPacket,
35 eIPv4Packet,
36 eIPv6Packet
37}E_NWPKT_IPFRAME_TYPE;
38
39typedef enum _E_NWPKT_ETHFRAME_TYPE
40{
41 eEthUnsupportedFrame,
42 eEth802LLCFrame,
43 eEth802LLCSNAPFrame,
44 eEth802QVLANFrame,
45 eEthOtherFrame
46} E_NWPKT_ETHFRAME_TYPE;
47
48typedef 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
56typedef 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
65typedef 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
73typedef 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
83typedef struct _ETH_CS_ETH2_FRAME
84{
85 ETH_HEADER_STRUC EThHdr;
86} __attribute__((packed)) ETH_CS_ETH2_FRAME;
87
Stephen Hemminger78afa992010-11-01 13:54:21 -040088#define ETHERNET_FRAMETYPE_IPV4 ntohs(0x0800)
89#define ETHERNET_FRAMETYPE_IPV6 ntohs(0x86dd)
90#define ETHERNET_FRAMETYPE_802QVLAN ntohs(0x8100)
Stephen Hemmingerf8942e02010-09-08 14:46:36 -070091
Stephen Hemmingerf8942e02010-09-08 14:46:36 -070092//Per SF CS Specification Encodings
93typedef 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
134typedef 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__