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 <memory>
28
29#include "rogue/Logging.h"
30
31namespace rogue {
32namespace protocols {
33namespace udp {
34
36const uint32_t JumboMTU = 9000;
38const uint32_t StdMTU = 1500;
39
40// IPv4 Header = 20B, UDP Header = 8B
42const uint32_t HdrSize = 20 + 8;
43
45const uint32_t MaxJumboPayload = JumboMTU - HdrSize;
47const uint32_t MaxStdPayload = StdMTU - HdrSize;
48
61class Core {
62 protected:
63 std::shared_ptr<rogue::Logging> udpLog_;
64
65 // Jumbo-frame enable state.
66 bool jumbo_;
67
68 // Socket descriptor.
69 int32_t fd_;
70
71 // Peer socket address.
72 struct sockaddr_in remAddr_;
73
74 // Transmit select()/send timeout.
75 struct timeval timeout_;
76
77 std::thread* thread_;
79
80 // Synchronizes shared socket/address updates in derived classes.
81 std::mutex udpMtx_;
82
83 public:
85 static void setup_python();
86
92 explicit Core(bool jumbo);
93
95 ~Core();
96
103 void stop();
104
115 uint32_t maxPayload();
116
127 bool setRxBufferCount(uint32_t count);
128
138 void setTimeout(uint32_t timeout);
139};
140
141// Convenience
142typedef std::shared_ptr<rogue::protocols::udp::Core> CorePtr;
143} // namespace udp
144} // namespace protocols
145}; // namespace rogue
146
147#endif
Shared UDP transport base for stream client/server endpoints.
Definition Core.h:61
void setTimeout(uint32_t timeout)
Sets outbound transmit wait timeout.
Definition Core.cpp:72
struct timeval timeout_
Definition Core.h:75
std::shared_ptr< rogue::Logging > udpLog_
Definition Core.h:63
struct sockaddr_in remAddr_
Definition Core.h:72
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:77
~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:42
const uint32_t StdMTU
Standard Ethernet MTU in bytes (1500).
Definition Core.h:38
std::shared_ptr< rogue::protocols::udp::Core > CorePtr
Definition Core.h:142
const uint32_t MaxJumboPayload
Maximum UDP payload for jumbo MTU (9000 - 28 = 8972 bytes).
Definition Core.h:45
const uint32_t JumboMTU
Jumbo-frame MTU in bytes (9000).
Definition Core.h:36
const uint32_t MaxStdPayload
Maximum UDP payload for standard MTU (1500 - 28 = 1472 bytes).
Definition Core.h:47