FD.io VPP  v20.09-64-g4f7b92f0a
Vector Packet Processing
tcp_sack.c File Reference
+ Include dependency graph for tcp_sack.c:

Go to the source code of this file.

Functions

static void scoreboard_remove_hole (sack_scoreboard_t *sb, sack_scoreboard_hole_t *hole)
 
static sack_scoreboard_hole_tscoreboard_insert_hole (sack_scoreboard_t *sb, u32 prev_index, u32 start, u32 end)
 
static void scoreboard_update_sacked (sack_scoreboard_t *sb, u32 start, u32 end, u8 has_rxt, u16 snd_mss)
 
static void scoreboard_update_bytes (sack_scoreboard_t *sb, u32 ack, u32 snd_mss)
 
sack_scoreboard_hole_tscoreboard_next_rxt_hole (sack_scoreboard_t *sb, sack_scoreboard_hole_t *start, u8 have_unsent, u8 *can_rescue, u8 *snd_limited)
 Figure out the next hole to retransmit. More...
 
void scoreboard_init_rxt (sack_scoreboard_t *sb, u32 snd_una)
 
void scoreboard_init (sack_scoreboard_t *sb)
 
void scoreboard_clear (sack_scoreboard_t *sb)
 
void scoreboard_clear_reneging (sack_scoreboard_t *sb, u32 start, u32 end)
 
u8 tcp_scoreboard_is_sane_post_recovery (tcp_connection_t *tc)
 Test that scoreboard is sane after recovery. More...
 
void tcp_rcv_sacks (tcp_connection_t *tc, u32 ack)
 
static u8 tcp_sack_vector_is_sane (sack_block_t *sacks)
 
void tcp_update_sack_list (tcp_connection_t *tc, u32 start, u32 end)
 Build SACK list as per RFC2018. More...
 
u32 tcp_sack_list_bytes (tcp_connection_t *tc)
 

Function Documentation

◆ scoreboard_clear()

void scoreboard_clear ( sack_scoreboard_t sb)

Definition at line 277 of file tcp_sack.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ scoreboard_clear_reneging()

void scoreboard_clear_reneging ( sack_scoreboard_t sb,
u32  start,
u32  end 
)

Definition at line 297 of file tcp_sack.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ scoreboard_init()

void scoreboard_init ( sack_scoreboard_t sb)

Definition at line 268 of file tcp_sack.c.

+ Here is the caller graph for this function:

◆ scoreboard_init_rxt()

void scoreboard_init_rxt ( sack_scoreboard_t sb,
u32  snd_una 
)

Definition at line 254 of file tcp_sack.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ scoreboard_insert_hole()

static sack_scoreboard_hole_t* scoreboard_insert_hole ( sack_scoreboard_t sb,
u32  prev_index,
u32  start,
u32  end 
)
static

Definition at line 54 of file tcp_sack.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ scoreboard_next_rxt_hole()

sack_scoreboard_hole_t* scoreboard_next_rxt_hole ( sack_scoreboard_t sb,
sack_scoreboard_hole_t start,
u8  have_unsent,
u8 can_rescue,
u8 snd_limited 
)

Figure out the next hole to retransmit.

Follows logic proposed in RFC6675 Sec. 4, NextSeg()

Definition at line 194 of file tcp_sack.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ scoreboard_remove_hole()

static void scoreboard_remove_hole ( sack_scoreboard_t sb,
sack_scoreboard_hole_t hole 
)
static

Definition at line 19 of file tcp_sack.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ scoreboard_update_bytes()

static void scoreboard_update_bytes ( sack_scoreboard_t sb,
u32  ack,
u32  snd_mss 
)
inlinestatic

Definition at line 115 of file tcp_sack.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ scoreboard_update_sacked()

static void scoreboard_update_sacked ( sack_scoreboard_t sb,
u32  start,
u32  end,
u8  has_rxt,
u16  snd_mss 
)
inlinestatic

Definition at line 91 of file tcp_sack.c.

+ Here is the caller graph for this function:

◆ tcp_rcv_sacks()

void tcp_rcv_sacks ( tcp_connection_t tc,
u32  ack 
)

Definition at line 326 of file tcp_sack.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ tcp_sack_list_bytes()

u32 tcp_sack_list_bytes ( tcp_connection_t tc)

Definition at line 617 of file tcp_sack.c.

◆ tcp_sack_vector_is_sane()

static u8 tcp_sack_vector_is_sane ( sack_block_t sacks)
static

Definition at line 545 of file tcp_sack.c.

+ Here is the caller graph for this function:

◆ tcp_scoreboard_is_sane_post_recovery()

u8 tcp_scoreboard_is_sane_post_recovery ( tcp_connection_t tc)

Test that scoreboard is sane after recovery.

Returns 1 if scoreboard is empty or if first hole beyond snd_una.

Definition at line 317 of file tcp_sack.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ tcp_update_sack_list()

void tcp_update_sack_list ( tcp_connection_t tc,
u32  start,
u32  end 
)

Build SACK list as per RFC2018.

Makes sure the first block contains the segment that generated the current ACK and the following ones are the ones most recently reported in SACK blocks.

Parameters
tcTCP connection for which the SACK list is updated
startStart sequence number of the newest SACK block
endEnd sequence of the newest SACK block

Definition at line 568 of file tcp_sack.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function: