blob: 173f21a3ad78be79413f62a4187097ccb85072b7 [file] [log] [blame]
Vince Lehman8a4c29e2016-07-11 08:49:35 +00001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Ashlesh Gawande92e4ea52017-07-19 11:38:12 -05002/*
awlane5fdcbec2023-12-15 14:56:05 -06003 * Copyright (c) 2014-2024, Regents of the University of California,
Vince Lehman8a4c29e2016-07-11 08:49:35 +00004 * 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.
10 *
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_DAEMON_FW_ASF_PROBING_MODULE_HPP
27#define NFD_DAEMON_FW_ASF_PROBING_MODULE_HPP
28
29#include "asf-measurements.hpp"
30
Davide Pesaventoe422f9e2022-06-03 01:30:23 -040031namespace nfd::fw::asf {
Vince Lehman8a4c29e2016-07-11 08:49:35 +000032
awlane5fdcbec2023-12-15 14:56:05 -060033/**
34 * \brief Container for ranking-related values.
35 */
36struct FaceStats
37{
38 Face* face = nullptr;
39 time::nanoseconds rtt = 0_ns;
40 time::nanoseconds srtt = 0_ns;
41 uint64_t cost = 0;
42};
43
44/**
45 * \brief ASF Probing Module.
Vince Lehman8a4c29e2016-07-11 08:49:35 +000046 */
47class ProbingModule
48{
49public:
50 explicit
51 ProbingModule(AsfMeasurements& measurements);
52
53 void
Davide Pesaventoa6f637a2019-08-28 23:23:20 -040054 scheduleProbe(const fib::Entry& fibEntry, time::milliseconds interval);
Vince Lehman8a4c29e2016-07-11 08:49:35 +000055
Junxiao Shia6de4292016-07-12 02:08:10 +000056 Face*
Davide Pesaventoa6f637a2019-08-28 23:23:20 -040057 getFaceToProbe(const Face& inFace, const Interest& interest,
58 const fib::Entry& fibEntry, const Face& faceUsed);
Vince Lehman8a4c29e2016-07-11 08:49:35 +000059
60 bool
Saurab Dulal432be572021-01-26 12:09:29 -060061 isProbingNeeded(const fib::Entry& fibEntry, const Name& interestName);
Vince Lehman8a4c29e2016-07-11 08:49:35 +000062
63 void
Saurab Dulal432be572021-01-26 12:09:29 -060064 afterForwardingProbe(const fib::Entry& fibEntry, const Name& interestName);
Vince Lehman8a4c29e2016-07-11 08:49:35 +000065
Ashlesh Gawande92e4ea52017-07-19 11:38:12 -050066 void
Ashlesh Gawande1ef93d02022-04-08 00:25:06 -040067 setProbingInterval(time::milliseconds probingInterval);
Ashlesh Gawande92e4ea52017-07-19 11:38:12 -050068
69 time::milliseconds
70 getProbingInterval() const
71 {
72 return m_probingInterval;
73 }
74
Vince Lehman8a4c29e2016-07-11 08:49:35 +000075public:
Davide Pesaventoe4b22382018-06-10 14:37:24 -040076 static constexpr time::milliseconds DEFAULT_PROBING_INTERVAL = 1_min;
77 static constexpr time::milliseconds MIN_PROBING_INTERVAL = 1_s;
Vince Lehman8a4c29e2016-07-11 08:49:35 +000078
awlane5fdcbec2023-12-15 14:56:05 -060079 struct FaceStatsProbingCompare
80 {
81 bool
82 operator()(const FaceStats& lhs, const FaceStats& rhs) const noexcept;
83 };
84 using FaceStatsProbingSet = std::set<FaceStats, FaceStatsProbingCompare>;
85
Vince Lehman8a4c29e2016-07-11 08:49:35 +000086private:
Ashlesh Gawande92e4ea52017-07-19 11:38:12 -050087 time::milliseconds m_probingInterval;
Vince Lehman8a4c29e2016-07-11 08:49:35 +000088 AsfMeasurements& m_measurements;
89};
90
Davide Pesaventoe422f9e2022-06-03 01:30:23 -040091} // namespace nfd::fw::asf
Vince Lehman8a4c29e2016-07-11 08:49:35 +000092
93#endif // NFD_DAEMON_FW_ASF_PROBING_MODULE_HPP