The branch main has been updated by rscheff:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=e53138694aa41c24c17847afe959225ce0eeff91

commit e53138694aa41c24c17847afe959225ce0eeff91
Author:     Richard Scheffenegger <rsch...@freebsd.org>
AuthorDate: 2021-03-05 23:36:48 +0000
Commit:     Richard Scheffenegger <rsch...@freebsd.org>
CommitDate: 2021-03-05 23:38:22 +0000

    tcp: Add prr_out in preparation for PRR/nonSACK and LRD
    
    Reviewed By:           #transport, kbowling
    MFC after:             3 days
    Sponsored By:          Netapp, Inc.
    Differential Revision: https://reviews.freebsd.org/D29058
---
 sys/netinet/tcp_input.c  | 21 ++++++++-------------
 sys/netinet/tcp_output.c |  8 ++++++++
 sys/netinet/tcp_var.h    |  2 +-
 3 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index a5d2e1676364..7dfe1dbd4e4f 100644
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -510,6 +510,7 @@ cc_post_recovery(struct tcpcb *tp, struct tcphdr *th)
        }
        /* XXXLAS: EXIT_RECOVERY ? */
        tp->t_bytes_acked = 0;
+       tp->sackhint.prr_out = 0;
 }
 
 /*
@@ -2595,17 +2596,14 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
                                                                    imax(1, 
tp->snd_nxt - tp->snd_una);
                                                        snd_cnt = 
howmany((long)tp->sackhint.prr_delivered *
                                                            tp->snd_ssthresh, 
tp->sackhint.recover_fs) -
-                                                           
(tp->sackhint.sack_bytes_rexmit +
-                                                           (tp->snd_nxt - 
tp->snd_recover));
+                                                           
tp->sackhint.prr_out;
                                                } else {
                                                        if 
(V_tcp_do_prr_conservative)
                                                                limit = 
tp->sackhint.prr_delivered -
-                                                                       
(tp->sackhint.sack_bytes_rexmit +
-                                                                       
(tp->snd_nxt - tp->snd_recover));
+                                                                       
tp->sackhint.prr_out;
                                                        else
                                                                limit = 
imax(tp->sackhint.prr_delivered -
-                                                                           
(tp->sackhint.sack_bytes_rexmit +
-                                                                           
(tp->snd_nxt - tp->snd_recover)),
+                                                                           
tp->sackhint.prr_out,
                                                                            
del_data) + maxseg;
                                                        snd_cnt = 
imin(tp->snd_ssthresh - pipe, limit);
                                                }
@@ -3972,18 +3970,15 @@ tcp_prr_partialack(struct tcpcb *tp, struct tcphdr *th)
                            imax(1, tp->snd_nxt - tp->snd_una);
                snd_cnt = howmany((long)tp->sackhint.prr_delivered *
                            tp->snd_ssthresh, tp->sackhint.recover_fs) -
-                           (tp->sackhint.sack_bytes_rexmit +
-                           (tp->snd_nxt - tp->snd_recover));
+                           tp->sackhint.prr_out;
        } else {
                if (V_tcp_do_prr_conservative)
                        limit = tp->sackhint.prr_delivered -
-                           (tp->sackhint.sack_bytes_rexmit +
-                           (tp->snd_nxt - tp->snd_recover));
+                           tp->sackhint.prr_out;
                else
                        limit = imax(tp->sackhint.prr_delivered -
-                                   (tp->sackhint.sack_bytes_rexmit +
-                                   (tp->snd_nxt - tp->snd_recover)),
-                                   del_data) + maxseg;
+                                   tp->sackhint.prr_out, del_data) +
+                                   maxseg;
                snd_cnt = imin((tp->snd_ssthresh - pipe), limit);
        }
        snd_cnt = imax(snd_cnt, 0) / maxseg;
diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
index b4c7ab0a1ab7..d4b5a328e2a6 100644
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -1236,6 +1236,14 @@ send:
                p->rxmit += len;
                tp->sackhint.sack_bytes_rexmit += len;
        }
+       if (IN_RECOVERY(tp->t_flags)) {
+               /*
+                * Account all bytes transmitted while
+                * IN_RECOVERY, simplifying PRR and
+                * Lost Retransmit Detection
+                */
+               tp->sackhint.prr_out += len;
+       }
        th->th_ack = htonl(tp->rcv_nxt);
        if (optlen) {
                bcopy(opt, th + 1, optlen);
diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h
index 30009fa18205..8cd0c828ad66 100644
--- a/sys/netinet/tcp_var.h
+++ b/sys/netinet/tcp_var.h
@@ -115,7 +115,7 @@ struct sackhint {
                                         */
        uint32_t        recover_fs;     /* Flight Size at the start of Loss 
recovery */
        uint32_t        prr_delivered;  /* Total bytes delivered using PRR */
-       uint32_t        _pad[1];        /* TBD */
+       uint32_t        prr_out;        /* Bytes sent during IN_RECOVERY */
 };
 
 #define SEGQ_EMPTY(tp) TAILQ_EMPTY(&(tp)->t_segq)
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to