Merge remote-tracking branch 'goog/qcom/release/LA.UM.7.3.9.00009.1'
Change-Id: I2c75ae7ed4c2d6bf446e1498b50e9da183bc126f
diff --git a/hal/inc/PrefixParser.h b/hal/inc/PrefixParser.h
index 4682aa5..99afbe0 100644
--- a/hal/inc/PrefixParser.h
+++ b/hal/inc/PrefixParser.h
@@ -57,6 +57,7 @@
int size();
bool allAreFullyQualified();
Prefix getFirstPrefix();
+ Prefix getFirstPrefix(IP_FAM);
string getLastErrAsStr();
private:
bool add(string /* in */, IP_FAM /* famHint */);
diff --git a/hal/src/HAL.cpp b/hal/src/HAL.cpp
index c4d9722..d1d10fd 100644
--- a/hal/src/HAL.cpp
+++ b/hal/src/HAL.cpp
@@ -521,8 +521,8 @@
} else if (iface.size()>= 1) {
RET ipaReturn = mIPA->setUpstream(
iface.c_str(),
- v4GwParser.getFirstPrefix(),
- v6GwParser.getFirstPrefix());
+ v4GwParser.getFirstPrefix(IP_FAM::V4),
+ v6GwParser.getFirstPrefix(IP_FAM::V6));
BoolResult res = ipaResultToBoolResult(ipaReturn);
hidl_cb(res.success, res.errMsg);
fl.setResult(res.success, res.errMsg);
@@ -530,8 +530,8 @@
/* send NULL iface string when upstream down */
RET ipaReturn = mIPA->setUpstream(
NULL,
- v4GwParser.getFirstPrefix(),
- v6GwParser.getFirstPrefix());
+ v4GwParser.getFirstPrefix(IP_FAM::V4),
+ v6GwParser.getFirstPrefix(IP_FAM::V6));
BoolResult res = ipaResultToBoolResult(ipaReturn);
hidl_cb(res.success, res.errMsg);
fl.setResult(res.success, res.errMsg);
diff --git a/hal/src/PrefixParser.cpp b/hal/src/PrefixParser.cpp
index d38bec0..ff55147 100644
--- a/hal/src/PrefixParser.cpp
+++ b/hal/src/PrefixParser.cpp
@@ -111,6 +111,12 @@
return makeBlankPrefix(IP_FAM::INVALID);
} /* getFirstPrefix */
+Prefix PrefixParser::getFirstPrefix(IP_FAM famHint) {
+ if (size() >= 1)
+ return mPrefixes[0];
+ return makeBlankPrefix(famHint);
+} /* getFirstPrefix */
+
string PrefixParser::getLastErrAsStr() {
return mLastErr;
} /* getLastErrAsStr */
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_Config.cpp b/ipacm/src/IPACM_Config.cpp
index 92f4880..78af72b 100644
--- a/ipacm/src/IPACM_Config.cpp
+++ b/ipacm/src/IPACM_Config.cpp
@@ -185,9 +185,9 @@
IPACMERR("Failed opening %s.\n", DEVICE_NAME);
}
#ifdef FEATURE_IPACM_HAL
- strncpy(IPACM_config_file, "/vendor/etc/IPACM_cfg.xml", sizeof(IPACM_config_file));
+ strlcpy(IPACM_config_file, "/vendor/etc/IPACM_cfg.xml", sizeof(IPACM_config_file));
#else
- strncpy(IPACM_config_file, "/etc/IPACM_cfg.xml", sizeof(IPACM_config_file));
+ strlcpy(IPACM_config_file, "/etc/IPACM_cfg.xml", sizeof(IPACM_config_file));
#endif
IPACMDBG_H("\n IPACM XML file is %s \n", IPACM_config_file);
if (IPACM_SUCCESS == ipacm_read_cfg_xml(IPACM_config_file, cfg))
@@ -220,7 +220,7 @@
for (i = 0; i < cfg->iface_config.num_iface_entries; i++)
{
- strncpy(iface_table[i].iface_name, cfg->iface_config.iface_entries[i].iface_name, sizeof(iface_table[i].iface_name));
+ strlcpy(iface_table[i].iface_name, cfg->iface_config.iface_entries[i].iface_name, sizeof(iface_table[i].iface_name));
iface_table[i].if_cat = cfg->iface_config.iface_entries[i].if_cat;
iface_table[i].if_mode = cfg->iface_config.iface_entries[i].if_mode;
iface_table[i].wlan_mode = cfg->iface_config.iface_entries[i].wlan_mode;
@@ -320,28 +320,28 @@
/* Construct the routing table ictol name in iface static member*/
rt_tbl_default_v4.ip = IPA_IP_v4;
- strncpy(rt_tbl_default_v4.name, V4_DEFAULT_ROUTE_TABLE_NAME, sizeof(rt_tbl_default_v4.name));
+ strlcpy(rt_tbl_default_v4.name, V4_DEFAULT_ROUTE_TABLE_NAME, sizeof(rt_tbl_default_v4.name));
rt_tbl_lan_v4.ip = IPA_IP_v4;
- strncpy(rt_tbl_lan_v4.name, V4_LAN_ROUTE_TABLE_NAME, sizeof(rt_tbl_lan_v4.name));
+ strlcpy(rt_tbl_lan_v4.name, V4_LAN_ROUTE_TABLE_NAME, sizeof(rt_tbl_lan_v4.name));
rt_tbl_wan_v4.ip = IPA_IP_v4;
- strncpy(rt_tbl_wan_v4.name, V4_WAN_ROUTE_TABLE_NAME, sizeof(rt_tbl_wan_v4.name));
+ strlcpy(rt_tbl_wan_v4.name, V4_WAN_ROUTE_TABLE_NAME, sizeof(rt_tbl_wan_v4.name));
rt_tbl_v6.ip = IPA_IP_v6;
- strncpy(rt_tbl_v6.name, V6_COMMON_ROUTE_TABLE_NAME, sizeof(rt_tbl_v6.name));
+ strlcpy(rt_tbl_v6.name, V6_COMMON_ROUTE_TABLE_NAME, sizeof(rt_tbl_v6.name));
rt_tbl_wan_v6.ip = IPA_IP_v6;
- strncpy(rt_tbl_wan_v6.name, V6_WAN_ROUTE_TABLE_NAME, sizeof(rt_tbl_wan_v6.name));
+ strlcpy(rt_tbl_wan_v6.name, V6_WAN_ROUTE_TABLE_NAME, sizeof(rt_tbl_wan_v6.name));
rt_tbl_odu_v4.ip = IPA_IP_v4;
- strncpy(rt_tbl_odu_v4.name, V4_ODU_ROUTE_TABLE_NAME, sizeof(rt_tbl_odu_v4.name));
+ strlcpy(rt_tbl_odu_v4.name, V4_ODU_ROUTE_TABLE_NAME, sizeof(rt_tbl_odu_v4.name));
rt_tbl_odu_v6.ip = IPA_IP_v6;
- strncpy(rt_tbl_odu_v6.name, V6_ODU_ROUTE_TABLE_NAME, sizeof(rt_tbl_odu_v6.name));
+ strlcpy(rt_tbl_odu_v6.name, V6_ODU_ROUTE_TABLE_NAME, sizeof(rt_tbl_odu_v6.name));
rt_tbl_wan_dl.ip = IPA_IP_MAX;
- strncpy(rt_tbl_wan_dl.name, WAN_DL_ROUTE_TABLE_NAME, sizeof(rt_tbl_wan_dl.name));
+ strlcpy(rt_tbl_wan_dl.name, WAN_DL_ROUTE_TABLE_NAME, sizeof(rt_tbl_wan_dl.name));
/* Construct IPACM ipa_client map to rm_resource table */
ipa_client_rm_map_tbl[IPA_CLIENT_WLAN1_PROD]= IPA_RM_RESOURCE_WLAN_PROD;
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index 2f18f38..21bf7c0 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;
@@ -1124,6 +1126,12 @@
close(fd);
return IPACM_FAILURE;
}
+ if (num_wan_ul_fl_rule_v4 == 0)
+ {
+ IPACMERR("No modem UL rules were installed, return...\n");
+ close(fd);
+ return IPACM_FAILURE;
+ }
if (m_filtering.DeleteFilteringHdls(wan_ul_fl_rule_hdl_v4,
IPA_IP_v4, num_wan_ul_fl_rule_v4) == false)
{
@@ -1163,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");
@@ -3096,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");
@@ -3151,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);
@@ -3287,17 +3297,6 @@
{
flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<4);
}
-#else
- if(eq_index == 0)
- {
- flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<9);
- }
- else
- {
- flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<10);
- }
-#endif
- flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].offset = 8;
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 0)
= prefix[IPA_IP_v6].v6Mask[3];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 4)
@@ -3314,7 +3313,34 @@
= prefix[IPA_IP_v6].v6Addr[1];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].value + 12)
= prefix[IPA_IP_v6].v6Addr[0];
- }
+#else
+ if(eq_index == 0)
+ {
+ flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<9);
+ }
+ else
+ {
+ flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<10);
+ }
+ *(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 0)
+ = prefix[IPA_IP_v6].v6Mask[0];
+ *(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 4)
+ = prefix[IPA_IP_v6].v6Mask[1];
+ *(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 8)
+ = prefix[IPA_IP_v6].v6Mask[2];
+ *(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 12)
+ = prefix[IPA_IP_v6].v6Mask[3];
+ *(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].value + 0)
+ = prefix[IPA_IP_v6].v6Addr[0];
+ *(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].value + 4)
+ = prefix[IPA_IP_v6].v6Addr[1];
+ *(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].value + 8)
+ = prefix[IPA_IP_v6].v6Addr[2];
+ *(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].value + 12)
+ = prefix[IPA_IP_v6].v6Addr[3];
+#endif
+ flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].offset = 8;
+ }
else
{
IPACMERR("Run out of MEQ128 equation.\n");
@@ -3370,6 +3396,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)
{
@@ -3379,7 +3406,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");
@@ -3463,7 +3492,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");
diff --git a/ipacm/src/IPACM_Log.cpp b/ipacm/src/IPACM_Log.cpp
index d0bd108..3e2e668 100644
--- a/ipacm/src/IPACM_Log.cpp
+++ b/ipacm/src/IPACM_Log.cpp
@@ -86,7 +86,7 @@
printf("create ipacm_log socket successfully\n");
}
ipacmlog_socket.sun_family = AF_UNIX;
- strcpy(ipacmlog_socket.sun_path, IPACMLOG_FILE);
+ strlcpy(ipacmlog_socket.sun_path, IPACMLOG_FILE,sizeof(ipacmlog_socket.sun_path));
len = strlen(ipacmlog_socket.sun_path) + sizeof(ipacmlog_socket.sun_family);
memcpy(ipacm_log_buffer.user_data, user_data, MAX_BUF_LEN);
diff --git a/ipacm/src/IPACM_Neighbor.cpp b/ipacm/src/IPACM_Neighbor.cpp
index 8d5a16f..5ed5453 100644
--- a/ipacm/src/IPACM_Neighbor.cpp
+++ b/ipacm/src/IPACM_Neighbor.cpp
@@ -127,16 +127,15 @@
IPACMERR("Unable to allocate memory\n");
return;
}
+ memset(data_all,0,sizeof(ipacm_event_data_all));
data_all->iptype = IPA_IP_v4;
data_all->if_index = neighbor_client[i].iface_index;
data_all->ipv4_addr = neighbor_client[i].v4_addr; //use previous ipv4 address
memcpy(data_all->mac_addr,
neighbor_client[i].mac_addr,
sizeof(data_all->mac_addr));
-#ifdef FEATURE_L2TP
memcpy(data_all->iface_name, neighbor_client[i].iface_name,
sizeof(data_all->iface_name));
-#endif
evt_data.evt_data = (void *)data_all;
IPACM_EvtDispatcher::PostEvt(&evt_data);
/* ask for replaced iface name*/
diff --git a/ipacm/src/IPACM_Netlink.cpp b/ipacm/src/IPACM_Netlink.cpp
index 587663b..e2ecd50 100644
--- a/ipacm/src/IPACM_Netlink.cpp
+++ b/ipacm/src/IPACM_Netlink.cpp
@@ -849,9 +849,7 @@
evt_data.event = IPA_ADDR_ADD_EVENT;
data_addr->if_index = msg_ptr->nl_addr_info.metainfo.ifa_index;
-#ifdef FEATURE_L2TP
strlcpy(data_addr->iface_name, dev_name, sizeof(data_addr->iface_name));
-#endif
if(AF_INET6 == msg_ptr->nl_addr_info.attr_info.prefix_addr.ss_family)
{
IPACMDBG("Posting IPA_ADDR_ADD_EVENT with if index:%d, ipv6 addr:0x%x:%x:%x:%x\n",
@@ -1424,9 +1422,7 @@
msg_ptr->nl_neigh_info.attr_info.lladdr_hwaddr.sa_data,
sizeof(data_all->mac_addr));
data_all->if_index = msg_ptr->nl_neigh_info.metainfo.ndm_ifindex;
-#ifdef FEATURE_L2TP
strlcpy(data_all->iface_name, dev_name, sizeof(data_all->iface_name));
-#endif
/* Add support to replace src-mac as bridge0 mac */
if((msg_ptr->nl_neigh_info.metainfo.ndm_family == AF_BRIDGE) &&
(msg_ptr->nl_neigh_info.metainfo.ndm_state == NUD_PERMANENT))
@@ -1625,7 +1621,7 @@
return IPACM_FAILURE;
}
- (void)strncpy(if_name, ifr.ifr_name, sizeof(ifr.ifr_name));
+ (void)strlcpy(if_name, ifr.ifr_name, sizeof(ifr.ifr_name));
IPACMDBG("interface name %s\n", ifr.ifr_name);
close(fd);
diff --git a/ipacm/src/IPACM_OffloadManager.cpp b/ipacm/src/IPACM_OffloadManager.cpp
index b13460a..d872222 100644
--- a/ipacm/src/IPACM_OffloadManager.cpp
+++ b/ipacm/src/IPACM_OffloadManager.cpp
@@ -651,7 +651,7 @@
}
memset(&ifr, 0, sizeof(struct ifreq));
- (void)strncpy(ifr.ifr_name, if_name, sizeof(ifr.ifr_name));
+ (void)strlcpy(ifr.ifr_name, if_name, sizeof(ifr.ifr_name));
IPACMDBG_H("interface name (%s)\n", if_name);
if(ioctl(fd,SIOCGIFINDEX , &ifr) < 0)