16a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran/* 26a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran * Copyright (C) 2014 The Android Open Source Project 36a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran * 46a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran * Licensed under the Apache License, Version 2.0 (the "License"); 56a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran * you may not use this file except in compliance with the License. 66a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran * You may obtain a copy of the License at 76a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran * 86a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran * http://www.apache.org/licenses/LICENSE-2.0 96a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran * 106a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran * Unless required by applicable law or agreed to in writing, software 116a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran * distributed under the License is distributed on an "AS IS" BASIS, 126a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran * See the License for the specific language governing permissions and 146a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran * limitations under the License. 156a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran */ 166a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran 176a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran#include "LocalNetwork.h" 186a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran 196a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran#include "RouteController.h" 206a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran 216a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran#define LOG_TAG "Netd" 226a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran#include "log/log.h" 236a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran 246a773534e7f8541f221f27fb8063af079b1a5936Sreeram RamachandranLocalNetwork::LocalNetwork(unsigned netId) : Network(netId) { 256a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran} 266a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran 276a773534e7f8541f221f27fb8063af079b1a5936Sreeram RamachandranLocalNetwork::~LocalNetwork() { 286a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran} 296a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran 306a773534e7f8541f221f27fb8063af079b1a5936Sreeram RamachandranNetwork::Type LocalNetwork::getType() const { 316a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran return LOCAL; 326a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran} 336a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran 346a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandranint LocalNetwork::addInterface(const std::string& interface) { 356a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran if (hasInterface(interface)) { 366a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran return 0; 376a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran } 386a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran if (int ret = RouteController::addInterfaceToLocalNetwork(mNetId, interface.c_str())) { 396a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran ALOGE("failed to add interface %s to local netId %u", interface.c_str(), mNetId); 406a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran return ret; 416a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran } 426a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran mInterfaces.insert(interface); 436a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran return 0; 446a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran} 456a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran 466a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandranint LocalNetwork::removeInterface(const std::string& interface) { 476a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran if (!hasInterface(interface)) { 486a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran return 0; 496a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran } 506a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran if (int ret = RouteController::removeInterfaceFromLocalNetwork(mNetId, interface.c_str())) { 516a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran ALOGE("failed to remove interface %s from local netId %u", interface.c_str(), mNetId); 526a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran return ret; 536a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran } 546a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran mInterfaces.erase(interface); 556a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran return 0; 566a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran} 57