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#ifndef NETD_SERVER_NETWORK_H 18f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran#define NETD_SERVER_NETWORK_H 19f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran 20f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran#include "NetdConstants.h" 21f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran 22f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran#include <set> 23f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran#include <string> 24f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran 25f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran// A Network represents a collection of interfaces participating as a single administrative unit. 26f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandranclass Network { 27f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandranpublic: 2836ed53e37b2639681055b2d3d8777241e7dd6982Sreeram Ramachandran enum Type { 296a773534e7f8541f221f27fb8063af079b1a5936Sreeram Ramachandran LOCAL, 3036ed53e37b2639681055b2d3d8777241e7dd6982Sreeram Ramachandran PHYSICAL, 3136ed53e37b2639681055b2d3d8777241e7dd6982Sreeram Ramachandran VIRTUAL, 3236ed53e37b2639681055b2d3d8777241e7dd6982Sreeram Ramachandran }; 3336ed53e37b2639681055b2d3d8777241e7dd6982Sreeram Ramachandran 34f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran // You MUST ensure that no interfaces are still assigned to this network, say by calling 35f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran // clearInterfaces(), before deleting it. This is because interface removal may fail. If we 36f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran // automatically removed interfaces in the destructor, you wouldn't know if it failed. 37f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran virtual ~Network(); 38f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran 3936ed53e37b2639681055b2d3d8777241e7dd6982Sreeram Ramachandran virtual Type getType() const = 0; 40e09b20aee85f1dfd8c18c3d8581ac875d939ba70Sreeram Ramachandran unsigned getNetId() const; 4136ed53e37b2639681055b2d3d8777241e7dd6982Sreeram Ramachandran 42f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran bool hasInterface(const std::string& interface) const; 4348e19b037e7e20674048ef76bf31ce65c741347cSreeram Ramachandran const std::set<std::string>& getInterfaces() const; 44f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran 45f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran // These return 0 on success or negative errno on failure. 46f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran virtual int addInterface(const std::string& interface) WARN_UNUSED_RESULT = 0; 47f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran virtual int removeInterface(const std::string& interface) WARN_UNUSED_RESULT = 0; 48f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran int clearInterfaces() WARN_UNUSED_RESULT; 49f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran 50f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandranprotected: 5189dad013e4dd98434b0409a84567f38782894029Sreeram Ramachandran explicit Network(unsigned netId); 5289dad013e4dd98434b0409a84567f38782894029Sreeram Ramachandran 53f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran const unsigned mNetId; 54f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran std::set<std::string> mInterfaces; 55f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran}; 56f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran 57f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran#endif // NETD_SERVER_NETWORK_H 58