| /************************************ |
| * 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 */ |
| }; |
| |
| struct bcm_transport_header { |
| union { |
| struct udphdr uhdr; |
| struct tcphdr thdr; |
| }; |
| } __packed; |
| |
| enum bcm_ip_frame_type { |
| eNonIPPacket, |
| eIPv4Packet, |
| eIPv6Packet |
| }; |
| |
| enum bcm_eth_frame_type { |
| eEthUnsupportedFrame, |
| eEth802LLCFrame, |
| eEth802LLCSNAPFrame, |
| eEth802QVLANFrame, |
| eEthOtherFrame |
| }; |
| |
| struct bcm_eth_packet_info { |
| enum bcm_ip_frame_type eNwpktIPFrameType; |
| enum bcm_eth_frame_type eNwpktEthFrameType; |
| unsigned short usEtherType; |
| unsigned char ucDSAP; |
| }; |
| |
| struct bcm_eth_q_frame { |
| struct bcm_eth_header EThHdr; |
| unsigned short UserPriority:3; |
| unsigned short CFI:1; |
| unsigned short VLANID:12; |
| unsigned short EthType; |
| } __packed; |
| |
| struct bcm_eth_llc_frame { |
| struct bcm_eth_header EThHdr; |
| unsigned char DSAP; |
| unsigned char SSAP; |
| unsigned char Control; |
| } __packed; |
| |
| struct bcm_eth_llc_snap_frame { |
| struct bcm_eth_header EThHdr; |
| unsigned char DSAP; |
| unsigned char SSAP; |
| unsigned char Control; |
| unsigned char OUI[3]; |
| unsigned short usEtherType; |
| } __packed; |
| |
| struct bcm_ethernet2_frame { |
| struct bcm_eth_header EThHdr; |
| } __packed; |
| |
| #define ETHERNET_FRAMETYPE_IPV4 ntohs(0x0800) |
| #define ETHERNET_FRAMETYPE_IPV6 ntohs(0x86dd) |
| #define ETHERNET_FRAMETYPE_802QVLAN ntohs(0x8100) |
| |
| /* Per SF CS Specification Encodings */ |
| enum bcm_spec_encoding { |
| eCSSpecUnspecified = 0, |
| eCSPacketIPV4, |
| eCSPacketIPV6, |
| eCS802_3PacketEthernet, |
| eCS802_1QPacketVLAN, |
| eCSPacketIPV4Over802_3Ethernet, |
| eCSPacketIPV6Over802_3Ethernet, |
| eCSPacketIPV4Over802_1QVLAN, |
| eCSPacketIPV6Over802_1QVLAN, |
| eCSPacketUnsupported |
| }; |
| |
| #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 */ |
| struct bcm_tcp_header { |
| unsigned short usSrcPort; |
| unsigned short usDestPort; |
| unsigned long ulSeqNumber; |
| unsigned long ulAckNumber; |
| unsigned char HeaderLength; |
| unsigned char ucFlags; |
| unsigned short usWindowsSize; |
| unsigned short usChkSum; |
| unsigned short usUrgetPtr; |
| }; |
| |
| #define TCP_HEADER_LEN sizeof(struct bcm_tcp_header) |
| #define TCP_ACK 0x10 /* Bit 4 in tcpflags field. */ |
| #define GET_TCP_HEADER_LEN(byte) ((byte&0xF0)>>4) |
| |
| #endif /* __PROTOCOL_H__ */ |