1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
/************************************
* 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
{
struct bcm_eth_header 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
{
struct bcm_eth_header 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
{
struct bcm_eth_header 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
{
struct bcm_eth_header 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__
|