Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 1 | /* |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 2 | * hidl interface for wpa_supplicant daemon |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 3 | * Copyright (c) 2004-2016, Jouni Malinen <j@w1.fi> |
| 4 | * Copyright (c) 2004-2016, Roshan Pius <rpius@google.com> |
| 5 | * |
| 6 | * This software may be distributed under the terms of the BSD license. |
| 7 | * See README for more details. |
| 8 | */ |
| 9 | |
Roshan Pius | 0470cc8 | 2016-07-14 16:37:07 -0700 | [diff] [blame] | 10 | #include "supplicant.h" |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 11 | #include "hidl_manager.h" |
| 12 | #include "../src/utils/wpa_debug.h" |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 13 | |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 14 | namespace wpa_supplicant_hidl { |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 15 | |
Dmitry Shmidt | 7f2c753 | 2016-08-15 09:48:12 -0700 | [diff] [blame] | 16 | Supplicant::Supplicant(struct wpa_global *global) : wpa_global_(global) {} |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 17 | android::hidl::Status Supplicant::CreateInterface( |
Roshan Pius | b01b796 | 2016-07-11 15:25:47 -0700 | [diff] [blame] | 18 | const fi::w1::wpa_supplicant::ParcelableIfaceParams ¶ms, |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 19 | android::sp<fi::w1::wpa_supplicant::IIface> *iface_object_out) |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 20 | { |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 21 | /* Check if required Ifname argument is missing */ |
Roshan Pius | b01b796 | 2016-07-11 15:25:47 -0700 | [diff] [blame] | 22 | if (params.ifname_.isEmpty()) { |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 23 | return android::hidl::Status::fromExceptionCode( |
| 24 | android::hidl::Status::EX_ILLEGAL_ARGUMENT, |
Roshan Pius | d6e3751 | 2016-07-07 13:20:46 -0700 | [diff] [blame] | 25 | "Ifname missing in params."); |
Roshan Pius | 32c15e2 | 2016-07-07 13:46:39 -0700 | [diff] [blame] | 26 | } |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 27 | /* |
| 28 | * Try to get the wpa_supplicant record for this iface, return |
| 29 | * an error if we already control it. |
| 30 | */ |
Roshan Pius | b01b796 | 2016-07-11 15:25:47 -0700 | [diff] [blame] | 31 | if (wpa_supplicant_get_iface(wpa_global_, params.ifname_.string()) != |
| 32 | NULL) { |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 33 | return android::hidl::Status::fromServiceSpecificError( |
Dmitry Shmidt | 7f2c753 | 2016-08-15 09:48:12 -0700 | [diff] [blame] | 34 | ERROR_IFACE_EXISTS, |
Roshan Pius | d6e3751 | 2016-07-07 13:20:46 -0700 | [diff] [blame] | 35 | "wpa_supplicant already controls this interface."); |
Roshan Pius | 32c15e2 | 2016-07-07 13:46:39 -0700 | [diff] [blame] | 36 | } |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 37 | |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 38 | android::hidl::Status status; |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 39 | struct wpa_supplicant *wpa_s = NULL; |
| 40 | struct wpa_interface iface; |
| 41 | |
| 42 | os_memset(&iface, 0, sizeof(iface)); |
Roshan Pius | b01b796 | 2016-07-11 15:25:47 -0700 | [diff] [blame] | 43 | iface.driver = os_strdup(params.driver_.string()); |
| 44 | iface.ifname = os_strdup(params.ifname_.string()); |
| 45 | iface.confname = os_strdup(params.config_file_.string()); |
| 46 | iface.bridge_ifname = os_strdup(params.bridge_ifname_.string()); |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 47 | /* Otherwise, have wpa_supplicant attach to it. */ |
| 48 | wpa_s = wpa_supplicant_add_iface(wpa_global_, &iface, NULL); |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 49 | /* The supplicant core creates a corresponding hidl object via |
| 50 | * HidlManager when |wpa_supplicant_add_iface| is called. */ |
Roshan Pius | 32c15e2 | 2016-07-07 13:46:39 -0700 | [diff] [blame] | 51 | if (!wpa_s) { |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 52 | status = android::hidl::Status::fromServiceSpecificError( |
Roshan Pius | d6e3751 | 2016-07-07 13:20:46 -0700 | [diff] [blame] | 53 | ERROR_GENERIC, |
| 54 | "wpa_supplicant couldn't grab this interface."); |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 55 | } else { |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 56 | HidlManager *hidl_manager = HidlManager::getInstance(); |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 57 | |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 58 | if (!hidl_manager || |
| 59 | hidl_manager->getIfaceHidlObjectByIfname( |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 60 | wpa_s->ifname, iface_object_out)) { |
Dmitry Shmidt | 7f2c753 | 2016-08-15 09:48:12 -0700 | [diff] [blame] | 61 | status = |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 62 | android::hidl::Status::fromServiceSpecificError( |
Roshan Pius | d6e3751 | 2016-07-07 13:20:46 -0700 | [diff] [blame] | 63 | ERROR_GENERIC, |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 64 | "wpa_supplicant encountered a hidl error."); |
Roshan Pius | 32c15e2 | 2016-07-07 13:46:39 -0700 | [diff] [blame] | 65 | } else { |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 66 | status = android::hidl::Status::ok(); |
Roshan Pius | 32c15e2 | 2016-07-07 13:46:39 -0700 | [diff] [blame] | 67 | } |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 68 | } |
Dmitry Shmidt | 7f2c753 | 2016-08-15 09:48:12 -0700 | [diff] [blame] | 69 | os_free((void *)iface.driver); |
| 70 | os_free((void *)iface.ifname); |
| 71 | os_free((void *)iface.confname); |
| 72 | os_free((void *)iface.bridge_ifname); |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 73 | return status; |
| 74 | } |
| 75 | |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 76 | android::hidl::Status Supplicant::RemoveInterface(const std::string &ifname) |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 77 | { |
| 78 | struct wpa_supplicant *wpa_s; |
| 79 | |
| 80 | wpa_s = wpa_supplicant_get_iface(wpa_global_, ifname.c_str()); |
Roshan Pius | 32c15e2 | 2016-07-07 13:46:39 -0700 | [diff] [blame] | 81 | if (!wpa_s) { |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 82 | return android::hidl::Status::fromServiceSpecificError( |
Dmitry Shmidt | 7f2c753 | 2016-08-15 09:48:12 -0700 | [diff] [blame] | 83 | ERROR_IFACE_UNKNOWN, |
Roshan Pius | d6e3751 | 2016-07-07 13:20:46 -0700 | [diff] [blame] | 84 | "wpa_supplicant does not control this interface."); |
Roshan Pius | 32c15e2 | 2016-07-07 13:46:39 -0700 | [diff] [blame] | 85 | } |
| 86 | if (wpa_supplicant_remove_iface(wpa_global_, wpa_s, 0)) { |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 87 | return android::hidl::Status::fromServiceSpecificError( |
Roshan Pius | d6e3751 | 2016-07-07 13:20:46 -0700 | [diff] [blame] | 88 | ERROR_GENERIC, |
| 89 | "wpa_supplicant couldn't remove this interface."); |
Roshan Pius | 32c15e2 | 2016-07-07 13:46:39 -0700 | [diff] [blame] | 90 | } |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 91 | return android::hidl::Status::ok(); |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 92 | } |
| 93 | |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 94 | android::hidl::Status Supplicant::GetInterface( |
Dmitry Shmidt | 7f2c753 | 2016-08-15 09:48:12 -0700 | [diff] [blame] | 95 | const std::string &ifname, |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 96 | android::sp<fi::w1::wpa_supplicant::IIface> *iface_object_out) |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 97 | { |
| 98 | struct wpa_supplicant *wpa_s; |
| 99 | |
| 100 | wpa_s = wpa_supplicant_get_iface(wpa_global_, ifname.c_str()); |
Roshan Pius | 32c15e2 | 2016-07-07 13:46:39 -0700 | [diff] [blame] | 101 | if (!wpa_s) { |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 102 | return android::hidl::Status::fromServiceSpecificError( |
Dmitry Shmidt | 7f2c753 | 2016-08-15 09:48:12 -0700 | [diff] [blame] | 103 | ERROR_IFACE_UNKNOWN, |
Roshan Pius | d6e3751 | 2016-07-07 13:20:46 -0700 | [diff] [blame] | 104 | "wpa_supplicant does not control this interface."); |
Roshan Pius | 32c15e2 | 2016-07-07 13:46:39 -0700 | [diff] [blame] | 105 | } |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 106 | |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 107 | HidlManager *hidl_manager = HidlManager::getInstance(); |
| 108 | if (!hidl_manager || |
| 109 | hidl_manager->getIfaceHidlObjectByIfname( |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 110 | wpa_s->ifname, iface_object_out)) { |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 111 | return android::hidl::Status::fromServiceSpecificError( |
Roshan Pius | d6e3751 | 2016-07-07 13:20:46 -0700 | [diff] [blame] | 112 | ERROR_GENERIC, |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 113 | "wpa_supplicant encountered a hidl error."); |
Roshan Pius | 32c15e2 | 2016-07-07 13:46:39 -0700 | [diff] [blame] | 114 | } |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 115 | |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 116 | return android::hidl::Status::ok(); |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 117 | } |
| 118 | |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 119 | android::hidl::Status Supplicant::SetDebugParams( |
Roshan Pius | 32f9f5f | 2016-08-15 14:44:22 -0700 | [diff] [blame] | 120 | int level, bool show_timestamp, bool show_keys) |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 121 | { |
| 122 | int internal_level; |
| 123 | if (convertDebugLevelToInternalLevel(level, &internal_level)) { |
| 124 | const std::string error_msg = |
| 125 | "invalid debug level: " + std::to_string(level); |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 126 | return android::hidl::Status::fromExceptionCode( |
| 127 | android::hidl::Status::EX_ILLEGAL_ARGUMENT, |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 128 | error_msg.c_str()); |
| 129 | } |
| 130 | if (wpa_supplicant_set_debug_params( |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 131 | <<<<<<< 390ba2881ef621db480848b7e50b93d61542206a:wpa_supplicant/binder/supplicant.cpp |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 132 | wpa_global_, internal_level, show_timestamp, show_keys)) { |
| 133 | return android::binder::Status::fromServiceSpecificError( |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 134 | ======= |
| 135 | wpa_global_, level, show_timestamp, show_keys)) { |
| 136 | return android::hidl::Status::fromServiceSpecificError( |
| 137 | >>>>>>> wpa_supplicant: HIDL implementation (1/2):wpa_supplicant/hidl/supplicant.cpp |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 138 | ERROR_GENERIC, |
| 139 | "wpa_supplicant could not set debug params."); |
| 140 | } |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 141 | return android::hidl::Status::ok(); |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 142 | } |
| 143 | |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 144 | android::hidl::Status Supplicant::GetDebugLevel(int *level_out) |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 145 | { |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 146 | <<<<<<< 390ba2881ef621db480848b7e50b93d61542206a:wpa_supplicant/binder/supplicant.cpp |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 147 | if (convertDebugLevelToExternalLevel(wpa_debug_level, level_out)) { |
| 148 | const std::string error_msg = |
| 149 | "invalid debug level: " + std::to_string(wpa_debug_level); |
| 150 | return android::binder::Status::fromExceptionCode( |
| 151 | android::binder::Status::EX_ILLEGAL_ARGUMENT, |
| 152 | error_msg.c_str()); |
| 153 | } |
| 154 | return android::binder::Status::ok(); |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 155 | ======= |
| 156 | *level_out = wpa_debug_level; |
| 157 | return android::hidl::Status::ok(); |
| 158 | >>>>>>> wpa_supplicant: HIDL implementation (1/2):wpa_supplicant/hidl/supplicant.cpp |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 159 | } |
| 160 | |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 161 | android::hidl::Status Supplicant::GetDebugShowTimestamp( |
Roshan Pius | 32f9f5f | 2016-08-15 14:44:22 -0700 | [diff] [blame] | 162 | bool *show_timestamp_out) |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 163 | { |
| 164 | *show_timestamp_out = wpa_debug_timestamp ? true : false; |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 165 | return android::hidl::Status::ok(); |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 166 | } |
| 167 | |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 168 | android::hidl::Status Supplicant::GetDebugShowKeys(bool *show_keys_out) |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 169 | { |
| 170 | *show_keys_out = wpa_debug_show_keys ? true : false; |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 171 | return android::hidl::Status::ok(); |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 172 | } |
| 173 | |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 174 | android::hidl::Status Supplicant::RegisterCallback( |
Roshan Pius | 0470cc8 | 2016-07-14 16:37:07 -0700 | [diff] [blame] | 175 | const android::sp<fi::w1::wpa_supplicant::ISupplicantCallback> &callback) |
| 176 | { |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 177 | HidlManager *hidl_manager = HidlManager::getInstance(); |
| 178 | if (!hidl_manager || |
| 179 | hidl_manager->addSupplicantCallbackHidlObject(callback)) { |
| 180 | return android::hidl::Status::fromServiceSpecificError( |
Roshan Pius | 0470cc8 | 2016-07-14 16:37:07 -0700 | [diff] [blame] | 181 | ERROR_GENERIC, |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 182 | "wpa_supplicant encountered a hidl error."); |
Roshan Pius | 0470cc8 | 2016-07-14 16:37:07 -0700 | [diff] [blame] | 183 | } |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 184 | return android::hidl::Status::ok(); |
Roshan Pius | 0470cc8 | 2016-07-14 16:37:07 -0700 | [diff] [blame] | 185 | } |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 186 | <<<<<<< 390ba2881ef621db480848b7e50b93d61542206a:wpa_supplicant/binder/supplicant.cpp |
Roshan Pius | 0470cc8 | 2016-07-14 16:37:07 -0700 | [diff] [blame] | 187 | |
Roshan Pius | c9422c7 | 2016-07-11 10:18:22 -0700 | [diff] [blame] | 188 | /** |
| 189 | * Helper function to convert the debug level parameter from the binder |
| 190 | * interface values to internal values. |
| 191 | */ |
| 192 | int Supplicant::convertDebugLevelToInternalLevel( |
| 193 | int external_level, int *internal_level) |
| 194 | { |
| 195 | switch (external_level) { |
| 196 | case DEBUG_LEVEL_EXCESSIVE: |
| 197 | *internal_level = MSG_EXCESSIVE; |
| 198 | return 0; |
| 199 | case DEBUG_LEVEL_MSGDUMP: |
| 200 | *internal_level = MSG_MSGDUMP; |
| 201 | return 0; |
| 202 | case DEBUG_LEVEL_DEBUG: |
| 203 | *internal_level = MSG_DEBUG; |
| 204 | return 0; |
| 205 | case DEBUG_LEVEL_INFO: |
| 206 | *internal_level = MSG_INFO; |
| 207 | return 0; |
| 208 | case DEBUG_LEVEL_WARNING: |
| 209 | *internal_level = MSG_WARNING; |
| 210 | return 0; |
| 211 | case DEBUG_LEVEL_ERROR: |
| 212 | *internal_level = MSG_ERROR; |
| 213 | return 0; |
| 214 | default: |
| 215 | wpa_printf( |
| 216 | MSG_ERROR, "Invalid external log level: %d", |
| 217 | external_level); |
| 218 | return 1; |
| 219 | } |
| 220 | } |
| 221 | |
| 222 | /** |
| 223 | * Helper function to convert the debug level parameter from the internal values |
| 224 | * to binder interface values. |
| 225 | */ |
| 226 | int Supplicant::convertDebugLevelToExternalLevel( |
| 227 | int internal_level, int *external_level) |
| 228 | { |
| 229 | switch (internal_level) { |
| 230 | case MSG_EXCESSIVE: |
| 231 | *external_level = DEBUG_LEVEL_EXCESSIVE; |
| 232 | return 0; |
| 233 | case MSG_MSGDUMP: |
| 234 | *external_level = DEBUG_LEVEL_MSGDUMP; |
| 235 | return 0; |
| 236 | case MSG_DEBUG: |
| 237 | *external_level = DEBUG_LEVEL_DEBUG; |
| 238 | return 0; |
| 239 | case MSG_INFO: |
| 240 | *external_level = DEBUG_LEVEL_INFO; |
| 241 | return 0; |
| 242 | case MSG_WARNING: |
| 243 | *external_level = DEBUG_LEVEL_WARNING; |
| 244 | return 0; |
| 245 | case MSG_ERROR: |
| 246 | *external_level = DEBUG_LEVEL_ERROR; |
| 247 | return 0; |
| 248 | default: |
| 249 | wpa_printf( |
| 250 | MSG_ERROR, "Invalid internal log level: %d", |
| 251 | internal_level); |
| 252 | return 1; |
| 253 | } |
| 254 | } |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 255 | } /* namespace wpa_supplicant_binder */ |
Roshan Pius | 57ffbcf | 2016-09-27 09:12:46 -0700 | [diff] [blame^] | 256 | ======= |
| 257 | } /* namespace wpa_supplicant_hidl */ |
| 258 | >>>>>>> wpa_supplicant: HIDL implementation (1/2):wpa_supplicant/hidl/supplicant.cpp |