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)
{