summaryrefslogtreecommitdiff
path: root/drivers/staging/bcm/Protocol.h
blob: 562d4dd81a7c13d18a564e791f3fff2014dae7bc (plain)
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
141
142
143
144
145
146
147
148
149
150
151
/************************************
* 	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__