master
h 54 lines 1.39 KB
Raw
1 // Copyright (C) Microsoft Corporation. All rights reserved.
2 #pragma once
3
4 #include "NetlinkResponse.h"
5 #include "NetlinkTransaction.h"
6 #include <sys/socket.h>
7 #include "lxwil.h"
8
9 class NetlinkChannel
10 {
11 public:
12 NetlinkChannel(int socketType = SOCK_RAW, int netlinkFamily = NETLINK_ROUTE, int groups = 0);
13 ~NetlinkChannel();
14
15 NetlinkChannel(const NetlinkChannel&) = delete;
16 NetlinkChannel(NetlinkChannel&& other);
17
18 const NetlinkChannel& operator=(const NetlinkChannel&) = delete;
19 const NetlinkChannel& operator=(NetlinkChannel&& other);
20
21 template <typename TRequest>
22 NetlinkTransaction CreateTransaction(const TRequest& message, int type, int flags);
23
24 NetlinkTransaction CreateTransaction(const void* message, size_t messageSize, int type, int flags);
25
26 NetlinkTransaction CreateTransaction(int type, int flags);
27
28 void SendMessage(const std::vector<char>& message);
29
30 NetlinkResponse ReceiveNetlinkResponse();
31
32 int GetInterfaceIndex(const std::string& name);
33
34 int GetInterfaceFlags(const std::string& name);
35
36 int SetInterfaceFlags(const std::string& name, int flags);
37
38 static NetlinkChannel FromFd(int fd);
39
40 private:
41 struct Tag
42 {
43 };
44
45 NetlinkChannel(Tag);
46
47 NetlinkTransaction CreateTransactionImpl(std::vector<char>&& message, int type, int flags);
48
49 wil::unique_fd m_socket;
50
51 std::atomic<int> seqNumber;
52 };
53
54 #include "NetlinkChannel.hxx"