blob: f9fbe4f0071c04a8639da34d6bbde305f5982f46 [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/*
3 * Copyright (c) 2014-2022, 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>
30#include <string_view>
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080031
32namespace nfd {
33
34class Network
35{
36public:
Davide Pesavento89567d32016-11-19 16:39:45 +010037 Network();
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080038
39 Network(const boost::asio::ip::address& minAddress,
Davide Pesavento89567d32016-11-19 16:39:45 +010040 const boost::asio::ip::address& maxAddress);
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080041
42 bool
43 doesContain(const boost::asio::ip::address& address) const
44 {
Davide Pesavento89567d32016-11-19 16:39:45 +010045 return m_minAddress <= address && address <= m_maxAddress;
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080046 }
47
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080048 static const Network&
49 getMaxRangeV4();
50
51 static const Network&
52 getMaxRangeV6();
53
Davide Pesavento89567d32016-11-19 16:39:45 +010054 static bool
Davide Pesaventoa3a7a4e2022-05-29 16:06:22 -040055 isValidCidr(std::string_view cidr);
Davide Pesavento89567d32016-11-19 16:39:45 +010056
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080057 bool
58 operator==(const Network& rhs) const
59 {
60 return m_minAddress == rhs.m_minAddress && m_maxAddress == rhs.m_maxAddress;
61 }
62
63 bool
64 operator!=(const Network& rhs) const
65 {
66 return !(*this == rhs);
67 }
68
69private:
70 boost::asio::ip::address m_minAddress;
71 boost::asio::ip::address m_maxAddress;
72
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080073 friend std::ostream&
74 operator<<(std::ostream& os, const Network& network);
Davide Pesavento89567d32016-11-19 16:39:45 +010075
76 friend std::istream&
77 operator>>(std::istream& is, Network& network);
Alexander Afanasyev689f0e92014-11-09 12:09:00 -080078};
79
80std::ostream&
81operator<<(std::ostream& os, const Network& network);
82
83std::istream&
84operator>>(std::istream& is, Network& network);
85
86} // namespace nfd
87
88#endif // NFD_CORE_NETWORK_HPP