xref: /openbmc/phosphor-networkd/src/types.hpp (revision dd9ef815)
11bbe3d1eSWilliam A. Kennington III #pragma once
21bbe3d1eSWilliam A. Kennington III 
31bbe3d1eSWilliam A. Kennington III #include <ifaddrs.h>
41bbe3d1eSWilliam A. Kennington III #include <netinet/in.h>
51bbe3d1eSWilliam A. Kennington III #include <systemd/sd-event.h>
61bbe3d1eSWilliam A. Kennington III 
71bbe3d1eSWilliam A. Kennington III #include <chrono>
81bbe3d1eSWilliam A. Kennington III #include <memory>
91bbe3d1eSWilliam A. Kennington III #include <sdeventplus/clock.hpp>
101bbe3d1eSWilliam A. Kennington III #include <sdeventplus/utility/timer.hpp>
111bbe3d1eSWilliam A. Kennington III #include <string>
12*dd9ef815SWilliam A. Kennington III #include <unordered_map>
13f7dce2e8SWilly Tu #include <unordered_set>
141bbe3d1eSWilliam A. Kennington III #include <variant>
151bbe3d1eSWilliam A. Kennington III 
161bbe3d1eSWilliam A. Kennington III namespace phosphor
171bbe3d1eSWilliam A. Kennington III {
181bbe3d1eSWilliam A. Kennington III namespace network
191bbe3d1eSWilliam A. Kennington III {
201bbe3d1eSWilliam A. Kennington III 
211bbe3d1eSWilliam A. Kennington III using namespace std::chrono_literals;
221bbe3d1eSWilliam A. Kennington III 
23c7cf25f7SWilliam A. Kennington III // wait for three seconds before reloading systemd-networkd
24c7cf25f7SWilliam A. Kennington III constexpr auto reloadTimeout = 3s;
251bbe3d1eSWilliam A. Kennington III 
26d41db383SWilliam A. Kennington III // refresh the objets after four seconds as network
27d41db383SWilliam A. Kennington III // configuration takes 3-4 sec to reconfigure at most.
28d41db383SWilliam A. Kennington III constexpr auto refreshTimeout = 4s;
291bbe3d1eSWilliam A. Kennington III 
301bbe3d1eSWilliam A. Kennington III using Addr_t = ifaddrs*;
311bbe3d1eSWilliam A. Kennington III 
321bbe3d1eSWilliam A. Kennington III struct AddrDeleter
331bbe3d1eSWilliam A. Kennington III {
341bbe3d1eSWilliam A. Kennington III     void operator()(Addr_t ptr) const
351bbe3d1eSWilliam A. Kennington III     {
361bbe3d1eSWilliam A. Kennington III         freeifaddrs(ptr);
371bbe3d1eSWilliam A. Kennington III     }
381bbe3d1eSWilliam A. Kennington III };
391bbe3d1eSWilliam A. Kennington III 
401bbe3d1eSWilliam A. Kennington III using AddrPtr = std::unique_ptr<ifaddrs, AddrDeleter>;
411bbe3d1eSWilliam A. Kennington III 
421bbe3d1eSWilliam A. Kennington III /* Need a custom deleter for freeing up sd_event */
431bbe3d1eSWilliam A. Kennington III struct EventDeleter
441bbe3d1eSWilliam A. Kennington III {
451bbe3d1eSWilliam A. Kennington III     void operator()(sd_event* event) const
461bbe3d1eSWilliam A. Kennington III     {
471bbe3d1eSWilliam A. Kennington III         sd_event_unref(event);
481bbe3d1eSWilliam A. Kennington III     }
491bbe3d1eSWilliam A. Kennington III };
501bbe3d1eSWilliam A. Kennington III using EventPtr = std::unique_ptr<sd_event, EventDeleter>;
511bbe3d1eSWilliam A. Kennington III 
521bbe3d1eSWilliam A. Kennington III // Byte representations for common address types in network byte order
531bbe3d1eSWilliam A. Kennington III using InAddrAny = std::variant<struct in_addr, struct in6_addr>;
541bbe3d1eSWilliam A. Kennington III 
55*dd9ef815SWilliam A. Kennington III using InterfaceList = std::unordered_set<std::string>;
561bbe3d1eSWilliam A. Kennington III 
571bbe3d1eSWilliam A. Kennington III using Timer = sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic>;
581bbe3d1eSWilliam A. Kennington III 
59*dd9ef815SWilliam A. Kennington III struct string_hash : public std::hash<std::string_view>
60*dd9ef815SWilliam A. Kennington III {
61*dd9ef815SWilliam A. Kennington III     using is_transparent = void;
62*dd9ef815SWilliam A. Kennington III };
63*dd9ef815SWilliam A. Kennington III template <typename V>
64*dd9ef815SWilliam A. Kennington III using string_umap =
65*dd9ef815SWilliam A. Kennington III     std::unordered_map<std::string, V, string_hash, std::equal_to<>>;
66*dd9ef815SWilliam A. Kennington III 
671bbe3d1eSWilliam A. Kennington III } // namespace network
681bbe3d1eSWilliam A. Kennington III } // namespace phosphor
69