diff options
author | Niranjan Pendharkar <npendhar@codeaurora.org> | 2017-09-25 09:10:27 -0700 |
---|---|---|
committer | pkanwar <pkanwar@google.com> | 2017-09-25 13:14:44 -0700 |
commit | 54c7bcf052d7a0cec20a2ecdaa64258ce1ffccbf (patch) | |
tree | 1209b4b7f259d495bd7bfdc5e3d50943c22fd538 /msm8998/ipacm | |
parent | f7f77065b32563a6ed376a337638a7375d332fc4 (diff) | |
download | ipacfg-mgr-54c7bcf052d7a0cec20a2ecdaa64258ce1ffccbf.tar.gz |
IPA HAL: Remove Downstream Iface
Empty iface and garbage iface names should return an error
when passed to removeDownstream.
Bug: 65612332
Test: compile
Crs-fixed: 2105305
Change-Id: Ib4a99bd6cefe372ac4292b53842bd76e767449a1
Signed-off-by: Tyler Wear <twear@codeaurora.org>
Signed-off-by: Niranjan Pendharkar <npendhar@codeaurora.org>
(cherry picked from commit f4102a5c59f994d40d22bdb9f1806d6bcc120a79)
Diffstat (limited to 'msm8998/ipacm')
-rw-r--r-- | msm8998/ipacm/inc/IPACM_OffloadManager.h | 4 | ||||
-rw-r--r-- | msm8998/ipacm/src/IPACM_OffloadManager.cpp | 18 |
2 files changed, 21 insertions, 1 deletions
diff --git a/msm8998/ipacm/inc/IPACM_OffloadManager.h b/msm8998/ipacm/inc/IPACM_OffloadManager.h index 9d94253..72070dd 100644 --- a/msm8998/ipacm/inc/IPACM_OffloadManager.h +++ b/msm8998/ipacm/inc/IPACM_OffloadManager.h @@ -29,7 +29,7 @@ #ifndef _IPACM_OFFLOAD_MANAGER_H_ #define _IPACM_OFFLOAD_MANAGER_H_ - +#include <list> #include <stdint.h> #include <IOffloadManager.h> #include "IPACM_Defs.h" @@ -96,6 +96,8 @@ public: private: + std::list<const char *> valid_ifaces; + bool upstream_v4_up; bool upstream_v6_up; diff --git a/msm8998/ipacm/src/IPACM_OffloadManager.cpp b/msm8998/ipacm/src/IPACM_OffloadManager.cpp index f2cc16c..bc88024 100644 --- a/msm8998/ipacm/src/IPACM_OffloadManager.cpp +++ b/msm8998/ipacm/src/IPACM_OffloadManager.cpp @@ -263,6 +263,13 @@ RET IPACM_OffloadManager::addDownstream(const char * downstream_name, const Pref return SUCCESS; } + /* Iface is valid, add to list if not present */ + if (std::find(valid_ifaces.begin(), valid_ifaces.end(), downstream_name) == valid_ifaces.end()) + { + /* Iface is new, add it to the list */ + valid_ifaces.push_back(downstream_name); + } + evt_data = (ipacm_event_ipahal_stream*)malloc(sizeof(ipacm_event_ipahal_stream)); if(evt_data == NULL) { @@ -291,6 +298,17 @@ RET IPACM_OffloadManager::removeDownstream(const char * downstream_name, const P ipacm_event_ipahal_stream *evt_data; IPACMDBG_H("removeDownstream name(%s), ip-family(%d) \n", downstream_name, prefix.fam); + if(strnlen(downstream_name, sizeof(downstream_name)) == 0) + { + IPACMERR("iface length is 0.\n"); + return FAIL_HARDWARE; + } + if (std::find(valid_ifaces.begin(), valid_ifaces.end(), downstream_name) == valid_ifaces.end()) + { + IPACMERR("iface is not present in list.\n"); + return FAIL_HARDWARE; + } + if(ipa_get_if_index(downstream_name, &index)) { IPACMERR("netdev(%s) already removed, ignored\n", downstream_name); |