25 #ifndef COMMON_NETLINK_NETLINK_MESSAGE_HPP
26 #define COMMON_NETLINK_NETLINK_MESSAGE_HPP
33 #include <type_traits>
35 #include <sys/socket.h>
36 #include <linux/netlink.h>
42 class NetlinkResponse;
102 const nlmsghdr&
hdr()
const;
155 NetlinkResponse&
fetch(
int ifla, std::string& value,
unsigned maxLen = std::numeric_limits<unsigned>::max());
193 std::unique_ptr<std::vector<char>>
mNlmsg;
198 const char*
get(
int ifla,
int iflasize)
const;
199 const char*
get(
int size = 0)
const;
217 static_assert(std::is_pod<T>::value,
"Require trivial and standard-layout");
218 return put(ifla, &value,
sizeof(value));
224 static_assert(std::is_pod<T>::value,
"Require trivial and standard-layout structure");
225 return put(&value,
sizeof(value));
231 static_assert(std::is_pod<T>::value,
"Require trivial and standard-layout");
232 return fetch(ifla, reinterpret_cast<char*>(&value),
sizeof(value));
238 static_assert(std::is_pod<T>::value,
"Require trivial and standard-layout structure");
239 return fetch(reinterpret_cast<char*>(&value),
sizeof(value));
245 static_assert(std::is_pod<T>::value,
"Require trivial and standard-layout structure");
246 return seek(
sizeof(T));
252 #endif // COMMON_NETLINK_NETLINK_MESSAGE_HPP
int getMessageType() const
Get message type.
Definition: netlink-message.cpp:152
friend NetlinkResponse send(const NetlinkMessage &msg, int pid)
Send netlink message.
Definition: netlink-message.cpp:305
NetlinkMessage & put(int ifla, const std::string &value)
Definition: netlink-message.cpp:91
NetlinkResponse & closeNested()
End reading nested attribute.
Definition: netlink-message.cpp:205
int getHdrPosition() const
Definition: netlink-message.cpp:299
NetlinkResponse & skip()
Skip data of type T.
Definition: netlink-message.hpp:243
NetlinkResponse send(const NetlinkMessage &msg)
Send netlink message.
Definition: netlink-message.cpp:58
void setMinCapacity(unsigned int size)
Definition: netlink-message.cpp:127
NetlinkResponse & seek(int len)
Definition: netlink-message.cpp:285
NetlinkMessage is used to creatie a netlink messages.
Definition: netlink-message.hpp:48
friend NetlinkResponse send(const NetlinkMessage &msg, int pid)
Send netlink message.
Definition: netlink-message.cpp:305
int mPosition
Definition: netlink-message.hpp:196
NetlinkMessage(std::uint16_t type, std::uint16_t flags)
Create netlink message.
Definition: netlink-message.cpp:63
std::stack< int > mNested
Definition: netlink-message.hpp:97
char data[368]
Definition: initctl.cpp:41
nlmsghdr * mNlmsgHdr
Definition: netlink-message.hpp:195
NetlinkResponse(std::unique_ptr< std::vector< char >> &&message)
Definition: netlink-message.cpp:134
int size() const
Definition: netlink-message.cpp:294
NetlinkMessage & endNested()
End nested atribute.
Definition: netlink-message.cpp:82
bool hasAttribute() const
Check if there is any attribute in message.
Definition: netlink-message.cpp:167
std::vector< char > mNlmsg
Definition: netlink-message.hpp:96
NetlinkResponse & fetch(int ifla, std::string &value, unsigned maxLen=std::numeric_limits< unsigned >::max())
Fetch attribute.
Definition: netlink-message.cpp:220
bool hasMessage() const
Check if theres is next message in netlink response.
Definition: netlink-message.cpp:141
std::stack< int > mNested
Definition: netlink-message.hpp:194
int getAttributeType() const
Get attributie type.
Definition: netlink-message.cpp:275
void skipAttribute()
Skip attribute.
Definition: netlink-message.cpp:179
NetlinkResponse & openNested(int ifla)
Start reading nested attribute.
Definition: netlink-message.cpp:191
int getAttributeLength() const
Get attributie length.
Definition: netlink-message.cpp:280
NetlinkMessage & beginNested(int ifla)
Add nested atribute type.
Definition: netlink-message.cpp:74
std::unique_ptr< std::vector< char > > mNlmsg
Definition: netlink-message.hpp:193
bool isNestedAttribute() const
Check if current attribute is nested.
Definition: netlink-message.cpp:174
void fetchNextMessage()
Fetch next message.
Definition: netlink-message.cpp:157
NetlinkResponse is used to read netlink messages.
Definition: netlink-message.hpp:109
nlmsghdr & hdr()
Definition: netlink-message.cpp:119