1*8542734aSAndroid Build Coastguard Worker /* 2*8542734aSAndroid Build Coastguard Worker * Copyright 2017 The Android Open Source Project 3*8542734aSAndroid Build Coastguard Worker * 4*8542734aSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*8542734aSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*8542734aSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*8542734aSAndroid Build Coastguard Worker * 8*8542734aSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*8542734aSAndroid Build Coastguard Worker * 10*8542734aSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*8542734aSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*8542734aSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*8542734aSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*8542734aSAndroid Build Coastguard Worker * limitations under the License. 15*8542734aSAndroid Build Coastguard Worker * 16*8542734aSAndroid Build Coastguard Worker * tun_interface.h - creates tun or tap interfaces for testing purposes 17*8542734aSAndroid Build Coastguard Worker */ 18*8542734aSAndroid Build Coastguard Worker 19*8542734aSAndroid Build Coastguard Worker #ifndef _SYSTEM_NETD_TESTS_TUN_INTERACE_H 20*8542734aSAndroid Build Coastguard Worker #define _SYSTEM_NETD_TESTS_TUN_INTERACE_H 21*8542734aSAndroid Build Coastguard Worker 22*8542734aSAndroid Build Coastguard Worker namespace android { 23*8542734aSAndroid Build Coastguard Worker namespace net { 24*8542734aSAndroid Build Coastguard Worker 25*8542734aSAndroid Build Coastguard Worker class TunInterface { 26*8542734aSAndroid Build Coastguard Worker public: 27*8542734aSAndroid Build Coastguard Worker TunInterface() = default; ~TunInterface()28*8542734aSAndroid Build Coastguard Worker ~TunInterface() { destroy(); } 29*8542734aSAndroid Build Coastguard Worker 30*8542734aSAndroid Build Coastguard Worker // Creates a tun or tap interface. Returns 0 on success or -errno on failure. Must succeed 31*8542734aSAndroid Build Coastguard Worker // before it is legal to call any of the other methods in this class. 32*8542734aSAndroid Build Coastguard Worker int init(const std::string& ifName, bool isTap); 33*8542734aSAndroid Build Coastguard Worker 34*8542734aSAndroid Build Coastguard Worker // Convenience overloads. init()35*8542734aSAndroid Build Coastguard Worker int init() { return init("", false); } init(const std::string & ifName)36*8542734aSAndroid Build Coastguard Worker int init(const std::string& ifName) { return init(ifName, false); } init(bool isTap)37*8542734aSAndroid Build Coastguard Worker int init(bool isTap) { return init("", isTap); } 38*8542734aSAndroid Build Coastguard Worker void destroy(); 39*8542734aSAndroid Build Coastguard Worker name()40*8542734aSAndroid Build Coastguard Worker const std::string& name() const { return mIfName; } ifindex()41*8542734aSAndroid Build Coastguard Worker int ifindex() const { return mIfIndex; } srcAddr()42*8542734aSAndroid Build Coastguard Worker const in6_addr& srcAddr() const { return mSrcAddr; } dstAddr()43*8542734aSAndroid Build Coastguard Worker const in6_addr& dstAddr() const { return mDstAddr; } 44*8542734aSAndroid Build Coastguard Worker 45*8542734aSAndroid Build Coastguard Worker int addAddress(const std::string& addr, int prefixlen); getFdForTesting()46*8542734aSAndroid Build Coastguard Worker int getFdForTesting() const { return mFd; } 47*8542734aSAndroid Build Coastguard Worker 48*8542734aSAndroid Build Coastguard Worker private: 49*8542734aSAndroid Build Coastguard Worker int mFd = -1; 50*8542734aSAndroid Build Coastguard Worker std::string mIfName; 51*8542734aSAndroid Build Coastguard Worker int mIfIndex; 52*8542734aSAndroid Build Coastguard Worker in6_addr mSrcAddr, mDstAddr; 53*8542734aSAndroid Build Coastguard Worker }; 54*8542734aSAndroid Build Coastguard Worker 55*8542734aSAndroid Build Coastguard Worker } // namespace net 56*8542734aSAndroid Build Coastguard Worker } // namespace android 57*8542734aSAndroid Build Coastguard Worker 58*8542734aSAndroid Build Coastguard Worker #endif 59