]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/staging/bcm/Protocol.h
Merge branch 'master' into tk71
[mv-sheeva.git] / drivers / staging / bcm / Protocol.h
diff --git a/drivers/staging/bcm/Protocol.h b/drivers/staging/bcm/Protocol.h
new file mode 100644 (file)
index 0000000..b8a4009
--- /dev/null
@@ -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    ntohs(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__