Merge "Various fixes from bring-up:"
diff --git a/ipacm/inc/IPACM_Config.h b/ipacm/inc/IPACM_Config.h
index f0d356f..edc4483 100644
--- a/ipacm/inc/IPACM_Config.h
+++ b/ipacm/inc/IPACM_Config.h
@@ -67,7 +67,7 @@
int ipa_nat_max_entries;
/* IPACM routing table name for v4/v6 */
- struct ipa_ioc_get_rt_tbl rt_tbl_lan_v4, rt_tbl_wan_v4, rt_tbl_v6;
+ struct ipa_ioc_get_rt_tbl rt_tbl_lan_v4, rt_tbl_wan_v4, rt_tbl_v6, rt_tbl_default_v4;
/* To return the instance */
static IPACM_Config* GetInstance();
diff --git a/ipacm/inc/IPACM_Defs.h b/ipacm/inc/IPACM_Defs.h
index 2b621c6..1726c61 100644
--- a/ipacm/inc/IPACM_Defs.h
+++ b/ipacm/inc/IPACM_Defs.h
@@ -64,6 +64,7 @@
#define IPA_MAX_PRIVATE_SUBNET_ENTRIES 3
#define IPA_MAX_ALG_ENTRIES 10
+#define V4_DEFAULT_ROUTE_TABLE_NAME "ipa_dflt_rt"
#define V4_LAN_ROUTE_TABLE_NAME "COMRTBLLANv4"
#define V4_WAN_ROUTE_TABLE_NAME "WANRTBLv4"
#define V6_COMMON_ROUTE_TABLE_NAME "COMRTBLv6"
diff --git a/ipacm/inc/IPACM_Iface.h b/ipacm/inc/IPACM_Iface.h
index 0bc5811..36610a1 100644
--- a/ipacm/inc/IPACM_Iface.h
+++ b/ipacm/inc/IPACM_Iface.h
@@ -60,6 +60,7 @@
#define IPV6_DEFAULT_FILTERTING_RULES 1
#define IPV6_DEFAULT_LAN_FILTERTING_RULES 1
#define MAX_SOFTWAREROUTING_FILTERTING_RULES 2
+#define INVALID_IFACE -1
/* iface */
class IPACM_Iface : public IPACM_Listener
diff --git a/ipacm/inc/IPACM_Wan.h b/ipacm/inc/IPACM_Wan.h
index d2c89f9..bdae73c 100644
--- a/ipacm/inc/IPACM_Wan.h
+++ b/ipacm/inc/IPACM_Wan.h
@@ -82,7 +82,8 @@
uint32_t wan_v4_addr;
bool active_v4;
bool active_v6;
- bool header_set;
+ bool header_set_v4;
+ bool header_set_v6;
bool header_partial_default_wan_v4;
bool header_partial_default_wan_v6;
diff --git a/ipacm/inc/IPACM_Wlan.h b/ipacm/inc/IPACM_Wlan.h
index dc5fccf..ef8b035 100644
--- a/ipacm/inc/IPACM_Wlan.h
+++ b/ipacm/inc/IPACM_Wlan.h
@@ -65,6 +65,8 @@
bool route_rule_set_v6;
bool ipv4_set;
bool ipv6_set;
+ bool ipv4_header_set;
+ bool ipv6_header_set;
bool power_save_set;
wlan_client_rt_hdl wifi_rt_hdl[0]; /* depends on number of tx properties */
}ipa_wlan_client;
diff --git a/ipacm/src/IPACM_Config.cpp b/ipacm/src/IPACM_Config.cpp
index 413d1ba..86fb488 100644
--- a/ipacm/src/IPACM_Config.cpp
+++ b/ipacm/src/IPACM_Config.cpp
@@ -54,6 +54,7 @@
ipa_num_alg_ports = 0;
ipa_nat_max_entries = 0;
+ memset(&rt_tbl_default_v4, 0, sizeof(rt_tbl_default_v4));
memset(&rt_tbl_lan_v4, 0, sizeof(rt_tbl_lan_v4));
memset(&rt_tbl_wan_v4, 0, sizeof(rt_tbl_wan_v4));
memset(&rt_tbl_v6, 0, sizeof(rt_tbl_v6));
@@ -138,6 +139,9 @@
IPACMDBG("Nat Maximum Entries %d\n", ipa_nat_max_entries);
/* 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));
+
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));
diff --git a/ipacm/src/IPACM_Iface.cpp b/ipacm/src/IPACM_Iface.cpp
index 3e39cc7..1ed86ab 100644
--- a/ipacm/src/IPACM_Iface.cpp
+++ b/ipacm/src/IPACM_Iface.cpp
@@ -98,7 +98,7 @@
);
if (!m_pFilteringTable)
{
- PERROR("Error Locate ipa_flt_rule_add memory...\n");
+ IPACMERR("Error Locate ipa_flt_rule_add memory...\n");
return IPACM_FAILURE;
}
@@ -128,7 +128,7 @@
m_pFilteringTable->ip = IPA_IP_v4;
if (false == m_filtering.AddFilteringRule(m_pFilteringTable))
{
- PERROR("Error Adding Filtering rule, aborting...\n");
+ IPACMERR("Error Adding Filtering rule, aborting...\n");
res = IPACM_FAILURE;
goto fail;
}
@@ -148,7 +148,7 @@
m_pFilteringTable->ip = IPA_IP_v6;
if (false == m_filtering.AddFilteringRule(m_pFilteringTable))
{
- PERROR("Error Adding Filtering rule, aborting...\n");
+ IPACMERR("Error Adding Filtering rule, aborting...\n");
res = IPACM_FAILURE;
goto fail;
}
@@ -177,7 +177,7 @@
if (false == m_filtering.AddFilteringRule(m_pFilteringTable))
{
- PERROR("Error Adding Filtering rule, aborting...\n");
+ IPACMERR("Error Adding Filtering rule, aborting...\n");
res = IPACM_FAILURE;
goto fail;
}
@@ -226,7 +226,7 @@
if (m_filtering.DeleteFilteringHdls(&software_routing_fl_rule_hdl[0],
IPA_IP_v4, 1) == false)
{
- PERROR("Error Adding Filtering rule, aborting...\n");
+ IPACMERR("Error Adding Filtering rule, aborting...\n");
res = IPACM_FAILURE;
goto fail;
}
@@ -235,7 +235,7 @@
if (m_filtering.DeleteFilteringHdls(&software_routing_fl_rule_hdl[1],
IPA_IP_v6, 1) == false)
{
- PERROR("Error Adding Filtering rule, aborting...\n");
+ IPACMERR("Error Adding Filtering rule, aborting...\n");
res = IPACM_FAILURE;
goto fail;
}
@@ -264,7 +264,7 @@
if (m_filtering.DeleteFilteringHdls(&flt_hdl, ip, 1) == false)
{
- PERROR("Error Adding Filtering rule, aborting...\n");
+ IPACMERR("Error Adding Filtering rule, aborting...\n");
res = IPACM_FAILURE;
goto fail;
}
@@ -282,7 +282,7 @@
)
{
int fd;
- int link = -1;
+ int link = INVALID_IFACE;
int i = 0;
struct ifreq ifr;
@@ -475,7 +475,7 @@
m_pFilteringTable = (struct ipa_ioc_add_flt_rule *)calloc(1, len);
if (!m_pFilteringTable)
{
- PERROR("Error Locate ipa_flt_rule_add memory...\n");
+ IPACMERR("Error Locate ipa_flt_rule_add memory...\n");
return IPACM_FAILURE;
}
@@ -516,7 +516,7 @@
if (false == m_filtering.AddFilteringRule(m_pFilteringTable))
{
- PERROR("Error Adding Filtering rule, aborting...\n");
+ IPACMERR("Error Adding Filtering rule, aborting...\n");
res = IPACM_FAILURE;
goto fail;
}
@@ -545,7 +545,7 @@
m_pFilteringTable = (struct ipa_ioc_add_flt_rule *)calloc(1, len);
if (!m_pFilteringTable)
{
- PERROR("Error Locate ipa_flt_rule_add memory...\n");
+ IPACMERR("Error Locate ipa_flt_rule_add memory...\n");
return IPACM_FAILURE;
}
@@ -580,7 +580,7 @@
if (m_filtering.AddFilteringRule(m_pFilteringTable) == false)
{
- PERROR("Error Adding Filtering rule, aborting...\n");
+ IPACMERR("Error Adding Filtering rule, aborting...\n");
res = IPACM_FAILURE;
goto fail;
}
diff --git a/ipacm/src/IPACM_IfaceManager.cpp b/ipacm/src/IPACM_IfaceManager.cpp
index 655375a..26deb56 100644
--- a/ipacm/src/IPACM_IfaceManager.cpp
+++ b/ipacm/src/IPACM_IfaceManager.cpp
@@ -112,6 +112,12 @@
int ipa_interface_index;
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(if_index);
+ if(ipa_interface_index == INVALID_IFACE)
+ {
+ IPACMDBG("Unhandled interface received, fid: %d\n",if_index);
+ return IPACM_SUCCESS;
+ }
+
/* check if duplicate instance*/
if(SearchInstance(ipa_interface_index) == IPA_INSTANCE_NOT_FOUND)
{
@@ -177,7 +183,9 @@
break;
default:
- IPACMERR("Unhandled interface received\n");
+ IPACMDBG("Unhandled interface category received iface name: %s, category: %d\n",
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name,
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat);
return IPACM_SUCCESS;
}
}
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index 1fa8557..4a875b4 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -787,7 +787,14 @@
free(m_pFilteringTable);
return IPACM_FAILURE;
}
-
+#if 1
+ if (false == m_routing.GetRoutingTable(&IPACM_Iface::ipacmcfg->rt_tbl_default_v4))
+ {
+ IPACMERR("LAN m_routing.GetRoutingTable(&IPACM_Iface::ipacmcfg->rt_tbl_default_v4=0x%p) Failed.\n", &IPACM_Iface::ipacmcfg->rt_tbl_default_v4);
+ free(m_pFilteringTable);
+ return IPACM_FAILURE;
+ }
+#endif
for (i = 0; i < (IPACM_Iface::ipacmcfg->ipa_num_private_subnet); i++)
{
memset(&flt_rule_entry, 0, sizeof(struct ipa_flt_rule_add));
@@ -796,6 +803,10 @@
flt_rule_entry.status = -1;
flt_rule_entry.rule.action = IPA_PASS_TO_ROUTING;
flt_rule_entry.rule.rt_tbl_hdl = IPACM_Iface::ipacmcfg->rt_tbl_lan_v4.hdl;
+#if 1
+ flt_rule_entry.rule.rt_tbl_hdl = IPACM_Iface::ipacmcfg->rt_tbl_default_v4.hdl;
+ IPACMDBG(" private filter rule use table: %s\n",IPACM_Iface::ipacmcfg->rt_tbl_default_v4.name);
+#endif
memcpy(&flt_rule_entry.rule.attrib,
&rx_prop->rx[0].attrib,
sizeof(flt_rule_entry.rule.attrib));
diff --git a/ipacm/src/IPACM_Main.cpp b/ipacm/src/IPACM_Main.cpp
index 6a11cc3..21badd6 100644
--- a/ipacm/src/IPACM_Main.cpp
+++ b/ipacm/src/IPACM_Main.cpp
@@ -208,7 +208,7 @@
data = (ipacm_event_data_mac *)malloc(sizeof(ipacm_event_data_mac));
if (data == NULL)
{
- PERROR("unable to allocate memory for event data\n");
+ IPACMERR("unable to allocate memory for event data\n");
return NULL;
}
@@ -310,7 +310,7 @@
break;
default:
- IPACMERR("Unhandled message type: %d\n", event_hdr->msg_type);
+ IPACMDBG("Unhandled message type: %d\n", event_hdr->msg_type);
free(data);
continue;
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index 6166fd5..7e27a32 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -58,8 +58,9 @@
active_v4 = false;
active_v6 = false;
- header_set = false;
- header_partial_default_wan_v4 = false;
+ header_set_v4 = false;
+ header_set_v6 = false;
+ header_partial_default_wan_v4 = false;
header_partial_default_wan_v6 = false;
hdr_hdl_sta_v4 = 0;
hdr_hdl_sta_v6 = 0;
@@ -193,7 +194,7 @@
handle_down_evt();
IPACMDBG("ipa_WAN (%s):ipa_index (%d) instance close \n", IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].iface_name, ipa_if_num);
/* reset the STA-iface category to unknown */
- if(header_set == true)
+ if((header_set_v4 == true) || (header_set_v6 == true))
{
IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].if_cat=UNKNOWN_IF;
}
@@ -623,8 +624,8 @@
mac_addr[0], mac_addr[1], mac_addr[2],
mac_addr[3], mac_addr[4], mac_addr[5]);
- if(header_set == true)
- {
+ if((header_set_v4 == true) || (header_set_v6 == true))
+ {
IPACMDBG("Already add STA full header\n");
return IPACM_SUCCESS;
}
@@ -642,11 +643,9 @@
for (cnt=0; cnt<tx_prop->num_tx_props; cnt++)
{
if(tx_prop->tx[cnt].ip==IPA_IP_v4)
- break;
- }
-
- memset(&sCopyHeader, 0, sizeof(sCopyHeader));
- memcpy(sCopyHeader.name,
+ {
+ memset(&sCopyHeader, 0, sizeof(sCopyHeader));
+ memcpy(sCopyHeader.name,
tx_prop->tx[cnt].hdr_name,
sizeof(sCopyHeader.name));
@@ -715,22 +714,25 @@
{
memcpy(tx_prop->tx[tx_index].hdr_name, pHeaderDescriptor->hdr[0].name,
sizeof(tx_prop->tx[tx_index].hdr_name));
- IPACMDBG("replace full header name: %s (%x) in tx:%d\n", tx_prop->tx[tx_index].hdr_name, pHeaderDescriptor->hdr[0].hdr_hdl,tx_index);
- }
+ IPACMDBG("replace full header name: %s (%x) in tx:%d\n", tx_prop->tx[tx_index].hdr_name, pHeaderDescriptor->hdr[0].hdr_hdl,tx_index);
+ }
+ }
+ break;
+ }
}
+
+
/* copy partial header for v6 */
for (cnt=0; cnt<tx_prop->num_tx_props; cnt++)
{
if(tx_prop->tx[cnt].ip == IPA_IP_v6)
- break;
- }
-
- IPACMDBG("Got partial v6-header name from %d tx props\n", cnt);
- memset(&sCopyHeader, 0, sizeof(sCopyHeader));
- memcpy(sCopyHeader.name,
- tx_prop->tx[cnt].hdr_name,
- sizeof(sCopyHeader.name));
+ {
+ IPACMDBG("Got partial v6-header name from %d tx props\n", cnt);
+ memset(&sCopyHeader, 0, sizeof(sCopyHeader));
+ memcpy(sCopyHeader.name,
+ tx_prop->tx[cnt].hdr_name,
+ sizeof(sCopyHeader.name));
IPACMDBG("header name: %s from tx: %d\n", sCopyHeader.name,cnt);
if (m_header.CopyHeader(&sCopyHeader) == false)
@@ -740,80 +742,83 @@
goto fail;
}
- IPACMDBG("header length: %d, paritial: %d\n", sCopyHeader.hdr_len, sCopyHeader.is_partial);
- if (sCopyHeader.hdr_len > IPA_HDR_MAX_SIZE)
- {
- IPACMERR("header oversize\n");
- res = IPACM_FAILURE;
- goto fail;
- }
- else
- {
- memcpy(pHeaderDescriptor->hdr[0].hdr,
- sCopyHeader.hdr,
- sCopyHeader.hdr_len);
- }
-
-
- /* copy client mac_addr to partial header */
- memcpy(&pHeaderDescriptor->hdr[0].hdr[IPA_WLAN_PARTIAL_HDR_OFFSET], mac_addr,
- IPA_MAC_ADDR_SIZE); /* only copy 6 bytes mac-address */
-
- pHeaderDescriptor->commit = true;
- pHeaderDescriptor->num_hdrs = 1;
-
- memset(pHeaderDescriptor->hdr[0].name, 0,
- sizeof(pHeaderDescriptor->hdr[0].name));
-
- sprintf(index, "%d", ipa_if_num);
- strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
-
- strncat(pHeaderDescriptor->hdr[0].name,
- IPA_WAN_PARTIAL_HDR_NAME_v6,
- sizeof(IPA_WAN_PARTIAL_HDR_NAME_v6));
-
- pHeaderDescriptor->hdr[0].hdr_len = sCopyHeader.hdr_len;
- pHeaderDescriptor->hdr[0].hdr_hdl = -1;
- pHeaderDescriptor->hdr[0].is_partial = 0;
- pHeaderDescriptor->hdr[0].status = -1;
-
- if (m_header.AddHeader(pHeaderDescriptor) == false ||
- pHeaderDescriptor->hdr[0].status != 0)
- {
- IPACMERR("ioctl IPA_IOC_ADD_HDR failed: %d\n", pHeaderDescriptor->hdr[0].status);
- res = IPACM_FAILURE;
- goto fail;
- }
- else
- {
- hdr_hdl_sta_v6 = pHeaderDescriptor->hdr[0].hdr_hdl;
- IPACMDBG("add full header name: %s (%x)\n", pHeaderDescriptor->hdr[0].name, pHeaderDescriptor->hdr[0].hdr_hdl);
- }
-
- /* copy ipv6 full header to each TX endpoint property*/
- for (tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
- {
- if(tx_prop->tx[tx_index].ip==IPA_IP_v6)
- {
- memcpy(tx_prop->tx[tx_index].hdr_name, pHeaderDescriptor->hdr[0].name,
- sizeof(tx_prop->tx[tx_index].hdr_name));
- IPACMDBG("replace full header name: %s (%x) in tx:%d\n", tx_prop->tx[tx_index].hdr_name, pHeaderDescriptor->hdr[0].hdr_hdl,tx_index);
- }
- }
-
+ IPACMDBG("header length: %d, paritial: %d\n", sCopyHeader.hdr_len, sCopyHeader.is_partial);
+ if (sCopyHeader.hdr_len > IPA_HDR_MAX_SIZE)
+ {
+ IPACMERR("header oversize\n");
+ res = IPACM_FAILURE;
+ goto fail;
+ }
+ else
+ {
+ memcpy(pHeaderDescriptor->hdr[0].hdr,
+ sCopyHeader.hdr,
+ sCopyHeader.hdr_len);
+ }
+
+ /* copy client mac_addr to partial header */
+ memcpy(&pHeaderDescriptor->hdr[0].hdr[IPA_WLAN_PARTIAL_HDR_OFFSET], mac_addr,
+ IPA_MAC_ADDR_SIZE); /* only copy 6 bytes mac-address */
+
+ pHeaderDescriptor->commit = true;
+ pHeaderDescriptor->num_hdrs = 1;
+
+ memset(pHeaderDescriptor->hdr[0].name, 0,
+ sizeof(pHeaderDescriptor->hdr[0].name));
+
+ sprintf(index, "%d", ipa_if_num);
+ strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
+
+ strncat(pHeaderDescriptor->hdr[0].name,
+ IPA_WAN_PARTIAL_HDR_NAME_v6,
+ sizeof(IPA_WAN_PARTIAL_HDR_NAME_v6));
+
+ pHeaderDescriptor->hdr[0].hdr_len = sCopyHeader.hdr_len;
+ pHeaderDescriptor->hdr[0].hdr_hdl = -1;
+ pHeaderDescriptor->hdr[0].is_partial = 0;
+ pHeaderDescriptor->hdr[0].status = -1;
+
+ if (m_header.AddHeader(pHeaderDescriptor) == false ||
+ pHeaderDescriptor->hdr[0].status != 0)
+ {
+ IPACMERR("ioctl IPA_IOC_ADD_HDR failed: %d\n", pHeaderDescriptor->hdr[0].status);
+ res = IPACM_FAILURE;
+ goto fail;
+ }
+ else
+ {
+ hdr_hdl_sta_v6 = pHeaderDescriptor->hdr[0].hdr_hdl;
+ IPACMDBG("add full header name: %s (%x)\n", pHeaderDescriptor->hdr[0].name, pHeaderDescriptor->hdr[0].hdr_hdl);
+ }
+
+ /* copy ipv6 full header to each TX endpoint property*/
+ for (tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
+ {
+ if(tx_prop->tx[tx_index].ip==IPA_IP_v6)
+ {
+ memcpy(tx_prop->tx[tx_index].hdr_name, pHeaderDescriptor->hdr[0].name,
+ sizeof(tx_prop->tx[tx_index].hdr_name));
+ IPACMDBG("replace full header name: %s (%x) in tx:%d\n", tx_prop->tx[tx_index].hdr_name, pHeaderDescriptor->hdr[0].hdr_hdl,tx_index);
+ }
+ }
+ break;
+ }
+ }
+
+
/* see if default routes are setup before constructing full header */
- if( (header_partial_default_wan_v4== true) && (header_set == false))
- {
- handle_route_add_evt(IPA_IP_v4);
- }
-
- if( (header_partial_default_wan_v6== true) && (header_set == false))
- {
- handle_route_add_evt(IPA_IP_v6);
- }
+ if( (header_partial_default_wan_v4== true) && (header_set_v4 == false))
+ {
+ handle_route_add_evt(IPA_IP_v4);
+ header_set_v4 = true;
+ }
+
+ if( (header_partial_default_wan_v6== true) && (header_set_v6 == false))
+ {
+ handle_route_add_evt(IPA_IP_v6);
+ header_set_v6 = true;
+ }
- header_set = true;
-
fail:
free(pHeaderDescriptor);
@@ -1499,14 +1504,17 @@
/* delete the complete header for STA mode*/
- if(header_set == true)
+ if(header_set_v4 == true)
{
if (m_header.DeleteHeaderHdl(hdr_hdl_sta_v4) == false)
{
res = IPACM_FAILURE;
goto fail;
}
+ }
+ if(header_set_v6 == true)
+ {
if (m_header.DeleteHeaderHdl(hdr_hdl_sta_v6) == false)
{
res = IPACM_FAILURE;
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index 829e62a..ed7e2d1 100644
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -347,62 +347,60 @@
for (cnt=0; cnt<tx_prop->num_tx_props; cnt++)
{
if(tx_prop->tx[cnt].ip==IPA_IP_v4)
- break;
- }
-
- IPACMDBG("Got partial v4-header name from %d tx props\n", cnt);
- memset(&sCopyHeader, 0, sizeof(sCopyHeader));
- memcpy(sCopyHeader.name,
- tx_prop->tx[cnt].hdr_name,
- sizeof(sCopyHeader.name));
+ {
+ IPACMDBG("Got partial v4-header name from %d tx props\n", cnt);
+ memset(&sCopyHeader, 0, sizeof(sCopyHeader));
+ memcpy(sCopyHeader.name,
+ tx_prop->tx[cnt].hdr_name,
+ sizeof(sCopyHeader.name));
+
+ IPACMDBG("header name: %s in tx:%d\n", sCopyHeader.name,cnt);
+ if (m_header.CopyHeader(&sCopyHeader) == false)
+ {
+ PERROR("ioctl copy header failed");
+ res = IPACM_FAILURE;
+ goto fail;
+ }
+
+ IPACMDBG("header length: %d, paritial: %d\n", sCopyHeader.hdr_len, sCopyHeader.is_partial);
+ if (sCopyHeader.hdr_len > IPA_HDR_MAX_SIZE)
+ {
+ IPACMERR("header oversize\n");
+ res = IPACM_FAILURE;
+ goto fail;
+ }
+ else
+ {
+ memcpy(pHeaderDescriptor->hdr[0].hdr,
+ sCopyHeader.hdr,
+ sCopyHeader.hdr_len);
+ }
- IPACMDBG("header name: %s in tx:%d\n", sCopyHeader.name,cnt);
- if (m_header.CopyHeader(&sCopyHeader) == false)
- {
- PERROR("ioctl copy header failed");
- res = IPACM_FAILURE;
- goto fail;
- }
-
- IPACMDBG("header length: %d, paritial: %d\n", sCopyHeader.hdr_len, sCopyHeader.is_partial);
- if (sCopyHeader.hdr_len > IPA_HDR_MAX_SIZE)
- {
- IPACMERR("header oversize\n");
- res = IPACM_FAILURE;
- goto fail;
- }
- else
- {
- memcpy(pHeaderDescriptor->hdr[0].hdr,
- sCopyHeader.hdr,
- sCopyHeader.hdr_len);
- }
-
- /* copy client mac_addr to partial header */
- memcpy(&pHeaderDescriptor->hdr[0].hdr[IPA_WLAN_PARTIAL_HDR_OFFSET],
- get_client_memptr(wlan_client, num_wifi_client)->mac,
- IPA_MAC_ADDR_SIZE);
-
- pHeaderDescriptor->commit = true;
- pHeaderDescriptor->num_hdrs = 1;
-
- memset(pHeaderDescriptor->hdr[0].name, 0,
- sizeof(pHeaderDescriptor->hdr[0].name));
-
- sprintf(index, "%d", ipa_if_num);
- strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
-
- strncat(pHeaderDescriptor->hdr[0].name,
- IPA_WLAN_PARTIAL_HDR_NAME_v4,
- sizeof(IPA_WLAN_PARTIAL_HDR_NAME_v4));
-
- sprintf(index, "%d", header_name_count);
- strncat(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
-
- pHeaderDescriptor->hdr[0].hdr_len = sCopyHeader.hdr_len;
- pHeaderDescriptor->hdr[0].hdr_hdl = -1;
- pHeaderDescriptor->hdr[0].is_partial = 0;
- pHeaderDescriptor->hdr[0].status = -1;
+ /* copy client mac_addr to partial header */
+ memcpy(&pHeaderDescriptor->hdr[0].hdr[IPA_WLAN_PARTIAL_HDR_OFFSET],
+ get_client_memptr(wlan_client, num_wifi_client)->mac,
+ IPA_MAC_ADDR_SIZE);
+
+ pHeaderDescriptor->commit = true;
+ pHeaderDescriptor->num_hdrs = 1;
+
+ memset(pHeaderDescriptor->hdr[0].name, 0,
+ sizeof(pHeaderDescriptor->hdr[0].name));
+
+ sprintf(index, "%d", ipa_if_num);
+ strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
+
+ strncat(pHeaderDescriptor->hdr[0].name,
+ IPA_WLAN_PARTIAL_HDR_NAME_v4,
+ sizeof(IPA_WLAN_PARTIAL_HDR_NAME_v4));
+
+ sprintf(index, "%d", header_name_count);
+ strncat(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
+
+ pHeaderDescriptor->hdr[0].hdr_len = sCopyHeader.hdr_len;
+ pHeaderDescriptor->hdr[0].hdr_hdl = -1;
+ pHeaderDescriptor->hdr[0].is_partial = 0;
+ pHeaderDescriptor->hdr[0].status = -1;
if (m_header.AddHeader(pHeaderDescriptor) == false ||
pHeaderDescriptor->hdr[0].status != 0)
@@ -412,19 +410,22 @@
goto fail;
}
- get_client_memptr(wlan_client, num_wifi_client)->hdr_hdl_v4 = pHeaderDescriptor->hdr[0].hdr_hdl;
- IPACMDBG("client(%d) v4 full header name:%s header handle:(0x%x)\n",
- num_wifi_client,
- pHeaderDescriptor->hdr[0].name,
- get_client_memptr(wlan_client, num_wifi_client)->hdr_hdl_v4);
+ get_client_memptr(wlan_client, num_wifi_client)->hdr_hdl_v4 = pHeaderDescriptor->hdr[0].hdr_hdl;
+ IPACMDBG("client(%d) v4 full header name:%s header handle:(0x%x)\n",
+ num_wifi_client,
+ pHeaderDescriptor->hdr[0].name,
+ get_client_memptr(wlan_client, num_wifi_client)->hdr_hdl_v4);
+ get_client_memptr(wlan_client, num_wifi_client)->ipv4_header_set=true;
+ break;
+ }
+ }
+
/* copy partial header for v6*/
for (cnt=0; cnt<tx_prop->num_tx_props; cnt++)
{
if(tx_prop->tx[cnt].ip==IPA_IP_v6)
- break;
-
- }
+ {
IPACMDBG("Got partial v6-header name from %d tx props\n", cnt);
memset(&sCopyHeader, 0, sizeof(sCopyHeader));
@@ -494,6 +495,11 @@
pHeaderDescriptor->hdr[0].name,
get_client_memptr(wlan_client, num_wifi_client)->hdr_hdl_v6);
+ get_client_memptr(wlan_client, num_wifi_client)->ipv6_header_set=true;
+ break;
+ }
+ }
+
/* initialize wifi client*/
get_client_memptr(wlan_client, num_wifi_client)->route_rule_set_v4 = false;
get_client_memptr(wlan_client, num_wifi_client)->route_rule_set_v6 = false;
@@ -776,21 +782,31 @@
}
/* Delete wlan client header */
+ if(get_client_memptr(wlan_client, clt_indx)->ipv4_header_set == true)
+ {
if (m_header.DeleteHeaderHdl(get_client_memptr(wlan_client, clt_indx)->hdr_hdl_v4)
== false)
{
return IPACM_FAILURE;
}
+ get_client_memptr(wlan_client, clt_indx)->ipv4_header_set = false;
+ }
+ if(get_client_memptr(wlan_client, clt_indx)->ipv6_header_set == true)
+ {
if (m_header.DeleteHeaderHdl(get_client_memptr(wlan_client, clt_indx)->hdr_hdl_v6)
== false)
{
return IPACM_FAILURE;
}
+ get_client_memptr(wlan_client, clt_indx)->ipv6_header_set = false;
+ }
/* Reset ip_set to 0*/
get_client_memptr(wlan_client, clt_indx)->ipv4_set = false;
get_client_memptr(wlan_client, clt_indx)->ipv6_set = false;
+ get_client_memptr(wlan_client, clt_indx)->ipv4_header_set = false;
+ get_client_memptr(wlan_client, clt_indx)->ipv6_header_set = false;
get_client_memptr(wlan_client, clt_indx)->route_rule_set_v4 = false;
get_client_memptr(wlan_client, clt_indx)->route_rule_set_v6 = false;
@@ -806,6 +822,8 @@
get_client_memptr(wlan_client, clt_indx)->ipv4_set = get_client_memptr(wlan_client, (clt_indx + 1))->ipv4_set;
get_client_memptr(wlan_client, clt_indx)->ipv6_set = get_client_memptr(wlan_client, (clt_indx + 1))->ipv6_set;
+ get_client_memptr(wlan_client, clt_indx)->ipv4_set = get_client_memptr(wlan_client, (clt_indx + 1))->ipv4_header_set;
+ get_client_memptr(wlan_client, clt_indx)->ipv6_set = get_client_memptr(wlan_client, (clt_indx + 1))->ipv6_header_set;
get_client_memptr(wlan_client, clt_indx)->route_rule_set_v4 = get_client_memptr(wlan_client, (clt_indx + 1))->route_rule_set_v4;
get_client_memptr(wlan_client, clt_indx)->route_rule_set_v6 = get_client_memptr(wlan_client, (clt_indx + 1))->route_rule_set_v6;
@@ -1346,6 +1364,14 @@
free(m_pFilteringTable);
return IPACM_FAILURE;
}
+#if 1
+ if (false == m_routing.GetRoutingTable(&IPACM_Iface::ipacmcfg->rt_tbl_default_v4))
+ {
+ IPACMERR("LAN m_routing.GetRoutingTable(&IPACM_Iface::ipacmcfg->rt_tbl_default_v4=0x%p) Failed.\n", &IPACM_Iface::ipacmcfg->rt_tbl_default_v4);
+ free(m_pFilteringTable);
+ return IPACM_FAILURE;
+ }
+#endif
for (i = 0; i < IPACM_Iface::ipacmcfg->ipa_num_private_subnet; i++)
{
@@ -1355,6 +1381,10 @@
flt_rule_entry.status = -1;
flt_rule_entry.rule.action = IPA_PASS_TO_ROUTING;
flt_rule_entry.rule.rt_tbl_hdl = IPACM_Iface::ipacmcfg->rt_tbl_lan_v4.hdl;
+#if 1
+ flt_rule_entry.rule.rt_tbl_hdl = IPACM_Iface::ipacmcfg->rt_tbl_default_v4.hdl;
+ IPACMDBG(" private filter rule use table: %s\n",IPACM_Iface::ipacmcfg->rt_tbl_default_v4.name);
+#endif
memcpy(&flt_rule_entry.rule.attrib,
&rx_prop->rx[0].attrib,
sizeof(flt_rule_entry.rule.attrib));
@@ -1515,20 +1545,27 @@
delete_default_qos_rtrules(i);
IPACMDBG("Delete %d client header\n", num_wifi_client);
+
+
+ if(get_client_memptr(wlan_client, i)->ipv4_header_set == true)
+ {
if (m_header.DeleteHeaderHdl(get_client_memptr(wlan_client, i)->hdr_hdl_v4)
== false)
{
res = IPACM_FAILURE;
goto fail;
}
+ }
+ if(get_client_memptr(wlan_client, i)->ipv6_header_set == true)
+ {
if (m_header.DeleteHeaderHdl(get_client_memptr(wlan_client, i)->hdr_hdl_v6)
== false)
{
res = IPACM_FAILURE;
goto fail;
}
-
+ }
} /* end of for loop */
/* free the wlan clients cache */
diff --git a/ipacm/src/IPACM_cfg.xml b/ipacm/src/IPACM_cfg.xml
index 1dd0f28..e9e4147 100644
--- a/ipacm/src/IPACM_cfg.xml
+++ b/ipacm/src/IPACM_cfg.xml
@@ -3,6 +3,10 @@
<IPACM>
<IPACMIface>
<Iface>
+ <Name>ecm0</Name>
+ <Category>LAN</Category>
+ </Iface>
+ <Iface>
<Name>rmnet0</Name>
<Category>WAN</Category>
</Iface>
@@ -38,6 +42,22 @@
<Protocol>TCP</Protocol>
<Port>554</Port>
</ALG>
+ <ALG>
+ <Protocol>TCP</Protocol>
+ <Port>5060</Port>
+ </ALG>
+ <ALG>
+ <Protocol>UDP</Protocol>
+ <Port>5060</Port>
+ </ALG>
+ <ALG>
+ <Protocol>TCP</Protocol>
+ <Port>1723</Port>
+ </ALG>
+ <ALG>
+ <Protocol>UDP</Protocol>
+ <Port>69</Port>
+ </ALG>
</IPACMALG>
<IPACMNAT>
<MaxNatEntries>100</MaxNatEntries>
diff --git a/ipacm/src/mobileap_firewall.xml b/ipacm/src/mobileap_firewall.xml
index c722511..84da527 100644
--- a/ipacm/src/mobileap_firewall.xml
+++ b/ipacm/src/mobileap_firewall.xml
@@ -1,5 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<system xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mobileap_firewall_cfg.xsd">
<MobileAPFirewallCfg>
+ <FirewallEnabled>1</FirewallEnabled>
+ <FirewallPktsAllowed>0</FirewallPktsAllowed>
</MobileAPFirewallCfg>
</system>