• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /************************************
2 *	Protocol.h
3 *************************************/
4 #ifndef	__PROTOCOL_H__
5 #define	__PROTOCOL_H__
6 
7 #define IPV4 4
8 #define IPV6 6
9 
10 struct ArpHeader {
11 	struct arphdr arp;
12 	unsigned char ar_sha[ETH_ALEN];	/* sender hardware address  */
13 	unsigned char ar_sip[4];	/* sender IP address        */
14 	unsigned char ar_tha[ETH_ALEN];	/* target hardware address  */
15 	unsigned char ar_tip[4];	/* target IP address        */
16 };
17 
18 struct bcm_transport_header {
19 	union {
20 		struct udphdr uhdr;
21 		struct tcphdr thdr;
22 	};
23 } __packed;
24 
25 enum bcm_ip_frame_type {
26 	eNonIPPacket,
27 	eIPv4Packet,
28 	eIPv6Packet
29 };
30 
31 enum bcm_eth_frame_type {
32 	eEthUnsupportedFrame,
33 	eEth802LLCFrame,
34 	eEth802LLCSNAPFrame,
35 	eEth802QVLANFrame,
36 	eEthOtherFrame
37 };
38 
39 struct bcm_eth_packet_info {
40 	enum bcm_ip_frame_type  eNwpktIPFrameType;
41 	enum bcm_eth_frame_type eNwpktEthFrameType;
42 	unsigned short	usEtherType;
43 	unsigned char	ucDSAP;
44 };
45 
46 struct bcm_eth_q_frame {
47 	struct bcm_eth_header EThHdr;
48 	unsigned short UserPriority:3;
49 	unsigned short CFI:1;
50 	unsigned short VLANID:12;
51 	unsigned short EthType;
52 } __packed;
53 
54 struct bcm_eth_llc_frame {
55 	struct bcm_eth_header EThHdr;
56 	unsigned char DSAP;
57 	unsigned char SSAP;
58 	unsigned char Control;
59 } __packed;
60 
61 struct bcm_eth_llc_snap_frame {
62 	struct bcm_eth_header EThHdr;
63 	unsigned char DSAP;
64 	unsigned char SSAP;
65 	unsigned char Control;
66 	unsigned char OUI[3];
67 	unsigned short usEtherType;
68 } __packed;
69 
70 struct bcm_ethernet2_frame {
71 	struct bcm_eth_header EThHdr;
72 } __packed;
73 
74 #define ETHERNET_FRAMETYPE_IPV4		ntohs(0x0800)
75 #define ETHERNET_FRAMETYPE_IPV6		ntohs(0x86dd)
76 #define ETHERNET_FRAMETYPE_802QVLAN	ntohs(0x8100)
77 
78 /* Per SF CS Specification Encodings */
79 enum bcm_spec_encoding {
80 	eCSSpecUnspecified = 0,
81 	eCSPacketIPV4,
82 	eCSPacketIPV6,
83 	eCS802_3PacketEthernet,
84 	eCS802_1QPacketVLAN,
85 	eCSPacketIPV4Over802_3Ethernet,
86 	eCSPacketIPV6Over802_3Ethernet,
87 	eCSPacketIPV4Over802_1QVLAN,
88 	eCSPacketIPV6Over802_1QVLAN,
89 	eCSPacketUnsupported
90 };
91 
92 #define	IP6_HEADER_LEN		40
93 #define IP_VERSION(byte)	(((byte&0xF0)>>4))
94 
95 #define MAC_ADDRESS_SIZE	6
96 #define	ETH_AND_IP_HEADER_LEN	(14 + 20)
97 #define L4_SRC_PORT_LEN		2
98 #define L4_DEST_PORT_LEN	2
99 #define	CTRL_PKT_LEN		(8 + ETH_AND_IP_HEADER_LEN)
100 
101 #define	ETH_ARP_FRAME		0x806
102 #define	ETH_IPV4_FRAME		0x800
103 #define	ETH_IPV6_FRAME		0x86DD
104 #define UDP			0x11
105 #define TCP			0x06
106 
107 #define	ARP_OP_REQUEST		0x01
108 #define	ARP_OP_REPLY		0x02
109 #define	ARP_PKT_SIZE		60
110 
111 /* This is the format for the TCP packet header */
112 struct bcm_tcp_header {
113 	unsigned short usSrcPort;
114 	unsigned short usDestPort;
115 	unsigned long  ulSeqNumber;
116 	unsigned long  ulAckNumber;
117 	unsigned char  HeaderLength;
118 	unsigned char  ucFlags;
119 	unsigned short usWindowsSize;
120 	unsigned short usChkSum;
121 	unsigned short usUrgetPtr;
122 };
123 
124 #define TCP_HEADER_LEN		sizeof(struct bcm_tcp_header)
125 #define TCP_ACK			0x10  /* Bit 4 in tcpflags field. */
126 #define GET_TCP_HEADER_LEN(byte) ((byte&0xF0)>>4)
127 
128 #endif /* __PROTOCOL_H__ */
129