diff --git a/econet/ecnt_prvt.c b/econet/ecnt_prvt.c
index b458c3da8b1c3f40fb987ca51843e00ce5ba1c0c..457f938c889411c64f47b2d7f93d0b69dff41e1e 100644
--- a/econet/ecnt_prvt.c
+++ b/econet/ecnt_prvt.c
@@ -33,10 +33,14 @@
 #include <sys/types.h>
 #include <unistd.h>
 #include <easy/easy.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
+#include <linux/sockios.h>
 
 #include "../ethernet.h"
 
 #include "ecnt_prvt.h"
+#include "fe_type.h"
 
 #ifdef STATIC_ANALYSIS
 #include "stub_libapi_lib_switchmgr.h"
@@ -51,12 +55,139 @@
 #define IFNAME_ETH0             "eth0."
 #define IFNAME_NAS              "nas"
 #define IFNAME_AE_WAN           "ae_wan"
+#define DRIVER_NAME "hsgmii_lan"
+#define DRIVER_NAME_LEN  20
+#define HSGMII_INDEX 2
+
 
 /* Not defined in Econet library */
 ECNT_SWITCHMGR_RET switchmgr_lib_get_port_link_state(u8 port,
 	ECNT_SWITCHMGR_LINK_STATE *p_link_state,
 	ECNT_SWITCHMGR_LINK_SPEED *p_speed);
 
+static int get_drv_info_by_ifname(char *ifname, char *buffer)
+{
+	int                     fd;
+	int                     ret = -1;
+	struct ifreq            ifr;
+	struct ethtool_drvinfo  info;
+
+	if (ifname == NULL || buffer == NULL)
+		return ret;
+
+	fd = socket(AF_INET, SOCK_DGRAM, 0);
+	if (fd < 0)
+		return ret;
+
+	memset(&info, 0, sizeof(info));
+	info.cmd = ETHTOOL_GDRVINFO;
+
+	memset(&ifr, 0, sizeof(ifr));
+	strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1);
+	ifr.ifr_data = (void *)&info;
+
+	if (ioctl(fd, SIOCETHTOOL, &ifr) != 0)
+		goto exit;
+
+	strcpy(buffer, info.driver);
+	ret = 0;
+
+exit:
+	close(fd);
+	return ret;
+}
+
+static int get_port_statistics(int function_id, struct ecnt_fe_data *para) {
+	int fd, ret = -1;
+
+	para->function_id = function_id;
+	para->index = HSGMII_INDEX;
+	fd = open("/dev/fe", O_RDWR);
+	if (fd < 0)
+     	{
+        	return -1;
+	}
+
+	ret = ioctl(fd, 0, para);
+	close(fd);
+	if(ret >= 0)
+		return 0;
+	return -1;
+}
+
+int hsgmii_lan_prvt_get_port_statistics(char *ifname, struct eth_stats *stats, struct eth_rmon_stats *rstats) {
+
+	char driver_name[DRIVER_NAME_LEN];
+	struct ecnt_fe_data para;
+
+	memset(&para,0,sizeof(struct ecnt_fe_data));
+	if (get_drv_info_by_ifname(ifname, driver_name))
+		return -1;
+
+	if (!strncmp(driver_name, DRIVER_NAME, DRIVER_NAME_LEN)) {
+		if (!get_port_statistics(FE_GET_HSGMII_LAN_TX_CNT, &para)) {
+			if (stats != NULL) {
+				stats->tx_bytes = 0;
+				stats->tx_packets = para.api_data.FE_TxCnt.txFrameCnt;
+				stats->tx_errors = 0;
+				stats->tx_ucast_packets = 0;
+				stats->tx_mcast_packets = para.api_data.FE_TxCnt.txBroadcastCnt;
+				stats->tx_bcast_packets = para.api_data.FE_TxCnt.txMulticastCnt;
+				stats->tx_discard_packets = para.api_data.FE_RxCnt.rxDropCnt;
+				stats->rx_unknown_packets = 0;
+			}
+
+			if (rstats != NULL) {
+				rstats->tx.packets = para.api_data.FE_TxCnt.txFrameCnt;
+				rstats->tx.bytes = 0;
+				rstats->tx.bcast_packets = para.api_data.FE_TxCnt.txMulticastCnt;
+				rstats->tx.mcast_packets = para.api_data.FE_TxCnt.txMulticastCnt;
+				rstats->tx.crc_err_packets = 0;
+				rstats->tx.under_sz_packets = 0;
+				rstats->tx.over_sz_packets = 0;
+				rstats->tx.packets_64bytes = para.api_data.FE_TxCnt.txEq64Cnt;
+				rstats->tx.packets_65to127bytes = para.api_data.FE_TxCnt.txFrom65To127Cnt;
+				rstats->tx.packets_256to511bytes = para.api_data.FE_TxCnt.txFrom256To511Cnt;
+				rstats->tx.packets_512to1023bytes = para.api_data.FE_TxCnt.txFrom512To1023Cnt;
+				rstats->tx.packets_1024to1518bytes = para.api_data.FE_TxCnt.txFrom1024To1518Cnt;
+			}
+
+		}
+		if (!get_port_statistics(FE_GET_HSGMII_LAN_RX_CNT, &para)) {
+			if (rstats != NULL) {
+
+				rstats->rx.packets = para.api_data.FE_RxCnt.rxFrameCnt;
+				rstats->rx.bytes = 0;
+				rstats->rx.bcast_packets = para.api_data.FE_RxCnt.rxMulticastCnt;
+				rstats->rx.mcast_packets = para.api_data.FE_RxCnt.rxMulticastCnt;
+				rstats->rx.crc_err_packets = para.api_data.FE_RxCnt.rxCrcCnt;
+				rstats->rx.under_sz_packets = para.api_data.FE_RxCnt.rxUnderSizeCnt;
+				rstats->rx.over_sz_packets = para.api_data.FE_RxCnt.rxOversizeCnt;
+				rstats->rx.packets_64bytes = para.api_data.FE_RxCnt.rxEq64Cnt;
+				rstats->rx.packets_65to127bytes = para.api_data.FE_RxCnt.rxFrom65To127Cnt;
+				rstats->rx.packets_256to511bytes = para.api_data.FE_RxCnt.rxFrom256To511Cnt;
+				rstats->rx.packets_512to1023bytes = para.api_data.FE_RxCnt.rxFrom512To1023Cnt;
+				rstats->rx.packets_1024to1518bytes = para.api_data.FE_RxCnt.rxFrom1024To1518Cnt;
+			}
+
+			if (stats != NULL) {
+				stats->rx_bytes = 0;
+				stats->rx_packets = para.api_data.FE_RxCnt.rxFrameCnt;
+				stats->rx_errors = 0;
+				stats->rx_ucast_packets = 0;
+				stats->rx_mcast_packets = para.api_data.FE_RxCnt.rxMulticastCnt;
+				stats->rx_bcast_packets = para.api_data.FE_RxCnt.rxBroadcastCnt;
+				stats->rx_discard_packets = para.api_data.FE_TxCnt.txDropCnt;
+				stats->rx_unknown_packets = 0;
+			}
+		}
+		return 0;
+	}
+     	return -1;
+}
+
+
+
 int ecnt_prvt_get_port_statistics(uint32_t port,
 								  struct eth_stats *stats,
 								  struct eth_rmon_stats *rstats)
diff --git a/econet/econet.c b/econet/econet.c
index 024c09701c2838542f16841d0edd848f0e9dd5b5..42cc04f3b315f2b0b3e893f32f4abe662b55a810 100644
--- a/econet/econet.c
+++ b/econet/econet.c
@@ -64,6 +64,10 @@ int econet_eth_get_stats(const char *ifname, struct eth_stats *stats)
 
 	port_num = ecnt_prvt_get_port_num(ifname);
 	if (port_num == ECNT_PRVT_PORT_NUM_INVALID) {
+		/* Check and fetch stats if the Interface belongs to hsgmii_lan driver */
+		if (!hsgmii_lan_prvt_get_port_statistics(ifname,  stats, NULL)) {
+			return 0;
+		}
 		libethernet_err("invalid port name: %s\n", ifname);
 		return -1;
 	}
@@ -82,6 +86,12 @@ int econet_eth_get_rmon_stats(const char *ifname, struct eth_rmon_stats *rstats)
 
 	port_num = ecnt_prvt_get_port_num(ifname);
 	if (port_num == ECNT_PRVT_PORT_NUM_INVALID) {
+
+		/* Check and fetch rstats if the Interface belongs to hsgmii_lan driver */
+		if (!hsgmii_lan_prvt_get_port_statistics(ifname, NULL, rstats)) {
+			return 0;
+		}
+
 		libethernet_err("invalid port name: %s\n", ifname);
 		return -1;
 	}
diff --git a/econet/fe_type.h b/econet/fe_type.h
new file mode 100755
index 0000000000000000000000000000000000000000..5325860a0fa0dab621e22da48b72846e1fc4fd70
--- /dev/null
+++ b/econet/fe_type.h
@@ -0,0 +1,880 @@
+/***************************************************************
+Copyright Statement:
+
+This software/firmware and related documentation (EcoNet Software) 
+are protected under relevant copyright laws. The information contained herein 
+is confidential and proprietary to EcoNet (HK) Limited (EcoNet) and/or 
+its licensors. Without the prior written permission of EcoNet and/or its licensors, 
+any reproduction, modification, use or disclosure of EcoNet Software, and 
+information contained herein, in whole or in part, shall be strictly prohibited.
+
+EcoNet (HK) Limited  EcoNet. ALL RIGHTS RESERVED.
+
+BY OPENING OR USING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY 
+ACKNOWLEDGES AND AGREES THAT THE SOFTWARE/FIRMWARE AND ITS 
+DOCUMENTATIONS (ECONET SOFTWARE) RECEIVED FROM ECONET 
+AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON AN AS IS 
+BASIS ONLY. ECONET EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, 
+WHETHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, 
+OR NON-INFRINGEMENT. NOR DOES ECONET PROVIDE ANY WARRANTY 
+WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTIES WHICH 
+MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE ECONET SOFTWARE. 
+RECEIVER AGREES TO LOOK ONLY TO SUCH THIRD PARTIES FOR ANY AND ALL 
+WARRANTY CLAIMS RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES 
+THAT IT IS RECEIVERS SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD 
+PARTY ALL PROPER LICENSES CONTAINED IN ECONET SOFTWARE.
+
+ECONET SHALL NOT BE RESPONSIBLE FOR ANY ECONET SOFTWARE RELEASES 
+MADE TO RECEIVERS SPECIFICATION OR CONFORMING TO A PARTICULAR 
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND 
+ECONET'S ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE ECONET 
+SOFTWARE RELEASED HEREUNDER SHALL BE, AT ECONET'S SOLE OPTION, TO 
+REVISE OR REPLACE THE ECONET SOFTWARE AT ISSUE OR REFUND ANY SOFTWARE 
+LICENSE FEES OR SERVICE CHARGES PAID BY RECEIVER TO ECONET FOR SUCH 
+ECONET SOFTWARE.
+***************************************************************/
+#ifndef _ECNT_HOOK_FE_TYPE_H_
+#define _ECNT_HOOK_FE_TYPE_H_
+
+/************************************************************************
+*                  I N C L U D E S
+*************************************************************************
+*/
+#ifdef __KERNEL__
+#include <linux/types.h>
+#include <linux/in6.h>
+#else
+#include <netinet/in.h>
+#endif
+
+/************************************************************************
+*                  D E F I N E S   &   C O N S T A N T S
+*************************************************************************
+*/
+	
+/************************************************************************
+*                  M A C R O S
+*************************************************************************
+*/
+#define FE_WAN_RX_UC_RATE 	0
+#define FE_WAN_RX_BC_RATE 	1
+#define FE_WAN_RX_MC_RATE 	2
+#define FE_WAN_RX_OC_RATE 	3
+#define FE_WAN_TX_RATE_LIMIT	4
+#define FE_WAN_RX_MAC_FILTER_RATE_LIMIT	5
+#define FE_RX_RATE_LIMIT	6
+	
+#define CDM_TX_ENCODING_SHIFT					(0)
+#define CDM_TX_ENCODING_MASK					(0xF<<CDM_TX_ENCODING_SHIFT)
+#define CDM_RX_DECODING_SHIFT					(4)
+#define CDM_RX_DECODING_MASK					(0xF<<CDM_RX_DECODING_SHIFT)
+#define GDM_TX_ENCODING_SHIFT					(8)
+#define GDM_TX_ENCODING_MASK					(0xF<<GDM_TX_ENCODING_SHIFT)
+#define GDM_RX_DECODING_SHIFT					(12)
+#define GDM_RX_DECODING_MASK					(0xF<<GDM_RX_DECODING_SHIFT)
+
+#define MTR_MASK        (0x3F)
+#define MTR_MASK_LEN    (6)
+#define ACNT0_OFFSET    MTR_MASK_LEN
+#define ACNT0_MASK      (0x3F<<ACNT0_OFFSET)
+#define ACNT0_MASK_LEN  (6)
+#define ACNT1_OFFSET    (MTR_MASK_LEN + ACNT0_MASK_LEN)
+#define ACNT1_MASK      (0x1F<<ACNT1_OFFSET)
+#define ACNT1_MASK_LEN  (5)
+#define ACNT2_OFFSET    (MTR_MASK_LEN + ACNT0_MASK_LEN + ACNT1_MASK_LEN)
+#define ACNT2_MASK      (0x7F<<ACNT2_OFFSET)
+#define ACNT2_MASK_LEN  (7)
+
+#define ETHER_WAN_OFFSET (MTR_MASK_LEN + ACNT0_MASK_LEN + ACNT1_MASK_LEN + ACNT2_MASK_LEN)
+#define ETHER_WAN_MASK  (1<<ETHER_WAN_OFFSET)
+
+#define DFT_ITF_OFFSET   (MTR_MASK_LEN + ACNT0_MASK_LEN + ACNT1_MASK_LEN + ACNT2_MASK_LEN)
+#define DFT_ITF_MASK     (0x1<<DFT_ITF_OFFSET)
+#define DFT_ITF_MASK_LEN (1)
+
+#define FE_AC_MTR_GROUP_MAX     (63)
+#define ACNT_GRP_WAN_NUM		(8)
+#define UP_DOWN_WAN_ITF_NUM		(ACNT_GRP_WAN_NUM*2)
+#define UP_DOWN_QUEUE_NUM		(16)
+
+#define WAN_ITF_AND_DEV_NUM				(23)
+#define UP_DOWN_WAN_ITF_AND_DEV_NUM		(WAN_ITF_AND_DEV_NUM*2)
+#define WAN_ITF_ONLY_BASE				(UP_DOWN_WAN_ITF_AND_DEV_NUM)
+#define WAN_ITF_ONLY_NUM				(3)
+#define UP_DOWN_WAN_ITF_ONLY_NUM		(WAN_ITF_ONLY_NUM*2)
+#define MULTICAST_DOWNSTREAM_BASE		(WAN_ITF_ONLY_BASE + UP_DOWN_WAN_ITF_ONLY_NUM)
+#define MULTICAST_DOWNSTREAM_NUM		(11)
+
+#define WAN_ITF_HAS_FLOW_ACNT_NUM		(8)/*one itf need one*/
+
+#define FE_TRFC_SVID	(1 << 0)
+#define FE_TRFC_SPBIT	(1 << 1)
+#define FE_TRFC_CVID	(1 << 2)
+#define FE_TRFC_CPBIT	(1 << 3)
+#define FE_TRFC_TOS		(1 << 4)
+#define FE_TRFC_TC		(1 << 5)
+#define FE_TRFC_ETYPE	(1 << 6)
+#define FE_TRFC_DPORT	(1 << 7)
+#define FE_TRFC_SPORT	(1 << 8)
+#define FE_TRFC_DIPV6	(1 << 9)
+#define FE_TRFC_SIPV6	(1 << 10)
+#define FE_TRFC_DIPV4	(1 << 11)
+#define FE_TRFC_SIPV4	(1 << 12)
+#define FE_TRFC_DMAC	(1 << 13)
+#define FE_TRFC_SMAC	(1 << 14)
+
+#define FE_TRFC_CVLAN	(FE_TRFC_CPBIT|FE_TRFC_CVID)
+#define FE_TRFC_SVLAN	(FE_TRFC_SPBIT|FE_TRFC_SVID)
+#define FE_TRFC_VLAN	(FE_TRFC_CVLAN|FE_TRFC_SVLAN)
+
+#define FE_MC_VLAN_TABLE_MAX     (64)
+#define FE_MC_VLAN_PORT_MAX    	 (16)
+
+/************************************************************************
+*                  D A T A	 T Y P E S
+*************************************************************************
+*/
+typedef unsigned char unchar;
+
+typedef enum {
+	ECNT_FE_API,
+}FE_Api_SubType_t;
+
+typedef enum {
+	FE_GDM_SEL_GDMA1 = 0 ,
+	FE_GDM_SEL_GDMA2,
+	FE_GDM_SEL_GDMA3,
+	FE_GDM_SEL_GDMA4
+} FE_Gdma_Sel_t;
+
+typedef enum {
+	FE_OFF = 0 ,
+	FE_ON = 1
+} FE_Status_Sel_t;
+
+typedef enum {
+	FE_MAC_SET_LAN = 0 ,
+	FE_MAC_SET_WAN
+} FE_MacSet_Sel_t;
+
+typedef enum {
+	FE_MAC_GPON = 0 ,
+	FE_MAC_EPON
+} FE_PonMode_Sel_t;
+
+typedef enum {
+#if defined(TCSUPPORT_CPU_EN7580)
+	FE_WANPORT_PSE_P2 = 2 ,
+	FE_WANPORT_GSW_P0 = 0x10,
+	FE_WANPORT_GSW_P1,
+	FE_WANPORT_GSW_P2,
+	FE_WANPORT_GSW_P3,
+	FE_WANPORT_GSW_P4,
+	FE_WANPORT_GSW_P5
+#else
+	FE_WANPORT_PSE_P2 = 2 ,
+	FE_WANPORT_GSW_P0 = 8,
+	FE_WANPORT_GSW_P1,
+	FE_WANPORT_GSW_P2,
+	FE_WANPORT_GSW_P3,
+	FE_WANPORT_GSW_P4,
+	FE_WANPORT_GSW_P5
+#endif
+} FE_WanPort_Sel_t;
+
+typedef enum {
+	FE_CDM_SEL_CDMA1 = 0 ,
+	FE_CDM_SEL_CDMA2
+} FE_Cdma_Sel_t;
+
+typedef enum {
+	FE_RED_DROP_Q0 = 0 ,
+	FE_RED_DROP_Q1L,
+	FE_RED_DROP_Q1H
+} FE_RedDropQ_Sel_t;
+
+typedef enum {
+	FE_RATE_OR_FULL_DROP = 0 ,
+	FE_RATE_OR_THRL_DROP,
+	FE_RATE_AND_FULL_DROP,
+	FE_RATE_AND_THRL_DROP
+} FE_RedDropMode_Sel_t;
+
+typedef enum {
+	FE_GDM_SEL_TX = 0 ,
+	FE_GDM_SEL_RX 
+} FE_TXRX_Sel_t;
+
+typedef enum {
+	FE_DISABLE = 0 ,
+	FE_ENABLE 
+} FE_Enable_t;	
+
+typedef enum {
+	FE_NOT_PPPOE = 0 ,
+	FE_IS_PPPOE 
+} FE_PPPOE_t;	
+
+typedef enum {
+	ETH_TYPE = 0 ,
+	PPPOE_TYPE,
+	IP_TYPE,
+	TCP_TYPE,
+	UDP_TYPE,
+} FE_Patn_type;	
+
+typedef enum {
+	FE_KEY0 = 0 ,
+	FE_KEY1 
+} FE_L2U_KEY_t;	
+
+ typedef enum {
+	 FE_LINKUP = 0,
+	 FE_LINKDOWN
+ } FE_Linkup_t;
+
+typedef enum {
+	FE_PCP_MODE_DISABLE = 0,
+	FE_PCP_MODE_8B0D = 1,
+	FE_PCP_MODE_7B1D = 2, 
+	FE_PCP_MODE_6B2D = 4,
+	FE_PCP_MODE_5B3D = 8
+} FE_PcpMode_t;
+
+typedef enum {
+	FE_DP_QDMA1_CPU = 0,
+	FE_DP_GDM1,
+	FE_DP_GDM2,
+	FE_DP_QDMA1_HWF,
+	FE_DP_GDMA3_HWF = 3,
+	FE_DP_PPE,
+	FE_DP_QDMA2_CPU,
+	FE_DP_QDMA2_HWF,
+	FE_DP_DISCARD
+} FE_Frame_dp_t;
+
+typedef enum {
+	FE_TYPE_OC = 0,
+	FE_TYPE_MC,
+	FE_TYPE_BC,
+	FE_TYPE_UC,
+} FE_Frame_type_t ;
+
+typedef enum {
+	FE_ERR_CRC = 0,
+	FE_ERR_LONG,
+	FE_ERR_RUNT,
+} FE_Err_type_t ;
+
+typedef enum{
+	FE_ADD_TLS_PORT=0,
+	FE_DEL_TLS_PORT,
+	FE_SET_TLS_VLAN,
+	FE_UNSET_TLS_VLAN,
+	FE_ADD_GROUP_TLS_ENTRY,
+	FE_DEL_GROUP_TLS_ENTRY,
+	FE_SHOW_GROUP_TLS_ENTRY,
+}FE_Tls_cmd_t;
+
+typedef enum{
+	FE_ADD_TLS_ENTRY=0,
+	FE_DEL_TLS_ENTRY,
+	FE_SHOW_TLS_ENTRY,	
+}FE_Tls_Trunk_Mode_Cmd_t;
+
+typedef enum{
+	FE_TLS_FORWARD_UPSTREAM=0,
+	FE_TLS_FORWARD_DOWNSTREAM,
+}FE_Tls_forward_direction_t;
+
+typedef struct
+{
+	unsigned char uni_port_id;/*0~3*/
+	unsigned short uni_vlan;/*2~4094,4095 means not care*/
+	unsigned short gem_port;/*gemport id*/
+	unsigned short ani_vlan;/*2~4094,4095 means not care*/
+}FE_Tls_info_t;
+
+typedef enum{
+	FE_SCU_RESET = 0,
+	FE_CORE_RESET,
+}FE_Reset_mode_t;
+
+enum BindDir {
+	UPSTREAM_ONLY = 0,	/* only speed up upstream flow */
+	DOWNSTREAM_ONLY = 1,	/* only speed up downstream flow */
+	BIDIRECTION = 2		/* speed up bi-direction flow */
+};
+
+typedef enum{
+	FIX_MODE = 0,
+	RANDOM_MODE,
+}FE_Random_mode_t;
+
+typedef enum{
+    METER_BYTE_MODE = 0,
+    METER_PACKET_MODE,
+}FE_Packet_Mode_t;
+
+typedef enum{
+    FAST_TICK = 0,
+    SLOW_TICK,
+}FE_TickSel_t;
+
+
+typedef enum{
+    DOWN_STREAM = 0,
+    UP_STREAM,
+}FE_Dir_t;
+
+typedef enum{
+    CAR_QOS_MODE = 0,/*CT and cmcc */
+    IP_BIND_MODE,
+    IF_BIND_MODE,
+    OLT_CTL_MODE,
+    TRAFFIC_QOS_MODE,/*used for 8 queue traffic qos */
+    DEV_MAC_MODE,
+    FORCEBW_WRR_MODE,
+    WAN_MODE,
+    NULL_BIND_MODE,
+}FE_Meter_Mode_t;
+
+typedef enum{
+	TRAFFIC_FLOW_MODE = 0, /*dafault set , traffic mode, could be exend  if need */
+	DEV_MODE,
+	WAN_ITF_MODE,
+	MULTICAST_MODE,
+	WAN_ITF_AND_TRAFFIC_FLOW_MODE,
+	DEFAULT_NULL_MODE,
+}FE_ACNT_Mode_t;
+
+
+struct  Fe_Ratelimit_IP_Info   
+{
+    unsigned char index ;			/*rue index*/
+    unsigned char enable ;			/*this rule if active?*/
+    unsigned int rate ;
+
+    unsigned char ip_version; 		/*0: IPv4 , 1: IPv6*/
+
+    unsigned char v4_pair_l[4] ; 	/*IPv4 range*/
+    unsigned char v4_pair_h[4] ;
+
+    unsigned char v6_pair_l[16] ;	/*IPv6 range*/
+    unsigned char v6_pair_h[16] ;
+};
+
+struct  Fe_Ratelimit_Itf_Info
+{
+    unsigned char index ;			/*rule index*/
+    unsigned char enable ;			/*this rule if active?*/
+    unsigned int rate ;
+};
+
+
+typedef struct
+{
+    struct sk_buff *skb;
+    uint               rate;/*ratelimit value.*/
+    FE_Enable_t        enable;
+    FE_Packet_Mode_t   pkt_mode;
+    FE_TickSel_t       tick_sel;
+    unchar             idx;/*idx of mapping array*/
+    FE_Dir_t           dir;
+    FE_Meter_Mode_t    mode;
+    FE_ACNT_Mode_t	   acnt_mode;
+    uint               bucket_size;  
+    unchar             meter_id;
+    unchar             acnt2_id;
+    unchar             acnt1_id;
+    unchar             acnt0_id;
+    uint               byteCnt_L;
+    uint               byteCnt_H;
+    uint               pktCnt;
+	uint               pktCnt_H;
+    unchar 			   mac[6];
+    char               itf_name[16];
+    struct  Fe_Ratelimit_IP_Info ip_info;
+    struct  Fe_Ratelimit_Itf_Info if_info;
+}Meter_cfg_t;
+
+typedef enum{
+	ADD_MODE = 0,
+	SUBTRACT_MODE,
+}FE_Rate_minus_t;
+
+typedef enum {
+	FE_MC_VLAN_KEEP = 0 ,
+	FE_MC_VLAN_REPLACE,
+	FE_MC_VLAN_ADD,
+	FE_MC_VLAN_REMOVE
+} FE_McVlan_OP_t;
+
+typedef enum {
+	FE_MC_VPM_KEEP = 0 ,
+	FE_MC_VPM_8100,
+	FE_MC_VPM_88a8,
+	FE_MC_VPM_CSR
+} FE_McVlan_VPM_t;
+
+typedef enum {
+	XSI_PHY_LINK_DOWN,
+	XSI_PHY_LINK_UP,
+} XFI_LINK_STATUS_t ;
+
+typedef enum {
+	FE_MISC_CONFIG_GPON = 0 ,
+	FE_MISC_CONFIG_EPON,
+	FE_MISC_CONFIG_XGPON,
+	FE_MISC_CONFIG_XEPON,
+	FE_MISC_CONFIG_NONE
+} FE_MISC_CONFIG_t;
+
+typedef enum {
+	FE_SET_PACKET_LENGTH = 0,
+	FE_SET_CHANNEL_ENABLE,
+	FE_SET_MAC_ADDR,
+	FE_SET_HWFWD_CHANNEL,
+	FE_SET_CHANNEL_RETIRE,
+	FE_SET_CRC_STRIP,
+	FE_SET_PADDING,
+	FE_GET_EXT_TPID,
+	FE_SET_EXT_TPID,
+	FE_GET_FW_CFG,
+	FE_SET_FW_CFG,
+	FE_SET_DROP_UDP_CHKSUM_ERR_ENABLE,
+	FE_SET_DROP_TCP_CHKSUM_ERR_ENABLE,
+	FE_SET_DROP_IP_CHKSUM_ERR_ENABLE,
+	FE_SET_DROP_CRC_ERR_ENABLE,
+	FE_SET_DROP_RUNT_ENABLE,
+	FE_SET_DROP_LONG_ENABLE,
+	FE_SET_VLAN_CHECK,
+	FE_GET_OK_CNT,
+	FE_GET_RX_CRC_ERR_CNT,
+	FE_GET_RX_DROP_FIFO_CNT,
+	FE_GET_RX_DROP_ERR_CNT,
+	FE_GET_OK_BYTE_CNT,
+	FE_GET_TX_GET_CNT,
+	FE_GET_TX_DROP_CNT,
+	FE_GET_TIEM_STAMP,
+	FE_SET_TIEM_STAMP,
+	FE_SET_INS_VLAN_TPID,
+	FE_SET_VLAN_ENABLE,
+	FE_SET_BLACK_LIST,
+	FE_SET_ETHER_TYEP,
+	FE_SET_L2U_KEY,
+	FE_GET_AC_GROUP_PKT_CNT,
+	FE_GET_AC_GROUP_BYTE_CNT,
+	FE_CLR_AC_GROUP_PKT_CNT,
+	FE_CLR_AC_GROUP_BYTE_CNT,
+	FE_SET_METER_GROUP,
+	FE_GET_METER_GROUP,
+	FE_SET_GDM_PCP_CODING,
+	FE_SET_CDM_PCP_CODING,
+	FE_SET_VIP_ENABLE,
+	FE_GET_ETH_RX_CNT,
+	FE_GET_ETH_TX_CNT,
+	FE_GET_ETH_FRAME_CNT,
+	FE_GET_ETH_ERR_CNT,
+	FE_SET_CLEAR_MIB,
+	FE_SET_CDM_RX_RED_DROP,
+	FE_GET_CDM_RX_RED_DROP,
+	FE_SET_CHANNEL_RETIRE_ALL,
+	FE_SET_CHANNEL_RETIRE_ONE,	
+	FE_SET_TX_RATE,
+	FE_SET_RXUC_RATE,
+	FE_SET_RXBC_RATE,
+	FE_SET_RXMC_RATE,
+	FE_SET_RXOC_RATE,
+	FE_ADD_VIP_ETHER,
+	FE_ADD_VIP_PPP,
+	FE_ADD_VIP_IP,
+	FE_ADD_VIP_TCP,
+	FE_ADD_VIP_UDP,
+	FE_DEL_VIP_ETHER,
+	FE_DEL_VIP_PPP,
+	FE_DEL_VIP_IP,
+	FE_DEL_VIP_TCP,
+	FE_DEL_VIP_UDP,
+	FE_ADD_L2LU_VLAN_DSCP,
+	FE_ADD_L2LU_VLAN_TRFC,
+	FE_DEL_L2LU_VLAN_DSCP,
+	FE_DEL_L2LU_VLAN_TRFC,	
+	FE_ADD_TRAFFIC_CLASS,
+	FE_DEL_TRAFFIC_CLASS,
+	FE_SET_TX_FAVOR_OAM_ENABLE,
+	FE_SET_TLS_CFG,
+	FE_TLS_FORWARD,
+	FE_DO_RESET,
+	FE_SET_MAC_ADDR_7516,
+	FE_SET_WAN_PORT_7516,
+	FE_SET_LOOPBACK_ENABLE,
+	FE_SET_LOOPBACK_MODE,
+	FE_GET_UNKNOWN_MUL_PKT,
+#if 1
+    FE_SET_METER_RATELIMIT,
+    FE_GET_METER_RATELIMIT,
+    FE_GET_METER_IDX,
+    FE_GET_ACNT1_IDX,
+    FE_GET_ACNT0_IDX,
+    FE_INIT_RESOURCE_MANAGE,
+    FE_DEINIT_RESOURCE_MANAGE,
+    FE_SET_RX_RATELIMIT_RULE,
+    FE_SET_RX_RATELIMIT_MODE,
+    FE_SET_METER_CTL_BY_OLT,
+    FE_GET_FLOW_CNT,
+    FE_CLEAR_FLOW_CNT,
+    FE_GET_ACNT0_MODE,
+    FE_GET_ACNT1_MODE,
+    FE_SET_ACNT0_MODE,
+    FE_SET_ACNT1_MODE,
+    FE_GET_METER_ENABLE,
+    FE_GET_DEV_MAC_INDEX,
+    FE_SET_PSE_OQ_THR,
+    FE_GET_ACNT2_IDX,
+    FE_SET_ACNT2_MODE,
+    FE_GET_WAN_ITF_INDEX,
+#endif
+	FE_SET_GLO_RATE_BYTE,
+	FE_GET_PPPOE_INFO,
+	FE_SET_PPPOE_INFO_CLEAN,
+	FE_GET_TX_TRAFFIC,
+	FE_GET_RX_TRAFFIC,
+	FE_GET_TX_RATE,
+	FE_GET_RX_RATE,
+	FE_GET_TX_OCTETS,
+	FE_GET_RX_OCTETS,
+	FE_GET_RX_DISCARD_COUNTER,
+	FE_GET_TX_DISCARD_COUNTER,
+	FE_GET_RX_ERROR_COUNTER,
+	FE_GET_TX_ERROR_COUNTER,
+	FE_ADD_DEV_TO_TOTAL_ACCOUNT,
+	FE_ADD_STB_SRC_IP,
+	FE_DEL_STB_SRC_IP,
+	FE_SET_RATELIMIT_FOR_PKT_FORMATE,
+	FE_SET_MC_VLAN_GLOBAL,
+	FE_GET_MC_VLAN_GLOBAL,
+	FE_SET_MC_VLAN_TABLE_CFG,
+	FE_GET_MC_VLAN_TABLE_CFG,
+	FE_SET_MC_VLAN_ACTION_CFG,
+	FE_GET_MC_VLAN_ACTION_CFG,
+	FE_SET_MC_VLAN_CLEAR_ALL,
+	FE_SET_RX_MAC_FILTER,
+	FE_SET_RX_MAC_FILTER_RATE,
+	FE_XFI_PHY_LINK_CHANGE,
+	FE_SET_GDMA_MISC_CONFIG,
+	FE_GET_RX_RATELIMIT_MODE,
+	FE_GET_HSGMII_LAN_RX_CNT,
+	FE_GET_HSGMII_LAN_TX_CNT,
+	FE_SET_AEWAN_FWDFQ,
+	FE_SET_AEWAN_IFCDISABLE,
+	FE_SET_GMD2_SPTAG_FOR_LOOPBACK,
+	FE_SET_RX_RATE,
+	FE_FUNCTION_MAX_NUM,
+} FE_HookFunctionID_t ;
+
+typedef struct FE_TxCnt_s{
+	unsigned long long txFrameCnt;
+	unsigned long long txFrameLen;
+	unsigned long long txDropCnt;
+	unsigned long long txBroadcastCnt;
+	unsigned long long txMulticastCnt;
+	unsigned long long txLess64Cnt;
+	unsigned long long txMore1518Cnt;
+	unsigned long long txEq64Cnt;
+	unsigned long long txFrom65To127Cnt;
+	unsigned long long txFrom128To255Cnt;
+	unsigned long long txFrom256To511Cnt;
+	unsigned long long txFrom512To1023Cnt;
+	unsigned long long txFrom1024To1518Cnt;
+}FE_TxCnt_t;
+
+typedef struct FE_RxCnt_s{
+    unsigned long long rxFCDropCnt;
+    unsigned long long rxRCDropCnt;
+    unsigned long long rxOVDropCnt;
+    unsigned long long rxERRDropCnt;
+    unsigned long long rxOKPktCnt;
+    unsigned long long rxOKByteCnt;
+    unsigned long long rxOversizeCnt;
+    unsigned long long rxUnderSizeCnt;
+    unsigned long long rxFrameCnt;
+    unsigned long long rxFrameLen;
+    unsigned long long rxDropCnt;
+    unsigned long long rxBroadcastCnt;
+    unsigned long long rxMulticastCnt;
+    unsigned long long rxCrcCnt;
+    unsigned long long rxFragFameCnt;
+    unsigned long long rxJabberFameCnt;
+    unsigned long long rxLess64Cnt;
+    unsigned long long rxMore1518Cnt;
+    unsigned long long rxEq64Cnt;
+    unsigned long long rxFrom65To127Cnt;
+    unsigned long long rxFrom128To255Cnt;
+    unsigned long long rxFrom256To511Cnt;
+    unsigned long long rxFrom512To1023Cnt;
+    unsigned long long rxFrom1024To1518Cnt;
+}FE_RxCnt_t;
+
+typedef struct
+{
+	unchar valid;
+	int timeout;
+	unsigned char mac[6];
+	int wan_itf;
+}WanItfAndDevBandwidth_t;
+
+typedef struct
+{
+	unchar valid;
+	int timeout;
+	int wan_itf;
+}WanItf_t;
+
+typedef struct
+{
+	unchar valid;
+	int timeout;
+	int wan_itf;
+	int group_ip_type;  /* 0 means ipv4, 1 means ipv6 */
+	union {
+		unsigned int ip4;
+		struct in6_addr ip6;
+	} group_ip;
+}Multicast_t;
+
+#ifdef __KERNEL__
+typedef struct {
+    unsigned char mac[6];
+    unsigned int upstream_byte_lo;
+    unsigned int upstream_byte_hi;
+    unsigned int upstream_packet;
+    unsigned int downstream_byte_lo;
+    unsigned int downstream_byte_hi;
+    unsigned int downstream_packet;
+    struct list_head account_node;
+}dev_bandwidth_account_t;
+#endif
+
+typedef struct FE_TrfcCfg_s
+{
+	unsigned char smac[6];
+	unsigned char dmac[6];
+	unsigned int sip;
+	unsigned int dip;
+	unsigned short sipv6[8];
+	unsigned short dipv6[8];
+	unsigned short sport;
+	unsigned short dport;
+	unsigned short eth_type;
+	unsigned char tc_min;
+	unsigned char tc_max;
+	unsigned char tos_min;
+	unsigned char tos_max;
+	unsigned char cpbit_min;
+	unsigned char cpbit_max;
+	unsigned short cvid_min;
+	unsigned short cvid_max;
+	unsigned char spbit_min;
+	unsigned char spbit_max;
+	unsigned short svid_min;
+	unsigned short svid_max;
+	/* each bit means if need to care the key above or not */
+	unsigned int mask; 
+	unsigned char field_num;
+}FE_TrfcCfg_t;
+
+typedef struct FE_PppoeInfo_s
+{
+	int valid;
+	char ifname[16];
+	unsigned char smac_add[6];
+	unsigned char dmac_add[6];
+	unsigned int sessionID;
+	unsigned int src_ip;
+	unsigned int dst_ip;
+	int dns_valid;
+	unsigned int pri_dns;
+	unsigned int snd_dns;
+}FE_PppoeInfo_t;
+
+typedef struct FE_McVlanTableCfg_s
+{
+	unsigned char   mc_table_id;
+
+	FE_Enable_t     enable;
+	unsigned short  ppe_entry_id;
+}FE_McVlanTableCfg_t;
+
+typedef struct FE_McVlanActionCfg_s
+{
+	unsigned char   mc_table_id;
+	unsigned char   mc_chnl_id;
+
+	FE_McVlan_OP_t  mc_vlan_op;
+	FE_McVlan_VPM_t mc_vlan_vpm;
+	unsigned short  mc_vlan;
+}FE_McVlanActionCfg_t;
+
+typedef struct FE_RxMacFilter_s
+{
+	unsigned char cmd_id;
+	unsigned char gdm_sel;
+	unsigned char pkt_type;
+	unsigned char mac_sel;
+	unsigned char action;
+	unsigned char list_type;
+	unsigned char mac[6];
+}FE_RxMacFilter_t;
+
+struct ecnt_fe_data {
+	FE_HookFunctionID_t function_id;
+	FE_Gdma_Sel_t gdm_sel;
+	FE_MacSet_Sel_t macSet_sel;
+    FE_Cdma_Sel_t cdm_sel;
+    FE_RedDropQ_Sel_t dropQ_sel;
+    FE_RedDropMode_Sel_t dropMode_sel;
+	FE_TXRX_Sel_t txrx_sel;
+	FE_Err_type_t err_type;
+	uint 	channel;
+	uint 	index;
+	uint 	reg_val;
+	uint 	cnt;
+	uint 	cnt_hi;
+    uint 	timeStamp;
+	union {
+		FE_Enable_t enable;
+		FE_Linkup_t link_mode;
+		FE_PcpMode_t coding_mode;
+		uint meter_rate;
+		uint unknown_mul_pkt;
+		FE_Reset_mode_t reset_mode;
+		FE_PonMode_Sel_t pon_mode;
+		struct {
+			uint byteCnt_L;
+			uint byteCnt_H;
+		}byteCnt;
+		struct {
+			uint length_long;
+			uint length_short;
+		} pkt_len;
+		struct {
+			unchar *mac;
+			ushort mask;
+		} mac_addr;
+		struct {
+			uint mac_h;
+			uint mac_lmin;
+			uint mac_lmax;
+		} mac_addr_7516;
+		struct {
+			FE_Enable_t wan1_en;
+			FE_WanPort_Sel_t wan1_port;
+			FE_WanPort_Sel_t wan0_port;
+		} wan_port_7516;
+		struct {
+			FE_Frame_type_t dp_sel;
+			FE_Frame_dp_t dp_val;
+		} fw_cfg;
+		struct {
+			FE_Enable_t enable;
+			FE_PPPOE_t is_pppoe;
+			uint value;
+		} eth_cfg;
+		struct {
+			FE_L2U_KEY_t key_sel;
+			uint key0;
+			uint key1;
+		} l2u_key;
+		struct {
+			FE_Enable_t enable;
+			FE_Patn_type patten_type;
+			uint patten;
+		} vip_cfg;
+		struct {
+			uint rate;
+			uint mode;
+			uint maxBkSize;
+			uint tick;
+		}rate_cfg;
+		struct {
+			ushort type;
+			ushort src;
+			ushort dst;
+			unchar mode;
+		}vip;
+		struct {
+			unchar mask;
+			unchar dscp;
+			ushort svlan;
+			ushort cvlan;
+		}l2lu;
+		struct{
+			unchar cmd;
+			unchar tls_port;
+			ushort tls_vlan;			
+			FE_Tls_info_t tls_info;
+		}tls_cfg;
+		FE_RxCnt_t FE_RxCnt;
+		FE_TxCnt_t FE_TxCnt;
+		struct{
+			void* skb;
+			FE_Tls_forward_direction_t dir;
+		}tls_forward;
+		struct{
+			FE_Random_mode_t channel_mode;
+			FE_Random_mode_t length_mode;
+			FE_Random_mode_t gap_mode;
+		}lpbp_mode;
+        Meter_cfg_t meter_cfg;
+		FE_TrfcCfg_t fe_trfc_cfg;
+		struct{
+			FE_Rate_minus_t rate_minus;
+			unchar rate_byte;
+		}glo_rate_byte;
+		FE_PppoeInfo_t pppoe_info;
+		struct{
+			int lan_port;
+			union {
+				uint rate;
+				uint frameByteCnt;
+			};
+		} fe_cnt_str;
+		struct {
+			unsigned char mac[6];
+		}dev_cfg;
+		struct {
+			int ip_type;  /* 0 means ipv4, 1 means ipv6 */
+			union {
+				unsigned int ip4;
+				struct in6_addr ip6;
+			};
+		}stb_ip_cfg;
+		struct{
+			unsigned char pkt_formate;
+			unsigned char mode;
+		}pkt_ratelimit;
+		FE_McVlanTableCfg_t fe_mcvlan_table_cfg;
+		FE_McVlanActionCfg_t fe_mcvlan_action_cfg;
+		FE_RxMacFilter_t macfilter_cfg;
+		XFI_LINK_STATUS_t status;
+		FE_MISC_CONFIG_t fe_misc_cfg;
+	} api_data;
+	int retValue;
+};
+
+	
+/************************************************************************
+*                  D A T A   D E C L A R A T I O N S
+*************************************************************************
+*/
+
+/************************************************************************
+*                  F U N C T I O N    D E C L A R A T I O N S
+#                  I N L I N E    F U N C T I O N   D E F I N I T I O N S
+*************************************************************************
+*/
+
+#endif /* _ECNT_HOOK_QDMA_TYPE_H_ */
+