8#include <linux/rtnetlink.h>
19 std::array<uint8_t, 16>
dst;
28template<
typename Derived,
typename Result>
38 return {
reinterpret_cast<const uint8_t*
>(&
request_),
request_.header.nlmsg_len};
42 void build_request(uint16_t msg_type, uint16_t msg_flags, uint16_t ndm_state,
43 uint8_t ndm_flags, std::span<uint8_t, 16> address) {
44 request_.header.nlmsg_len = NLMSG_LENGTH(
sizeof(ndmsg));
45 request_.header.nlmsg_type = msg_type;
46 request_.header.nlmsg_flags = msg_flags;
48 request_.
header.nlmsg_pid = 0;
50 request_.message.ndm_family = RTN_UNSPEC;
52 request_.
message.ndm_state = ndm_state;
53 request_.message.ndm_flags = ndm_flags;
54 request_.message.ndm_type = RTN_UNSPEC;
60 request_.
dst_attr.rta_type = NDA_DST;
63 std::memcpy(
request_.dst.data(), address.data(), address.size());
65 const auto payload = NLMSG_ALIGN(
request_.header.nlmsg_len);
Base task type for neighbor-related netlink operations.
Definition nl_neighbor_task.hxx:29
void build_request(uint16_t msg_type, uint16_t msg_flags, uint16_t ndm_state, uint8_t ndm_flags, std::span< uint8_t, 16 > address)
Definition nl_neighbor_task.hxx:42
NeighborRequest request_
Definition nl_neighbor_task.hxx:31
auto request_payload() const -> std::span< const uint8_t >
Get the serialized request payload for the neighbor request.
Definition nl_neighbor_task.hxx:37
Base template for single-request netlink tasks.
Definition nl_request_task.hxx:46
RequestTask(SocketGuard &socket_guard, uint16_t ifindex, uint32_t sequence) noexcept
Construct a RequestTask.
Definition nl_request_task.hxx:61
auto ifindex() const noexcept -> uint16_t
Definition nl_request_task.hxx:93
auto sequence() const noexcept -> uint32_t
Definition nl_request_task.hxx:89
Definition nl_common.hxx:21
Definition nl_common.hxx:20
Definition nl_neighbor_task.hxx:15
rtattr dst_attr
Definition nl_neighbor_task.hxx:18
std::array< uint8_t, 16 > dst
Definition nl_neighbor_task.hxx:19
ndmsg message
Definition nl_neighbor_task.hxx:17
nlmsghdr header
Definition nl_neighbor_task.hxx:16