The Pedigree Project 0.1
Public Member Functions | Private Attributes | List of all members
MqueueNetlinkSocket Class Referencefinal

#include <mqueue-netlink.h>

+ Inheritance diagram for MqueueNetlinkSocket:
+ Collaboration diagram for MqueueNetlinkSocket:

Public Member Functions

 MqueueNetlinkSocket (int type, int protocol)
 
bool create () override
 
bool reserveCookie ()
 
void deliverCookie (const uint8_t cookie[32], bool removed)
 
void lastDescriptorClosed () override
 
bool canPoll () const override
 
ReadyMask queryReady (bool reading, bool writing) override
 
ReadinessGenerations readinessGenerations () override
 
int connect (const struct sockaddr_storage *, socklen_t) override
 
ssize_t sendto_msg (const struct msghdr *, const SharedPointer< SocketRights > &) override
 
ssize_t recvfrom_msg (struct msghdr *, SharedPointer< SocketRights > *) override
 
int listen (int) override
 
int bind (const struct sockaddr_storage *, socklen_t) override
 
int accept (struct sockaddr_storage *, socklen_t *, int, DescriptorLease *) override
 
int shutdown (int) override
 
int getpeername (struct sockaddr_storage *, socklen_t *) override
 
int getsockname (struct sockaddr_storage *, socklen_t *) override
 
int setsockopt (int, int, const void *, socklen_t) override
 
int getsockopt (int, int, void *, socklen_t *) override
 
- Public Member Functions inherited from NetworkSyscalls
 NetworkSyscalls (int domain, int type, int protocol)
 
virtual ssize_t sendto (const void *buffer, size_t bufferlen, int flags, const struct sockaddr_storage *address, socklen_t addrlen)
 
virtual ssize_t recvfrom (void *buffer, size_t bufferlen, int flags, struct sockaddr_storage *address, socklen_t *addrlen)
 
virtual bool poll (bool &read, bool &write, bool &error, Semaphore *waiter)
 
virtual void unPoll (Semaphore *waiter)
 
ReadinessGenerations readinessGenerations () override
 
MUST_USE_RESULT bool addDescriptorOwner ()
 
void removeDescriptorOwner ()
 
void retainDescriptorLifetime (const SharedPointer< NetworkSyscalls > &lifetime)
 
virtual bool monitor (Thread *pThread, Event *pEvent)
 
virtual bool unmonitor (Event *pEvent)
 
void associate (FileDescriptor *fd)
 
int getDomain () const
 
int getType () const
 
int getProtocol () const
 
bool isBlocking () const
 
virtual void setBlocking (bool blocking)
 
int takeReceiveError ()
 
void deferReceiveError (int error)
 
- Public Member Functions inherited from ReadinessSource
MUST_USE_RESULT bool subscribeReadiness (ReadyMask interest, const SharedPointer< ReadinessObserver > &observer, ReadinessSubscription &subscription)
 

Private Attributes

Mutex m_Lock
 
ConditionVariable m_Changed
 
uint8_t m_Cookies [64][32]
 
size_t m_Head
 
size_t m_Count
 
size_t m_Reserved
 
bool m_Closed
 
ReadinessGenerations m_Generations
 

Additional Inherited Members

- Protected Member Functions inherited from NetworkSyscalls
ReadyMask pendingReceiveReadiness () const
 
ReadinessGenerations withReceiveErrorGeneration (ReadinessGenerations generations) const
 
bool beginDescriptorClose ()
 
bool hasLastDescriptorClosed () const
 
SharedPointer< NetworkSyscallsacquireDescriptorLifetime () const
 
SharedPointer< NetworkSyscallsreleaseDescriptorLifetime ()
 
- Protected Member Functions inherited from ReadinessSource
void notifyReadiness (ReadyMask mask)
 
void closeReadiness (ReadyMask mask=ReadyInvalid|ReadyHangup)
 
- Protected Attributes inherited from NetworkSyscalls
int m_Domain
 
int m_Type
 
int m_Protocol
 
Atomic< bool > m_Blocking
 
Mutex m_ReceiveErrorLock
 
int m_ReceiveError = 0
 
uint64_t m_ReceiveErrorGeneration = 0
 
OperationBarrier m_ReadinessNotifications
 

Detailed Description

Netlink cookie delivery used by Linux SIGEV_THREAD message queue notifications.

Definition at line 10 of file mqueue-netlink.h.

Constructor & Destructor Documentation

◆ MqueueNetlinkSocket()

MqueueNetlinkSocket::MqueueNetlinkSocket ( int  type,
int  protocol 
)

Definition at line 18 of file mqueue-netlink.cc.

◆ ~MqueueNetlinkSocket()

MqueueNetlinkSocket::~MqueueNetlinkSocket ( )
override

Definition at line 29 of file mqueue-netlink.cc.

Member Function Documentation

◆ accept()

int MqueueNetlinkSocket::accept ( struct sockaddr_storage *  ,
socklen_t *  ,
int  ,
DescriptorLease  
)
overridevirtual

Implements NetworkSyscalls.

Definition at line 174 of file mqueue-netlink.cc.

◆ bind()

int MqueueNetlinkSocket::bind ( const struct sockaddr_storage *  ,
socklen_t   
)
overridevirtual

Implements NetworkSyscalls.

Definition at line 171 of file mqueue-netlink.cc.

◆ canPoll()

bool MqueueNetlinkSocket::canPoll ( ) const
overridevirtual

Reimplemented from NetworkSyscalls.

Definition at line 89 of file mqueue-netlink.cc.

◆ connect()

int MqueueNetlinkSocket::connect ( const struct sockaddr_storage *  ,
socklen_t   
)
overridevirtual

Implements NetworkSyscalls.

Definition at line 162 of file mqueue-netlink.cc.

◆ create()

bool MqueueNetlinkSocket::create ( )
overridevirtual

Implementation-specific final socket creation logic, implementations must set a SYSCALL_ERROR on failure.

Reimplemented from NetworkSyscalls.

Definition at line 33 of file mqueue-netlink.cc.

◆ deliverCookie()

void MqueueNetlinkSocket::deliverCookie ( const uint8_t  cookie[32],
bool  removed 
)

Definition at line 55 of file mqueue-netlink.cc.

◆ getpeername()

int MqueueNetlinkSocket::getpeername ( struct sockaddr_storage *  ,
socklen_t *   
)
overridevirtual

Implements NetworkSyscalls.

Definition at line 180 of file mqueue-netlink.cc.

◆ getsockname()

int MqueueNetlinkSocket::getsockname ( struct sockaddr_storage *  address,
socklen_t *  length 
)
overridevirtual

Implements NetworkSyscalls.

Definition at line 184 of file mqueue-netlink.cc.

◆ getsockopt()

int MqueueNetlinkSocket::getsockopt ( int  level,
int  option,
void *  value,
socklen_t *  length 
)
overridevirtual

Implements NetworkSyscalls.

Definition at line 198 of file mqueue-netlink.cc.

◆ lastDescriptorClosed()

void MqueueNetlinkSocket::lastDescriptorClosed ( )
overridevirtual

Retire the transport after the final descriptor alias closes.

Readiness users may retain this wrapper after the transport is gone, so implementations leave queryReady() returning a stable terminal state.

Reimplemented from NetworkSyscalls.

Definition at line 74 of file mqueue-netlink.cc.

References NetworkSyscalls::beginDescriptorClose(), ConditionVariable::broadcast(), OperationBarrier::closeAndWait(), ReadinessSource::closeReadiness(), and NetworkSyscalls::m_ReadinessNotifications.

◆ listen()

int MqueueNetlinkSocket::listen ( int  )
overridevirtual

Implements NetworkSyscalls.

Definition at line 168 of file mqueue-netlink.cc.

◆ queryReady()

ReadyMask MqueueNetlinkSocket::queryReady ( bool  reading,
bool  writing 
)
overridevirtual

Return a level-triggered snapshot for the requested I/O directions.

Reimplemented from NetworkSyscalls.

Definition at line 93 of file mqueue-netlink.cc.

◆ readinessGenerations()

ReadinessGenerations MqueueNetlinkSocket::readinessGenerations ( )
overridevirtual

Return source-serialized rising-edge sequences where available.

A source increments the corresponding sequence while holding the same lock which changes its readiness predicate. Consumers can then recover a drain/refill transition even if the two callback deliveries are reordered.

Reimplemented from ReadinessSource.

Definition at line 102 of file mqueue-netlink.cc.

◆ recvfrom_msg()

ssize_t MqueueNetlinkSocket::recvfrom_msg ( struct msghdr *  message,
SharedPointer< SocketRights > *  rights 
)
overridevirtual

Implements NetworkSyscalls.

Definition at line 107 of file mqueue-netlink.cc.

◆ reserveCookie()

bool MqueueNetlinkSocket::reserveCookie ( )

Definition at line 41 of file mqueue-netlink.cc.

◆ sendto_msg()

ssize_t MqueueNetlinkSocket::sendto_msg ( const struct msghdr *  ,
const SharedPointer< SocketRights > &   
)
overridevirtual

Implements NetworkSyscalls.

Definition at line 165 of file mqueue-netlink.cc.

◆ setsockopt()

int MqueueNetlinkSocket::setsockopt ( int  ,
int  ,
const void *  ,
socklen_t   
)
overridevirtual

Implements NetworkSyscalls.

Definition at line 194 of file mqueue-netlink.cc.

◆ shutdown()

int MqueueNetlinkSocket::shutdown ( int  )
overridevirtual

Reimplemented from NetworkSyscalls.

Definition at line 177 of file mqueue-netlink.cc.

Member Data Documentation

◆ m_Changed

ConditionVariable MqueueNetlinkSocket::m_Changed
private

Definition at line 35 of file mqueue-netlink.h.

◆ m_Closed

bool MqueueNetlinkSocket::m_Closed
private

Definition at line 38 of file mqueue-netlink.h.

◆ m_Cookies

uint8_t MqueueNetlinkSocket::m_Cookies[64][32]
private

Definition at line 36 of file mqueue-netlink.h.

◆ m_Count

size_t MqueueNetlinkSocket::m_Count
private

Definition at line 37 of file mqueue-netlink.h.

◆ m_Generations

ReadinessGenerations MqueueNetlinkSocket::m_Generations
private

Definition at line 39 of file mqueue-netlink.h.

◆ m_Head

size_t MqueueNetlinkSocket::m_Head
private

Definition at line 37 of file mqueue-netlink.h.

◆ m_Lock

Mutex MqueueNetlinkSocket::m_Lock
private

Definition at line 34 of file mqueue-netlink.h.

◆ m_Reserved

size_t MqueueNetlinkSocket::m_Reserved
private

Definition at line 37 of file mqueue-netlink.h.


The documentation for this class was generated from the following files: