25#ifndef JOIN_FABRIC_NETLINK_ENDPOINT_HPP
26#define JOIN_FABRIC_NETLINK_ENDPOINT_HPP
32#include <linux/netfilter/nfnetlink.h>
33#include <linux/rtnetlink.h>
34#include <linux/netlink.h>
41 template <
class Protocol>
75 struct sockaddr_nl* nl =
reinterpret_cast<struct sockaddr_nl*
> (&this->
_addr);
117 return Protocol::nf ();
119 return Protocol::rt ();
126 constexpr socklen_t
length () const noexcept
128 return sizeof (
struct sockaddr_nl);
137 reinterpret_cast<struct sockaddr_nl*
> (&this->
_addr)->nl_pid =
pid;
144 uint32_t
pid () const noexcept
146 return reinterpret_cast<const struct sockaddr_nl*
> (&this->
_addr)->nl_pid;
155 reinterpret_cast<struct sockaddr_nl*
> (&this->
_addr)->nl_groups =
groups;
164 return reinterpret_cast<const struct sockaddr_nl*
> (&this->
_addr)->nl_groups;
173 return std::string ();
187 template <
class Protocol>
190 return a.pid () == b.pid () && a.groups () == b.groups ();
199 template <
class Protocol>
203 if (
auto cmp = a.pid () <=> b.pid (); cmp != 0)
207 return a.groups () <=> b.groups ();
216 template <
class Protocol>
219 os <<
"pid=" << endpoint.
pid () <<
",groups=" << endpoint.
groups ();
basic endpoint class.
Definition endpoint.hpp:50
constexpr BasicEndpoint() noexcept
default constructor.
Definition endpoint.hpp:55
struct sockaddr * addr() noexcept
get socket address.
Definition endpoint.hpp:74
struct sockaddr_storage _addr
socket address storage.
Definition endpoint.hpp:90
basic netlink endpoint class.
Definition netlink_endpoint.hpp:43
uint32_t groups() const noexcept
get netlink groups.
Definition netlink_endpoint.hpp:162
uint32_t pid() const noexcept
get port id.
Definition netlink_endpoint.hpp:144
int _protocol
netlink protocol type.
Definition netlink_endpoint.hpp:178
void groups(uint32_t groups) noexcept
set netlink groups.
Definition netlink_endpoint.hpp:153
std::string device() const
get device name (not applicable for netlink).
Definition netlink_endpoint.hpp:171
constexpr BasicNetlinkEndpoint() noexcept
default constructor.
Definition netlink_endpoint.hpp:48
BasicNetlinkEndpoint(const struct sockaddr *addr, socklen_t len) noexcept
create instance using socket address.
Definition netlink_endpoint.hpp:59
BasicNetlinkEndpoint(uint32_t pid, uint32_t groups) noexcept
create instance using netlink groups.
Definition netlink_endpoint.hpp:85
BasicNetlinkEndpoint(const Protocol &protocol, uint32_t groups) noexcept
create instance using netlink groups.
Definition netlink_endpoint.hpp:95
Protocol protocol() const noexcept
get endpoint protocol.
Definition netlink_endpoint.hpp:113
constexpr socklen_t length() const noexcept
get socket address length.
Definition netlink_endpoint.hpp:126
BasicNetlinkEndpoint(const Protocol &protocol, uint32_t pid, uint32_t groups) noexcept
create instance using netlink groups.
Definition netlink_endpoint.hpp:71
void pid(uint32_t pid) noexcept
set port id.
Definition netlink_endpoint.hpp:135
BasicNetlinkEndpoint(uint32_t groups) noexcept
create instance using netlink groups.
Definition netlink_endpoint.hpp:104
Definition acceptor.hpp:32
bool operator==(const BasicLinkLayerEndpoint< Protocol > &a, const BasicLinkLayerEndpoint< Protocol > &b) noexcept
compare if endpoints are equal.
Definition endpoint.hpp:196
std::ostream & operator<<(std::ostream &os, const BasicLinkLayerEndpoint< Protocol > &endpoint)
push endpoint representation into a stream.
Definition endpoint.hpp:221
std::strong_ordering operator<=>(const BasicLinkLayerEndpoint< Protocol > &a, const BasicLinkLayerEndpoint< Protocol > &b) noexcept
three-way compare endpoints.
Definition endpoint.hpp:208