ipacm: Add flag to get previous mux id

Add flag to get previous mux id and delete rule
for correct PDN.

Change-Id: Id55ba3d2c0c79121ccf4e8f74e017e10bf82acc7
Acked-by: Pooja Kumari <kumarip@qti.qualcomm.com>
Signed-off-by: Mohammed Javid <mjavid@codeaurora.org>
diff --git a/ipacm/inc/IPACM_Lan.h b/ipacm/inc/IPACM_Lan.h
index 0f50ae7..21a72c1 100644
--- a/ipacm/inc/IPACM_Lan.h
+++ b/ipacm/inc/IPACM_Lan.h
@@ -263,7 +263,9 @@
 
 	bool is_active;
 	bool modem_ul_v4_set;
+	uint8_t v4_mux_id;
 	bool modem_ul_v6_set;
+	uint8_t v6_mux_id;
 
 	bool sta_ul_v4_set;
 	bool sta_ul_v6_set;
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index e47767c..2cbb69a 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -81,7 +81,9 @@
 	num_wan_ul_fl_rule_v6 = 0;
 	is_active = true;
 	modem_ul_v4_set = false;
+	v4_mux_id = 0;
 	modem_ul_v6_set = false;
+	v6_mux_id = 0;
 
 	sta_ul_v4_set = false;
 	sta_ul_v6_set = false;
@@ -1169,8 +1171,8 @@
 		flt_index.retain_header_valid = 1;
 		flt_index.retain_header = 0;
 		flt_index.embedded_call_mux_id_valid = 1;
-		flt_index.embedded_call_mux_id = IPACM_Iface::ipacmcfg->GetQmapId();
-
+		flt_index.embedded_call_mux_id = v4_mux_id;
+		v4_mux_id = 0;
 		if(false == m_filtering.SendFilteringRuleIndex(&flt_index))
 		{
 			IPACMERR("Error sending filtering rule index, aborting...\n");
@@ -3102,6 +3104,7 @@
 	int fd;
 	int i, index, eq_index;
 	uint32_t value = 0;
+	uint8_t qmap_id;
 
 	IPACMDBG_H("Set modem UL flt rules\n");
 
@@ -3157,8 +3160,9 @@
 
 	flt_index.retain_header_valid = 1;
 	flt_index.retain_header = 0;
-	flt_index.embedded_call_mux_id_valid = 1;
-	flt_index.embedded_call_mux_id = IPACM_Iface::ipacmcfg->GetQmapId();
+	flt_index.embedded_call_mux_id_valid = 1;	
+	qmap_id = IPACM_Iface::ipacmcfg->GetQmapId();
+	flt_index.embedded_call_mux_id = qmap_id;
 #ifndef FEATURE_IPA_V3
 	IPACMDBG_H("flt_index: src pipe: %d, num of rules: %d, ebd pipe: %d, mux id: %d\n",
 		flt_index.source_pipe_index, flt_index.filter_index_list_len, flt_index.embedded_pipe_index, flt_index.embedded_call_mux_id);
@@ -3376,6 +3380,7 @@
 				num_wan_ul_fl_rule_v4++;
 			}
 			IPACM_Iface::ipacmcfg->increaseFltRuleCount(rx_prop->rx[0].src_pipe, iptype, pFilteringTable->num_rules);
+			v4_mux_id = qmap_id;
 		}
 		else if(iptype == IPA_IP_v6)
 		{
@@ -3385,7 +3390,9 @@
 				num_wan_ul_fl_rule_v6++;
 			}
 			IPACM_Iface::ipacmcfg->increaseFltRuleCount(rx_prop->rx[0].src_pipe, iptype, pFilteringTable->num_rules);
+			v6_mux_id = qmap_id;
 		}
+
 		else
 		{
 			IPACMERR("IP type is not expected.\n");
@@ -3469,7 +3476,8 @@
 		flt_index.retain_header_valid = 1;
 		flt_index.retain_header = 0;
 		flt_index.embedded_call_mux_id_valid = 1;
-		flt_index.embedded_call_mux_id = IPACM_Iface::ipacmcfg->GetQmapId();
+		flt_index.embedded_call_mux_id = v6_mux_id;
+		v6_mux_id = 0;
 		if(false == m_filtering.SendFilteringRuleIndex(&flt_index))
 		{
 			IPACMERR("Error sending filtering rule index, aborting...\n");