The Pedigree Project 0.1
mqueue-netlink.h
1/* Copyright (c) 2026, Pedigree Developers. */
2#ifndef POSIX_MQUEUE_NETLINK_H
3#define POSIX_MQUEUE_NETLINK_H
4
5#include "pedigree/kernel/process/ConditionVariable.h"
6
7#include "net-syscalls.h"
8
11 public:
12 MqueueNetlinkSocket(int type, int protocol);
13 ~MqueueNetlinkSocket() override;
15 return this;
16 }
17 bool create() override;
18 bool reserveCookie();
19 void deliverCookie(const uint8_t cookie[32], bool removed);
20 void lastDescriptorClosed() override;
21 bool canPoll() const override;
22 ReadyMask queryReady(bool reading, bool writing) override;
24 int connect(const struct sockaddr_storage*, socklen_t) override;
25 ssize_t sendto_msg(const struct msghdr*, const SharedPointer<SocketRights>&) override;
26 ssize_t recvfrom_msg(struct msghdr*, SharedPointer<SocketRights>*) override;
27 int listen(int) override;
28 int bind(const struct sockaddr_storage*, socklen_t) override;
29 int accept(struct sockaddr_storage*, socklen_t*, int, DescriptorLease*) override;
30 int shutdown(int) override;
31 int getpeername(struct sockaddr_storage*, socklen_t*) override;
32 int getsockname(struct sockaddr_storage*, socklen_t*) override;
33 int setsockopt(int, int, const void*, socklen_t) override;
34 int getsockopt(int, int, void*, socklen_t*) override;
35
36 private:
37 Mutex m_Lock;
38 ConditionVariable m_Changed;
39 uint8_t m_Cookies[64][32];
40 size_t m_Head, m_Count, m_Reserved;
41 bool m_Closed;
42 ReadinessGenerations m_Generations;
43};
44
45#endif
void lastDescriptorClosed() override
ReadinessGenerations readinessGenerations() override
ReadyMask queryReady(bool reading, bool writing) override
MqueueNetlinkSocket * asMqueueNetlink() override
Definition Mutex.h:56