diff options
author | Skylar Chang <chiaweic@codeaurora.org> | 2018-04-08 00:51:37 -0700 |
---|---|---|
committer | Skylar Chang <chiaweic@codeaurora.org> | 2018-04-24 23:42:07 -0700 |
commit | 548f06408c0458b49daa34f8501b38fad696de53 (patch) | |
tree | 0c35ec67c3c8b0213a8059b2b8a03e72e82c3aee /ipacm/src/IPACM_Wlan.cpp | |
parent | 68d6a803d1128fb5af8df8b59716e59943542ab8 (diff) | |
download | ipacfg-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.cpp | 27 |
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; |