16316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum/* 26316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * Copyright (C) 2015 The Android Open Source Project 36316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * 46316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * Licensed under the Apache License, Version 2.0 (the "License"); 56316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * you may not use this file except in compliance with the License. 66316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * You may obtain a copy of the License at 76316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * 86316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * http://www.apache.org/licenses/LICENSE-2.0 96316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * 106316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * Unless required by applicable law or agreed to in writing, software 116316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * distributed under the License is distributed on an "AS IS" BASIS, 126316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * See the License for the specific language governing permissions and 146316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * limitations under the License. 156316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum */ 166316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 176316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#ifndef ANDROID_IP_PREFIX_H 186316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#define ANDROID_IP_PREFIX_H 196316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 2047f876b74be0a2d6d417f5ff385f85d835a97fe9Jiyong Park#ifndef __ANDROID_VNDK__ 2147f876b74be0a2d6d417f5ff385f85d835a97fe9Jiyong Park 226316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <netinet/in.h> 236316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 246316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <binder/Parcelable.h> 256316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <utils/String16.h> 266316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <utils/StrongPointer.h> 276316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 286316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaumnamespace android { 296316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 306316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaumnamespace net { 316316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 326316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum/* 336316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * C++ implementation of the Java class android.net.IpPrefix 346316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum */ 356316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaumclass IpPrefix : public Parcelable { 366316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaumpublic: 376316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum IpPrefix() = default; 386316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum virtual ~IpPrefix() = default; 396316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum IpPrefix(const IpPrefix& prefix) = default; 406316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 416316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum IpPrefix(const struct in6_addr& addr, int32_t plen): 426316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum mUnion(addr), mPrefixLength(plen), mIsIpv6(true) { } 436316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 446316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum IpPrefix(const struct in_addr& addr, int32_t plen): 456316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum mUnion(addr), mPrefixLength(plen), mIsIpv6(false) { } 466316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 476316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum bool getAddressAsIn6Addr(struct in6_addr* addr) const; 486316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum bool getAddressAsInAddr(struct in_addr* addr) const; 496316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 506316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum const struct in6_addr& getAddressAsIn6Addr() const; 516316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum const struct in_addr& getAddressAsInAddr() const; 526316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 536316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum bool isIpv6() const; 546316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum bool isIpv4() const; 556316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 566316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum int32_t getPrefixLength() const; 576316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 586316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum void setAddress(const struct in6_addr& addr); 596316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum void setAddress(const struct in_addr& addr); 606316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 616316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum void setPrefixLength(int32_t prefix); 626316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 636316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum friend bool operator==(const IpPrefix& lhs, const IpPrefix& rhs); 646316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 656316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum friend bool operator!=(const IpPrefix& lhs, const IpPrefix& rhs) { 666316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum return !(lhs == rhs); 676316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum } 686316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 696316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaumpublic: 706316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum // Overrides 716316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum status_t writeToParcel(Parcel* parcel) const override; 726316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum status_t readFromParcel(const Parcel* parcel) override; 736316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 746316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaumprivate: 756316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum union InternalUnion { 7648dd099b53c78eb2f0f53928115a0a2a58485dccRobert Quattlebaum InternalUnion() = default; 776316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum InternalUnion(const struct in6_addr &addr):mIn6Addr(addr) { }; 786316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum InternalUnion(const struct in_addr &addr):mInAddr(addr) { }; 796316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum struct in6_addr mIn6Addr; 806316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum struct in_addr mInAddr; 816316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum } mUnion; 826316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum int32_t mPrefixLength; 836316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum bool mIsIpv6; 846316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum}; 856316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 866316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum} // namespace net 876316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 886316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum} // namespace android 896316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 9047f876b74be0a2d6d417f5ff385f85d835a97fe9Jiyong Park#else // __ANDROID_VNDK__ 9147f876b74be0a2d6d417f5ff385f85d835a97fe9Jiyong Park#error "This header is not visible to vendors" 9247f876b74be0a2d6d417f5ff385f85d835a97fe9Jiyong Park#endif // __ANDROID_VNDK__ 9347f876b74be0a2d6d417f5ff385f85d835a97fe9Jiyong Park 946316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#endif // ANDROID_IP_PREFIX_H 95