summaryrefslogtreecommitdiff
path: root/ipacm/src/IPACM_Wlan.cpp
diff options
context:
space:
mode:
authorSkylar Chang <chiaweic@codeaurora.org>2018-04-08 00:51:37 -0700
committerSkylar Chang <chiaweic@codeaurora.org>2018-04-24 23:42:07 -0700
commit548f06408c0458b49daa34f8501b38fad696de53 (patch)
tree0c35ec67c3c8b0213a8059b2b8a03e72e82c3aee /ipacm/src/IPACM_Wlan.cpp
parent68d6a803d1128fb5af8df8b59716e59943542ab8 (diff)
downloadipacfg-mgr-548f06408c0458b49daa34f8501b38fad696de53.tar.gz
IPACM: support ipacm restart
Add support on ipacm restart to clean up existing rules in ipa-hw which is installed by ipacm and reconstruct the rulse when framework ready to offload. Change-Id: I9dba5a7d572f8f7c773a1e3495e57c2e76a93e0a
Diffstat (limited to 'ipacm/src/IPACM_Wlan.cpp')
-rw-r--r--ipacm/src/IPACM_Wlan.cpp27
1 files changed, 25 insertions, 2 deletions
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index a97c0a0..090aee2 100644
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -267,6 +267,9 @@ void IPACM_Wlan::event_callback(ipa_cm_event_id event, void *param)
IPACMDBG_H("IPv4 address:0x%x, IPv4 address mask:0x%x\n",
info->ipv4_addr, info->addr_mask);
IPACM_EvtDispatcher::PostEvt(&evt_data);
+
+ /* Query wlan-clients */
+ ipa_query_wlan_client();
}
if(handle_addr_evt(data) == IPACM_FAILURE)
@@ -557,7 +560,7 @@ void IPACM_Wlan::event_callback(ipa_cm_event_id event, void *param)
memcpy(&prefix[data->prefix.iptype], &data->prefix,
sizeof(prefix[data->prefix.iptype]));
- if(is_upstream_set[data->prefix.iptype] == true)
+ if (is_upstream_set[data->prefix.iptype] == true)
{
IPACMDBG_H("Upstream was set before, adding modem UL rules.\n");
if(ip_type == IPA_IP_MAX || ip_type == data->prefix.iptype)
@@ -2243,6 +2246,26 @@ void IPACM_Wlan::handle_SCC_MCC_switch(ipa_ip_type iptype)
return;
}
+int IPACM_Wlan::ipa_query_wlan_client()
+{
+ int fd = -1;
+
+ if ((fd = open(IPA_DEVICE_NAME, O_RDWR)) < 0) {
+ IPACMERR("Failed opening %s.\n", IPA_DEVICE_NAME);
+ return IPACM_FAILURE;
+ }
+
+ if (ioctl(fd, IPA_IOC_QUERY_WLAN_CLIENT) < 0) {
+ IPACMERR("IOCTL IPA_IOC_QUERY_WLAN_CLIENT call failed: %s \n", strerror(errno));
+ close(fd);
+ return IPACM_FAILURE;
+ }
+
+ IPACMDBG_H("send IPA_IOC_QUERY_WLAN_CLIENT \n");
+ close(fd);
+ return IPACM_SUCCESS;
+}
+
void IPACM_Wlan::eth_bridge_handle_wlan_mode_switch()
{
uint32_t i;