Count the number of correctly received UDP packets.
Keep track of the number of correct, non-replayed UDP packets that have been received, regardless of their content. This can be compared to the sequence number to determine the real packet loss.
This commit is contained in:
parent
b50a92d0c3
commit
eef25266cb
5 changed files with 9 additions and 0 deletions
|
@ -365,6 +365,8 @@ static void receive_udppacket(node_t *n, vpn_packet_t *inpkt) {
|
||||||
if(inpkt->seqno > n->received_seqno)
|
if(inpkt->seqno > n->received_seqno)
|
||||||
n->received_seqno = inpkt->seqno;
|
n->received_seqno = inpkt->seqno;
|
||||||
|
|
||||||
|
n->received++;
|
||||||
|
|
||||||
if(n->received_seqno > MAX_SEQNO)
|
if(n->received_seqno > MAX_SEQNO)
|
||||||
regenerate_key();
|
regenerate_key();
|
||||||
|
|
||||||
|
|
|
@ -77,6 +77,7 @@ typedef struct node_t {
|
||||||
|
|
||||||
uint32_t sent_seqno; /* Sequence number last sent to this node */
|
uint32_t sent_seqno; /* Sequence number last sent to this node */
|
||||||
uint32_t received_seqno; /* Sequence number last received from this node */
|
uint32_t received_seqno; /* Sequence number last received from this node */
|
||||||
|
uint32_t received; /* Total valid packets received from this node */
|
||||||
uint32_t farfuture; /* Packets in a row that have arrived from the far future */
|
uint32_t farfuture; /* Packets in a row that have arrived from the far future */
|
||||||
unsigned char* late; /* Bitfield marking late packets */
|
unsigned char* late; /* Bitfield marking late packets */
|
||||||
|
|
||||||
|
|
|
@ -278,6 +278,7 @@ bool send_ans_key(node_t *to) {
|
||||||
// Reset sequence number and late packet window
|
// Reset sequence number and late packet window
|
||||||
mykeyused = true;
|
mykeyused = true;
|
||||||
to->received_seqno = 0;
|
to->received_seqno = 0;
|
||||||
|
to->received = 0;
|
||||||
if(replaywin) memset(to->late, 0, replaywin);
|
if(replaywin) memset(to->late, 0, replaywin);
|
||||||
|
|
||||||
return send_request(to->nexthop->connection, "%d %s %s %s %d %d %d %d", ANS_KEY,
|
return send_request(to->nexthop->connection, "%d %s %s %s %d %d %d %d", ANS_KEY,
|
||||||
|
|
|
@ -486,6 +486,10 @@ static bool sptps_receive_data_datagram(sptps_t *s, const char *data, size_t len
|
||||||
if(seqno > s->inseqno)
|
if(seqno > s->inseqno)
|
||||||
s->inseqno = seqno + 1;
|
s->inseqno = seqno + 1;
|
||||||
|
|
||||||
|
if(!s->inseqno)
|
||||||
|
s->received = 0;
|
||||||
|
else
|
||||||
|
s->received++;
|
||||||
|
|
||||||
// Decrypt.
|
// Decrypt.
|
||||||
cipher_set_counter(&s->incipher, &seqno, sizeof seqno);
|
cipher_set_counter(&s->incipher, &seqno, sizeof seqno);
|
||||||
|
|
|
@ -56,6 +56,7 @@ typedef struct sptps {
|
||||||
cipher_t incipher;
|
cipher_t incipher;
|
||||||
digest_t indigest;
|
digest_t indigest;
|
||||||
uint32_t inseqno;
|
uint32_t inseqno;
|
||||||
|
uint32_t received;
|
||||||
unsigned int replaywin;
|
unsigned int replaywin;
|
||||||
unsigned int farfuture;
|
unsigned int farfuture;
|
||||||
char *late;
|
char *late;
|
||||||
|
|
Loading…
Reference in a new issue