[Feature] add GA346 baseline version

Change-Id: Ic62933698569507dcf98240cdf5d9931ae34348f
diff --git a/src/extended/hw_nat/hwnat_api.c b/src/extended/hw_nat/hwnat_api.c
new file mode 100644
index 0000000..1ce5b24
--- /dev/null
+++ b/src/extended/hw_nat/hwnat_api.c
@@ -0,0 +1,764 @@
+#include <stdlib.h>             
+#include <stdio.h>             
+#include <string.h>           
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <getopt.h>
+#ifndef CONFIG_SUPPORT_OPENWRT
+#include <linux/autoconf.h>
+#endif
+#if defined CONFIG_COLGIN_SUPPORT
+#include "hnat_ioctl.h"
+#else
+#include "hwnat_ioctl.h"
+#endif
+
+int HwNatInvalEntry(unsigned int entry_num)
+{
+    struct hwnat_args opt;
+    int fd;
+
+    opt.entry_num=entry_num;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_INVALID_ENTRY, &opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+
+int HwNatDumpDport(void)
+{
+    int fd;
+    struct hwnat_args opt;
+  
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+    if(ioctl(fd, HW_NAT_DPORT, &opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+#if defined (CONFIG_HW_NAT_IPI)
+int HwNatIPICtrlFromExtIf(struct hwnat_ipi_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_IPI_CTRL_FROM_EXTIF, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+
+int HwNatIPICtrlFromPPEHit(struct hwnat_ipi_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_IPI_CTRL_FROM_PPEHIT, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+#endif
+
+int HwNatDelEntry(struct hwnat_tuple *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+    if(ioctl(fd, HW_NAT_DEL_ENTRY, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+
+}
+
+int HwNatAddEntry(struct hwnat_tuple *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_ADD_ENTRY, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+
+}
+
+int HwNatHookModify(struct hwnat_tuple *opt, int clear)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+    if(ioctl(fd, (clear == 1) ? HW_NAT_CLEAR_HOOK : HW_NAT_RESTORE_HOOK, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+
+}
+
+
+
+#if defined (CONFIG_PPE_MIB)
+int HwNatMibDumpEntry(unsigned int entry_num)
+{
+    struct hwnat_mib_args opt;
+    int fd;
+    opt.entry_num=entry_num;
+    printf("!!!!!!!!HwNatMibDumpEntry\n");
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_MIB_DUMP, &opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+int HwNatMibDramDumpEntry(unsigned int entry_num)
+{
+    struct hwnat_mib_args opt;
+    int fd;
+
+    opt.entry_num=entry_num;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_MIB_DRAM_DUMP, &opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+
+int HwNatMibGet(struct hwnat_tuple *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_MIB_GET, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+
+}
+#if defined CONFIG_COLGIN_SUPPORT
+int HwNatMibGetAllIP(struct hwnat_mib_all_ip_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+        printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+        return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_MIB_GET_ALL_IP, opt)<0) {
+        printf("HW_NAT_API: ioctl error\n");
+        close(fd);
+        return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+#endif
+#endif
+
+int HwNatTblClear(void)
+{
+    struct hwnat_args opt;
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_TBL_CLEAR, &opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+
+int HwNatDumpEntry(unsigned int entry_num)
+{
+    struct hwnat_args opt;
+    int fd;
+
+    opt.entry_num=entry_num;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_DUMP_ENTRY, &opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+
+int HwNatBindEntry(unsigned int entry_num)
+{
+    struct hwnat_args opt;
+    int fd;
+
+    opt.entry_num=entry_num;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_BIND_ENTRY, &opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+
+int HwNatUnBindEntry(unsigned int entry_num)
+{
+    struct hwnat_args opt;
+    int fd;
+
+    opt.entry_num=entry_num;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_UNBIND_ENTRY, &opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return  HWNAT_FAIL;
+    }
+
+    close(fd);
+    return  HWNAT_SUCCESS;
+}
+
+int HwNatDropEntry(unsigned int entry_num)
+{
+    struct hwnat_args opt;
+    int fd;
+
+    opt.entry_num=entry_num;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_DROP_ENTRY, &opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return  HWNAT_FAIL;
+    }
+
+    close(fd);
+    return  HWNAT_SUCCESS;
+}
+
+
+
+int HwNatInvalidEntry(unsigned int entry_num)
+{
+    struct hwnat_args opt;
+    int fd;
+
+    opt.entry_num=entry_num;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_INVALID_ENTRY, &opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+
+int HwNatCacheDumpEntry(void)
+{
+
+    struct hwnat_args opt;
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+    if(ioctl(fd, HW_NAT_DUMP_CACHE_ENTRY, &opt)<0) {
+
+
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+
+int HwNatGetAGCnt(struct hwnat_ac_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_GET_AC_CNT, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+
+}
+
+int HwNatSetBindThreshold(struct hwnat_config_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_BIND_THRESHOLD, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+
+}
+
+int HwNatSetMaxEntryRateLimit(struct hwnat_config_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_MAX_ENTRY_LMT, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+
+}
+
+
+int HwNatSetRuleSize(struct hwnat_config_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_RULE_SIZE, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+
+}
+
+int HwNatSetKaInterval(struct hwnat_config_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_KA_INTERVAL, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+
+}
+
+int HwNatSetUnbindLifeTime(struct hwnat_config_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_UB_LIFETIME, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+
+}
+
+int HwNatSetBindLifeTime(struct hwnat_config_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_BIND_LIFETIME, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+
+}
+
+int HwNatSetVID(struct hwnat_config_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_VLAN_ID, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+
+int HwNatSetBindDir(struct hwnat_config_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_BIND_DIRECTION, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+
+int HwNatGetAllEntries(struct hwnat_args *opt)
+{
+    int fd=0;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_GET_ALL_ENTRIES, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    
+
+    return HWNAT_SUCCESS;
+
+}
+
+int HwNatDebug(unsigned int debug)
+{
+    struct hwnat_args opt;
+    int fd;
+
+    opt.debug=debug;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_DEBUG, &opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+
+#if defined (CONFIG_RALINK_MT7620) || defined (CONFIG_RALINK_MT7621)
+int HwNatSwitchDsliteMape(unsigned int swit)
+{
+	struct hwnat_args opt;
+    int fd;
+
+    opt.swit=swit;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_SWITCH_DSL_MAPE, &opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+#endif
+
+#ifdef CONFIG_PPE_MCAST
+int HwNatMcastIns(struct hwnat_mcast_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_MCAST_INS, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+
+int HwNatMcastDel(struct hwnat_mcast_args *opt)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_MCAST_DEL, opt)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+
+int HwNatMcastDump(void)
+{
+    int fd;
+
+    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
+    if (fd < 0)
+    {
+	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
+	return HWNAT_FAIL;
+    }
+
+    if(ioctl(fd, HW_NAT_MCAST_DUMP, NULL)<0) {
+	printf("HW_NAT_API: ioctl error\n");
+	close(fd);
+	return HWNAT_FAIL;
+    }
+
+    close(fd);
+    return HWNAT_SUCCESS;
+}
+#endif