OpenVPN
Data Structures | Macros
reliable.h File Reference
#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 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   12
 The maximum number of packets that the reliability layer for one VPN tunnel in one direction can store. More...
 
#define N_ACK_RETRANSMIT   3
 We retry sending a packet early if this many later packets have been ACKed. More...
 
#define ACK_SIZE(n)   (sizeof(uint8_t) + ((n) ? SID_SIZE : 0) + sizeof(packet_id_type) * (n))
 

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...
 
bool reliable_ack_parse (struct buffer *buf, struct reliable_ack *ack, struct session_id *session_id_remote)
 Parse 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...
 
static int reliable_ack_outstanding (struct reliable_ack *ack)
 Returns the number of packets that need to be acked. More...
 
bool reliable_ack_write (struct reliable_ack *ack, struct reliable_ack *ack_mru, 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 and the pointer itself. More...
 
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 reliable_entryreliable_get_entry_sequenced (struct reliable *rel)
 Get the buffer of the next sequential and active entry. More...
 
void copy_acks_to_mru (struct reliable_ack *ack, struct reliable_ack *ack_mru, int n)
 Copies the first n acks from ack to ack_mru. More...
 
void reliable_mark_deleted (struct reliable *rel, struct buffer *buf)
 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...
 
int reliable_get_num_output_sequenced_available (struct reliable *rel)
 Counts the number of free buffers in output that can be potentially used for sending. 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.