76 typedef void (*
AntTxCallback)(uint8_t type, uint8_t direction,
bool broadcast);
101 double& regular,
double& virt)
const;
113 Ptr<Ipv4Route>
RouteOutput(Ptr<Packet> p,
const Ipv4Header& header,
114 Ptr<NetDevice> oif, Socket::SocketErrno& sockerr)
override;
115 bool RouteInput(Ptr<const Packet> p,
const Ipv4Header& header, Ptr<const NetDevice> idev,
124 Time::Unit unit = Time::S)
const override;
138 return m_logic ? m_logic->linkfailPropagations() : 0;
141 return m_logic ? m_logic->linkfailBudgetDrops() : 0;
144 return m_logic ? m_logic->linkfailOriginsSuppressed() : 0;
152 return m_logic ? m_logic->directedSteers() : 0;
159 return m_logic ? m_logic->table().numEntriesRegular() : 0;
162 return m_logic ? m_logic->table().numEntriesVirtual() : 0;
184 uint64_t
RepairDiscards()
const {
return m_logic ? m_logic->repairDiscards() : 0; }
202 static ::anthocnet::core::NodeAddress
ToCore(Ipv4Address a) {
203 const uint32_t raw = a.Get();
204 if (raw == 0xFFFFFFFFu)
return 0;
208 return Ipv4Address(
static_cast<uint32_t
>(a));
213 Ptr<Ipv4Route> LoopbackRoute(
const Ipv4Header& header, Ptr<NetDevice> oif)
const;
214 bool IsMyOwnAddress(Ipv4Address src)
const;
215 Ptr<Socket> FindSocketWithInterfaceAddress(Ipv4InterfaceAddress addr)
const;
218 void RecvAnt(Ptr<Socket> socket);
219 void SendAnt(const ::anthocnet::core::AntMessage& msg, Ipv4Address dest);
220 void ExecuteDecisions(
const std::vector<::anthocnet::core::RouteDecision>& decisions,
224 void DeferredRouteOutput(Ptr<const Packet> p,
const Ipv4Header& header,
225 UnicastForwardCallback ucb, ErrorCallback ecb);
232 void HelloTimerExpire();
233 void ProactiveTimerExpire();
240 void ReactiveRetryTimerExpire();
246 void NotifyTxError(WifiMacDropReason reason, Ptr<const AHN_WIFI_MPDU> mpdu);
249 void NotifyAckedMpdu(Ptr<const AHN_WIFI_MPDU> mpdu);
251 bool MapMacToCore(
const Mac48Address& mac,
267 Ptr<NetDevice>& dev, uint32_t& iface)
const;
281 struct SocketByBoundDevice {
282 bool operator()(
const Ptr<Socket>& a,
const Ptr<Socket>& b)
const;
284 std::map<Ptr<Socket>, Ipv4InterfaceAddress, SocketByBoundDevice> m_socketAddresses;
285 std::map<Ptr<Socket>, Ipv4InterfaceAddress, SocketByBoundDevice> m_socketSubnetBroadcast;
292 Ipv4Address linkLocal;
299 std::map<Ipv4Address, PeerRoute> m_peerRoutes;
307 std::map<uint32_t, std::set<::anthocnet::core::NodeAddress>> m_ifaceNeighbors;
312 std::unique_ptr<::anthocnet::core::AntRouterLogic> m_logic;
315 RequestQueue m_queue;
318 Timer m_proactiveTimer;
321 double m_timerJitter = 0.05;
322 Ptr<UniformRandomVariable> m_timerRng = CreateObject<UniformRandomVariable>();
327 Time TimerDelay(Time base,
bool first);
328 Timer m_reactiveRetryTimer;
331 Time m_helloInterval;
332 Time m_proactiveInterval;
337 double m_hopCountAlpha;
338 bool m_enableProactive;
339 bool m_enableDiffusion;
340 bool m_enableReactive;
342 bool m_enableLinkFail;
343 bool m_enableDirectedReactive;
344 double m_proactiveBroadcastProb;
345 double m_proactiveVirtualMargin;
346 uint32_t m_maxHelloAdverts;
348 uint32_t m_txFailureThreshold;
349 bool m_enableMacFailureDetector;
350 uint32_t m_maxReinjectPerPacket;
351 double m_repairWaitFactor;
352 double m_repairTimeout;
354 bool m_enableMultipath;
355 double m_antAcceptanceFactor;
356 double m_antAcceptanceFactorNewHop;
357 double m_linkfailNotifyInterval;
359 Time m_reconvHoldCap;
360 Time m_repairHoldCap;
361 Time m_reactiveRetryInterval;
365 double m_macServiceAlpha;
366 double m_macServiceEwmaSec = 0.0;
368 bool m_backlogAtLastAck =
false;
369 bool m_enableMacMetric;
373 Ptr<WifiMac> m_wifiMac;
383 struct TxQueueState {
384 Ptr<Queue<Packet>> queue;
385 double ewmaSec = 0.0;
387 bool backlogAtLastDequeue =
false;
389 std::map<uint32_t, TxQueueState> m_txQueues;
390 void NotifyTxDequeue(uint32_t interface, Ptr<const Packet> p);
392 Ptr<const Packet> p);
397 UnicastForwardCallback m_cachedUcb;
398 ErrorCallback m_cachedEcb;
404 std::set<::anthocnet::core::NodeAddress> m_everRouted;
407 uint64_t m_repairDiscardedPackets = 0;
408 uint64_t m_macReinjectedPackets = 0;
411 TracedCallback<uint8_t, uint8_t, bool> m_txAntTrace;
412 TracedCallback<uint8_t, uint8_t> m_rxAntTrace;
413 TracedCallback<uint32_t, uint32_t, bool> m_routeChangedTrace;
415 TracedCallback<const Ipv4Header&, Ptr<const Packet>> m_macReinjectTrace;
421 TracedCallback<const Ipv4Header&, Ptr<const Packet>> m_macReinjectSkipTrace;