diff options
Diffstat (limited to 'drivers/staging/bcm/Protocol.h')
-rw-r--r-- | drivers/staging/bcm/Protocol.h | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/drivers/staging/bcm/Protocol.h b/drivers/staging/bcm/Protocol.h new file mode 100644 index 0000000..00f1cc1 --- /dev/null +++ b/drivers/staging/bcm/Protocol.h @@ -0,0 +1,151 @@ +/************************************ +* 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 */ +}/*__attribute__((packed))*/; + + +struct TransportHeaderT +{ + union + { + struct udphdr uhdr; + struct tcphdr thdr; + }; +} __attribute__((packed)); +typedef struct TransportHeaderT xporthdr; + + +typedef enum _E_NWPKT_IPFRAME_TYPE +{ + eNonIPPacket, + eIPv4Packet, + eIPv6Packet +}E_NWPKT_IPFRAME_TYPE; + +typedef enum _E_NWPKT_ETHFRAME_TYPE +{ + eEthUnsupportedFrame, + eEth802LLCFrame, + eEth802LLCSNAPFrame, + eEth802QVLANFrame, + eEthOtherFrame +} E_NWPKT_ETHFRAME_TYPE; + +typedef struct _S_ETHCS_PKT_INFO +{ + E_NWPKT_IPFRAME_TYPE eNwpktIPFrameType; + E_NWPKT_ETHFRAME_TYPE eNwpktEthFrameType; + USHORT usEtherType; + UCHAR ucDSAP; +}S_ETHCS_PKT_INFO,*PS_ETHCS_PKT_INFO; + +typedef struct _ETH_CS_802_Q_FRAME +{ + ETH_HEADER_STRUC EThHdr; + USHORT UserPriority:3; + USHORT CFI:1; + USHORT VLANID:12; + USHORT EthType; +} __attribute__((packed)) ETH_CS_802_Q_FRAME; + +typedef struct _ETH_CS_802_LLC_FRAME +{ + ETH_HEADER_STRUC EThHdr; + unsigned char DSAP; + unsigned char SSAP; + unsigned char Control; +}__attribute__((packed)) ETH_CS_802_LLC_FRAME; + +typedef struct _ETH_CS_802_LLC_SNAP_FRAME +{ + ETH_HEADER_STRUC EThHdr; + unsigned char DSAP; + unsigned char SSAP; + unsigned char Control; + unsigned char OUI[3]; + unsigned short usEtherType; +} __attribute__((packed)) ETH_CS_802_LLC_SNAP_FRAME; + +typedef struct _ETH_CS_ETH2_FRAME +{ + ETH_HEADER_STRUC EThHdr; +} __attribute__((packed)) ETH_CS_ETH2_FRAME; + + +#define ETHERNET_FRAMETYPE_IPV4 ntohs(0x0800) +#define ETHERNET_FRAMETYPE_IPV6 ntohs(0x86dd) +#define ETHERNET_FRAMETYPE_802QVLAN 0x8100 +//Per SF CS Specification Encodings +typedef enum _E_SERVICEFLOW_CS_SPEC_ +{ + eCSSpecUnspecified =0, + eCSPacketIPV4, + eCSPacketIPV6, + eCS802_3PacketEthernet, + eCS802_1QPacketVLAN, + eCSPacketIPV4Over802_3Ethernet, + eCSPacketIPV6Over802_3Ethernet, + eCSPacketIPV4Over802_1QVLAN, + eCSPacketIPV6Over802_1QVLAN, + eCSPacketUnsupported +}E_SERVICEFLOW_CS_SPEC; + + +#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 +typedef struct _TCP_HEADER +{ + USHORT usSrcPort; + USHORT usDestPort; + ULONG ulSeqNumber; + ULONG ulAckNumber; + UCHAR HeaderLength; + UCHAR ucFlags; + USHORT usWindowsSize; + USHORT usChkSum; + USHORT usUrgetPtr; +} TCP_HEADER,*PTCP_HEADER; +#define TCP_HEADER_LEN sizeof(TCP_HEADER) +#define TCP_ACK 0x10 //Bit 4 in tcpflags field. +#define GET_TCP_HEADER_LEN(byte) ((byte&0xF0)>>4) + + +#endif //__PROTOCOL_H__ |