#ifndef PKTPARSE_H
#define PKTPARSE_H

#include <net/rtl/rtl_types.h>
#include "flagDef.h"
#include "l2pkt.h"
#include "l3pkt.h"
#include "l4pkt.h"

typedef struct pktParse_s {
	uint32		pktFlag;
	_etherHdr_t	*ether2;
	_vlanHdr_t	*vlan;
	_llcHdr_t	*llc;
	_pppoeHdr_t	*pppoe;
	//Following are mutual exclusive
	ipxHdr_t	*ipx;
	arpHdr_t	*arp;
	ipHdr_t		*ip;
	uint32		l3Flag;
	uint16		l3Cksum;
	ip6Hdr_t         *ipv6;                      //added by liujuan
	//Following are mutual exclusive
	greHdr_t	*pptp;
	icmpHdr_t	*icmp;
	icmpHdr_t       *v6icmp;
	igmpHdr_t	*igmp;
	udpHdr_t	*udp;
	udpHdr_t	*v6udp;
	tcpHdr_t	*tcp;
	tcpHdr_t	*v6tcp;
	uint32		l4Flag;
	uint16		l4Cksum;
	// payload
	uint8		*payload;
	// Total Length
	uint32		totalLen;
	// Data Length
	uint32		dataLen;
	//extension header
	uint32		exheader;                  //added by liujuan
} pktParse_t;

void pktParse(int8 * pkt, pktParse_t * result, uint32 totalLen);

#endif