/************************************ * 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__ */