1f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran/*
2f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran * Copyright (C) 2014 The Android Open Source Project
3f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran *
4f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran * Licensed under the Apache License, Version 2.0 (the "License");
5f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran * you may not use this file except in compliance with the License.
6f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran * You may obtain a copy of the License at
7f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran *
8f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran *      http://www.apache.org/licenses/LICENSE-2.0
9f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran *
10f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran * Unless required by applicable law or agreed to in writing, software
11f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran * distributed under the License is distributed on an "AS IS" BASIS,
12f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran * See the License for the specific language governing permissions and
14f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran * limitations under the License.
15f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran */
16f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran
17f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran#include "Network.h"
18f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran
19f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran#define LOG_TAG "Netd"
20f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran#include "log/log.h"
21f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran
22f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram RamachandranNetwork::~Network() {
23f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran    if (!mInterfaces.empty()) {
24f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran        ALOGE("deleting network with netId %u without clearing its interfaces", mNetId);
25f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran    }
26f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran}
27f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran
28e09b20aee85f1dfd8c18c3d8581ac875d939ba70Sreeram Ramachandranunsigned Network::getNetId() const {
29e09b20aee85f1dfd8c18c3d8581ac875d939ba70Sreeram Ramachandran    return mNetId;
30e09b20aee85f1dfd8c18c3d8581ac875d939ba70Sreeram Ramachandran}
31e09b20aee85f1dfd8c18c3d8581ac875d939ba70Sreeram Ramachandran
32f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandranbool Network::hasInterface(const std::string& interface) const {
33f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran    return mInterfaces.find(interface) != mInterfaces.end();
34f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran}
35f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran
3648e19b037e7e20674048ef76bf31ce65c741347cSreeram Ramachandranconst std::set<std::string>& Network::getInterfaces() const {
3748e19b037e7e20674048ef76bf31ce65c741347cSreeram Ramachandran    return mInterfaces;
3848e19b037e7e20674048ef76bf31ce65c741347cSreeram Ramachandran}
3948e19b037e7e20674048ef76bf31ce65c741347cSreeram Ramachandran
40f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandranint Network::clearInterfaces() {
41f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran    while (!mInterfaces.empty()) {
42f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran        // Make a copy of the string, so removeInterface() doesn't lose its parameter when it
43f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran        // removes the string from the set.
44f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran        std::string interface = *mInterfaces.begin();
45f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran        if (int ret = removeInterface(interface)) {
46f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran            return ret;
47f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran        }
48f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran    }
49f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran    return 0;
50f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran}
5189dad013e4dd98434b0409a84567f38782894029Sreeram Ramachandran
5289dad013e4dd98434b0409a84567f38782894029Sreeram RamachandranNetwork::Network(unsigned netId) : mNetId(netId) {
5389dad013e4dd98434b0409a84567f38782894029Sreeram Ramachandran}
54