llmx-rtaco 0.0.1
RTNL-only netlink control-plane library for Linux (C++23).
Loading...
Searching...
No Matches
nl_address_task.hxx
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <span>
5
6#include <linux/if_addr.h>
7#include <linux/netlink.h>
8
10
11namespace llmx {
12namespace rtaco {
13
15 nlmsghdr header;
16 ifaddrmsg message;
17};
18
25template<typename Derived, typename Result>
26class AddressTask : public RequestTask<Derived, Result> {
27protected:
29
30public:
31 using RequestTask<Derived, Result>::RequestTask;
32
37 auto request_payload() const -> std::span<const uint8_t> {
38 return {reinterpret_cast<const uint8_t*>(&request_), request_.header.nlmsg_len};
39 }
40
41protected:
42 void build_request(uint16_t msg_flags = NLM_F_REQUEST | NLM_F_DUMP,
43 uint8_t address_family = RTN_UNSPEC, uint8_t prefixlen = 0,
44 uint8_t ifa_flags = 0, uint8_t scope = RT_SCOPE_UNIVERSE) {
45 request_.header.nlmsg_len = NLMSG_LENGTH(sizeof(ifaddrmsg));
46 request_.header.nlmsg_type = RTM_GETADDR;
47 request_.header.nlmsg_flags = msg_flags;
48 request_.header.nlmsg_seq = this->sequence();
49 request_.header.nlmsg_pid = 0;
50
51 request_.message.ifa_family = address_family;
52 request_.message.ifa_prefixlen = prefixlen;
53 request_.message.ifa_flags = ifa_flags;
54 request_.message.ifa_scope = scope;
55 request_.message.ifa_index = this->ifindex();
56 }
57};
58
59} // namespace rtaco
60} // namespace llmx
Base task type for address-related netlink operations.
Definition nl_address_task.hxx:26
AddressRequest request_
Definition nl_address_task.hxx:28
auto request_payload() const -> std::span< const uint8_t >
Get the serialized request payload for sending.
Definition nl_address_task.hxx:37
void build_request(uint16_t msg_flags=NLM_F_REQUEST|NLM_F_DUMP, uint8_t address_family=RTN_UNSPEC, uint8_t prefixlen=0, uint8_t ifa_flags=0, uint8_t scope=RT_SCOPE_UNIVERSE)
Definition nl_address_task.hxx:42
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_address_task.hxx:14
ifaddrmsg message
Definition nl_address_task.hxx:16
nlmsghdr header
Definition nl_address_task.hxx:15