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