blob: 0cf12cd17e45eaa2f9f1226eff3038821f101c53 [file] [log] [blame]
Alexander Afanasyev689f0e92014-11-09 12:09:00 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesaventoa3a7a4e2022-05-29 16:06:22 -04002/*
Davide Pesavento191a7a22023-05-17 22:40:43 -04003 * Copyright (c) 2014-2023, Regents of the University of California,
susmit91e1d7c2016-10-03 16:16:57 -06004 * Arizona Board of Regents,
5 * Colorado State University,
6 * University Pierre & Marie Curie, Sorbonne University,
7 * Washington University in St. Louis,
8 * Beijing Institute of Technology,
9 * The University of Memphis
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080010 *
11 * This file is part of NFD (Named Data Networking Forwarding Daemon).
12 * See AUTHORS.md for complete list of NFD authors and contributors.
13 *
14 * NFD is free software: you can redistribute it and/or modify it under the terms
15 * of the GNU General Public License as published by the Free Software Foundation,
16 * either version 3 of the License, or (at your option) any later version.
17 *
18 * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
19 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
20 * PURPOSE. See the GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License along with
23 * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
24 **/
25
26#ifndef NFD_CORE_NETWORK_HPP
27#define NFD_CORE_NETWORK_HPP
28
Davide Pesaventoa9b09b62022-06-04 14:07:25 -040029#include <boost/asio/ip/address.hpp>
Davide Pesavento8f0b8b62023-08-29 21:04:08 -040030#include <boost/operators.hpp>
31
Davide Pesaventoa9b09b62022-06-04 14:07:25 -040032#include <string_view>
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080033
34namespace nfd {
35
Davide Pesavento8f0b8b62023-08-29 21:04:08 -040036class Network : private boost::equality_comparable<Network>
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080037{
38public:
Davide Pesavento89567d32016-11-19 16:39:45 +010039 Network();
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080040
41 Network(const boost::asio::ip::address& minAddress,
Davide Pesavento89567d32016-11-19 16:39:45 +010042 const boost::asio::ip::address& maxAddress);
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080043
44 bool
Davide Pesavento191a7a22023-05-17 22:40:43 -040045 doesContain(const boost::asio::ip::address& address) const noexcept
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080046 {
Davide Pesavento89567d32016-11-19 16:39:45 +010047 return m_minAddress <= address && address <= m_maxAddress;
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080048 }
49
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080050 static const Network&
51 getMaxRangeV4();
52
53 static const Network&
54 getMaxRangeV6();
55
Davide Pesavento89567d32016-11-19 16:39:45 +010056 static bool
Davide Pesavento191a7a22023-05-17 22:40:43 -040057 isValidCidr(std::string_view cidr) noexcept;
Davide Pesavento89567d32016-11-19 16:39:45 +010058
Davide Pesavento191a7a22023-05-17 22:40:43 -040059private: // non-member operators
60 friend bool
61 operator==(const Network& lhs, const Network& rhs) noexcept
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080062 {
Davide Pesavento191a7a22023-05-17 22:40:43 -040063 return lhs.m_minAddress == rhs.m_minAddress &&
64 lhs.m_maxAddress == rhs.m_maxAddress;
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080065 }
66
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080067 friend std::ostream&
68 operator<<(std::ostream& os, const Network& network);
Davide Pesavento89567d32016-11-19 16:39:45 +010069
70 friend std::istream&
71 operator>>(std::istream& is, Network& network);
Davide Pesavento191a7a22023-05-17 22:40:43 -040072
73private:
74 boost::asio::ip::address m_minAddress;
75 boost::asio::ip::address m_maxAddress;
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080076};
77
78std::ostream&
79operator<<(std::ostream& os, const Network& network);
80
81std::istream&
82operator>>(std::istream& is, Network& network);
83
84} // namespace nfd
85
86#endif // NFD_CORE_NETWORK_HPP