IPACM: fix the embedded call issue in msmzirc
Specify QMAP header in the routing rule to A7 for modem PDN,
otherwise embedded DL packets will be dropped in A7.
Change-Id: I93f0dc7fb9c0b2b092e4af801784c4a9c8180464
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index 5a3c27d..9834cfd 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -172,11 +172,19 @@
struct ipa_rt_rule_add *rt_rule_entry;
struct ipa_ioc_add_flt_rule *flt_rule;
struct ipa_flt_rule_add flt_rule_entry;
+ struct ipa_ioc_get_hdr hdr;
const int NUM_RULES = 1;
int num_ipv6_addr, len;
int res = IPACM_SUCCESS;
+ memset(&hdr, 0, sizeof(hdr));
+ if(tx_prop == NULL || rx_prop == NULL)
+ {
+ IPACMDBG_H("Either tx or rx property is NULL, return.\n");
+ return IPACM_SUCCESS;
+ }
+
if (data->iptype == IPA_IP_v6)
{
for(num_ipv6_addr=0;num_ipv6_addr<num_dft_rt_v6;num_ipv6_addr++)
@@ -207,6 +215,16 @@
strcpy(rt_rule->rt_tbl_name, IPACM_Iface::ipacmcfg->rt_tbl_v6.name);
rt_rule_entry = &rt_rule->rules[0];
+ if(m_is_sta_mode == Q6_WAN)
+ {
+ strncpy(hdr.name, tx_prop->tx[0].hdr_name, sizeof(hdr.name));
+ if(m_header.GetHeaderHandle(&hdr) == false)
+ {
+ IPACMERR("Failed to get QMAP header.\n");
+ return IPACM_FAILURE;
+ }
+ rt_rule_entry->rule.hdr_hdl = hdr.hdl;
+ }
rt_rule_entry->at_rear = false;
rt_rule_entry->rule.dst = iface_query->excp_pipe; //go to A5
rt_rule_entry->rule.attrib.attrib_mask = IPA_FLT_DST_ADDR;
@@ -352,6 +370,16 @@
rt_rule->num_rules = NUM_RULES;
rt_rule->ip = data->iptype;
rt_rule_entry = &rt_rule->rules[0];
+ if(m_is_sta_mode == Q6_WAN)
+ {
+ strncpy(hdr.name, tx_prop->tx[0].hdr_name, sizeof(hdr.name));
+ if(m_header.GetHeaderHandle(&hdr) == false)
+ {
+ IPACMERR("Failed to get QMAP header.\n");
+ return IPACM_FAILURE;
+ }
+ rt_rule_entry->rule.hdr_hdl = hdr.hdl;
+ }
rt_rule_entry->at_rear = false;
rt_rule_entry->rule.dst = iface_query->excp_pipe; //go to A5
rt_rule_entry->rule.attrib.attrib_mask = IPA_FLT_DST_ADDR;