summaryrefslogtreecommitdiff
path: root/ipacm/inc/IPACM_Wan.h
diff options
context:
space:
mode:
authorSkylar Chang <chiaweic@codeaurora.org>2015-09-29 17:30:12 -0700
committerSkylar Chang <chiaweic@codeaurora.org>2015-09-29 17:35:40 -0700
commit06de5f1ff678fff654441eee0f7a4991b591336c (patch)
tree1776d70c7ed2d84c15448f5ac4c4d51b63b9f3dd /ipacm/inc/IPACM_Wan.h
parentaec4d3a28128534078da7cb2cbcc6ba85c0cd7f0 (diff)
downloadipacfg-mgr-06de5f1ff678fff654441eee0f7a4991b591336c.tar.gz
IPACM: Fix the ipv6-only AP+STA use-case
For ipv6-only AP+STA, SoftAP won't posting v6 default route event to IPACM because of its new feature called priority backhaul. Therefore IPACM needs to listen for RTPROT_RA netlink event instead to find the externel AP's mac and construct the full wlan header. Change-Id: I8fb0135f473e31bb87b46f4a437292dc7931f722 Acked-by: Skylar Chang <chiaweic@codeaurora.org>
Diffstat (limited to 'ipacm/inc/IPACM_Wan.h')
-rw-r--r--ipacm/inc/IPACM_Wan.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/ipacm/inc/IPACM_Wan.h b/ipacm/inc/IPACM_Wan.h
index 159cc46..dcb8719 100644
--- a/ipacm/inc/IPACM_Wan.h
+++ b/ipacm/inc/IPACM_Wan.h
@@ -155,8 +155,10 @@ private:
int num_firewall_v4,num_firewall_v6;
uint32_t wan_v4_addr;
uint32_t wan_v4_addr_gw;
+ uint32_t wan_v6_addr_gw[4];
bool wan_v4_addr_set;
bool wan_v4_addr_gw_set;
+ bool wan_v6_addr_gw_set;
bool active_v4;
bool active_v6;
bool header_set_v4;
@@ -261,6 +263,49 @@ private:
return IPACM_INVALID_INDEX;
}
+ inline int get_wan_client_index_ipv6(uint32_t* ipv6_addr)
+ {
+ int cnt, v6_num;
+ int num_wan_client_tmp = num_wan_client;
+
+ IPACMDBG_H("Get ipv6 address 0x%08x.0x%08x.0x%08x.0x%08x\n", ipv6_addr[0], ipv6_addr[1], ipv6_addr[2], ipv6_addr[3]);
+
+ for(cnt = 0; cnt < num_wan_client_tmp; cnt++)
+ {
+ if (get_client_memptr(wan_client, cnt)->ipv6_set)
+ {
+ for(v6_num=0;v6_num < get_client_memptr(wan_client, cnt)->ipv6_set;v6_num++)
+ {
+
+ IPACMDBG_H("stored IPv6 0x%08x.0x%08x.0x%08x.0x%08x\n", get_client_memptr(wan_client, cnt)->v6_addr[v6_num][0],
+ get_client_memptr(wan_client, cnt)->v6_addr[v6_num][1],
+ get_client_memptr(wan_client, cnt)->v6_addr[v6_num][2],
+ get_client_memptr(wan_client, cnt)->v6_addr[v6_num][3]);
+
+ if(ipv6_addr[0] == get_client_memptr(wan_client, cnt)->v6_addr[v6_num][0] &&
+ ipv6_addr[1] == get_client_memptr(wan_client, cnt)->v6_addr[v6_num][1] &&
+ ipv6_addr[2]== get_client_memptr(wan_client, cnt)->v6_addr[v6_num][2] &&
+ ipv6_addr[3] == get_client_memptr(wan_client, cnt)->v6_addr[v6_num][3])
+ {
+ IPACMDBG_H("Matched client index: %d\n", cnt);
+ IPACMDBG_H("The MAC is %02x:%02x:%02x:%02x:%02x:%02x\n",
+ get_client_memptr(wan_client, cnt)->mac[0],
+ get_client_memptr(wan_client, cnt)->mac[1],
+ get_client_memptr(wan_client, cnt)->mac[2],
+ get_client_memptr(wan_client, cnt)->mac[3],
+ get_client_memptr(wan_client, cnt)->mac[4],
+ get_client_memptr(wan_client, cnt)->mac[5]);
+ IPACMDBG_H("header set ipv4(%d) ipv6(%d)\n",
+ get_client_memptr(wan_client, cnt)->ipv4_header_set,
+ get_client_memptr(wan_client, cnt)->ipv6_header_set);
+ return cnt;
+ }
+ }
+ }
+ }
+ return IPACM_INVALID_INDEX;
+ }
+
inline int delete_wan_rtrules(int clt_indx, ipa_ip_type iptype)
{
uint32_t tx_index;