rogue
Loading...
Searching...
No Matches
Core.h
Go to the documentation of this file.
1
17#ifndef __ROGUE_PROTOCOLS_UDP_CORE_H__
18#define __ROGUE_PROTOCOLS_UDP_CORE_H__
19#include "rogue/Directives.h"
20
21#include <netdb.h>
22#include <netinet/in.h>
23#include <netinet/ip.h>
24#include <stdint.h>
25#include <sys/socket.h>
26
27#include <atomic>
28#include <memory>
29#include <mutex>
30#include <thread>
31
32#include "rogue/Logging.h"
33
34namespace rogue {
35namespace protocols {
36namespace udp {
37
39const uint32_t JumboMTU = 9000;
41const uint32_t StdMTU = 1500;
42
43// IPv4 Header = 20B, UDP Header = 8B
45const uint32_t HdrSize = 20 + 8;
46
48const uint32_t MaxJumboPayload = JumboMTU - HdrSize;
50const uint32_t MaxStdPayload = StdMTU - HdrSize;
51
64class Core {
65 protected:
66 std::shared_ptr<rogue::Logging> udpLog_;
67
68 // Jumbo-frame enable state.
69 bool jumbo_;
70
71 // Socket descriptor.
72 int32_t fd_;
73
74 // Peer socket address.
75 struct sockaddr_in remAddr_;
76
77 // Transmit select()/send timeout.
78 struct timeval timeout_;
79
80 std::thread* thread_ = nullptr;
81 std::atomic<bool> threadEn_{false};
82
83 // Synchronizes shared socket/address updates in derived classes.
84 std::mutex udpMtx_;
85
86 public:
88 static void setup_python();
89
95 explicit Core(bool jumbo);
96
98 ~Core();
99
106 void stop();
107
118 uint32_t maxPayload();
119
130 bool setRxBufferCount(uint32_t count);
131
141 void setTimeout(uint32_t timeout);
142};
143
144// Convenience
145typedef std::shared_ptr<rogue::protocols::udp::Core> CorePtr;
146} // namespace udp
147} // namespace protocols
148}; // namespace rogue
149
150#endif
Shared UDP transport base for stream client/server endpoints.
Definition Core.h:64
void setTimeout(uint32_t timeout)
Sets outbound transmit wait timeout.
Definition Core.cpp:72
std::atomic< bool > threadEn_
Definition Core.h:81
struct timeval timeout_
Definition Core.h:78
std::shared_ptr< rogue::Logging > udpLog_
Definition Core.h:66
struct sockaddr_in remAddr_
Definition Core.h:75
void stop()
Stops the UDP interface.
uint32_t maxPayload()
Returns maximum UDP payload size in bytes.
Definition Core.cpp:45
bool setRxBufferCount(uint32_t count)
Requests kernel UDP receive-buffer sizing by packet count.
Definition Core.cpp:50
std::thread * thread_
Definition Core.h:80
~Core()
Destroys the UDP core instance.
Definition Core.cpp:42
static void setup_python()
Registers Python bindings for this class.
Definition Core.cpp:78
const uint32_t HdrSize
Combined IPv4 + UDP header size in bytes.
Definition Core.h:45
const uint32_t StdMTU
Standard Ethernet MTU in bytes (1500).
Definition Core.h:41
std::shared_ptr< rogue::protocols::udp::Core > CorePtr
Definition Core.h:145
const uint32_t MaxJumboPayload
Maximum UDP payload for jumbo MTU (9000 - 28 = 8972 bytes).
Definition Core.h:48
const uint32_t JumboMTU
Jumbo-frame MTU in bytes (9000).
Definition Core.h:39
const uint32_t MaxStdPayload
Maximum UDP payload for standard MTU (1500 - 28 = 1472 bytes).
Definition Core.h:50