diff options
author | Skylar Chang <chiaweic@codeaurora.org> | 2013-10-02 16:52:42 -0700 |
---|---|---|
committer | Skylar Chang <chiaweic@codeaurora.org> | 2013-12-12 17:50:14 -0800 |
commit | 05ad9f31536dafdbd96bb73c32f9ad6e31b52227 (patch) | |
tree | 4a6767b50716e77753692351421b5c8834bbb101 /ipacm/src/IPACM_Config.cpp | |
parent | a1c9c9d0f0f5bbadfc832a4c6fd4d0871cde7165 (diff) | |
download | ipacfg-mgr-05ad9f31536dafdbd96bb73c32f9ad6e31b52227.tar.gz |
IPACM: Added support for 9x35 HW/SW architecture
- Support WAN DL filtering rules addition through QMI messages on Q6 endpoint
- Install WAN UL filtering rules received from modem on LAN/WLAN endpoints
- Add ICMP/ALG related WAN DL filtering rules
- Change WLAN header to support new format
- Not configure rules for AMPDU pipe
Change-Id: I7ee848099cfaaae1523d9cbebf59268bc0e7cfed
Signed-off-by: Skylar Chang <chiaweic@codeaurora.org>
Diffstat (limited to 'ipacm/src/IPACM_Config.cpp')
-rw-r--r--[-rwxr-xr-x] | ipacm/src/IPACM_Config.cpp | 85 |
1 files changed, 84 insertions, 1 deletions
diff --git a/ipacm/src/IPACM_Config.cpp b/ipacm/src/IPACM_Config.cpp index fd14ceb..c28942d 100755..100644 --- a/ipacm/src/IPACM_Config.cpp +++ b/ipacm/src/IPACM_Config.cpp @@ -66,6 +66,12 @@ IPACM_Config::IPACM_Config() memset(&rt_tbl_wan_v4, 0, sizeof(rt_tbl_wan_v4)); memset(&rt_tbl_v6, 0, sizeof(rt_tbl_v6)); memset(&rt_tbl_wan_v6, 0, sizeof(rt_tbl_wan_v6)); + memset(&rt_tbl_wan_dl, 0, sizeof(rt_tbl_wan_dl)); + + memset(&ext_prop_v4, 0, sizeof(ext_prop_v4)); + memset(&ext_prop_v6, 0, sizeof(ext_prop_v6)); + + qmap_id = ~0; IPACMDBG(" create IPACM_Config constructor\n"); return; @@ -169,13 +175,17 @@ int IPACM_Config::Init(void) 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)); - + rt_tbl_v6.ip = IPA_IP_v6; strncpy(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)); + 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)); + + /* Construct IPACM ipa_client map to rm_resource table */ ipa_client_rm_map_tbl[IPA_CLIENT_HSIC1_PROD]= IPA_RM_RESOURCE_HSIC_PROD; ipa_client_rm_map_tbl[IPA_CLIENT_HSIC2_PROD]= IPA_RM_RESOURCE_HSIC_PROD; @@ -540,3 +550,76 @@ void IPACM_Config::DelRmDepend(ipa_rm_resource_name rm1) } return ; } + +int IPACM_Config::SetExtProp(ipa_ioc_query_intf_ext_props *prop) +{ + int i, num; + + if(prop == NULL || prop->num_ext_props <= 0) + { + IPACMERR("There is no extended property!\n"); + return IPACM_FAILURE; + } + + num = prop->num_ext_props; + for(i=0; i<num; i++) + { + if(prop->ext[i].ip == IPA_IP_v4) + { + if(ext_prop_v4.num_ext_props >= MAX_NUM_EXT_PROPS) + { + IPACMDBG("IPv4 extended property table is full!\n"); + continue; + } + memcpy(&ext_prop_v4.prop[ext_prop_v4.num_ext_props], &prop->ext[i], sizeof(struct ipa_ioc_ext_intf_prop)); + ext_prop_v4.num_ext_props++; + } + else if(prop->ext[i].ip == IPA_IP_v6) + { + if(ext_prop_v6.num_ext_props >= MAX_NUM_EXT_PROPS) + { + IPACMDBG("IPv6 extended property table is full!\n"); + continue; + } + memcpy(&ext_prop_v6.prop[ext_prop_v6.num_ext_props], &prop->ext[i], sizeof(struct ipa_ioc_ext_intf_prop)); + ext_prop_v6.num_ext_props++; + } + else + { + IPACMERR("The IP type is not expected!\n"); + return IPACM_FAILURE; + } + } + + IPACMDBG("Set extended property succeeded.\n"); + + return IPACM_SUCCESS; +} + +ipacm_ext_prop* IPACM_Config::GetExtProp(ipa_ip_type ip_type) +{ + if(ip_type == IPA_IP_v4) + return &ext_prop_v4; + else if(ip_type == IPA_IP_v6) + return &ext_prop_v6; + else + { + IPACMERR("Failed to get extended property: the IP version is neither IPv4 nor IPv6!\n"); + return NULL; + } +} + +int IPACM_Config::DelExtProp(ipa_ip_type ip_type) +{ + if(ip_type != IPA_IP_v6) + { + memset(&ext_prop_v4, 0, sizeof(ext_prop_v4)); + } + + if(ip_type != IPA_IP_v4) + { + memset(&ext_prop_v6, 0, sizeof(ext_prop_v6)); + } + + return IPACM_SUCCESS; +} |