GNU Radio Manual and C++ API Reference  v3.9.2.0-89-gb7c7001e
The Free & Open Software Radio Ecosystem
udp_source_impl.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2020 Free Software Foundation, Inc.
4  *
5  * This file is part of GNU Radio
6  *
7  * SPDX-License-Identifier: GPL-3.0-or-later
8  *
9  */
10 
11 #ifndef INCLUDED_NETWORK_UDP_SOURCE_IMPL_H
12 #define INCLUDED_NETWORK_UDP_SOURCE_IMPL_H
13 
15 #include <boost/asio.hpp>
16 #include <boost/asio/ip/udp.hpp>
17 #include <boost/circular_buffer.hpp>
18 
20 
21 namespace gr {
22 namespace network {
23 
25 {
26 protected:
27  bool is_ipv6;
28  size_t d_itemsize;
29  size_t d_veclen;
30  int d_port;
31 
35  uint16_t d_payloadsize;
36 
37  uint64_t d_seq_num;
40 
43  size_t d_block_size;
44 
46 
47  boost::system::error_code ec;
48 
49  boost::asio::io_service d_io_service;
50  boost::asio::ip::udp::endpoint d_endpoint;
51  boost::asio::ip::udp::socket* d_udpsocket;
52 
53  boost::asio::streambuf d_read_buffer;
54 
55  // A queue is required because we have 2 different timing
56  // domains: The network packets and the GR work()/scheduler
57  boost::circular_buffer<char>* d_localqueue;
58 
59  uint64_t get_header_seqnum();
60 
61 public:
63  size_t veclen,
64  int port,
65  int header_type,
66  int payloadsize,
67  bool notify_missed,
68  bool source_zeros,
69  bool ipv6);
70  ~udp_source_impl() override;
71 
72  bool stop() override;
73 
74  size_t data_available();
75  inline size_t netdata_available();
76 
77  int work(int noutput_items,
78  gr_vector_const_void_star& input_items,
79  gr_vector_void_star& output_items) override;
80 };
81 
82 } // namespace network
83 } // namespace gr
84 
85 #endif /* INCLUDED_NETWORK_UDP_SOURCE_IMPL_H */
Definition: udp_source_impl.h:25
int d_port
Definition: udp_source_impl.h:30
boost::asio::io_service d_io_service
Definition: udp_source_impl.h:49
int d_precomp_data_size
Definition: udp_source_impl.h:41
boost::asio::ip::udp::socket * d_udpsocket
Definition: udp_source_impl.h:51
int d_partial_frame_counter
Definition: udp_source_impl.h:39
boost::circular_buffer< char > * d_localqueue
Definition: udp_source_impl.h:57
uint16_t d_payloadsize
Definition: udp_source_impl.h:35
udp_source_impl(size_t itemsize, size_t veclen, int port, int header_type, int payloadsize, bool notify_missed, bool source_zeros, bool ipv6)
char * d_local_buffer
Definition: udp_source_impl.h:45
size_t d_itemsize
Definition: udp_source_impl.h:28
boost::asio::ip::udp::endpoint d_endpoint
Definition: udp_source_impl.h:50
size_t d_block_size
Definition: udp_source_impl.h:43
bool d_notify_missed
Definition: udp_source_impl.h:32
int d_precomp_data_over_item_size
Definition: udp_source_impl.h:42
uint64_t d_seq_num
Definition: udp_source_impl.h:37
bool is_ipv6
Definition: udp_source_impl.h:27
size_t d_veclen
Definition: udp_source_impl.h:29
int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) override
just like gr::block::general_work, only this arranges to call consume_each for you
int d_header_size
Definition: udp_source_impl.h:38
int d_header_type
Definition: udp_source_impl.h:34
bool stop() override
Called to disable drivers, etc for i/o devices.
boost::system::error_code ec
Definition: udp_source_impl.h:47
boost::asio::streambuf d_read_buffer
Definition: udp_source_impl.h:53
bool d_source_zeros
Definition: udp_source_impl.h:33
This block provides a UDP source block that starts a listener on the specified port and waits for inb...
Definition: gr-network/include/gnuradio/network/udp_source.h:47
#define NETWORK_API
Definition: gr-network/include/gnuradio/network/api.h:19
BLOCKS_API size_t itemsize(vector_type type)
GNU Radio logging wrapper for log4cpp library (C++ port of log4j)
Definition: basic_block.h:29
std::vector< const void * > gr_vector_const_void_star
Definition: types.h:28
std::vector< void * > gr_vector_void_star
Definition: types.h:27