ipacm: Add checks to prevent installing duplicate MHI exception rules

Check the MHI exception rule handles before installing the rules.
If they are nonzero, they they should be deleted first before
installing again.

Change-Id: I59ad4381ed3424677467efa094ecce61219d69e6
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index f17eb03..a36fa4a 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -134,6 +134,10 @@
 	is_ipv6_frag_firewall_flt_rule_installed = false;
 	ipv6_frag_firewall_flt_rule_hdl = 0;
 
+	icmpv6_exception_hdl = 0;
+	tcp_fin_hdl = 0;
+	tcp_rst_hdl = 0;
+
 	mtu_v4 = DEFAULT_MTU_SIZE;
 	mtu_v4_set = false;
 	mtu_v6 = DEFAULT_MTU_SIZE;
@@ -7580,6 +7584,13 @@
 	uint8_t mux_id;
 	ipa_ioc_add_flt_rule *pFilteringTable = NULL;
 
+	/* Return if rules are there */
+	if (mhi_dl_v4_frag_hdl)
+	{
+		IPACMERR("frag rule have not been deleted. Don't install again\n");
+		return IPACM_FAILURE;
+	}
+
 	mux_id = ext_prop->ext[0].mux_id;
 	/* contruct filter rules to pcie modem */
 	struct ipa_flt_rule_add flt_rule_entry;
@@ -7721,6 +7732,13 @@
 	uint8_t mux_id;
 	ipa_ioc_add_flt_rule *pFilteringTable = NULL;
 
+	/* Return if rules are there */
+	if (icmpv6_exception_hdl)
+	{
+		IPACMERR("icmpv6 rule have not been deleted. Don't install again\n");
+		return IPACM_FAILURE;
+	}
+
 	mux_id = ext_prop->ext[0].mux_id;
 	/* contruct filter rules to pcie modem */
 	struct ipa_flt_rule_add flt_rule_entry;
@@ -7858,6 +7876,13 @@
 	uint8_t mux_id;
 	ipa_ioc_add_flt_rule *pFilteringTable = NULL;
 
+	/* Return if rules are there */
+	if (tcp_fin_hdl || tcp_rst_hdl)
+	{
+		IPACMERR("tcp RST/FIN rules have not been deleted. Don't install again\n");
+		return IPACM_FAILURE;
+	}
+
 	mux_id = ext_prop->ext[0].mux_id;
 	/* contruct filter rules to pcie modem */
 	struct ipa_flt_rule_add flt_rule_entry;