OpenVPN
Data Structures | Macros
reliable.h File Reference

Reliability Layer module header file. More...

#include "basic.h"
#include "buffer.h"
#include "packet_id.h"
#include "session_id.h"
#include "mtu.h"
Include dependency graph for reliable.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  reliable_ack
 The acknowledgment structure in which packet IDs are stored for later acknowledgment. More...
 
struct  reliable_entry
 The structure in which the reliability layer stores a single incoming or outgoing packet. More...
 
struct  reliable
 The reliability layer storage structure for one VPN tunnel's control channel in one direction. More...
 

Macros

#define EXPONENTIAL_BACKOFF
 
#define RELIABLE_ACK_SIZE   8
 The maximum number of packet IDs waiting to be acknowledged which can be stored in one reliable_ack structure. More...
 
#define RELIABLE_CAPACITY   8
 The maximum number of packets that the reliability layer for one VPN tunnel in one direction can store. More...
 

Functions

Functions for processing incoming acknowledgments
bool reliable_ack_read (struct reliable_ack *ack, struct buffer *buf, const struct session_id *sid)
 Read an acknowledgment record from a received packet. More...
 
void reliable_send_purge (struct reliable *rel, const struct reliable_ack *ack)
 Remove acknowledged packets from a reliable structure. More...
 
Functions for processing outgoing acknowledgments
static bool reliable_ack_empty (struct reliable_ack *ack)
 Check whether an acknowledgment structure contains any packet IDs to be acknowledged. More...
 
bool reliable_ack_write (struct reliable_ack *ack, struct buffer *buf, const struct session_id *sid, int max, bool prepend)
 Write a packet ID acknowledgment record to a buffer. More...
 
Functions for initialization and cleanup
void reliable_init (struct reliable *rel, int buf_size, int offset, int array_size, bool hold)
 Initialize a reliable structure. More...
 
void reliable_free (struct reliable *rel)
 Free allocated memory associated with a reliable structure. More...
 
void reliable_ack_adjust_frame_parameters (struct frame *frame, int max)
 
Functions for inserting incoming packets
bool reliable_can_get (const struct reliable *rel)
 Check whether a reliable structure has any free buffers available for use. More...
 
bool reliable_not_replay (const struct reliable *rel, packet_id_type id)
 Check that a received packet's ID is not a replay. More...
 
bool reliable_wont_break_sequentiality (const struct reliable *rel, packet_id_type id)
 Check that a received packet's ID can safely be stored in the reliable structure's processing window. More...
 
bool reliable_ack_read_packet_id (struct buffer *buf, packet_id_type *pid)
 Read the packet ID of a received packet. More...
 
struct bufferreliable_get_buf (struct reliable *rel)
 Get the buffer of a free reliable entry in which to store a packet. More...
 
void reliable_mark_active_incoming (struct reliable *rel, struct buffer *buf, packet_id_type pid, int opcode)
 Mark the reliable entry associated with the given buffer as active incoming. More...
 
bool reliable_ack_acknowledge_packet_id (struct reliable_ack *ack, packet_id_type pid)
 Record a packet ID for later acknowledgment. More...
 
Functions for extracting incoming packets
struct bufferreliable_get_buf_sequenced (struct reliable *rel)
 Get the buffer of the next sequential and active entry. More...
 
void reliable_mark_deleted (struct reliable *rel, struct buffer *buf, bool inc_pid)
 Remove an entry from a reliable structure. More...
 
Functions for inserting outgoing packets
struct bufferreliable_get_buf_output_sequenced (struct reliable *rel)
 Get the buffer of free reliable entry and check whether the outgoing acknowledgment sequence is still okay. More...
 
void reliable_mark_active_outgoing (struct reliable *rel, struct buffer *buf, int opcode)
 Mark the reliable entry associated with the given buffer as active outgoing. More...
 
Functions for extracting outgoing packets
bool reliable_can_send (const struct reliable *rel)
 Check whether a reliable structure has any active entries ready to be (re)sent. More...
 
struct bufferreliable_send (struct reliable *rel, int *opcode)
 Get the next packet to send to the remote peer. More...
 
Miscellaneous functions
bool reliable_empty (const struct reliable *rel)
 Check whether a reliable structure is empty. More...
 
interval_t reliable_send_timeout (const struct reliable *rel)
 Determined how many seconds until the earliest resend should be attempted. More...
 
void reliable_schedule_now (struct reliable *rel)
 Reschedule all entries of a reliable structure to be ready for (re)sending immediately. More...
 
void reliable_debug_print (const struct reliable *rel, char *desc)
 
static void reliable_set_timeout (struct reliable *rel, interval_t timeout)
 
const char * reliable_ack_print (struct buffer *buf, bool verbose, struct gc_arena *gc)
 
void reliable_ack_debug_print (const struct reliable_ack *ack, char *desc)
 

Detailed Description

Reliability Layer module header file.

Definition in file reliable.h.