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