1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
/************************************
* 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__ */
|