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>
211 template <
class Protocol>
214 if (a.pid () != b.pid ())
216 return a.pid () < b.pid ();
218 return a.groups () < b.groups ();
227 template <
class Protocol>
239 template <
class Protocol>
251 template <
class Protocol>
263 template <
class Protocol>
266 os <<
"pid=" << endpoint.
pid () <<
",groups=" << endpoint.
groups ();
basic endpoint class.
Definition endpoint.hpp:49
constexpr BasicEndpoint() noexcept
default constructor.
Definition endpoint.hpp:54
struct sockaddr * addr() noexcept
get socket address.
Definition endpoint.hpp:73
struct sockaddr_storage _addr
socket address storage.
Definition endpoint.hpp:89
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 endpoint is lower or equal.
Definition endpoint.hpp:234
bool operator==(const BasicLinkLayerEndpoint< Protocol > &a, const BasicLinkLayerEndpoint< Protocol > &b) noexcept
compare if endpoints are equal.
Definition endpoint.hpp:186
bool operator!=(const BasicLinkLayerEndpoint< Protocol > &a, const BasicLinkLayerEndpoint< Protocol > &b) noexcept
compare if endpoints are not equal.
Definition endpoint.hpp:198
bool operator>=(const BasicLinkLayerEndpoint< Protocol > &a, const BasicLinkLayerEndpoint< Protocol > &b) noexcept
compare if endpoint is greater or equal.
Definition endpoint.hpp:246
std::ostream & operator<<(std::ostream &os, const BasicLinkLayerEndpoint< Protocol > &endpoint)
push endpoint representation into a stream.
Definition endpoint.hpp:258
bool operator<(const BasicDatagramSocket< Protocol > &a, const BasicDatagramSocket< Protocol > &b) noexcept
compare if socket handle is inferior.
Definition datagram_socket.hpp:394
bool operator>(const BasicLinkLayerEndpoint< Protocol > &a, const BasicLinkLayerEndpoint< Protocol > &b) noexcept
compare if endpoint is greater.
Definition endpoint.hpp:222