SatCat5
ip_ping.h
1 // Copyright 2022-2025 The Aerospace Corporation.
3 // This file is a part of SatCat5, licensed under CERN-OHL-W v2 or later.
5 // Automatic "ping" functionality using an ICMP dispatch object
6 
7 #pragma once
8 
9 #include <satcat5/ip_address.h>
10 #include <satcat5/ip_icmp.h>
11 #include <satcat5/polling.h>
12 
13 namespace satcat5 {
14  namespace ip {
19  class Ping final
22  , public satcat5::poll::Timer
23  {
24  public:
27  ~Ping() SATCAT5_OPTIONAL_DTOR;
28 
30  static constexpr unsigned UNLIMITED = (unsigned)(-1);
31 
33  void arping(
34  const satcat5::ip::Addr& dstaddr,
35  unsigned qty = satcat5::ip::Ping::UNLIMITED);
36 
38  void ping(
39  const satcat5::ip::Addr& dstaddr,
40  unsigned qty = satcat5::ip::Ping::UNLIMITED);
41 
43  void stop();
44 
45  private:
46  void arp_event(
47  const satcat5::eth::MacAddr& mac,
48  const satcat5::ip::Addr& ip) override;
49  void ping_event(
50  const satcat5::ip::Addr& from, u32 elapsed_usec) override;
51  void send_arping();
52  void send_ping();
53  void timer_event() override;
54 
55  satcat5::ip::Dispatch* const m_iface;
56  satcat5::ip::Address m_addr;
57  satcat5::util::TimeVal m_arp_tref;
58  unsigned m_arp_remct;
59  unsigned m_icmp_remct;
60  bool m_reply_rcvd;
61  };
62  }
63 }
Callback interface for responding to ARP and ICMP events.
Definition: eth_arp.h:46
Connection metadata for an IPv4 address.
Definition: ip_address.h:38
Protocol handler and dispatch unit for Internet Protocol v4 (IPv4).
Definition: ip_dispatch.h:43
Automatic "ping" functionality using an ICMP dispatch object A simplified wrapper for basic "ping" fu...
Definition: ip_ping.h:23
void arping(const satcat5::ip::Addr &dstaddr, unsigned qty=satcat5::ip::Ping::UNLIMITED)
Begin sending ARPING queries (ARP query).
Definition: ip_ping.cc:31
void timer_event() override
Child class MUST override this method.
Definition: ip_ping.cc:118
void ping_event(const satcat5::ip::Addr &from, u32 elapsed_usec) override
Callback method when a ping response is received.
Definition: ip_ping.cc:80
static constexpr unsigned UNLIMITED
All requests can send N queries or until told to stop.
Definition: ip_ping.h:30
void arp_event(const satcat5::eth::MacAddr &mac, const satcat5::ip::Addr &ip) override
Callback for any announced MAC/IP address pair.
Definition: ip_ping.cc:68
void stop()
Stop any ongoing activities.
Definition: ip_ping.cc:58
void ping(const satcat5::ip::Addr &dstaddr, unsigned qty=satcat5::ip::Ping::UNLIMITED)
Begin sending PING queries (ICMP echo request).
Definition: ip_ping.cc:45
Ping(satcat5::ip::Dispatch *iface)
Tie this Ping wrapper to an IP-dispatch object.
Definition: ip_ping.cc:14
Callback API for handling "ping" reponses.
Definition: ip_icmp.h:62
Timer objects are polled after a fixed delay or at a regular interval.
Definition: polling.h:213
Core event-processing loop for SatCat5 software.
An Ethernet MAC address (with serializable interface).
Definition: eth_header.h:29
IPv4 address is a 32-bit unsigned integer.
Definition: ip_core.h:15
Timestamp for measuring elapsed time.
Definition: timeref.h:48