summaryrefslogblamecommitdiffstats
path: root/drivers/staging/bcm/Protocol.h
blob: 9818128d9320d524d692743b8b43782f84ff0311 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                                     
                  



                                      

              

                  




                                                                      
  
 
                             
               


                                   
           
 
                        


                     
  
 
                         




                             
  
 
                            
                                                  
                                                   
                                    
                               
  
 
                        
                                     



                                      
           
 
                          
                                     


                              
           
 
                               
                                     




                                   
           
 
                            
                                     
           
 
                                                     

                                                     
 
                                       
                        
                               








                                       
  
 

                                                  

                                 
                                         

                                 
                                                           
 




                                      
 


                                    
 
                                                  
                       

                                  

                                   

                                    


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