Add "direct_path_tx" in /etc/fastworward.conf

Change-Id: I084045cc572b771e4afe57839d1bcad7df75d903
diff --git a/cmm/src/ffcontrol.c b/cmm/src/ffcontrol.c
index 4c38e14..b012bae 100644
--- a/cmm/src/ffcontrol.c
+++ b/cmm/src/ffcontrol.c
@@ -1107,6 +1107,13 @@
 
 						continue;
 					}
+					else if (strcasecmp(buf2, "direct_path_tx") == 0)
+					{
+						if (wifi_if)
+							wifi_if->direct_path_tx = atoi(buf3);
+
+						continue;
+					}
 
 					cmm_print(DEBUG_CRIT, "cmmFcParser: Error parsing configuration file.\nUnknown attribut name: %s\n", buf2);
 					ret = -1;
diff --git a/cmm/src/ffcontrol.h b/cmm/src/ffcontrol.h
index f6b4cbb..3e3d90e 100644
--- a/cmm/src/ffcontrol.h
+++ b/cmm/src/ffcontrol.h
@@ -103,6 +103,7 @@
 	unsigned short  used;
 	unsigned int    vapid;
 	unsigned int    direct_path_rx;
+	unsigned int    direct_path_tx;
 	struct interface *wifi_ff_if;
 };
 #endif
diff --git a/cmm/src/module_wifi.c b/cmm/src/module_wifi.c
index e957bd2..1984d84 100644
--- a/cmm/src/module_wifi.c
+++ b/cmm/src/module_wifi.c
@@ -126,7 +126,12 @@
         memcpy( cmd.macaddr, itf->macaddr, 6);
 	
 	cmd.vap_id = itf->wifi_if->vapid;	
-	cmd.direct_path_rx = itf->wifi_if->direct_path_rx;	
+        if (itf->wifi_if->direct_path_rx) {
+          cmd.cmd_flags |= VWD_CMD_ENABLE_DIRECT_PATH_RX;
+        }
+        if (itf->wifi_if->direct_path_tx) {
+          cmd.cmd_flags |= VWD_CMD_ENABLE_DIRECT_PATH_TX;
+        }
         cmm_print(DEBUG_INFO, "%s: mac:%s:%d %x:%x:%x:%x:%x:%x \n", __func__,
                                         itf->ifname, itf->ifindex, itf->macaddr[0], itf->macaddr[1],
                                        itf->macaddr[2],itf->macaddr[3],itf->macaddr[4],itf->macaddr[5]  );
diff --git a/cmm/src/module_wifi.h b/cmm/src/module_wifi.h
index c1b73f3..9037e25 100644
--- a/cmm/src/module_wifi.h
+++ b/cmm/src/module_wifi.h
@@ -29,7 +29,9 @@
 	int32_t		action;
 	int32_t		ifindex;
 	int16_t		vap_id;
-	int16_t		direct_path_rx;
+	uint16_t	cmd_flags;
+#define VWD_CMD_ENABLE_DIRECT_PATH_RX (1 << 0)
+#define VWD_CMD_ENABLE_DIRECT_PATH_TX (1 << 1)
 	char		ifname[12];
 	u_int8_t	macaddr[6];
 } __attribute__((__packed__)) vwd_cmd_t;
diff --git a/pfe_ctrl/pfe_vwd.c b/pfe_ctrl/pfe_vwd.c
index da3f879..f719df7 100644
--- a/pfe_ctrl/pfe_vwd.c
+++ b/pfe_ctrl/pfe_vwd.c
@@ -213,7 +213,7 @@
 			vap_cmd.ifindex = wifi_dev->ifindex;
 			strcpy(vap_cmd.ifname, name);
 			memcpy(vap_cmd.macaddr, wifi_dev->dev_addr, 6);
-			vap_cmd.direct_rx_path = 0;
+			vap_cmd.cmd_flags = 0;
 
 			if (!pfe_vwd_handle_vap(priv, &vap_cmd)){
 				strcpy(priv->conf_vap_names[ii], name);
@@ -2199,8 +2199,8 @@
 	vap = netdev_priv(dev);
 	vap->vapid = cmd->vapid;
 	vap->ifindex = wifi_dev->ifindex;
-	vap->direct_rx_path = cmd->direct_rx_path;
-	vap->direct_tx_path = 0;
+	vap->direct_rx_path = (cmd->cmd_flags & VAP_CMD_ENABLE_DIRECT_PATH_RX) ? 1 : 0;
+	vap->direct_tx_path = (cmd->cmd_flags & VAP_CMD_ENABLE_DIRECT_PATH_TX) ? 1 : 0;
 	memcpy(vap->ifname, wifi_dev->name, 12);
 	memcpy(vap->macaddr, wifi_dev->dev_addr, 6);
 
@@ -2457,7 +2457,7 @@
 
 			vap_cmd.vapid = ii;
 			strcpy(vap_cmd.ifname, priv->conf_vap_names[ii]);
-			vap_cmd.direct_rx_path = 0;
+			vap_cmd.cmd_flags = 0;
 			if ((vap = pfe_vwd_vap_up(priv, &vap_cmd, wifi_dev))) {
 				printk("%s:ADD: name:%s, vapid:%d, direct_rx_path : %s, ifindex:%d, mac:%x:%x:%x:%x:%x:%x\n",
 						__func__, vap->ifname, vap->vapid,
diff --git a/pfe_ctrl/pfe_vwd.h b/pfe_ctrl/pfe_vwd.h
index 7d7aed4..5dbf79b 100644
--- a/pfe_ctrl/pfe_vwd.h
+++ b/pfe_ctrl/pfe_vwd.h
@@ -66,7 +66,9 @@
 #define 	RESET	3
 	int     	ifindex;
 	unsigned short	vapid;
-	unsigned short  direct_rx_path;
+	unsigned short  cmd_flags;
+#define VAP_CMD_ENABLE_DIRECT_PATH_RX (1 << 0)
+#define VAP_CMD_ENABLE_DIRECT_PATH_TX (1 << 1)
 	unsigned char	ifname[12];
 	unsigned char	macaddr[6];
 };