ipacm: Add support for filtering rule v2 API

Change-Id: Ie51c54e4d9f2ed02e1ee09eccbb590902e18e80e
Signed-off-by: Ilia Lin <ilialin@codeaurora.org>
diff --git a/ipacm/inc/IPACM_Filtering.h b/ipacm/inc/IPACM_Filtering.h
index 6667235..9393342 100644
--- a/ipacm/inc/IPACM_Filtering.h
+++ b/ipacm/inc/IPACM_Filtering.h
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.
+Copyright (c) 2013-2019,2021, The Linux Foundation. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
@@ -56,6 +56,7 @@
 	IPACM_Filtering();
 	~IPACM_Filtering();
 	bool AddFilteringRule(struct ipa_ioc_add_flt_rule const *ruleTable);
+	bool AddFilteringRule_v2(struct ipa_ioc_add_flt_rule_v2 const *ruleTable);
 	bool AddFilteringRuleAfter(struct ipa_ioc_add_flt_rule_after const *ruleTable);
 #ifdef IPA_IOCTL_SET_FNR_COUNTER_INFO
 	bool AddFilteringRule_hw_index(struct ipa_ioc_add_flt_rule *ruleTable, int hw_counter_index);
diff --git a/ipacm/src/IPACM_Filtering.cpp b/ipacm/src/IPACM_Filtering.cpp
index 875a794..e559cdf 100644
--- a/ipacm/src/IPACM_Filtering.cpp
+++ b/ipacm/src/IPACM_Filtering.cpp
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.
+Copyright (c) 2013-2019,2021, The Linux Foundation. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
@@ -118,6 +118,50 @@
 	return true;
 }
 
+bool IPACM_Filtering::AddFilteringRule_v2(struct ipa_ioc_add_flt_rule_v2 const *ruleTable)
+{
+	int retval = 0;
+	int i;
+	int num_rules = ruleTable->num_rules;
+	int cnt;
+
+	IPACMDBG_H("Printing filter add attributes\n");
+	IPACMDBG_H("ip type: %d\n", ruleTable->ip);
+	IPACMDBG_H("Number of rules: %d\n", ruleTable->num_rules);
+	IPACMDBG_H("End point: %d and global value: %d\n", ruleTable->ep, ruleTable->global);
+	IPACMDBG_H("commit value: %d\n", ruleTable->commit);
+	for (int cnt=0; cnt<ruleTable->num_rules; cnt++)
+	{
+		IPACMDBG("Filter rule:%d attrib mask: 0x%x\n", cnt,
+				((struct ipa_flt_rule_add_v2  *)&ruleTable->rules)[cnt].rule.attrib.attrib_mask);
+	}
+
+	retval = ioctl(fd, IPA_IOC_ADD_FLT_RULE_V2, ruleTable);
+	if (retval != 0)
+	{
+		for (cnt = 0; cnt < ruleTable->num_rules; cnt++)
+		{
+			if (((struct ipa_flt_rule_add_v2  *)&ruleTable->rules)[cnt].status != 0)
+			{
+				IPACMDBG_H("Adding Filter rule:%d failed with status:%d\n",
+								 cnt, ((struct ipa_flt_rule_add_v2 *)ruleTable->rules)[cnt].status);
+			}
+		}
+		return false;
+	}
+
+	for (cnt = 0; cnt<ruleTable->num_rules; cnt++)
+	{
+		if (((struct ipa_flt_rule_add_v2  *)&ruleTable->rules)[cnt].status != 0)
+		{
+			IPACMERR("Adding Filter rule:%d failed with status:%d\n",
+							 cnt, ((struct ipa_flt_rule_add_v2 *)ruleTable->rules)[cnt].status);
+		}
+	}
+	IPACMDBG("Added Filtering rule %p\n", ruleTable);
+	return true;
+}
+
 #ifdef IPA_IOCTL_SET_FNR_COUNTER_INFO
 bool IPACM_Filtering::AddFilteringRule_hw_index(struct ipa_ioc_add_flt_rule *ruleTable, int hw_counter_index)
 {