]>
Commit | Line | Data |
---|---|---|
f8942e07 | 1 | /************************************ |
bd33dd31 | 2 | * Protocol.h |
f8942e07 SH |
3 | *************************************/ |
4 | #ifndef __PROTOCOL_H__ | |
5 | #define __PROTOCOL_H__ | |
6 | ||
bd33dd31 KM |
7 | #define IPV4 4 |
8 | #define IPV6 6 | |
f8942e07 SH |
9 | |
10 | struct ArpHeader { | |
bd33dd31 KM |
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 */ | |
a3489276 | 16 | }; |
f8942e07 | 17 | |
3df56e10 KM |
18 | struct TransportHeaderT { |
19 | union { | |
f8942e07 SH |
20 | struct udphdr uhdr; |
21 | struct tcphdr thdr; | |
22 | }; | |
5f8797b6 | 23 | } __packed; |
f8942e07 SH |
24 | typedef struct TransportHeaderT xporthdr; |
25 | ||
3df56e10 | 26 | typedef enum _E_NWPKT_IPFRAME_TYPE { |
f8942e07 SH |
27 | eNonIPPacket, |
28 | eIPv4Packet, | |
29 | eIPv6Packet | |
bd33dd31 | 30 | } E_NWPKT_IPFRAME_TYPE; |
f8942e07 | 31 | |
3df56e10 | 32 | typedef enum _E_NWPKT_ETHFRAME_TYPE { |
f8942e07 SH |
33 | eEthUnsupportedFrame, |
34 | eEth802LLCFrame, | |
35 | eEth802LLCSNAPFrame, | |
36 | eEth802QVLANFrame, | |
37 | eEthOtherFrame | |
38 | } E_NWPKT_ETHFRAME_TYPE; | |
39 | ||
3df56e10 | 40 | typedef struct _S_ETHCS_PKT_INFO { |
f8942e07 SH |
41 | E_NWPKT_IPFRAME_TYPE eNwpktIPFrameType; |
42 | E_NWPKT_ETHFRAME_TYPE eNwpktEthFrameType; | |
963fa3e6 | 43 | unsigned short usEtherType; |
57b49ada | 44 | unsigned char ucDSAP; |
bd33dd31 | 45 | } S_ETHCS_PKT_INFO, *PS_ETHCS_PKT_INFO; |
f8942e07 | 46 | |
3df56e10 | 47 | typedef struct _ETH_CS_802_Q_FRAME { |
406a5082 | 48 | struct bcm_eth_header EThHdr; |
963fa3e6 KM |
49 | unsigned short UserPriority:3; |
50 | unsigned short CFI:1; | |
51 | unsigned short VLANID:12; | |
52 | unsigned short EthType; | |
5f8797b6 | 53 | } __packed ETH_CS_802_Q_FRAME; |
f8942e07 | 54 | |
3df56e10 | 55 | typedef struct _ETH_CS_802_LLC_FRAME { |
406a5082 | 56 | struct bcm_eth_header EThHdr; |
f8942e07 SH |
57 | unsigned char DSAP; |
58 | unsigned char SSAP; | |
59 | unsigned char Control; | |
5f8797b6 | 60 | } __packed ETH_CS_802_LLC_FRAME; |
f8942e07 | 61 | |
9bcacc29 | 62 | struct bcm_eth_llc_snap_frame { |
406a5082 | 63 | struct bcm_eth_header EThHdr; |
f8942e07 SH |
64 | unsigned char DSAP; |
65 | unsigned char SSAP; | |
66 | unsigned char Control; | |
67 | unsigned char OUI[3]; | |
68 | unsigned short usEtherType; | |
9bcacc29 | 69 | } __packed; |
f8942e07 | 70 | |
30f5b4c2 | 71 | struct bcm_ethernet2_frame { |
406a5082 | 72 | struct bcm_eth_header EThHdr; |
30f5b4c2 | 73 | } __packed; |
f8942e07 | 74 | |
78afa999 | 75 | #define ETHERNET_FRAMETYPE_IPV4 ntohs(0x0800) |
bd33dd31 KM |
76 | #define ETHERNET_FRAMETYPE_IPV6 ntohs(0x86dd) |
77 | #define ETHERNET_FRAMETYPE_802QVLAN ntohs(0x8100) | |
f8942e07 | 78 | |
a3489276 | 79 | /* Per SF CS Specification Encodings */ |
4a19aaa7 | 80 | enum bcm_spec_encoding { |
bd33dd31 | 81 | eCSSpecUnspecified = 0, |
f8942e07 SH |
82 | eCSPacketIPV4, |
83 | eCSPacketIPV6, | |
84 | eCS802_3PacketEthernet, | |
85 | eCS802_1QPacketVLAN, | |
86 | eCSPacketIPV4Over802_3Ethernet, | |
87 | eCSPacketIPV6Over802_3Ethernet, | |
88 | eCSPacketIPV4Over802_1QVLAN, | |
89 | eCSPacketIPV6Over802_1QVLAN, | |
90 | eCSPacketUnsupported | |
4a19aaa7 | 91 | }; |
f8942e07 | 92 | |
bd33dd31 KM |
93 | #define IP6_HEADER_LEN 40 |
94 | #define IP_VERSION(byte) (((byte&0xF0)>>4)) | |
f8942e07 SH |
95 | |
96 | #define MAC_ADDRESS_SIZE 6 | |
5a88304e | 97 | #define ETH_AND_IP_HEADER_LEN (14 + 20) |
bd33dd31 KM |
98 | #define L4_SRC_PORT_LEN 2 |
99 | #define L4_DEST_PORT_LEN 2 | |
5a88304e | 100 | #define CTRL_PKT_LEN (8 + ETH_AND_IP_HEADER_LEN) |
f8942e07 | 101 | |
bd33dd31 KM |
102 | #define ETH_ARP_FRAME 0x806 |
103 | #define ETH_IPV4_FRAME 0x800 | |
104 | #define ETH_IPV6_FRAME 0x86DD | |
105 | #define UDP 0x11 | |
106 | #define TCP 0x06 | |
f8942e07 | 107 | |
bd33dd31 KM |
108 | #define ARP_OP_REQUEST 0x01 |
109 | #define ARP_OP_REPLY 0x02 | |
110 | #define ARP_PKT_SIZE 60 | |
f8942e07 | 111 | |
a3489276 | 112 | /* This is the format for the TCP packet header */ |
16c3f8b0 | 113 | struct bcm_tcp_header { |
963fa3e6 KM |
114 | unsigned short usSrcPort; |
115 | unsigned short usDestPort; | |
edb9ebb0 KM |
116 | unsigned long ulSeqNumber; |
117 | unsigned long ulAckNumber; | |
57b49ada KM |
118 | unsigned char HeaderLength; |
119 | unsigned char ucFlags; | |
963fa3e6 KM |
120 | unsigned short usWindowsSize; |
121 | unsigned short usChkSum; | |
122 | unsigned short usUrgetPtr; | |
16c3f8b0 | 123 | }; |
f8942e07 | 124 | |
16c3f8b0 | 125 | #define TCP_HEADER_LEN sizeof(struct bcm_tcp_header) |
a3489276 | 126 | #define TCP_ACK 0x10 /* Bit 4 in tcpflags field. */ |
bd33dd31 | 127 | #define GET_TCP_HEADER_LEN(byte) ((byte&0xF0)>>4) |
f8942e07 | 128 | |
a3489276 | 129 | #endif /* __PROTOCOL_H__ */ |