The FreeRADIUS server $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
Loading...
Searching...
No Matches
app_io.h
Go to the documentation of this file.
1#pragma once
2/*
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
16 */
17
18/**
19 * $Id: 16d0a9c7908acf98ba574962ecf79249fde23316 $
20 *
21 * @file io/app_io.h
22 * @brief Application IO interfaces.
23 *
24 * @copyright 2018 The FreeRADIUS project
25 */
26
27#include <freeradius-devel/util/socket.h>
28
29/** Public structure describing an I/O path for a protocol
30 *
31 * This structure is exported by I/O modules e.g. proto_radius_udp.
32 */
33typedef struct {
34 module_t common; //!< Common fields to all loadable modules.
35
36 fr_app_event_list_set_t event_list_set; //!< Called by the network thread to pass an event list
37 //!< for use by the app_io_t.
38
39 size_t default_message_size; //!< Usually maximum message size
40 size_t default_reply_size; //!< same for replies
41 bool track_duplicates; //!< track duplicate packets
42
43 fr_io_open_t open; //!< Open a new socket for listening, or accept/connect a new
44 //!< connection.
45 fr_io_set_fd_t fd_set; //!< Set the file descriptor to the instance.
46
47 fr_io_data_read_t read; //!< Read from a socket to a data buffer
48 fr_io_data_write_t write; //!< Write from a data buffer to a socket
49
50 fr_io_data_inject_t inject; //!< Inject a packet into a socket.
51
52 fr_io_data_vnode_t vnode; //!< Handle notifications that the VNODE has changed
53
54 fr_io_decode_t decode; //!< Translate raw bytes into fr_pair_ts and metadata.
55 fr_io_encode_t encode; //!< Pack fr_pair_ts back into a byte array.
56
57 fr_io_signal_t flush; //!< Flush the data when the socket is ready for writing.
58
59 fr_io_signal_t error; //!< There was an error on the socket.
60 fr_io_close_t close; //!< Close the transport.
61
62 fr_io_nak_t nak; //!< Function to send a NAK.
63
64 fr_io_track_create_t track_create; //!< create a tracking structure
65 fr_io_track_cmp_t track_compare; //!< compare two tracking structures
66
67 fr_io_connection_set_t connection_set; //!< set src/dst IP/port of a connection
68 fr_io_network_get_t network_get; //!< get dynamic network information
69 fr_io_client_find_t client_find; //!< find radclient
70 fr_io_name_t get_name; //!< get the socket name
71
72 void *private; //!< any private APIs it needs to export.
74
75/*
76 * A common function to get a humanly readable socket name.
77 */
78char const *fr_app_io_socket_name(TALLOC_CTX *ctx, fr_app_io_t const *app_io,
79 fr_ipaddr_t const *src_ipaddr, int src_port,
80 fr_ipaddr_t const *dst_ipaddr, int dst_port,
81 char const *interface);
fr_io_network_get_t network_get
get dynamic network information
Definition app_io.h:68
fr_io_close_t close
Close the transport.
Definition app_io.h:60
fr_io_open_t open
Open a new socket for listening, or accept/connect a new connection.
Definition app_io.h:43
fr_io_data_read_t read
Read from a socket to a data buffer.
Definition app_io.h:47
module_t common
Common fields to all loadable modules.
Definition app_io.h:34
fr_io_connection_set_t connection_set
set src/dst IP/port of a connection
Definition app_io.h:67
fr_io_signal_t error
There was an error on the socket.
Definition app_io.h:59
fr_app_event_list_set_t event_list_set
Called by the network thread to pass an event list for use by the app_io_t.
Definition app_io.h:36
fr_io_data_inject_t inject
Inject a packet into a socket.
Definition app_io.h:50
fr_io_client_find_t client_find
find radclient
Definition app_io.h:69
fr_io_encode_t encode
Pack fr_pair_ts back into a byte array.
Definition app_io.h:55
size_t default_reply_size
same for replies
Definition app_io.h:40
char const * fr_app_io_socket_name(TALLOC_CTX *ctx, fr_app_io_t const *app_io, fr_ipaddr_t const *src_ipaddr, int src_port, fr_ipaddr_t const *dst_ipaddr, int dst_port, char const *interface)
Definition app_io.c:32
size_t default_message_size
Usually maximum message size.
Definition app_io.h:39
fr_io_data_vnode_t vnode
Handle notifications that the VNODE has changed.
Definition app_io.h:52
fr_io_data_write_t write
Write from a data buffer to a socket.
Definition app_io.h:48
fr_io_set_fd_t fd_set
Set the file descriptor to the instance.
Definition app_io.h:45
fr_io_track_create_t track_create
create a tracking structure
Definition app_io.h:64
bool track_duplicates
track duplicate packets
Definition app_io.h:41
fr_io_name_t get_name
get the socket name
Definition app_io.h:70
fr_io_nak_t nak
Function to send a NAK.
Definition app_io.h:62
fr_io_decode_t decode
Translate raw bytes into fr_pair_ts and metadata.
Definition app_io.h:54
fr_io_track_cmp_t track_compare
compare two tracking structures
Definition app_io.h:65
fr_io_signal_t flush
Flush the data when the socket is ready for writing.
Definition app_io.h:57
Public structure describing an I/O path for a protocol.
Definition app_io.h:33
void(* fr_app_event_list_set_t)(fr_listen_t *li, fr_event_list_t *el, void *nr)
Called by the network thread to pass an event list for the module to use for timer events.
Definition application.h:61
IPv4/6 prefix.
int(* fr_io_open_t)(fr_listen_t *li)
Open an I/O path.
Definition base.h:67
ssize_t(* fr_io_data_read_t)(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time, uint8_t *buffer, size_t buffer_len, size_t *leftover)
Read from a socket.
Definition base.h:176
char const *(* fr_io_name_t)(fr_listen_t *li)
Definition base.h:356
int(* fr_io_track_cmp_t)(void const *instance, void *thread_instance, fr_client_t *client, void const *one, void const *two)
Compare two tracking structures for storing in a duplicate detection tree.
Definition base.h:302
void(* fr_io_data_vnode_t)(fr_listen_t *li, uint32_t fflags)
Tell the IO handler that a VNODE has changed.
Definition base.h:256
int(* fr_io_decode_t)(void const *instance, request_t *request, uint8_t *const data, size_t data_len)
Decode a raw packet and convert it into a request.
Definition base.h:103
ssize_t(* fr_io_data_write_t)(fr_listen_t *li, void *packet_ctx, fr_time_t request_time, uint8_t *buffer, size_t buffer_len, size_t written)
Write a socket.
Definition base.h:218
int(* fr_io_set_fd_t)(fr_listen_t *li, int fd)
Set a selectable file descriptor for this I/O path.
Definition base.h:83
int(* fr_io_connection_set_t)(fr_listen_t *li, fr_io_address_t *connection)
Definition base.h:341
size_t(* fr_io_nak_t)(fr_listen_t *li, void *packet_ctx, uint8_t *const packet, size_t packet_len, uint8_t *reply, size_t reply_len)
NAK a packet.
Definition base.h:148
ssize_t(* fr_io_encode_t)(void const *instance, request_t *request, uint8_t *buffer, size_t buffer_len)
Encode data from a request_t into a raw packet.
Definition base.h:123
int(* fr_io_data_inject_t)(fr_listen_t *li, uint8_t const *buffer, size_t buffer_len, fr_time_t recv_time)
Inject data into a socket.
Definition base.h:249
fr_client_t *(* fr_io_client_find_t)(fr_listen_t *li, fr_ipaddr_t const *ipaddr, int ipproto)
Definition base.h:345
void(* fr_io_network_get_t)(int *ipproto, bool *dynamic_clients, fr_trie_t const **trie, void *instance)
Callback to return network properties.
Definition base.h:354
int(* fr_io_close_t)(fr_listen_t *li)
Handle a close on the socket.
Definition base.h:330
void *(* fr_io_track_create_t)(void const *instance, void *thread_instance, fr_client_t *client, fr_io_track_t *track, uint8_t const *packet, size_t packet_len)
Convert a raw packet to a tracking structure.
Definition base.h:274
int(* fr_io_signal_t)(fr_listen_t *li)
Handle an error on the socket.
Definition base.h:316
static fr_app_io_t app_io
Struct exported by a rlm_* module.
Definition module.h:195