[rdkb][common][app][Refactor HQoS part to compatible with hnat]

[Description]
Refactor HQoS part to compatible with hnat

[Release-log]

Change-Id: I9656cfee6936dcc92614b554fa25b6a2d7f84e52
diff --git a/recipes-devtools/init-filogic/files/init-PPPQ.service b/recipes-devtools/init-filogic/files/init-PPPQ.service
index d382594..3d163fd 100644
--- a/recipes-devtools/init-filogic/files/init-PPPQ.service
+++ b/recipes-devtools/init-filogic/files/init-PPPQ.service
@@ -1,11 +1,11 @@
 [Unit]

 Description=Init PPPQ 

 DefaultDependencies=no

-after=CcspPandMSsp.service

+After=CcspPandMSsp.service

 

 [Service]

 Type=oneshot

-ExecStart=/bin/bash -c "/bin/echo 2 > /sys/kernel/debug/mtk_ppe/qos_toggle"

+ExecStart=/bin/sh /usr/sbin/init-PPPQ.sh

 RemainAfterExit=yes

 

 [Install]

diff --git a/recipes-devtools/init-filogic/files/init-PPPQ.sh b/recipes-devtools/init-filogic/files/init-PPPQ.sh
new file mode 100644
index 0000000..8eed897
--- /dev/null
+++ b/recipes-devtools/init-filogic/files/init-PPPQ.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+
+module=hnat
+if [ -d /sys/kernel/debug/${module} ] 
+then
+echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
+echo 0 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
+else
+module=mtk_ppe
+fi
+
+echo 2 > /sys/kernel/debug/${module}/qos_toggle
\ No newline at end of file
diff --git a/recipes-devtools/init-filogic/init-filogic.bb b/recipes-devtools/init-filogic/init-filogic.bb
index 3a227c0..37e7bb6 100644
--- a/recipes-devtools/init-filogic/init-filogic.bb
+++ b/recipes-devtools/init-filogic/init-filogic.bb
@@ -32,6 +32,7 @@
     install -m 0755 ${WORKDIR}/pppoe_config.sh ${D}${sbindir}
     install -m 0755 ${WORKDIR}/pptp_config.sh ${D}${sbindir}
     install -m 0755 ${WORKDIR}/staticIP_config.sh ${D}${sbindir}
+    install -m 0755 ${WORKDIR}/init-PPPQ.sh ${D}${sbindir}
     install -d ${D}${systemd_unitdir}/system/
     install -m 0644 ${S}/init-IPv6.service ${D}${systemd_unitdir}/system
     install -m 0644 ${S}/init-Lanbridge.service ${D}${systemd_unitdir}/system
diff --git a/recipes-devtools/mtkhnat-util/files/src/mtkhnat.c b/recipes-devtools/mtkhnat-util/files/src/mtkhnat.c
index 798b97b..928f208 100644
--- a/recipes-devtools/mtkhnat-util/files/src/mtkhnat.c
+++ b/recipes-devtools/mtkhnat-util/files/src/mtkhnat.c
@@ -5,17 +5,23 @@
 #include <uci.h>
 #include "mtkhnat.h"
 
-void get_qos_toggle (global_param *global)
+void get_qos_toggle (global_param *global, char *module)
 {
     char buf[64] = {0};
+    char filename [64] = {0};
     FILE *fp = NULL;
     int toggle = 0; 
-    fp = fopen("/sys/kernel/debug/mtk_ppe/qos_toggle", "r");
+
+    snprintf(filename, sizeof(filename), "/sys/kernel/debug/%s/qos_toggle", module);
+    fp = fopen(filename, "r");
+
     if(fp != NULL)
     {
         fgets(buf,sizeof(buf),fp);    
         fclose(fp);
-        sscanf(buf, "value=%d,", &toggle);
+        if(strcmp(module,"hnat")){
+            sscanf(buf, "value=%d,", &toggle);
+        }
         global->qos_toggle = toggle;
         fprintf(stderr, "%s:  qos_toggle = %d \n", __func__, global->qos_toggle);
     }else{
@@ -24,11 +30,25 @@
 
     return; 
 }
-void set_global_param(global_param global)
+void set_global_param(global_param global, char *module)
 {
     char cmd[128] = {0};
     int i = 0 ;
+    FILE *fp = NULL;
+    char buf[64] = {0};
+    bool IS_NETSYS_V2 = false;
+
+    fp = fopen("/proc/device-tree/model", "r");
+
+    if(fp != NULL)
+    {
+        fgets(buf,sizeof(buf),fp);    
+        fclose(fp);
+        if((strstr(buf,"7986") != NULL) || (strstr(buf,"7981") != NULL) ) 
+             IS_NETSYS_V2 = true;   
+    }
 
+    fprintf(stderr, "%s:  IS_NETSYS_V2 = %d   \n", __func__, IS_NETSYS_V2);
     fprintf(stderr, "%s:  start config global param   \n", __func__);
     fprintf(stderr, "%s:  enable %d  hqos %d sch0bw %d sch1bw %d schedule %s txq_num %d \n", __func__,global.enable, global.hqos, global.sch0_bw,global.sch1_bw, global.scheduling,global.txq_num);
     snprintf(cmd, sizeof(cmd), "echo 0 > /proc/sys/net/bridge/bridge-nf-call-arptables");
@@ -41,50 +61,60 @@
     system(cmd);
 
     if(!global.enable){
-        snprintf(cmd, sizeof(cmd), "echo 0 %s %d > /sys/kernel/debug/mtk_ppe/qdma_sch0", global.scheduling, global.sch0_bw);
+        snprintf(cmd, sizeof(cmd), "echo 0 %s %d > /sys/kernel/debug/%s/qdma_sch0", global.scheduling, global.sch0_bw, module);
         system(cmd);
-        snprintf(cmd, sizeof(cmd), "echo 0 %s %d > /sys/kernel/debug/mtk_ppe/qdma_sch1", global.scheduling, global.sch1_bw);
+        snprintf(cmd, sizeof(cmd), "echo 0 %s %d > /sys/kernel/debug/%s/qdma_sch1", global.scheduling, global.sch1_bw, module);
         system(cmd);
-        snprintf(cmd, sizeof(cmd), "echo 0 0 0 0 0 0 4 > /sys/kernel/debug/mtk_ppe/qdma_txq0");
+        snprintf(cmd, sizeof(cmd), "echo 0 0 0 0 0 0 4 > /sys/kernel/debug/%s/qdma_txq0", module);
         system(cmd);
 
         for (i=1; i < global.txq_num; i++ ){
-            snprintf(cmd, sizeof(cmd), "echo 0 0 0 0 0 0 0 > /sys/kernel/debug/mtk_ppe/qdma_txq%d", i);
+            snprintf(cmd, sizeof(cmd), "echo 0 0 0 0 0 0 0 > /sys/kernel/debug/%s/qdma_txq%d",module, i);
             system(cmd);  
         }
-        snprintf(cmd, sizeof(cmd), "echo %d > /sys/kernel/debug/mtk_ppe/qos_toggle", global.qos_toggle);
-        system(cmd);
+        if(strstr(module, "hnat") == NULL) {
+            snprintf(cmd, sizeof(cmd), "echo %d > /sys/kernel/debug/%s/qos_toggle", global.qos_toggle, module);
+            system(cmd);
+        }
         return;
     }
 
     if(!global.hqos){
-        snprintf(cmd, sizeof(cmd), "echo 0 %s %d > /sys/kernel/debug/mtk_ppe/qdma_sch0", global.scheduling, global.sch0_bw);
+        snprintf(cmd, sizeof(cmd), "echo 0 %s %d > /sys/kernel/debug/%s/qdma_sch0", global.scheduling, global.sch0_bw, module);
         system(cmd);
-        snprintf(cmd, sizeof(cmd), "echo 0 %s %d > /sys/kernel/debug/mtk_ppe/qdma_sch1", global.scheduling, global.sch1_bw);
+        snprintf(cmd, sizeof(cmd), "echo 0 %s %d > /sys/kernel/debug/%s/qdma_sch1", global.scheduling, global.sch1_bw, module);
         system(cmd);
 
         for (i=0; i < global.txq_num; i++ ){
 
-            if(i <= ((global.txq_num/2) - 1))
-                snprintf(cmd, sizeof(cmd), "echo 0 0 0 0 0 0 4 > /sys/kernel/debug/mtk_ppe/qdma_txq%d", i);
+            if((i <= ((global.txq_num/2) - 1)) || (!IS_NETSYS_V2))
+                snprintf(cmd, sizeof(cmd), "echo 0 0 0 0 0 0 4 > /sys/kernel/debug/%s/qdma_txq%d", module, i);
             else
-                snprintf(cmd, sizeof(cmd), "echo 1 0 0 0 0 0 4 > /sys/kernel/debug/mtk_ppe/qdma_txq%d", i);
+                snprintf(cmd, sizeof(cmd), "echo 1 0 0 0 0 0 4 > /sys/kernel/debug/%s/qdma_txq%d", module, i);
 
             system(cmd);
         }
-        snprintf(cmd, sizeof(cmd), "echo %d > /sys/kernel/debug/mtk_ppe/qos_toggle", global.qos_toggle);
-        system(cmd);
+        if(strstr(module, "hnat") == NULL) {
+            snprintf(cmd, sizeof(cmd), "echo %d > /sys/kernel/debug/%s/qos_toggle", global.qos_toggle, module);
+            system(cmd);
+        }
         return;
     }
 
-    snprintf(cmd, sizeof(cmd), "echo 1 %s %d > /sys/kernel/debug/mtk_ppe/qdma_sch0", global.scheduling, global.sch0_bw);
+    snprintf(cmd, sizeof(cmd), "echo 1 %s %d > /sys/kernel/debug/%s/qdma_sch0", global.scheduling, global.sch0_bw, module);
     system(cmd);
-    snprintf(cmd, sizeof(cmd), "echo 1 %s %d > /sys/kernel/debug/mtk_ppe/qdma_sch1", global.scheduling, global.sch1_bw);
+    snprintf(cmd, sizeof(cmd), "echo 1 %s %d > /sys/kernel/debug/%s/qdma_sch1", global.scheduling, global.sch1_bw, module);
+    system(cmd);
+
+
+    snprintf(cmd, sizeof(cmd), "echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables");
     system(cmd);
+    snprintf(cmd, sizeof(cmd), "echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables");
+    system(cmd);     
 
     return;
 }
-void set_queue_param(queue_param queue, global_param global)
+void set_queue_param(queue_param queue, global_param global, char *module)
 {
     char cmd[128] = {0};
     int queue_minebl = 1;
@@ -114,9 +144,9 @@
     sch1_maxrate = (global.sch1_bw * queue.maxrate)/100;
 
     if(queue.id <= ((global.txq_num/2) - 1))
-        snprintf(cmd, sizeof(cmd), "echo 0 %d %d %d %d %d %d > /sys/kernel/debug/mtk_ppe/qdma_txq%d", queue_minebl, sch0_minrate, queue_maxebl, sch0_maxrate, queue.weight, queue.resv, queue.id);
+        snprintf(cmd, sizeof(cmd), "echo 0 %d %d %d %d %d %d > /sys/kernel/debug/%s/qdma_txq%d", queue_minebl, sch0_minrate, queue_maxebl, sch0_maxrate, queue.weight, queue.resv, module, queue.id);
     else
-        snprintf(cmd, sizeof(cmd), "echo 1 %d %d %d %d %d %d > /sys/kernel/debug/mtk_ppe/qdma_txq%d", queue_minebl, sch1_minrate, queue_maxebl, sch1_maxrate, queue.weight, queue.resv, queue.id);
+        snprintf(cmd, sizeof(cmd), "echo 1 %d %d %d %d %d %d > /sys/kernel/debug/%s/qdma_txq%d", queue_minebl, sch1_minrate, queue_maxebl, sch1_maxrate, queue.weight, queue.resv, module, queue.id);
 
     system(cmd);
 
@@ -126,10 +156,14 @@
     struct uci_context *uci_ctx = uci_alloc_context();
     struct uci_package *uci_pkg = NULL;
     struct uci_element *e;
-    // struct uci_section *s;
+
     const char cfg_name[] = "mtkhnat";
     bool parsing_global = false;
     global_param global = {0};
+    FILE *fp = NULL;
+    char module [8] = "hnat";
+    char filename [64] = {0};
+    char cmd[128] = {0};
 
     if (uci_load(uci_ctx, cfg_name, &uci_pkg) != UCI_OK) {
         uci_free_context(uci_ctx);
@@ -137,7 +171,21 @@
         return -1;
     }
 
-    get_qos_toggle (&global);
+    snprintf(filename, sizeof(filename), "/sys/kernel/debug/%s/qos_toggle", module);
+
+    fp = fopen(filename, "r");
+    if(fp != NULL)
+    {
+        fclose(fp);
+        snprintf(cmd, sizeof(cmd), "echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables");
+        system(cmd);
+        snprintf(cmd, sizeof(cmd), "echo 0 > /proc/sys/net/bridge/bridge-nf-call-ip6tables");
+        system(cmd);
+    }else{
+        strcpy(module,"mtk_ppe");
+    }
+    fprintf(stderr, "%s:  module = %s \n", __func__, module);
+    get_qos_toggle (&global, &module);
 
     uci_foreach_element(&uci_pkg->sections, e) {
 
@@ -189,11 +237,11 @@
             }
         }
         if (parsing_global == true){
-            set_global_param(global);
+            set_global_param(global, module);
             if(!global.enable || !global.hqos)
                 return 0;
         }else{
-            set_queue_param(queue, global);
+            set_queue_param(queue, global, module);
         }    
     }