rogue
Loading...
Searching...
No Matches
Core.cpp
Go to the documentation of this file.
1
17#include "rogue/Directives.h"
18
20
21#include <inttypes.h>
22#include <unistd.h>
23
24#include "rogue/GeneralError.h"
25#include "rogue/Helpers.h"
26#include "rogue/Logging.h"
27
28namespace rpu = rogue::protocols::udp;
29
30#ifndef NO_PYTHON
31 #include <boost/python.hpp>
32namespace bp = boost::python;
33#endif
34
36rpu::Core::Core(bool jumbo) {
37 jumbo_ = jumbo;
39}
40
42rpu::Core::~Core() {}
43
45uint32_t rpu::Core::maxPayload() {
46 return (jumbo_) ? (MaxJumboPayload) : (MaxStdPayload);
47}
48
50bool rpu::Core::setRxBufferCount(uint32_t count) {
51 uint32_t rwin;
52 socklen_t rwin_size = 4;
53
54 uint32_t per = (jumbo_) ? (JumboMTU) : (StdMTU);
55 uint32_t size = count * per;
56
57 setsockopt(fd_, SOL_SOCKET, SO_RCVBUF, reinterpret_cast<char*>(&size), sizeof(size));
58 getsockopt(fd_, SOL_SOCKET, SO_RCVBUF, &rwin, &rwin_size);
59
60 if (size > rwin) {
61 udpLog_->critical("----------------------------------------------------------");
62 udpLog_->critical("Error setting rx buffer size.");
63 udpLog_->critical("Wanted %" PRIu32 " (%" PRIu32 " * %" PRIu32 ") Got %" PRIu32, size, count, per, rwin);
64 udpLog_->critical("sysctl -w net.core.rmem_max=size to increase in kernel");
65 udpLog_->critical("----------------------------------------------------------");
66 return (false);
67 }
68 return (true);
69}
70
72void rpu::Core::setTimeout(uint32_t timeout) {
73 div_t divResult = div(timeout, 1000000);
74 timeout_.tv_sec = divResult.quot;
75 timeout_.tv_usec = divResult.rem;
76}
77
78void rpu::Core::setup_python() {
79#ifndef NO_PYTHON
80 bp::class_<rpu::Core, rpu::CorePtr, boost::noncopyable>("Core", bp::no_init)
81 .def("maxPayload", &rpu::Core::maxPayload)
82 .def("setRxBufferCount", &rpu::Core::setRxBufferCount)
83 .def("setTimeout", &rpu::Core::setTimeout);
84#endif
85}
struct timeval timeout_
Definition Core.h:75
const uint32_t StdMTU
Standard Ethernet MTU in bytes (1500).
Definition Core.h:38
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
void defaultTimeout(struct timeval &tout)
Returns Rogue default timeout as a timeval.
Definition Helpers.h:49