blob: 9818128d9320d524d692743b8b43782f84ff0311 [file] [log] [blame]
/************************************
* 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__ */